0.1.0 - ci-build
WofPortalIG, published by Service Well AB. This guide is not an authorized publication; it is the continuous build for version 0.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/servicewell/servicewell.fhir.wof-portal/ and changes regularly. See the Directory of published versions
Contents:
This page provides a list of the FHIR artifacts defined as part of this implementation guide.
The following artifacts define the specific capabilities that different types of systems are expected to have in order to comply with this implementation guide. Systems conforming to this implementation guide are expected to declare conformance to one or more of the following capability statements.
| WOF Portal Capability Statement |
This CapabilityStatement defines the canonical domain model and API principles of the WOF Portal |
These are custom operations that can be supported by and/or invoked by systems conforming to this implementation guide.
| $getOffersContext — Booking Content Context |
Read-oriented operation returning an enriched, profiled Bundle for fast content rendering. It may include ActivityDefinitionPortal, HealthcareServicePortal, PractitionerRolePortal and OfferPortal. It MUST NOT include Schedule, Slot, or bookable time slots. |
These define constraints on FHIR resources for systems conforming to this implementation guide.
| ActivityDefinitionPortal |
ActivityDefinition represents what can be offered and booked as a service. It answers the question: “What service is the patient booking?”
Booking and interoperability principle:
Important: The resource ActivityDefinitionPortal describes the service concept only. It does not define:
Those context-specific details are provided through Offer and related context resources. Current name in Backoffice: Service |
| BillingOrganizationPortal |
BillingOrganization represents the entity that is financially responsible for healthcare services. |
| Bundle (Offers Context) — WOF Portal |
Response Bundle for $getOffersContext. Contains a subset of ActivityDefinitionPortal, HealthcareServicePortal, PractitionerRolePortal and OfferPortal. Intended for fast content rendering. Does not include scheduling or bookable time slots (no Schedule, no Slot). |
| HealthcareServicePortal |
<p><b>HealthcareServicePortal</b> represents the place and operational context where care is performed.</p> <p>It answers the question: <i>“Where can the patient receive a service?”</i></p> <ul> <li>Describes a service location or service unit (e.g., clinic, department, unit).</li> <li>Used to present booking options such as location/service, contact information, and where the service is delivered.</li> <li>Can be shared by multiple practitioners and roles.</li> <li>Does <b>not</b> represent financial ownership, invoicing responsibility, or statutory reporting responsibility.</li> </ul> <p><b>Important:</b> HealthcareService is an operational concept. Financial and invoicing responsibility is modeled separately.</p> <p><b>Current name in Backoffice:</b> Clinic</p> |
| MyPatient |
An example profile of the Patient resource. |
| OfferPortal |
<p><b>OfferPortal</b> represents a bookable offering in a specific context.</p> <p>It answers the question: <i>“Which service can be booked, by whom, and where — and what are the booking-facing settings in that context?”</i></p> <ul> <li>Connects an <b>ActivityDefinitionPortal</b> (what) with a <b>HealthcareServicePortal</b> (where) and a <b>PractitionerRolePortal</b> (who).</li> <li>Represents the <b>context-specific</b> configuration for booking content.</li> <li>Is intended as a lightweight object for frontends to render booking options quickly.</li> </ul> <p>An OfferPortal contains references to:</p> <ul> <li><b>activityDefinition</b> — Reference(ActivityDefinitionPortal)</li> <li><b>healthcareService</b> — Reference(HealthcareServicePortal)</li> <li><b>practitionerRole</b> — Reference(PractitionerRolePortal)</li> </ul> <p>OfferPortal may include booking-facing settings such as:</p> <ul> <li><b>duration</b> — free-text (presentation value)</li> <li><b>price</b> — free-text (presentation value)</li> <li><b>bookingUrl</b> — deeplink for booking</li> </ul> <p><b>Important:</b> OfferPortal does <b>not</b> represent real-time availability. It does not include schedules, working hours, or bookable time slots.</p> <p>OfferPortal is a context/read model intended to support fast, “chatty” consumption. It is not a replacement for scheduling or billing workflows.</p> |
| PractitionerRolePortal |
<p><b>PractitionerRolePortal</b> represents a practitioner acting in a specific operational and financial context.</p> <p>It answers the question: <i>“In which role, at which service location, and under which financial responsibility does this practitioner perform services?”</i></p> <ul> <li>Links a <b>PractitionerPortal</b> (the individual person).</li> <li>Links a <b>HealthcareServicePortal</b> (where the service is performed).</li> <li>Links a <b>BillingOrganizationPortal</b> (who is financially responsible).</li> </ul> <p>A PractitionerRole defines the <b>context</b> in which work is performed, not the person itself.</p> <ul> <li>A Practitioner may have <b>multiple PractitionerRolePortals</b>.</li> <li>A Practitioner may work at <b>multiple HealthcareServicePortals</b>.</li> <li>A Practitioner may act under <b>different BillingOrganizationPortals</b> depending on context.</li> </ul> <p>This makes PractitionerRole the central concept for:</p> <ul> <li>Booking and offers</li> <li>Pricing and duration rules</li> <li>Financial responsibility</li> <li>Service-specific configuration</li> </ul> <p><b>Important:</b> PractitionerRolePortal is intentionally used to separate the person from the context in which services are delivered and billed.</p> <p><b>Current name in Backoffice:</b> Practitioner</p> |
| SchedulePortal |
<p><b>SchedulePortal</b> represents when a practitioner is planned to work during a given time period.</p> <p>It answers the question: <i>“Who is working in the coming weeks, and who can potentially be shown as bookable?”</i></p> <ul> <li>Provides <b>time-based context</b> for practitioners.</li> <li>Is used to filter which offers may proceed to availability checks.</li> <li>Supports planning and staffing views.</li> </ul> <p><b>Relationship to Offer:</b></p> <ul> <li><b>Offer</b> defines what can be presented and selected (what/where/who).</li> <li><b>SchedulePortal</b> indicates when a practitioner is planned to work.</li> <li>A practitioner may have an <b>Offer without a SchedulePortal</b>.</li> </ul> <p><b>Important:</b> A practitioner without SchedulePortal may still be included in offers for presentation and marketing purposes, but must be treated as <b>not currently bookable</b>.</p> <p><b>SchedulePortal is not availability:</b></p> <ul> <li>SchedulePortal does <b>not</b> represent bookable time slots.</li> <li>SchedulePortal does <b>not</b> guarantee that a booking can be made.</li> <li>Actual bookability requires downstream <b>Slot/availability</b> checks.</li> </ul> <p><b>Design principle:</b> Offer determines eligibility. Schedule determines potential availability. Slot determines actual bookability.</p> |
| ServiceProviderPortal |
ServiceProvider represents the top-level owning organization within the platform. It answers the question: “Which organization owns the configuration, endpoints, and service structure for a customer?” A ServiceProvider:
A ServiceProvider is modeled as an Organization but is intentionally separated from clinical and financial roles such as HealthcareService and BillingOrganization. |
These are example instances that show what data produced and consumed by systems conforming with this implementation guide might look like.
| PatientExample |
An example of a patient with a license to krill. |