diff --git a/BaRS-Images/DocumentReference/BaRS_NRL_Write_Sequence-1.1.0.svg b/BaRS-Images/DocumentReference/BaRS_NRL_Write_Sequence-1.1.0.svg index 10f70b3a..1fb9b2af 100644 --- a/BaRS-Images/DocumentReference/BaRS_NRL_Write_Sequence-1.1.0.svg +++ b/BaRS-Images/DocumentReference/BaRS_NRL_Write_Sequence-1.1.0.svg @@ -1,4 +1,4 @@ -
User
Use...
Sender
Sender
BaRS Proxy
BaRS Pr...
Endpoint
Endpoi...
NRLF
NRLF
Receiver
Receiver
User
Use...
Sender
Sender
BaRS Proxy
BaRS P...
Endpoint
Endpoi...
NRLF
NRLF
Receiver
Receiver
Book/Ammend Appointment
Book/Ammend Appointment
Find Appointment(s) for a Patient
Find Appointment(s) for a Patient
Authentication Implied.
Authentication...
Get /metadata implied.
Get /metadata implied.
POST $process-message
(Appointment / Target)
POST $process-message...
Obtain Endpoint
Obtain Endpoint
Obtain Endpoint
Obtain Endpoint
Endpoint
Endpoint
Endpoint
Endpoint
POST $process-message
(Appointment / Target)
POST $process-message...
Process Message
Process Message
200 / 201 Appointment
200 / 201 Appointment
200 / 201 Appointment
200 / 201 Appointment
Appointment
Appointment
PUT/POST/DELETE  DocumentReference
PUT/POST/DELETE  DocumentReference
200 / 201
200 / 201
 DocumentReference
 DocumentReference
200 / 201 Appointment
200 / 201 Appointment
200 / 201 Appointment
200 / 201 Appointment
Success
Success
PUT /POST/DELTE DocumentReference
PUT /POST/DELTE DocumentReference
200 / 201
200 / 201
Text is not SVG - cannot display
\ No newline at end of file +
User
Sender
BaRS Proxy
Endpoint
NRLF
Receiver
User
Sender
BaRS Proxy
Endpoint
NRLF
Receiver
Book/Amend Appointment
Find Appointment(s) for a Patient
Get /metadata implied.
PUT/POST/PATCH /Appointment
Obtain Endpoint
Obtain Endpoint
Endpoint
Endpoint
PUT/POST/PATCH /Appointment
Process Appointment
200 / 201 Appointment
200 / 201 Appointment
Appointment
PUT/POST/DELETE DocumentReference
200 / 201
200 / 201 Appointment
200 / 201 Appointment
Success
PUT/POST/DELETE DocumentReference
200 / 201
\ No newline at end of file diff --git a/BaRS-Images/SequenceDiagrams/BaRS_Foundation_Book.drawio.svg b/BaRS-Images/SequenceDiagrams/BaRS_Foundation_Book.drawio.svg index 63548b79..057c187c 100644 --- a/BaRS-Images/SequenceDiagrams/BaRS_Foundation_Book.drawio.svg +++ b/BaRS-Images/SequenceDiagrams/BaRS_Foundation_Book.drawio.svg @@ -1,4 +1,4 @@ -
User
Sender
BaRS Proxy
NRL
Receiver
Book an Appointment
Authentication Implied.
Endpoint catalogue implied
GET /metadata
GET /metadata
200 CapabilityStatement
200 CapabilityStatement
Booking Required at Service
Select  slot
GET /Slots
GET /Slots
200 Slot  searchset Bundle
200 Slot  searchset Bundle
Show available slots
POST new Appointment
POST new Appointment
201 Appointment
POST /DocumentReference
201 Created
201 Appointment
Confirm Booking







Sender
BaRS Proxy
NRL
Receiver
\ No newline at end of file +
User
Sender
BaRS Proxy
NRL
Receiver
User
Sender
BaRS Proxy
NRL
Receiver
Booking Required at Service
GET /metadata
200 Slot searchset Bundle
GET /Slots
201 Appointment created
200 CapabilityStatement
GET /metadata
200 CapabilityStatement
GET /Slots
200 Slot searchset Bundle
Show available slots
Select slot
POST /Appointment
POST /Appointment
POST /DocumentReference
201 Appointment created
Confirm booking
Book an Appointment
POST /DocumentReference
201 DocumentReference Created
201 DocumentReference Created
\ No newline at end of file diff --git a/BaRS-Images/SequenceDiagrams/BaRS_Foundation_Cancel.drawio.svg b/BaRS-Images/SequenceDiagrams/BaRS_Foundation_Cancel.drawio.svg index 520d9f1d..e345231c 100644 --- a/BaRS-Images/SequenceDiagrams/BaRS_Foundation_Cancel.drawio.svg +++ b/BaRS-Images/SequenceDiagrams/BaRS_Foundation_Cancel.drawio.svg @@ -1,4 +1,4 @@ -
User
Sender
BaRS Proxy
NRL
Receiver
Loop
Find Patients Booking
Get DocumentReference (NHS No.)
Get DocumentReference (NHS No.)
Bundle (DocumentReference)
Bundle (DocumentReference)
GET /Appointment/[id]
GET /Appointment/[id]
200 Appointment
200 Appointment
Show Booking
Cancel a specific Appountment
Authentication Implied.
Endpoint catalogue implied
GET /metadata
GET /metadata
200 CapabilityStatement
200 CapabilityStatement
Select and Cancel Booking
PUT /Appointment/[id]
PUT /Appointment/[id]
200 Success
DELETE /DocumentReference/[id]
200 Success
200 Appointment
Confirm Cancelled







