|
490 | 490 | 2. **Identify**: <a>Customer</a> enters personal details and other requested details
|
491 | 491 | 3. **Book and Pay**: <a>Customer</a> enters payment details
|
492 | 492 |
|
493 |
| -Note that some or all steps may be skipped, or may not be presented to the user, e.g. if their registration or payments details are already known, or they are using a voice interface. These steps are not indicative of the user experience, and simply provide a common language around the flow. |
| 493 | +Note that some or all steps may be skipped, or may not be presented to the user, e.g. if their registration or payment details are already known, or they are using a voice interface. These steps are not indicative of the user experience, and simply provide a common language around the flow. |
494 | 494 |
|
495 | 495 | ### High-level API flow
|
496 | 496 |
|
|
747 | 747 |
|
748 | 748 | ## Booking Flow with Approval
|
749 | 749 |
|
| 750 | +The <a>Booking System</a> MAY optionally support approval. As the approval processes is initiated by the <a>Booking System</a>, implementation of this section by the <a>Booking System</a> is only required if this flow is supported, otherwise this section can be completely ignored. |
| 751 | + |
750 | 752 | ### Customer Journey
|
751 | 753 | The booking journey of a <a>Customer</a> is generalised into the following logical steps:
|
752 | 754 |
|
|
763 | 765 | 2. **Approve**: <a>Seller</a> approves the booking, after a period of time
|
764 | 766 | 3. **Book and Pay**: <a>Customer</a> confirms they are happy to proceed
|
765 | 767 |
|
766 |
| -Note that some or all steps may be skipped, or may not be presented to the user, e.g. if their registration or payments details are already known, or they are using a voice interface. These steps are not indicative of the user experience, and simply provide a common language around the flow. |
| 768 | +Note that some or all steps may be skipped, or may not be presented to the user, e.g. if their registration or payment details are already known, or they are using a voice interface. These steps are not indicative of the user experience, and simply provide a common language around the flow. |
767 | 769 |
|
768 | 770 | ### High-level API flow
|
769 | 771 |
|
|
824 | 826 |
|
825 | 827 | In the minimal implementation the `OrderProposal` can either be accepted or rejected by the <a>Seller</a>, or aborted by the <a>Customer</a>.
|
826 | 828 |
|
| 829 | +If an `Offer` requires this minimal implementation, the <a>Booking System</a> MUST include the `openBookingFlowRequirement` of `https://openactive.io/OpenBookingApproval` in the `Offer`s within its open data. This allows <a>Brokers</a> that do not support approval to easily filter out such offers from their experience. |
| 830 | + |
827 | 831 | ##### Proposal Approval
|
828 | 832 |
|
829 | 833 | - If <a>Seller</a> approval is given, the <a>Booking System</a> sets `orderProposalStatus` to `https://openactive.io/SellerAccepted` in the <a>Orders feed</a>, and the <a>Broker</a> MAY proceed to **B**.
|
|
835 | 839 |
|
836 | 840 | Following any type of, the <a>Broker</a> MUST immediately withdraw any payment authorisation.
|
837 | 841 |
|
838 |
| -#### Proposal Amendment |
| 842 | +#### Proposal Amendment and Message Exchange |
| 843 | + |
| 844 | +If an `Offer` requires either proposal amendment or message exchange, the <a>Booking System</a> MUST include the `openBookingFlowRequirement` of `https://openactive.io/OpenBookingNegotiation` in the `Offer`s within its open data. This allows <a>Brokers</a> that do not support such negotiation to easily filter out such offers from their experience. |
| 845 | + |
| 846 | +<a>Brokers</a> SHOULD implement both Proposal Amendment and Message Exchange together as they are both related. |
| 847 | + |
| 848 | + |
| 849 | +##### Proposal Amendment |
839 | 850 |
|
840 | 851 | The <a>Booking System</a> MAY optionally support Proposal Amendment. If this is not supported by the <a>Booking System</a>, the simple Approval/Rejection workflow described in the Minimal Implementation may be used without needing to consider this (as this processes is initiated by the <a>Booking System</a>).
|
841 | 852 |
|
|
848 | 859 |
|
849 | 860 | Note that this specification does not support `OrderProposal` amendment by the <a>Customer</a>, and that <a>Customer</a> requests for changes to an existing proposal must be done via Message Exchange.
|
850 | 861 |
|
851 |
| -#### Message Exchange |
| 862 | +##### Message Exchange |
852 | 863 |
|
853 | 864 | The <a>Booking System</a> MAY optionally support Message Exchange during the proposal negotiation, which uses the same mechanism as Proposal Amendment. If this is not supported by the <a>Booking System</a>, the simple Approval/Rejection workflow described in the Minimal Implementation may be used without needing to consider this (as this processes is initiated by the <a>Booking System</a>).
|
854 | 865 |
|
|
868 | 879 |
|
869 | 880 | <figure>
|
870 | 881 | <img src="sequencediagramwithapproval.png" alt="Sequence diagram with approval">
|
871 |
| - <figcaption>Sequence diagram showing API interactions with approval/figcaption> |
| 882 | + <figcaption>Sequence diagram showing API interactions with approval</figcaption> |
872 | 883 | </figure>
|
873 | 884 |
|
874 | 885 | For an `Order` that requires approval, the flow differs from the above as follows:
|
|
938 | 949 |
|
939 | 950 | This version of the specification does not provide details to construct a complex additional details capture form, however it does facilitate simple text fields to capture additional details.
|
940 | 951 |
|
| 952 | +If an `Offer` requires additional details capture, the <a>Booking System</a> MUST include the `openBookingFlowRequirement` of `https://openactive.io/OpenBookingIntakeForm` in the `Offer`s within its open data. This allows <a>Brokers</a> that do not support additional details capture to easily filter out such offers from their experience. |
| 953 | + |
941 | 954 | <pre class="example" title="Example of orderItemIntakeForm provided by Booking System at C1">
|
942 | 955 | {
|
943 | 956 | "type": "OrderItem",
|
|
1892 | 1905 | | [`oa:availableChannel`](https://openactive.io/availableChannel) | REQUIRED | REQUIRED | Array of [`oa:AvailableChannelType`](https://openactive.io/AvailableChannelType) | Can include `https://openactive.io/OpenBookingPrepayment`, `https://openactive.io/TelephoneAdvanceBooking`, `https://openactive.io/TelephonePrepayment`, `https://openactive.io/OnlinePrepayment` |
|
1893 | 1906 | | [`oa:validFromBeforeStartDate`](https://openactive.io/validFromBeforeStartDate) | - | 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. |
|
1894 | 1907 | | [`oa:latestCancellationBeforeStartDate`](https://openactive.io/latestCancellationBeforeStartDate) | - | OPTIONAL | [`schema:Duration`](https://schema.org/Duration) | The duration before the `startDate` during which this Offer may **not** be cancelled, given in [ISO8601] format. |
|
| 1908 | +| [`oa:openBookingFlowRequirement`](https://openactive.io/openBookingFlowRequirement) | REQUIRED | REQUIRED | Array of [`oa:OpenBookingFlowRequirement`](https://openactive.io/AvailableChannelType) | Can include `https://openactive.io/OpenBookingIntakeForm`, `https://openactive.io/OpenBookingApproval`, `https://openactive.io/OpenBookingNegotiation` | |
1895 | 1909 |
|
1896 | 1910 | Note that for an `Offer` to be bookable under this specification, `availableChannel` must include `https://openactive.io/OpenBookingPrepayment`.
|
1897 | 1911 |
|
|
0 commit comments