{
"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"
} ]
} ]
}