Sender
BaRS Proxy
NRL
Receiver
\ No newline at end of file +
User
Sender
BaRS Proxy
NRL
Receiver
User
Sender
BaRS Proxy
NRL
Receiver
Loop through Appointment (DocumentReference) pointers
GET /Appointment/{id}
200 Appointment
Find patient's booking
GET /DocumentReference (NHS No.)
GET /DocumentReference (NHS No.)
Bundle (DocumentReferences)
Bundle (DocumentReferences)
GET /Appointment/{id}
200 Appointment
GET /metadata
200 CapabilityStatement
GET /metadata
200 CapabilityStatement
Show Appointment(s) for selection
Cancel an Appointment
200 Appointment cancelled
Select Appointment to cancel
PUT /Appointment/{id}
PUT /Appointment/{id}
DELETE /DocumentReference/{id}
200 Appointment cancelled
Confirm Appointment cancelled
200 DocumentReference removed
DELETE /DocumentReference/{id}
200 DocumentReference removed
\ No newline at end of file diff --git a/BaRS-Images/SequenceDiagrams/BaRS_Foundation_ReBook.drawio.svg b/BaRS-Images/SequenceDiagrams/BaRS_Foundation_ReBook.drawio.svg index c36a0eb9..f4fef831 100644 --- a/BaRS-Images/SequenceDiagrams/BaRS_Foundation_ReBook.drawio.svg +++ b/BaRS-Images/SequenceDiagrams/BaRS_Foundation_ReBook.drawio.svg @@ -1,4 +1,4 @@ -
User
Sender
BaRS Proxy
NRL
Receiver
Loop
Find Patients Appointments
Get DocumentReference (NHS No.)
Get DocumentReference (NHS No.)
Bundle (DocumentReference)
Bundle (DocumentReference)
GET /Appointment/[id]
GET /Appointment/[id]
200 Appointment
200 Appointment
Show Appointments
Rebook a specific Appointment
Authentication Implied.
Endpoint catalogue implied
GET /metadata
GET /metadata
200 CapabilityStatement
200 CapabilityStatement
Select Appointment to modify
select new slot
GET /Slots
GET /Slots
200 Slot  searchset Bundle
200 Slot  searchset Bundle
Show available slots
PUT /Appointment/[id]
PUT /Appointment/[id]
200 Appointment
DELETE /DocumentReference/[id]
200 Success
200 Appointment
POST new Appointment
POST new Appointment
201 Appointment
POST /DocumentReference
201 Created
201 Appointment
Confirm Booking







