Exposes an organisation's product/service catalog (consultations, procedures, diagnostics, lab tests, packages, and so on) as the FHIR HealthcareService resource, backed by CatalogController/CatalogService. Routes with no :organisationId path segment resolve the organisation from the RBAC-authorized session context; GET /, GET /:id, and the two $ operations additionally accept it via the FHIR organization or provided-by query parameter (mapped onto the RBAC check by an attachOrganisationIdFromQuery middleware before withOrgPermissions runs).
Endpoints
POST /
- Auth:
requireWebAuth - RBAC:
withOrgPermissions, requirePermission - Body: FHIR
HealthcareServiceresource (onlyresourceType: "HealthcareService"is validated; the rest passes through) - Controller:
CatalogController.createProduct - Response:
201: FHIRHealthcareServiceresource (also sets anETag: W/"<version>"header),400: keysmessage,errors
PATCH /:id
- Auth:
requireWebAuth - RBAC:
withOrgPermissions, requirePermission - Params:
id - Body: FHIR
HealthcareServiceresource; anIf-Match: W/"<version>"request header is parsed as the expected version for optimistic concurrency - Controller:
CatalogController.updateProduct - Response:
200: FHIRHealthcareServiceresource (ETagheader set),400: keysmessage,errors
GET /:id
- Auth:
requireWebAuth - RBAC:
withOrgPermissions, requirePermission - Params:
id - Query:
organisationId - Controller:
CatalogController.getProductById - Response:
200: FHIRHealthcareServiceresource (ETagheader set)
GET /
- Auth:
requireWebAuth - RBAC:
withOrgPermissions, requirePermission - Query:
specialityId,kinds,search,supportsInpatient,includeInactive,organization,provided-by,specialty,active,name,kind,code - Controller:
CatalogController.listProducts - Response:
200: FHIRBundleofHealthcareServiceresources,400: keysmessage,errors
POST /$resolve-selection
- Auth:
requireWebAuth - RBAC:
withOrgPermissions, requirePermission - Body: FHIR
Parametersresource withproductItemId(required,valueString) andorganization(optional,valueString, e.g.Organization/<id>) - Controller:
CatalogController.resolveProductOperation - Response:
200: FHIRParametersdescribing the resolved catalog selection (productItemId,name,productKind, pricing amounts,billingItems,includedItems),400: keysmessage
POST /$search-components
- Auth:
requireWebAuth - RBAC:
withOrgPermissions, requirePermission - Body: FHIR
Parametersresource withorganization(required,valueString), and optionalq,specialty/speciality,kinds(comma-separated),includeArchived(valueBoolean),excludePackageId,includeNestedBreakdown(valueBoolean),page,pageSize(valueInteger) - Controller:
CatalogController.searchCatalogOperation - Response:
200: FHIRParameterswithquery,page,pageSize,total, and anitemspart listing the matched catalog items,400: keysmessage