PackagesCanonicalsLogsProblems
    Packages
    servicewell.fhir.wof-portal@1.0.0
    https://canonical.fhir.link/servicewell/wof-portal/CapabilityStatement/WOFPortalCapabilityStatement
{
  "description": "This CapabilityStatement defines the canonical domain model and API principles of the **WOF Portal** owned and operated by Service Well AB.",
  "_filename": "CapabilityStatement-WOFPortalCapabilityStatement.json",
  "package_name": "servicewell.fhir.wof-portal",
  "format": [ "json", "xml" ],
  "date": "2026-02-02T12:00:00+00:00",
  "publisher": "Service Well AB",
  "fhirVersion": "4.0.1",
  "instantiates": [ "https://profiles.ihe.net/ITI/Scheduling/CapabilityStatement/IHE.Scheduling.server|1.0.0" ],
  "purpose": "\n**IHE Scheduling:** This server instantiates *IHE.Scheduling.server* (v1.0.0).\n\n## Layering principle\n- **WOF Connect** defines vendor-facing interoperability contracts.\n- **WOF Portal** builds on WOF Connect to provide a single, enriched, canonical API.\n\n## Domain separation principles\n- **ActivityDefinition** represents a shared service concept and SHALL be identified by code, not by resource id.\n- **HealthcareService** represents where care is performed.\n- **BillingOrganization** represents financial responsibility and is independent of service location.\n- **PractitionerRole** represents a practitioner acting in a specific operational and financial context.\n\n## Many-to-many relationships are intentional\n- A HealthcareService MAY be associated with multiple BillingOrganizations.\n- A BillingOrganization MAY provide services at multiple HealthcareServices.\n- A Practitioner MAY have multiple PractitionerRoles across services and billing contexts.\n\n## Offer and availability principles\n- **Offer** represents a computed, context-specific view combining ActivityDefinition,\n    HealthcareService, and PractitionerRole.\n- Offer is intended for presentation and selection, not for scheduling.\n- Actual bookability requires downstream slot or availability checks.\n\n## Integration principle\n- External systems integrate with the platform by implementing **WOF Connect**.\n- WOF Portal APIs MAY return enriched and aggregated views not available in WOF Connect.\n\nThis CapabilityStatement documents the canonical behavior of the WOF Portal API.\n\n## Client interaction overview\nThe following diagram illustrates outbound API calls from a patient-facing client\nto the WOF Portal Proxy. It represents actual usage patterns and supported interactions.\n\nTheres currently two domains for our dev-api:  \n```\n- **api.wellonfhir.se/{{tenant}}/1.0/R4**      - Swedish developmnent environment\n- **api-no.wellonfhir.se/{{tenant}}/1.0/R4**   - Norwegian development environment\n```\n\n tenant is a stable identifier for the organization\n\nBoth Requires [authentication](./get-started.html#authentication-and-security)\n\n\nClient → WOF-PORTAL:\n\n\n\n```mermaid\n%%{init: {'theme':'neutral','securityLevel':'loose','fontFamily':'Inter, Arial, sans-serif','sequence': {'diagramMarginX': 30, 'diagramMarginY': 20, 'actorMargin': 220, 'width': 180, 'messageMargin': 32, 'mirrorActors': false, 'wrap': true}}}%%sequenceDiagram\n    participant Client as Scheduling Client\n    participant Auth as Auth Endpoint\n    participant Portal as WOF Portal API\n\n    Note over Client,Portal: base = {{baseUrl}}/{{tenant}}/{{apiVersion}}/R4\n\n    %% System token (from DemoOris.rest)\n    Client ->> Auth: POST {{base}}/auth/system-token\n    Note over Client,Auth: Header: X-ApiKey {{apiKey}}\n    Auth -->> Client: access_token (system)\n\n    %% HealthcareService\n    Client ->> Portal: GET {{base}}/fhir/HealthcareService\n    Client ->> Portal: GET {{base}}/fhir/HealthcareService/{{healthcareServiceId}}\n    Client ->> Portal: GET {{base}}/fhir/HealthcareService/{{healthcareServiceId}}/$get-offers-context
?includeActivityDefinitionPortal={{boolean}}
&includePractitionerRolePortal={{boolean}}\n\n %% Root operation\n Client ->> Portal: GET {{base}}/fhir/$get-offers-context
?includeActivityDefinitionPortal={{boolean}}
&includeHealthcareServicePortal={{boolean}}
&includePractitionerRolePortal={{boolean}}\n\n %% ActivityDefinition\n Client ->> Portal: GET {{base}}/fhir/ActivityDefinition\n Client ->> Portal: GET {{base}}/fhir/ActivityDefinition/{{activityDefinitionId}}\n Client ->> Portal: GET {{base}}/fhir/ActivityDefinition/{{activityDefinitionId}}/$get-offers-context
?includeActivityDefinitionPortal={{boolean}}
&includeHealthcareServicePortal={{boolean}}
&includePractitionerRolePortal={{boolean}}\n Client ->> Portal: GET {{base}}/fhir/ActivityDefinition/{{activityDefinitionId}}/$get-offers-context\n\n %% PractitionerRole\n Client ->> Portal: GET {{base}}/fhir/PractitionerRole\n Client ->> Portal: GET {{base}}/fhir/PractitionerRole/{{practitionerRoleId}}\n Client ->> Portal: GET {{base}}/fhir/PractitionerRole/{{practitionerRoleId}}/$get-offers-context
?includeActivityDefinitionPortal={{boolean}}
&includeHealthcareServicePortal={{boolean}}
&includePractitionerRolePortal={{boolean}}\n\n %% Catalog resources\n Client ->> Portal: GET {{base}}/fhir/Location\n Client ->> Portal: GET {{base}}/fhir/Organization\n\n %% IHE Scheduling find \n Client ->> Portal: GET {{base}}/fhir/Appointment/$find
?start={{find_start}}&end={{find_end}}
&visit-type={{visitTypeSystem}}|{{visitTypeCode}}
&healthcareService=HealthcareService/{{healthcareServiceId}}
&practitionerRole=PractitionerRole/{{practitionerRoleId}}\n```\n\nThis diagram is informational and documents expected client usage.\nIt does not expand or modify the formal FHIR conformance rules.", "name": "WOFPortalCapabilityStatement", "type": null, "experimental": "false", "resourceType": "CapabilityStatement", "title": "WOF Portal Capability Statement", "package_version": "1.0.0", "status": "active", "id": "c49a6e68-f413-46f0-8111-8f855711bc6c", "kind": "capability", "url": "https://canonical.fhir.link/servicewell/wof-portal/CapabilityStatement/WOFPortalCapabilityStatement", "software": { "name": "WOF Portal" }, "version": "1.0.0", "contact": [ { "name": "Service Well AB", "telecom": [ { "value": "https://servicewell.se", "system": "url" }, { "value": "info@servicewell.se", "system": "email" } ] }, { "name": "Service well", "telecom": [ { "use": "work", "value": "info@servicewell.se", "system": "email" } ] } ], "rest": [ { "mode": "server", "resource": [ { "type": "ActivityDefinition", "operation": [ { "name": "get-offers-context", "definition": "https://canonical.fhir.link/servicewell/wof-portal/OperationDefinition/get-offers-context", "documentation": "Returns enriched offer context for presentation and selection. \n Invoked as [base]/ActivityDefinition/[id]/$get-offers-context" } ], "interaction": [ { "code": "read" }, { "code": "search-type" } ], "documentation": "Represents shared service concepts identified by code.", "supportedProfile": [ "https://canonical.fhir.link/servicewell/wof-portal/StructureDefinition/activity-definition-portal" ] }, { "type": "HealthcareService", "operation": [ { "name": "get-offers-context", "definition": "https://canonical.fhir.link/servicewell/wof-portal/OperationDefinition/get-offers-context", "documentation": "Returns enriched offer context for presentation and selection. \nInvoked as [base]/HealthcareService/[id]/$get-offers-context" } ], "interaction": [ { "code": "read" }, { "code": "search-type" } ], "documentation": "Represents where healthcare services are performed.", "supportedProfile": [ "https://canonical.fhir.link/servicewell/wof-portal/StructureDefinition/healthcare-service-portal" ] }, { "type": "PractitionerRole", "operation": [ { "name": "get-offers-context", "definition": "https://canonical.fhir.link/servicewell/wof-portal/OperationDefinition/get-offers-context", "documentation": "Returns enriched offer context for presentation and selection. \nInvoked as [base]/PractitionerRole/[id]/$get-offers-context" } ], "interaction": [ { "code": "read" }, { "code": "search-type" } ], "searchParam": [ { "name": "service", "type": "reference", "documentation": "Filter by PractitionerRole.service (Reference to HealthcareService)." } ], "documentation": "Represents practitioners acting in specific operational and financial contexts.", "supportedProfile": [ "https://canonical.fhir.link/servicewell/wof-portal/StructureDefinition/practitioner-role-portal" ] }, { "type": "Patient", "interaction": [ { "code": "read" }, { "code": "search-type" } ], "searchParam": [ { "name": "identifier", "type": "token", "documentation": "Search by personal number using system|value." } ], "documentation": "Represents patients within the WOF Portal, conforming to the PortalPatient profile.", "supportedProfile": [ "https://canonical.fhir.link/servicewell/wof-portal/StructureDefinition/portal-patient", "http://hl7.se/fhir/ig/base/StructureDefinition/SEBasePatient" ] }, { "type": "Organization", "interaction": [ { "code": "read" }, { "code": "search-type" } ], "searchParam": [ { "name": "_id", "type": "token", "documentation": "Search by Organization resource id." }, { "name": "identifier", "type": "token", "documentation": "Search by organization number using system|value." } ], "documentation": "Organizations in WOF Portal MAY conform to multiple profiles, representing different organizational roles.\n\nServiceProvider represents the top-level owning organization (tenant) within the platform.\nBillingOrganization represents financial responsibility and ownership of invoicing and reporting.\n\nOrganizations are not exposed as searchable catalogs.\nThey are resolved using stable identifiers only:\n- resource id\n- organization number (identifier)\n\nClients MAY filter by profile when needed (e.g. using _profile),\nbut profile-based filtering is not required for lookup by id or identifier.", "supportedProfile": [ "https://canonical.fhir.link/servicewell/wof-portal/StructureDefinition/service-provider-portal" ] }, { "type": "Appointment", "operation": [ { "name": "find", "definition": "https://canonical.fhir.link/servicewell/wof-portal/OperationDefinition/FindAppointments", "documentation": "Search for available appointment opportunities using $find (IHE ITI Scheduling)." }, { "name": "book", "definition": "https://canonical.fhir.link/servicewell/wof-portal/OperationDefinition/BookAppointment", "documentation": "Create, modify, or cancel an appointment using $book (IHE ITI Scheduling)." } ], "interaction": [ { "code": "read" }, { "code": "search-type" } ], "searchParam": [ { "name": "actor", "type": "reference", "documentation": "Filter appointments by participant actor (e.g., HealthcareService/{id})." } ], "documentation": "Appointment access in WOF Portal.\n\n- `PortalAppointment` — represents a booked appointment in a patient context.\n- `PortalAvailableAppointment` — represents an available appointment returned by `$find`.\n\nSupports filtering by actor (e.g., HealthcareService/{id}) and IHE Scheduling operations.", "supportedProfile": [ "https://canonical.fhir.link/servicewell/wof-portal/StructureDefinition/portal-appointment", "https://canonical.fhir.link/servicewell/wof-portal/StructureDefinition/portal-available-appointment" ] }, { "type": "Location", "interaction": [ { "code": "search-type" } ], "searchParam": [ { "name": "physical-type", "type": "token", "documentation": "Filter by Location.physicalType (e.g., Area)." } ], "documentation": "Portal-scoped locations used as areas. Supported interaction: search." } ], "operation": [ { "name": "getOffersContext", "definition": "https://canonical.fhir.link/servicewell/wof-portal/OperationDefinition/get-offers-context", "documentation": "Returns enriched offer context for presentation and selection. Invoked as [base]/$get-offers-context" } ] } ] }