Sender
BaRS Proxy
NRL
Receiver
\ No newline at end of file +
User
Sender
BaRS Proxy
NRL
Receiver
User
Sender
BaRS Proxy
NRL
Receiver
Loop through Appointment (DocumentReference) pointers
GET /Appointment/{id}
200 Appointment
Find patient's booking
GET /DocumentReference (NHS No.)
GET /DocumentReference (NHS No.)
Bundle (DocumentReferences)
Bundle (DocumentReferences)
GET /Appointment/{id}
200 Appointment
GET /metadata
200 CapabilityStatement
GET /metadata
200 CapabilityStatement
Show Appointment(s) for selection
Rebook an Appointment
GET /metadata
200 Slot searchset Bundle
GET /Slots
200 Appointment updated
200 DocumentReference removed
200 CapabilityStatement
GET /metadata
200 CapabilityStatement
GET /Slots
200 Slot searchset Bundle
Show available slots
Select slot (remove existing Appointment) and book new
PUT /Appointment/{id} (existing)
PUT /Appointment/{id}
DELETE /DocumentReference/{id}
201 Appointment created
Confirm existing removed and new Appointment created
Select Appointment to change slot for
201 Appointment created
200 DocumentReference created
POST /Appointment
POST /DocumentReference
POST /Appointment (new)
DELETE /DocumentReference/{id}
200 DocumentReference removed
POST /DocumentReference
200 DocumentReference created
\ No newline at end of file diff --git a/BaRS-Images/SequenceDiagrams/BaRS_Foundation_Reschedule.drawio.svg b/BaRS-Images/SequenceDiagrams/BaRS_Foundation_Reschedule.drawio.svg new file mode 100644 index 00000000..73fd7ab3 --- /dev/null +++ b/BaRS-Images/SequenceDiagrams/BaRS_Foundation_Reschedule.drawio.svg @@ -0,0 +1,4 @@ + + + +
User
Sender
BaRS Proxy
NRL
Receiver
User
Sender
BaRS Proxy
NRL
Receiver
Loop through Appointment (DocumentReference) pointers
GET /Appointment/{id}
200 Appointment
Find patient's booking
GET /DocumentReference (NHS No.)
GET /DocumentReference (NHS No.)
Bundle (DocumentReferences)
Bundle (DocumentReferences)
GET /Appointment/{id}
200 Appointment
GET /metadata
200 CapabilityStatement
GET /metadata
200 CapabilityStatement
Show Appointment(s) for selection
Reschedule an Appointment
GET /metadata
200 Slot searchset Bundle
GET /Slots
200 Appointment updated
200 CapabilityStatement
GET /metadata
200 CapabilityStatement
GET /Slots
200 Slot searchset Bundle
Show available slots
Select slot
PATCH /Appointment/{id}
PATCH /Appointment/{id}
200 Appointment updated
Confirm Appointment updated
Select Appointment to change slot for
PUT /DocumentReference/{id}
200 DocumentReference Updated
200 DocumentReference Updated
PUT /DocumentReference/{id}
\ No newline at end of file diff --git a/BaRS-Images/SequenceDiagrams/BaRS_Foundation_Update.drawio.svg b/BaRS-Images/SequenceDiagrams/BaRS_Foundation_Update.drawio.svg index 44ed864e..c56f5bf6 100644 --- a/BaRS-Images/SequenceDiagrams/BaRS_Foundation_Update.drawio.svg +++ b/BaRS-Images/SequenceDiagrams/BaRS_Foundation_Update.drawio.svg @@ -1,4 +1,4 @@ -
User
Sender
BaRS Proxy
NRL
Receiver
Loop
Find Patients Booking
Get DocumentReference (NHS No.)
Get DocumentReference (NHS No.)
Bundle (DocumentReference)
Bundle (DocumentReference)
GET /Appointment/[id]
GET /Appointment/[id]
200 Appointment
200 Appointment
Show Booking
Update a specific Appointment
Authentication Implied.
Endpoint catalogue implied
GET /metadata
GET /metadata
200 CapabilityStatement
200 CapabilityStatement
Select and Changel Booking Detail
PUT /Appointment/[id]
PUT /Appointment/[id]
200 Success
PUT /DocumentReference/[id]
200 Success
200 Appointment
Confirm Cancelled







