Swedish Healthcare Service - Health Condition Description
0.1.0 - CI Build
Sweden
Swedish Healthcare Service - Health Condition Description - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
This guide covers deployment, configuration, and operational procedures for implementing the Health Condition Description services.
Consumer Systems:
Producer Systems:
Firewall Rules:
Bandwidth:
Certificates:
HSA Registration:
Service Platform URLs:
# National Aggregating Service
national.endpoint=https://service-platform.inera.se/clinicalprocess/healthcond/description/GetCareDocumentation/3
national.hsaid=5565594230
# Regional Aggregating Service (example)
regional.endpoint=https://regional-platform.example.se/clinicalprocess/healthcond/description/GetCareDocumentation/3
regional.hsaid=SE2321000016-0000
# Direct Source System (example)
source.endpoint=https://source-system.example.se/clinicalprocess/healthcond/description/GetCareDocumentation/3
source.hsaid=SE2321000016-SYS1
# Connection timeout (milliseconds)
connection.timeout=5000
# Read timeout (milliseconds)
read.timeout=30000
# Aggregator timeout (longer for multiple systems)
aggregator.timeout=60000
# Maximum retry attempts
max.retries=3
# Initial retry delay (milliseconds)
retry.delay.initial=1000
# Retry delay multiplier (exponential backoff)
retry.delay.multiplier=2.0
# Maximum retry delay (milliseconds)
retry.delay.max=30000
Java KeyStore Example:
# KeyStore location
keystore.path=/etc/certs/consumer-keystore.jks
keystore.password=${KEYSTORE_PASSWORD}
# TrustStore location
truststore.path=/etc/certs/truststore.jks
truststore.password=${TRUSTSTORE_PASSWORD}
# Certificate alias
cert.alias=consumer-cert-2024
Windows Certificate Store Example:
<configuration>
<system.serviceModel>
<client>
<endpoint>
<identity>
<certificateReference findValue="Consumer System 2024"
storeName="My"
storeLocation="LocalMachine"
x509FindType="FindBySubjectName"/>
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
WSDL Location:
https://[producer-domain]/clinicalprocess/healthcond/description/GetCareDocumentation/3?wsdl
Service Binding:
<service name="GetCareDocumentationService">
<port name="GetCareDocumentationPort"
binding="tns:GetCareDocumentationBinding">
<soap:address location="https://source-system.example.se/GetCareDocumentation/3"/>
<wsa:Address>https://source-system.example.se/GetCareDocumentation/3</wsa:Address>
</port>
</service>
Connection Pool:
# Connection pool size
db.pool.min=10
db.pool.max=100
# Connection timeout
db.connection.timeout=5000
# Query timeout
db.query.timeout=25000
Indexes: Ensure indexes on:
EI Update Endpoint:
ei.endpoint=https://engagement-index.inera.se/update
ei.hsaid=ENGAGEMENT-INDEX-HSAID
ei.update.batch.size=100
ei.update.interval=60000
Update Trigger Configuration:
-- Trigger to queue EI updates
CREATE TRIGGER ei_update_trigger
AFTER INSERT OR UPDATE ON care_documentation
FOR EACH ROW
BEGIN
INSERT INTO ei_update_queue (patient_id, domain, action, timestamp)
VALUES (NEW.patient_id, 'CareDocumentation', 'UPDATE', NOW());
END;
Health Check Endpoint:
GET /health
Response: 200 OK
Session Affinity:
Example nginx Configuration:
upstream care_doc_backend {
server backend1.example.com:443;
server backend2.example.com:443;
# Health check
check interval=10000 rise=2 fall=3 timeout=5000;
}
server {
listen 443 ssl;
server_name service-platform.example.se;
ssl_certificate /etc/certs/server.crt;
ssl_certificate_key /etc/certs/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
location /clinicalprocess/healthcond/description/ {
proxy_pass https://care_doc_backend;
proxy_ssl_verify on;
proxy_ssl_trusted_certificate /etc/certs/ca-bundle.crt;
proxy_read_timeout 60s;
}
}
Subject Fields:
CN=System Name
O=Organization Name
C=SE
Key Usage:
Extended Key Usage:
Validity:
Key Metrics to Monitor:
| Metric | Threshold | Alert Level |
|---|---|---|
| Availability | < 99.5% | Critical |
| Response Time (p95) | > 10 sec | Warning |
| Response Time (p95) | > 27 sec | Critical |
| Error Rate | > 5% | Warning |
| Error Rate | > 10% | Critical |
| Timeout Rate | > 2% | Warning |
| Certificate Expiry | < 90 days | Warning |
| Certificate Expiry | < 30 days | Critical |
Minimum Log Levels:
Required Log Entries:
Per Request:
[timestamp] [request-id] [service] [operation] [patient-id] [user-id] [result-code] [duration-ms]
Example:
2024-10-27T14:32:15.123Z REQ-2024-123456 GetCareDocumentation GetCareDocumentation 197001011234 USER-5678 OK 1234
Error Logging:
[timestamp] [request-id] [ERROR] [error-code] [message] [stack-trace]
Prometheus Metrics:
# Service availability
service_up{service="GetCareDocumentation"} 1
# Request duration histogram
service_request_duration_seconds{service="GetCareDocumentation",quantile="0.95"} 5.2
# Error counter
service_errors_total{service="GetCareDocumentation",error_code="TIMEOUT"} 12
Example Prometheus Configuration:
scrape_configs:
- job_name: 'care-documentation-service'
scrape_interval: 30s
static_configs:
- targets: ['producer1.example.com:9090']
metrics_path: '/metrics'
Every access must log:
Structured Log Example:
{
"timestamp": "2024-10-27T14:32:15.123Z",
"requestId": "REQ-2024-123456",
"service": "GetCareDocumentation",
"user": {
"id": "197001011111",
"name": "Dr. Anna Andersson",
"hsaId": "SE2321000016-1234-DOC001",
"organization": "Karolinska"
},
"patient": {
"id": "197001011234",
"idType": "1.2.752.129.2.1.3.1"
},
"purpose": "CARE",
"result": "OK",
"dataReturned": {
"recordCount": 15,
"systems": ["SE2321000016-SYS1", "SE2321000016-SYS2"]
},
"blocked": false,
"consentChecked": true
}
Severity Levels:
P1 - Critical:
P2 - High:
P3 - Medium:
P4 - Low:
Incident Response Procedure:
Scheduled Maintenance:
Emergency Maintenance:
Consumer (per instance):
Producer (per instance):
Horizontal Scaling:
Vertical Scaling:
Service Access Matrix:
| Role | GetCareDoc | GetDiagnosis | GetAlert | GetFunc |
|---|---|---|---|---|
| Physician | ✓ | ✓ | ✓ | ✓ |
| Nurse | ✓ | ✓ | ✓ | ✓ |
| Administrator | ✓ | ✓ | ✗ | ✗ |
| Patient (self) | ✓ | ✓ | ✓ | ✓ |
Monitor for:
Alert Thresholds:
Issue: Service Unavailable
Symptoms: HTTP 503, Connection Refused
Resolution:
Issue: Slow Response
Symptoms: Timeout, delays
Resolution:
Issue: Authentication Failure
Symptoms: Certificate error, access denied
Resolution: