|
645 | 645 | The `ResellerBroker`'s purchase from the <a>Seller</a> is business-to-business, which is subject to the appropriate taxation based on the `ResellerBroker` as the <a>Customer</a>.
|
646 | 646 | The <a>Customer</a>'s purchase from the `ResellerBroker` is business-to-consumer, which is subject to the appropriate taxation based on the `ResellerBroker` as the <a>Seller</a>.
|
647 | 647 |
|
648 |
| -Hence any tax exception that the <a>Customer</a> may enjoy when purchasing directly from the <a>Seller</a> (e.g. if the <a>Seller</a> is an [VAT exempt eligible body](https://www.gov.uk/guidance/sport-supplies-that-are-vat-exempt-notice-70145)) is not relevant here, as no direct contractual relationship is formed between <a>Seller</a> and <a>Customer</a>. |
| 648 | +Hence any tax exemption that the <a>Customer</a> may enjoy when purchasing directly from the <a>Seller</a> (e.g. if the <a>Seller</a> is an [VAT exempt eligible body](https://www.gov.uk/guidance/sport-supplies-that-are-vat-exempt-notice-70145)) is not relevant here, as no direct contractual relationship is formed between <a>Seller</a> and <a>Customer</a>. |
649 | 649 |
|
650 | 650 | ### Scope of Specification
|
651 | 651 | This specification is designed to govern the interaction between the `ResellerBroker` and <a>Seller</a>. It does include provision for the interaction between the `ResellerBroker` and <a>Customer</a> explicitly, though it may be repurposed by the broker to perform this function by treating the Broker as a Booking system. This specification also does not include provision for the recording of the execution of the contractual relationship with any payment provider (e.g. for payment processing fees). Such relationships MUST be handled separately.
|
652 |
| -When the brokerRole is set to `ResellerBroker`, this indicates that the payee for accounting and tax purposes is the "broker" specified in the Order. |
| 652 | +When the `brokerRole` is set to `ResellerBroker`, this indicates that the payee for accounting and tax purposes is the `broker` specified in the `Order`. |
653 | 653 | Note that the `customer` may still optionally be included in the Order, for example to help front-of-house staff identify the <a>Customer</a>.
|
654 | 654 |
|
655 | 655 | ### Conformance criteria
|
|
674 | 674 |
|
675 | 675 | ### Taxation
|
676 | 676 | While facilitated by the `AgentBroker`, the primary purchase is made by the <a>Customer</a> directly from the <a>Seller</a>, as would be the case if the <a>Customer</a> was to purchase from the <a>Seller</a> independently.
|
677 |
| -Hence any tax exception that the <a>Customer</a> may enjoy when purchasing directly from the <a>Seller</a> (e.g. if the <a>Seller</a> is an [VAT exempt eligible body](https://www.gov.uk/guidance/sport-supplies-that-are-vat-exempt-notice-70145)) is relevant here. |
| 677 | +Hence any tax exemption that the <a>Customer</a> may enjoy when purchasing directly from the <a>Seller</a> (e.g. if the <a>Seller</a> is an [VAT exempt eligible body](https://www.gov.uk/guidance/sport-supplies-that-are-vat-exempt-notice-70145)) is relevant here. |
678 | 678 |
|
679 | 679 | The <a>Customer</a>'s relationship with `AgentBroker` is business-to-consumer. Hence any additional services (e.g. customer-facing booking fees) are subject to the appropriate taxation based on the `AgentBroker` as the `seller`.
|
680 | 680 |
|
|
683 | 683 | ### Scope of Specification
|
684 | 684 | This specification is designed to govern the recording of the execution of the contractual relationship between the <a>Customer</a> and <a>Seller</a>.
|
685 | 685 | The scope of this specification does not include the contractual relationship between the `AgentBroker` and the <a>Seller</a> (e.g. for booking commission), between the `AgentBroker` and the <a>Customer</a> (e.g. for booking fees) or with any payment provider (e.g. for payment processing fees). Such relationships and the reconciliation of associated invoices MUST be handled separately.
|
686 |
| -When the brokerRole is set to "AgentBroker", this indicates that the payee for accounting and tax purposes is the `customer` specified in the Order. |
| 686 | +When the `brokerRole` is set to `AgentBroker`, this indicates that the payee for accounting and tax purposes is the `customer` specified in the `Order`. |
687 | 687 |
|
688 | 688 | ### Conformance criteria
|
689 | 689 | When the <a>Broker</a> generates the <a>Invoice</a>, it must be made payable to `Order.customer`, `Order.broker` MUST be provided and `Order.customer` MUST be provided.
|
|
706 | 706 |
|
707 | 707 | ### Taxation
|
708 | 708 | The purchase is made by the <a>Customer</a> directly from the <a>Seller</a>, as would be the case if the <a>Customer</a> was to purchase from the <a>Seller</a> outside of this specification.
|
709 |
| -Hence any tax exception that the <a>Customer</a> may enjoy when purchasing directly from the <a>Seller</a> (e.g. if the <a>Seller</a> is an VAT exempt eligible body) is relevant here. |
| 709 | +Hence any tax exemption that the <a>Customer</a> may enjoy when purchasing directly from the <a>Seller</a> (e.g. if the <a>Seller</a> is an VAT exempt eligible body) is relevant here. |
710 | 710 |
|
711 | 711 | ### Scope of Specification
|
712 | 712 | This specification is designed to govern the recording of the execution of the contractual relationship between the <a>Customer</a> and <a>Seller</a>.
|
713 | 713 | The scope of this specification does not include the contractual relationship with any payment provider (e.g. for payment processing fees). Such relationships MUST be handled separately.
|
714 | 714 |
|
715 |
| -When the brokerRole is set to "NoBroker", this indicates that the payee for accounting and tax purposes is the `customer` specified in the Order. |
| 715 | +When the `brokerRole` is set to `NoBroker`, this indicates that the payee for accounting and tax purposes is the `customer` specified in the `Order`. |
716 | 716 |
|
717 | 717 | ### Conformance criteria
|
718 | 718 | When an <a>Invoice</a> is generated, it must be made payable to `Order.customer`, `Order.broker` MUST NOT be provided and `Order.customer` MUST be provided.
|
|
806 | 806 |
|
807 | 807 | ## Offer overrides
|
808 | 808 |
|
809 |
| -The unit price of an OrderItem may be overridden to allow for business models with dynamic or variable pricing. |
| 809 | +The unit price of an OrderItem may be overridden to allow for business models with variable pricing (where price differs from list price) and dynamic pricing (where price is not known at the point of purchase). |
810 | 810 |
|
811 |
| -An `OfferOverride` type may be supplied to the `acceptedOffer` property at **C1**, **C2** and **B**. When an `OfferOverride` is used, it must be used consistently between **C2** and **B** to OrderQuote, it must be used by the booking system instead of acceptedOffer to calculate the tax and totals. |
| 811 | +An `OfferOverride` or `DynamicOffer` type may be supplied to the `acceptedOffer` property at **C1**, **C2** and **B**. When an `OfferOverride` or `DynamicOffer` is used, it must be used consistently between **C2** and **B** to OrderQuote, it must be used by the booking system instead of acceptedOffer to calculate the tax and totals. |
812 | 812 |
|
813 |
| -The `unitTaxSpecification` is calculated by the booking system exactly as it would be for an standard `Offer`. The `price` of the `OfferOverride` may be zero, and also may be higher or lower than the available `Offer`s that exist in the <a>Booking System</a>. |
| 813 | +<div class="issue" data-number="96"></div> |
| 814 | + |
| 815 | +### `OfferOverride` |
| 816 | +The `unitTaxSpecification` is calculated by the <a>Booking System</a> exactly as it would be for an standard `Offer`. The `price` of the `OfferOverride` may be zero, and also may be higher or lower than the available `Offer`s that exist in the <a>Booking System</a>. |
814 | 817 |
|
815 | 818 | `OfferOverride` MUST NOT be used when `isAccessibleForFree` is `true`, as free events cannot be overridden. Note that <a>Booking Systems</a> that only offer free opportunities MUST NOT implement `OfferOverride` support, and must always throw an error when it is used.
|
816 | 819 |
|
|
824 | 827 | }
|
825 | 828 | </pre>
|
826 | 829 |
|
827 |
| -<div class="issue" data-number="96"></div> |
| 830 | +### `DynamicOffer` |
| 831 | +The `DynamicOffer` MUST NOT include a `price`, and MUST NOT contribute to the `totalPaymentDue` of the `Order`. `unitTaxSpecification` MUST NOT be calculated by the <a>Booking System</a> for a `DynamicOffer`. |
| 832 | + |
| 833 | +The `identifier` of the `DynamicOffer` MUST be used consistently in order to allow the Seller to reconcile opportunities booked using a particular type of `DynamicOffer` out-of-band. |
| 834 | + |
| 835 | +<pre class="example" title="Example of DynamicOffer"> |
| 836 | + "acceptedOffer": { |
| 837 | + "type": "DynamicOffer", |
| 838 | + "name": "MoveGB Membership" |
| 839 | + "identifier": "MOVE" |
| 840 | + } |
| 841 | +</pre> |
828 | 842 |
|
829 | 843 |
|
830 | 844 | </section>
|
|
844 | 858 |
|
845 | 859 | An opportunity of type `Event`, `ScheduledSession`, `HeadlineEvent`, `Slot` or `CourseInstance` is deemed to be <dfn>bookable</dfn> via the Open Booking API if:
|
846 | 860 |
|
847 |
| -- `availableChannel` of a valid `Offer` includes `https://openactive.io/OpenBookingPrepayment`. |
| 861 | +- `availableChannel` of a valid `Offer` (that is not an `IndicativeOffer`) includes `https://openactive.io/OpenBookingPrepayment`. |
848 | 862 |
|
849 | 863 | - The `endDate` is not already in the past (note that bookings are still possible after the `startDate`).
|
850 | 864 |
|
|
879 | 893 | 4. The <a>Broker</a> MUST then filter this applicable set to provide a set of `Offers` which are current (based on `validFromBeforeStartDate`) and are available to the <a>Customer</a> through the <a>Broker</a> (based on `availableChannel`).
|
880 | 894 | 5. The <a>Broker</a> MAY additionally filter based on the `Offer`s that apply to the customer, for example based on `ageRange` if specified in the `Offer`. This specification provides no guidance as to how the filtering should be performed, however it recommends against gathering additional personal data about the <a>Customer</a> in order to restrict `Offer`s presented, and instead advocates clear messaging regarding the restrictions of each `Offer` to allow the <a>Customer</a> to make an informed decision.
|
881 | 895 |
|
| 896 | +Note that `IndicativeOffer`s are ignored for the algorithm above, and are not considered bookable. |
882 | 897 |
|
883 | 898 |
|
884 | 899 | <div class="issue" data-number="103"></div>
|
885 | 900 |
|
886 | 901 |
|
| 902 | +### `IndicativeOffer` |
| 903 | + |
| 904 | +There are cases where `Offer`s are provided at the `SessionSeries` or `FacilityUse` level which are indicative, and are not intended to be inherited and applied to the `ScheduledSession`s or `Slot`s within them. For such cases an `IndicativeOffer` may be used to indicate that the offer must not be considered bookable. |
| 905 | + |
| 906 | +<pre class="example" title="Example of IndicativeOffer"> |
| 907 | + "offers": [ |
| 908 | + { |
| 909 | + "type": "IndicativeOffer", |
| 910 | + "name": "Off Peak", |
| 911 | + "price": 7.00, |
| 912 | + "priceCurrency": "GBP" |
| 913 | + }, |
| 914 | + { |
| 915 | + "type": "IndicativeOffer", |
| 916 | + "name": "Peak", |
| 917 | + "price": 10.00, |
| 918 | + "priceCurrency": "GBP" |
| 919 | + } |
| 920 | + ] |
| 921 | +</pre> |
| 922 | + |
| 923 | + |
887 | 924 | ## Amending the OrderQuote before **B**
|
888 | 925 |
|
889 | 926 | The <a>Broker</a> MAY call **C1** and MUST call **C2** when the <a>Customer</a> updates their basket to add and remove items.
|
|
1425 | 1462 |
|
1426 | 1463 | Note that for an `Offer` to be bookable under this specification, `availableChannel` must include `https://openactive.io/OpenBookingPrepayment`.
|
1427 | 1464 |
|
| 1465 | + |
| 1466 | +### `schema:OfferOverride` |
| 1467 | + |
| 1468 | +`OfferOverride` subclasses `Offer`. |
| 1469 | + |
| 1470 | +| Property | Broker Request | Booking System Response | Type | Notes | |
| 1471 | +|--------------------------------------------------------------------|----------|----------|-|------| |
| 1472 | +| `@type` | REQUIRED | REQUIRED | [`schema:Text`](https://schema.org/Text) | `Offer` | |
| 1473 | +| `@id` | REQUIRED | REQUIRED | [`schema:URL`](https://schema.org/URL) | A URI providing a unique identifier for the Offer | |
| 1474 | +| [`schema:price`](http://schema.org/price) | REQUIRED | REQUIRED | [`schema:Float`](https://schema.org/Float) | The offer price available to participants, which includes or excludes tax depending on the `taxMode` of the `Order`. | |
| 1475 | +| [`schema:priceCurrency`](http://schema.org/priceCurrency) | REQUIRED | REQUIRED | [`schema:Text`](https://schema.org/Text) | The currency of the `price`. Specified as a 3-letter ISO 4217 value. If a `PriceSpecification` has a zero `price`, then this property is not required. Otherwise the `priceCurrency` MUST be specified. | |
| 1476 | +| [`schema:name`](http://schema.org/name) | RECOMMENDED | RECOMMENDED | [`schema:Text`](https://schema.org/Text) | The name of the offer suitable for display to participants. | |
| 1477 | +| [`oa:availableChannel`](https://openactive.io/availableChannel) | - | - | - | Not included in `OfferOverride`. | |
| 1478 | +| [`oa:validFromBeforeStartDate`](https://openactive.io/validFromBeforeStartDate) | OPTIONAL | OPTIONAL | [`schema:Duration`](https://schema.org/Duration) | The duration before the `startDate` for which this Offer is valid, given in [ISO8601] format. This is a relative equivalent of [`schema:validFrom`](http://schema.org/validFrom), to allow for Offer inheritance. | |
| 1479 | +| [`oa:latestCancellationBeforeStartDate`](https://openactive.io/latestCancellationBeforeStartDate) | OPTIONAL | OPTIONAL | [`schema:Duration`](https://schema.org/Duration) | The duration before the `startDate` during which this Offer may **not** be cancelled, given in [ISO8601] format. | |
| 1480 | + |
| 1481 | + |
| 1482 | +### `schema:DynamicOffer` |
| 1483 | + |
| 1484 | +`DynamicOffer` subclasses `Offer`. |
| 1485 | + |
| 1486 | +| Property | Broker Request | Booking System Response | Type | Notes | |
| 1487 | +|--------------------------------------------------------------------|----------|----------|-|------| |
| 1488 | +| `@type` | REQUIRED | REQUIRED | [`schema:Text`](https://schema.org/Text) | `Offer` | |
| 1489 | +| [`schema:identifier`](http://schema.org/identifier) | REQUIRED | REQUIRED | [`schema:Text`](https://schema.org/Text) | Used consistently in order to allow the Seller to reconcile opportunities booked using a particular type of `DynamicOffer` out-of-band. | |
| 1490 | +| [`schema:name`](http://schema.org/name) | RECOMMENDED | RECOMMENDED | [`schema:Text`](https://schema.org/Text) | The name of the offer suitable for display to participants. | |
| 1491 | +| [`oa:validFromBeforeStartDate`](https://openactive.io/validFromBeforeStartDate) | OPTIONAL | OPTIONAL | [`schema:Duration`](https://schema.org/Duration) | The duration before the `startDate` for which this Offer is valid, given in [ISO8601] format. This is a relative equivalent of [`schema:validFrom`](http://schema.org/validFrom), to allow for Offer inheritance. | |
| 1492 | +| [`oa:latestCancellationBeforeStartDate`](https://openactive.io/latestCancellationBeforeStartDate) | OPTIONAL | OPTIONAL | [`schema:Duration`](https://schema.org/Duration) | The duration before the `startDate` during which this Offer may **not** be cancelled, given in [ISO8601] format. | |
| 1493 | +| [`schema:price`](http://schema.org/price) | - | - | - | Not included in `DynamicOffer`. | |
| 1494 | +| [`schema:priceCurrency`](http://schema.org/priceCurrency) | - | - | - | Not included in `DynamicOffer`. | |
| 1495 | +| [`oa:availableChannel`](https://openactive.io/availableChannel) | - | - | - | Not included in `OfferOverride`. | |
| 1496 | + |
| 1497 | + |
| 1498 | + |
| 1499 | + |
1428 | 1500 | ### `schema:Person`
|
1429 | 1501 |
|
1430 | 1502 | For business-to-consumer transactions, the `customer` MUST be a `schema:Person`.
|
|
1522 | 1594 | | `@type` | - | REQUIRED | [`schema:Text`](https://schema.org/Text) | `Payment` |
|
1523 | 1595 | | [`schema:name`](http://schema.org/name) | - | OPTIONAL | [`schema:Text`](https://schema.org/Text) | Optional free text description of the payment method for the <a>Booking System</a>, to help the <a>Seller</a> in discussions with the <a>Customer</a> (e.g. "AcmeBroker Points" or "AcmeBroker via Credit Card") |
|
1524 | 1596 | | [`schema:identifier`](http://schema.org/identifier) | - | REQUIRED | [`schema:Text`](https://schema.org/Text) | The identifier of the payment held by the <a>Broker</a> and/or <a>Payment Provider</a>. |
|
| 1597 | +| [`schema:paymentMethod`](http://schema.org/paymentMethod) | - | REQUIRED | [`schema:PaymentMethod`](https://schema.org/PaymentMethod) | If using the payment extension point, this references the payment method used. If not present indicates the external payment processor. | |
| 1598 | +| [`schema:accountId`](http://schema.org/accountId) | - | OPTIONAL | [`schema:Text`](https://schema.org/Text) | A reference used by the <a>Seller</a> to group transactions, which is used to aid reconciliation. | |
| 1599 | + |
1525 | 1600 |
|
1526 | 1601 | Note that `identifier` and are NOT REQUIRED if `paymentMethod` is specified, to maximise flexibility of the payments extension point.
|
1527 | 1602 |
|
|
0 commit comments