Sender
BaRS Proxy
NRL
Receiver
\ No newline at end of file +
User
Sender
BaRS Proxy
NRL
Receiver
User
Sender
BaRS Proxy
NRL
Receiver
Loop through Appointment (DocumentReference) pointers
GET /Appointment/{id}
200 Appointment
200 Appointment updated
Select and change Appointment
PUT /Appointment/{id}
PUT /Appointment/{id}
200 Appointment updated
Confirm booking update
Find patient's booking
GET /DocumentReference (NHS No.)
GET /DocumentReference (NHS No.)
Bundle (DocumentReferences)
Bundle (DocumentReferences)
GET /Appointment/{id}
200 Appointment
GET /metadata
200 CapabilityStatement
GET /metadata
200 CapabilityStatement
Show Appointment(s) for selection
Update an Appointment
\ No newline at end of file diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Applications/BaRS-Applications/Applications/BaRS-APP5/Index.page.md b/guides/Live-ImplementationGuide-BaRS/Home/Applications/BaRS-Applications/Applications/BaRS-APP5/Index.page.md index 42131a45..f7eec57c 100644 --- a/guides/Live-ImplementationGuide-BaRS/Home/Applications/BaRS-Applications/Applications/BaRS-APP5/Index.page.md +++ b/guides/Live-ImplementationGuide-BaRS/Home/Applications/BaRS-Applications/Applications/BaRS-APP5/Index.page.md @@ -27,7 +27,7 @@ topic: Application5 - +Any suppliers building to this application (Application 5) must engage with NHS England's Pharmacy First/DSIC teams prior to building application 5. ## Use Cases Supported diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Build/Testing-and-Environments/Connect-as-a-receiver.page.md b/guides/Live-ImplementationGuide-BaRS/Home/Build/Testing-and-Environments/Connect-as-a-receiver.page.md new file mode 100644 index 00000000..f4359b0c --- /dev/null +++ b/guides/Live-ImplementationGuide-BaRS/Home/Build/Testing-and-Environments/Connect-as-a-receiver.page.md @@ -0,0 +1,83 @@ +--- +topic: Connect-as-a-receiver +--- + +## {{page-title}} + +BaRS uses TLS-MA to communicate with Receiving endpoints. Receiving endpoints need a certificate under the NHS Root CA to facilitate TLS-MA. The receiver needs to follow these steps to access Integration (INT) and Production (PROD) environments. + +To connect to the BaRS proxy as a receiver follow these steps: + +Step 1: Apply for your domain [apply for a new nhs.uk domain](https://digital.nhs.uk/services/networking-addressing/apply-for-an-nhs.uk-domain-for-websites-and-web-applications). You must complete Section 5: For website or application records visible on the public internet. + +Step 2: Request a certificate under the NHS Root CA. The FQDN must be an nhs.uk address. + * There are different certificate chains for INT and PROD + * [INT Certificate](https://digital.nhs.uk/services/path-to-live-environments/integration-environment#rootca-and-subca-certificates) chains (**Note:** _these may be out of date_) + * [PROD Certificate](https://digital.nhs.uk/services/path-to-live-environments/live-environment) chains (**Note:** _these may be out of date_)stered, you can then begin the process to obtain your certificate by generating a certificate request. +The fully qualified domain name (FQDN) is equal to the certificate name (CN) by convention. + +Step 3: Create a Certificate Signing Request (*.csr). This is the file you will send to us so we can generate a signed certificate for your endpoints. Create a private key; a password is optional. +``` +openssl genpkey -algorithm RSA -out private.key -aes256 +``` +Create the *.csr, use the following command:
+**Note:** _Generate the CSR with only the common name field populated, which must match the FQDN. All other fields can remain blank. The email field MUST be blank. Please note FQDNs MUST be in the .nhs.uk domain as we can only issue certificates in this domain._ +``` +openssl req -new -key private.key -out request.csr +``` + +Step 4: Send the .csr file to be signed by NHS England and get the client certificate. To do this, follow these environment specific steps: + +#### Client certificate: Integration (INT) +Step 1: Contact ITOC to make a [Combined endpoint and service registration request](https://digital.nhs.uk/services/path-to-live-environments/path-to-live-forms/combined-endpoint-and-service-registration-request) + {{render:Onboarding FORM.png}} + In the form: + * Select Create/renew a certificate only (No endpoint) + * Specify Integration environment + * FQDN must match your domain and CN on the cert e.g. '**BaRS-INT-\.\.thirdparty.nhs.uk**' + * In Additional comments/notes, state ‘BaRS’ certificate request + * Add ‘N/A’ in the Party Key field because there is no relation to SDS endpoints +Step 2: Receive certificate from ITOC +Step 3: Email with Receiver URL for BaRS/API-M to add to the Endpoint Catalogue + +#### Client certificate: Production (PROD) +**Production endpoints can only be requested when Solution Assurance issue the supplier with the Technical Conformance certificate** +Step1: Send the .csr to , indicating this is for a BaRS Receiver endpoint + * Format for FQDN on PROD for: + * Supplier hosted solutions is ‘**BaRS-PROD-\.\.thirdparty.nhs.uk**’ + * This option is used for multi-tenanted solutions. + * Service Provider hosted solutions is ‘**BaRS-PROD-\.\.nhs.uk**’ + * This option is used for non multi-tenanted solutions. If multiple endpoints are needed, the ODS code can be appended with an identifier for the setting. + * It may be that the provider already has a 'nhs.uk' standard domain DNS entry. If one exists, it should be used for this new subdomain. +Step 2: Receive certificate from DIR Team +Step 3: Email with Receiver URL for BaRS/API-M to add to the Endpoint Catalogue +Step 4: Make changes to your [firewall exceptions](https://simplifier.net/guide/nhsbookingandreferralstandard/Home/Deploy/Technical-deployment\Firewallexceptions) to receive messages from the BaRS proxy. + +#### Installing and configuring your application to use the certificate +Step 1: INT and PROD copy the cert text inlcuding `-----BEGIN CERTIFICATE` as the first line and `END CERTIFICATE-----` as the last. Save this text locally as a file called barsinreceiver.cer (change the name to suit). + +Step 2: Create a .pfx file so you can serve HTTPS (TLS) endpoints. You can use the command below to export a *.pfx file from the *.key file you made earlier (when you made the *.csr file) along with the *.cer file you were emailed. + +``` +openssl pkcs12 -export -out barsintreceiver.pfx -inkey barsintreceiver.key -in barsintreceiver.cer +``` + +Step 3: Create a password for your .pfx file. + +Step 4: Make configuration changes to reference the *.pfx file and password + +(C# example, Other launguages will vary but be similar) + +``` c# + +// Configure Kestrel to use the certificate +builder.WebHost.ConfigureKestrel(options => +{ + options.ListenAnyIP(8080, listenOptions => + { + listenOptions.UseHttps(certPath, certPassword); + }); +}); + +``` + diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Build/Testing-and-Environments/Connect-as-a-sender.page.md b/guides/Live-ImplementationGuide-BaRS/Home/Build/Testing-and-Environments/Connect-as-a-sender.page.md new file mode 100644 index 00000000..f21430ca --- /dev/null +++ b/guides/Live-ImplementationGuide-BaRS/Home/Build/Testing-and-Environments/Connect-as-a-sender.page.md @@ -0,0 +1,19 @@ +--- +topic: connect-as-a-sender +--- + +## {{page-title}} + +API-M provides the [security model](https://digital.nhs.uk/developer/guides-and-documentation/security-and-authorisation/application-restricted-restful-apis-signed-jwt-authentication) for BaRS. + +To connect to the BaRS proxy as a sender follow these steps: + +Step 1: follow the NHS Developer authenitication and authorisation process [NHS Developer authentication and authorisation](https://digital.nhs.uk/developer/guides-and-documentation/security-and-authorisation/user-restricted-restful-apis-nhs-login-separate-authentication-and-authorisation#step-1-register-your-application-with-nhs-login) + +Step 2: trust the Certificate Authorities (CA) mentioned below. For INT this will be downloadable from http://pki.nhs.uk/int/G2/auth/NHSINTAuthG2.crt +( you can examine the .cer file if you have one ) +``` +openssl x509 -in barsintreceiver.cer -text -noout +``` + + diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Build/Testing-and-Environments/Onboarding.page.md b/guides/Live-ImplementationGuide-BaRS/Home/Build/Testing-and-Environments/Onboarding.page.md index 68b3ca2a..bb63ab87 100644 --- a/guides/Live-ImplementationGuide-BaRS/Home/Build/Testing-and-Environments/Onboarding.page.md +++ b/guides/Live-ImplementationGuide-BaRS/Home/Build/Testing-and-Environments/Onboarding.page.md @@ -4,119 +4,9 @@ topic: onboarding ## {{page-title}} -API-M provides the [security model](https://digital.nhs.uk/developer/guides-and-documentation/security-and-authorisation/application-restricted-restful-apis-signed-jwt-authentication) for BaRS. - -There are two roles: Sender and Receiver. Most BaRS Applications will require a solution to support both roles, despite being predominantly one or the other, because of the response workflow steps. In response flows, the original Sender becomes a Receiver and the original Receiver becomes a Sender. +In each BaRS workflow there are two roles: Sender and Receiver. In applications with response workflows, both parties act as a Sender and a Receiver, and will need to follow the instructions to connect to environments as both. The Sender obtains a token from the API-M platform to make requests of the BaRS API Proxy, which brokers the request through the Receiver, secured via TLS-MA (Transport Layer Security-Mutual Authentication). BaRS is based on internet-first principles and there is no requirement for [Health and Social Care Network (HSCN)](https://digital.nhs.uk/services/health-and-social-care-network) connectivity. -### Sender -* [Follow the steps here to get set up](https://digital.nhs.uk/developer/guides-and-documentation/security-and-authorisation/user-restricted-restful-apis-nhs-login-separate-authentication-and-authorisation#step-1-register-your-application-with-nhs-login) - -The sender will also need to trust the Certificate Authorities mentioned below. For INT this will be downloadable from http://pki.nhs.uk/int/G2/auth/NHSINTAuthG2.crt -( you can examine the .cer file if you have one ) -``` -openssl x509 -in barsintreceiver.cer -text -noout -``` -### Some commands that might help to get the Root CA and chain - -To get a cert from an endpoint -``` -openssl s_client -showcerts -connect BaRS-INT-X26.BarsReceiver.thirdparty.nhs.uk:443 < /dev/null | openssl x509 -outform PEM > server-cert.pem -``` -Then to list info from the .pem -``` -openssl x509 -in server-cert.pem -text -noout -``` - -You can use the output from this command to get the full CA chain. - -``` -sudo cp ca-chain.pem /usr/local/share/ca-certificates/ sudo update-ca-certificates -``` - -This will ensure that your system trusts the certificates issued by the CA. - - -### Receiver -BaRS will utilise TLS-MA to communicate with Receiving endpoints. Receiving endpoints will require a certificate under the NHS Root CA to facilitate TLS-MA. - -* The receiver must request a certificate under the NHS Root CA - * There are different certificate chains for INT and Prod - * [INT Certificate](https://digital.nhs.uk/services/path-to-live-environments/integration-environment#rootca-and-subca-certificates) chains (**Note:** _these may be out of date_) - * [Prod Certificate](https://digital.nhs.uk/services/path-to-live-environments/live-environment) chains (**Note:** _these may be out of date_) -* The receiving endpoint will present the certificate obtained for TLS-MA -* The receiving endpoint will need to trust the Root CAs and SubCAs for their respective environments -* The receiving endpoint will only accept requests presented with certificates from their respective chains - -As the certificates are using the NHS Root CA, the FQDN must be an nhs.uk address. This is the case for both INT and Prod. - -You can apply for your domain [here](https://digital.nhs.uk/services/networking-addressing/apply-for-an-nhs.uk-domain-for-websites-and-web-applications), ensuring that you complete Section 5: For website or application records visible on the public internet. - -Once you have your domain registered, you can then begin the process to obtain your certificate by generating a certificate request. - -Certificate requests will need to be signed for your endpoint. Note that the fully qualified domain (FQDN) name is equal to the certificate name (CN) by convention. - -You need to create a Certificate Signing Request (*.csr). This is the file you will send to us so we can generate a signed certificate for your endpoints. The first step is to create a private key; a password is optional. -``` -openssl genpkey -algorithm RSA -out private.key -aes256 -``` -Then, to create the *.csr, use the following command:
-**Note:** _Generate the CSR with only the common name field populated, which must match the FQDN. All other fields can remain blank. The email field MUST be blank. Please note FQDNs MUST be in the .nhs.uk domain as we can only issue certificates in this domain._ -``` -openssl req -new -key private.key -out request.csr -``` - -At this point, you should have a .key and a .csr file. The next step will be to send the .csr file to be signed by the NHS and get the client certificate. For full steps, see the sections below for each environment. - -#### Integration (INT) -* [Request](https://digital.nhs.uk/services/path-to-live-environments/path-to-live-forms/combined-endpoint-and-service-registration-request) a ‘certificate only’ from ITOC - * {{render:Onboarding FORM.png}} - * Certificate Only (No endpoint) - * Integration environment - * FQDN must match your domain and CN on the cert e.g. '**BaRS-INT-\.\.thirdparty.nhs.uk**' - * Ensure it is clear this is a request for a ‘BaRS’ certificate - * ‘N/A’ in the Party Key section because there is no relation to SDS endpoints -* Receive certificate from ITOC -* Email with Receiver URL for BaRS/API-M to add to the Endpoint Catalogue - -#### Production (Prod) -* Once Solution Assurance issues the supplier with the Technical Conformance certificate, Production endpoints can be requested -* Send the .csr to , indicating this is for a BaRS Receiver endpoint - * Format for FQDN on PROD for: - * Supplier hosted solutions is ‘**BaRS-PROD-\.\.thirdparty.nhs.uk**’ - * This option is used for multi-tenanted solutions. - * Service Provider hosted solutions is ‘**BaRS-PROD-\.\.nhs.uk**’ - * This option is used for non multi-tenanted solutions. If multiple endpoints are needed, the ODS code can be appended with an identifier for the setting. - * It may be that the provider already has a 'nhs.uk' standard domain DNS entry. If one exists, it should be used for this new subdomain. -* Receive certificate from DIR Team -* Email with Receiver URL for BaRS/API-M to add to the Endpoint Catalogue - -**Note:** **Receiver Firewall Amendments** - Requests from the BaRS API Proxy will originate from **INT** on **35.197.254.55** & **35.246.55.143** and **PROD** on **34.89.0.111** & **34.89.69.6**. - -Once you have the certificate from the NHS service desk, copy the text for the cert with the `-----BEGIN CERTIFICATE` as the first line and `END CERTIFICATE-----` as the last. Save this text locally as a file called barsinreceiver.cer (change the name to suit). - -You will probably need to make a .pfx file so you can serve HTTPS (TLS) endpoints. You can use the command below to export a *.pfx file from the *.key file you made earlier (when you made the *.csr file) along with the *.cer file you were emailed. - -``` -openssl pkcs12 -export -out barsintreceiver.pfx -inkey barsintreceiver.key -in barsintreceiver.cer -``` - -You will be prompted for a password for your .pfx file. You will need to use this password along with the .pfx file. - -Once you have the *.pfx file you can use it the following way (C# example, Other launguages will vary but be similar) - -``` c# - -// Configure Kestrel to use the certificate -builder.WebHost.ConfigureKestrel(options => -{ - options.ListenAnyIP(8080, listenOptions => - { - listenOptions.UseHttps(certPath, certPassword); - }); -}); - -``` \ No newline at end of file diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Build/Testing-and-Environments/toc.yaml b/guides/Live-ImplementationGuide-BaRS/Home/Build/Testing-and-Environments/toc.yaml index 8466ef2b..f9deafc2 100644 --- a/guides/Live-ImplementationGuide-BaRS/Home/Build/Testing-and-Environments/toc.yaml +++ b/guides/Live-ImplementationGuide-BaRS/Home/Build/Testing-and-Environments/toc.yaml @@ -2,7 +2,11 @@ filename: Index.page.md - name: Environments filename: Environments.page.md -- name: Onboarding +- name: Connecting to environments filename: Onboarding.page.md +- name: Connect as a Sender + filename: Connect-as-a-sender.page.md +- name: Connect as a Receiver + filename: Connect-as-a-receiver.page.md - name: TKW filename: TKW.page.md diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Appointment-StandardPattern/Introduction.page.md b/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Appointment-StandardPattern/Introduction.page.md index 0b503799..01a7f501 100644 --- a/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Appointment-StandardPattern/Introduction.page.md +++ b/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Appointment-StandardPattern/Introduction.page.md @@ -23,6 +23,7 @@ The Appointment Management Foundation is based on {{pagelink:design-core-1.3.1, The key functions surrounding appointment bookings are listed below. This section will provide information on how to meet them using the Appointment Resource. The ability to - +* view * book * update * cancel diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Appointment-StandardPattern/Reschedule-Existing-Booking.page.md b/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Appointment-StandardPattern/Reschedule-Existing-Booking.page.md index a9bc4d08..c017af5b 100644 --- a/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Appointment-StandardPattern/Reschedule-Existing-Booking.page.md +++ b/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Appointment-StandardPattern/Reschedule-Existing-Booking.page.md @@ -13,7 +13,16 @@ Steps to Reschedule: * Select a new slot * Update the resource with the new slot. NB: Only the .slot element of the resource must be updated * Perform a [PATCH](https://digital.nhs.uk/developer/api-catalogue/booking-and-referral-fhir/v1.3.0#patch-/Appointment/-id-) operation using the id of the appointment to /Appointment/\{id\} -* Once processed, the Receiver of the booking must [update (PUT)](https://digital.nhs.uk/developer/api-catalogue/booking-and-referral-fhir/v1.3.0#put-/DocumentReference/-id-) the pointer in the central Registry, as described in {{pagelink:core-StandardPattern-document-reference-Receiver-1.3.1, text: Document Reference Standard Pattern - Receiver}} +* Once processed, the Receiver of the booking must [update (PUT)](https://digital.nhs.uk/developer/api-catalogue/booking-and-referral-fhir/v1.3.0#put-/DocumentReference/-id-) the pointer in the central Registry, as described in {{pagelink:core-StandardPattern-document-reference-Receiver-1.3.1, text: Document Reference Standard Pattern - Receiver}}. The principle update to the pointer is to change the .context element to alter the slot time - + +```json +"context": { + "period": { + "start": "2025-02-12T12:30:30+00:00", + "end": "2025-02-12T12:40:30+00:00" + } +} +``` In this example the Appointment resource is with the existing slot, and updated with the newly selected slot. @@ -82,4 +91,4 @@ Request Body ] } ``` - + diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Appointment-StandardPattern/Update-Existing-Booking.page.md b/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Appointment-StandardPattern/Update-Existing-Booking.page.md index d22e14c6..2fa3f5ef 100644 --- a/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Appointment-StandardPattern/Update-Existing-Booking.page.md +++ b/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Appointment-StandardPattern/Update-Existing-Booking.page.md @@ -22,6 +22,17 @@ resource returned: ] }, "status": "booked", + "reasonCode": [ + { + "coding": [ + { + "system": "http://snomed.info/sct", + "code": "165342003", + "display": "Patient declined laboratory test (situation)" + } + ] + } + ], "description": "Reason for calling", "created": "2024-10-08T15:01:30+00:00", "participant": [ @@ -53,8 +64,8 @@ Request Body "coding": [ { "system": "http://snomed.info/sct", - "code": "65363002", - "display": "Otitis media (disorder)" + "code": "165332000", + "display": "Laboratory test requested (situation)" } ] } diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/DocumentReference-StandardPattern/Introduction.page.md b/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/DocumentReference-StandardPattern/Introduction.page.md index 5c9898d2..caef46e2 100644 --- a/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/DocumentReference-StandardPattern/Introduction.page.md +++ b/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/DocumentReference-StandardPattern/Introduction.page.md @@ -5,7 +5,7 @@ topic: core-StandardPattern-document-reference-Introduction-1.3.1 # Standard Pattern - DocumentReference ## Introduction diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/DocumentReference-StandardPattern/Receiver-DocumentReference.md b/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/DocumentReference-StandardPattern/Receiver-DocumentReference.md index e6e8aae8..88fe9b8c 100644 --- a/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/DocumentReference-StandardPattern/Receiver-DocumentReference.md +++ b/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/DocumentReference-StandardPattern/Receiver-DocumentReference.md @@ -83,6 +83,16 @@ The third identifier (currently optional) relates to the product-id, system '*ht } ``` +**context:** MUST include a period set to the Appointment start and end times. + +```json +"context": { + "period": { + "start": "2025-02-12T12:30:30+00:00", + "end": "2025-02-12T12:40:30+00:00" + } +} +``` ### Step 3: Save and Transmit the DocumentReference (pointer) Once all the necessary fields are populated, perform a [POST](https://digital.nhs.uk/developer/api-catalogue/booking-and-referral-fhir/v1.3.0#post-/DocumentReference) of the DocumentReference to the /DocumentReference endpoint on the BaRS proxy. This will create a DocumentReference in the NRL. diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/DocumentReference-StandardPattern/Sender-DocumentReference.md b/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/DocumentReference-StandardPattern/Sender-DocumentReference.md index 4b9aacb3..022c34eb 100644 --- a/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/DocumentReference-StandardPattern/Sender-DocumentReference.md +++ b/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/DocumentReference-StandardPattern/Sender-DocumentReference.md @@ -82,6 +82,17 @@ The third identifier (currently optional) relates to the product-id, system '*ht } ``` +**context:** includes a period set to the Appointment start and end times. + +```json +"context": { + "period": { + "start": "2025-02-12T12:30:30+00:00", + "end": "2025-02-12T12:40:30+00:00" + } +} +``` + ### Step 4: Retrieve the booking or referral The booking or referral resource can be retrieved by making a GET request for the [booking](https://digital.nhs.uk/developer/api-catalogue/booking-and-referral-fhir/v1.3.0#get-/Appointment/-id-) or [referral](https://digital.nhs.uk/developer/api-catalogue/booking-and-referral-fhir/v1.3.0#get-/ServiceRequest/-id-). @@ -89,7 +100,7 @@ The two key values required to make the request are the first two identifiers in For BaRS, a GET of the relevant resource using the Target Identifiers. In this simplified example, the identifier containing the service id is used in the NHSD-Target-Identifier header, instructing the BaRS proxy to route to the request to that target **note**: The header is not base64Encoded in this example: -```bash +``` cURL --location 'https://int.api.service.nhs.uk/booking-and-referral/FHIR/R4/Appointment/8c63d621-4d86-4f57-8699-e8e22d49935d' \ --header 'X-Request-ID: {{X-Request-ID}}' \ --header 'X-Correlation-ID: {{X-Correlation-ID}}' \ diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Index.page.md b/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Index.page.md index bfcbc5e7..8e0bd663 100644 --- a/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Index.page.md +++ b/guides/Live-ImplementationGuide-BaRS/Home/Core/1.3.1/Index.page.md @@ -213,6 +213,7 @@ For more detail please visit the {{pagelink:Core-StandardPattern-1.3.1, text: St The key capabilities surrounding appointments are listed below. This section will provide information on how to meet them. +* view * book * update * cancel diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical deployment/toc.yaml b/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical deployment/toc.yaml deleted file mode 100644 index 03d6de22..00000000 --- a/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical deployment/toc.yaml +++ /dev/null @@ -1,6 +0,0 @@ -- name: Index - filename: Index.page.md -- name: Technical deployment - filename: Technical deployment.page.md -- name: DoS Configuration - filename: DirectoryOfServiceConfiguration.md \ No newline at end of file diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical deployment/DirectoryOfServiceConfiguration.md b/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical-deployment/DirectoryOfServiceConfiguration.md similarity index 80% rename from guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical deployment/DirectoryOfServiceConfiguration.md rename to guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical-deployment/DirectoryOfServiceConfiguration.md index 57912959..ea7d32f2 100644 --- a/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical deployment/DirectoryOfServiceConfiguration.md +++ b/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical-deployment/DirectoryOfServiceConfiguration.md @@ -1,5 +1,7 @@ ## {{page-title}} +**Note:** **Receiver Firewall Amendments** - Requests from the BaRS API Proxy will originate from **INT** on **35.197.254.55** & **35.246.55.143** and **PROD** on **34.89.0.111** & **34.89.69.6**. + If the provider operates within Urgent and Emergency Care (UEC), they are likely to have a UEC Directory of Services (DoS) entry. DoS leads must configure Service Providers who wish to use BaRS in the standard way, as the service dictates, but their DoS ID will also need to exist in the BaRS Endpoint Catalogue. Steps to configure the provider on the BaRS Endpoint Catalogue:- - note the Service ID on DoS diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical-deployment/Firewallexceptions.md b/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical-deployment/Firewallexceptions.md new file mode 100644 index 00000000..529cbc23 --- /dev/null +++ b/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical-deployment/Firewallexceptions.md @@ -0,0 +1,10 @@ +## {{page-title}} + +BaRS receivers need to configure firewall exceptions for both Integration and Production environments. + +Requests from the BaRS API Proxy will originate from: + +* **INT** on **35.197.254.55** & **35.246.55.143** +* **PROD** on **34.89.0.111** & **34.89.69.6**. + +
diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical deployment/Index.page.md b/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical-deployment/Index.page.md similarity index 100% rename from guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical deployment/Index.page.md rename to guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical-deployment/Index.page.md diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical deployment/Technical deployment.page.md b/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical-deployment/Technicaldeployment.page.md similarity index 100% rename from guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical deployment/Technical deployment.page.md rename to guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical-deployment/Technicaldeployment.page.md diff --git a/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical-deployment/toc.yaml b/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical-deployment/toc.yaml new file mode 100644 index 00000000..f4bcfd0d --- /dev/null +++ b/guides/Live-ImplementationGuide-BaRS/Home/Deploy/Technical-deployment/toc.yaml @@ -0,0 +1,8 @@ +- name: Index + filename: Index.page.md +- name: Technical deployment + filename: Technicaldeployment.page.md +- name: DoS Configuration + filename: DirectoryOfServiceConfiguration.md +- name: Firewall exceptions + filename: Firewallexceptions.md \ No newline at end of file