Skip to main content

Patient Chart Service — Service Risk Register

Status: populated Owner: TBD Last updated: 2026-04-18 Companion: Service Template · FAILURE_MODES

1. Risk register

IDRiskLikelihoodImpactSeverityOwnerMitigationResidual
RISK-CHART-01Five-module consolidation data migration corrupts clinical recordsLowCriticalCRITICALPlatform Eng LeadMigration is idempotent; prod snapshot taken immediately before; dry-run validated in staging; row-count reconciliation post-runVery low
RISK-CHART-02Cross-tenant patient data leak via RLS misconfigurationLowCriticalCRITICALDBA + Security LeadMandatory tenant-isolation.spec.ts in CI; RLS on all tables; tenant from JWT only; CRITICAL gate 4Very low
RISK-CHART-03Signed clinical note mutated after signingVery LowCriticalCRITICALTech LeadCHART_NOTE_SIGNED_IMMUTABLE domain error; integration test; addendum-only pattern post-signVery low
RISK-CHART-04NKA rule bypassed — substance allergy added while NKA activeLowHighHIGHTech LeadDomain invariant in Allergy aggregate; integration test for NKA conflict; CHART_NKA_CONFLICT errorLow
RISK-CHART-05AI-assist content inserted into note without NoteAIProvenanceLowHighHIGHTech LeadAcceptAIChunkCommand rejects without provenanceId; CHART_AI_PROVENANCE_MISSING error; integration testLow
RISK-CHART-06Allergy advisory failure causes medication safety riskMediumHighHIGHSRE + Clinical InformaticsAdvisory is fail-open (callers are responsible); alert on advisory error rate; circuit breaker on advisory endpointMedium — callers must implement fail-open correctly
RISK-CHART-07Break-glass without reason allows unauthorized chart accessVery LowCriticalCRITICALTech LeadDomain layer enforces CHART_BREAKGLASS_REASON_MISSING; all break-glass events audited; no overrideVery low
RISK-CHART-08Vitals hard-stop range validation over-blocks legitimate valuesMediumMediumMEDIUMClinical InformaticsPolicy is warn by default; reject requires facility-level config; configurable ranges per facilityLow
RISK-CHART-09Single-service outage impacts all five clinical areasLowHighHIGHSRE≥ 3 replicas; pod disruption budget minAvailable=2; multi-AZ scheduling; HPA; fast pod restartLow
RISK-CHART-10Legacy subject deprecation breaks downstream consumer (medication-service)MediumHighHIGHPlatform EngDual-publish throughout M0→M1; consumer cutover confirmed before legacy deprecation; alert on legacy consumer lagLow
RISK-CHART-11Sensitive-segment policy not enforced for mental-health recordsLowCriticalCRITICALSecurity LeadSensitive-segment check in InvokeBreakGlass and read use cases; CHART_SENSITIVE_NOT_AUTHORIZED error; audit eventVery low
RISK-CHART-12Cosign policy bypassed for resident notesLowHighHIGHClinical InformaticsCHART_NOTE_COSIGN_REQUIRED enforced in domain; pending_cosign sub-state; test coverageLow
RISK-CHART-13Terminology-service unavailability prevents problem/allergy codingMediumMediumMEDIUMSREFail-open: codingPending=true; retry on next edit; terminology-service has its own availability SLOLow
RISK-CHART-14Chart summary fan-out calls cause P95 latency degradationMediumMediumMEDIUMSREPer-dependency circuit breaker; partial summary on dependency failure; async pre-fetch for known patientsMedium
RISK-CHART-15Outbox relay fails silently, downstream consumers miss eventsLowHighHIGHSREChartOutboxLag alert; NATS JetStream at-least-once; outbox relay monitored; alert at > 100 unpublished rowsLow

2. Compliance risks

IDRiskRegulationMitigation
CR-01Patient clinical record inaccessible during outageMoPH data availability99.9 % SLO; DR failover; no single point of failure
CR-02PHI in log outputHIPAA analogue / GDPRPHI-safe logging enforced by CI lint; structured log fields whitelist
CR-03Break-glass access not auditedHIPAA access auditpatient_chart.breakglass.invoked.v1 always emitted; audit-service ingests; 7-year retention
CR-04GDPR erasure fails to redact author PII from notesGDPR Art. 17gdpr.subject_request.received.v1 consumer saga; author PII redacted; clinical content retained per MoPH

3. Migration-specific risks

IDRiskMitigation
MIG-01Vitals grouping heuristic creates incorrect VitalsSet boundariesDefine grouping rule before migration; validate with clinical informatics; QA sampling
MIG-02Legacy ID remapping misses foreign-key chainslegacy_id_map retained 90 days; cross-reference queries during validation
MIG-03Dual-publish produces duplicate events in downstream consumersConsumers deduplicate on sourceEventId; dedup tested in integration suite

4. Risk review cadence

ActivityFrequencyOwner
Full register reviewQuarterlyTech Lead + Compliance Officer
CRITICAL/HIGH risk updateMonthlyService Owner
Post-incident risk additionWithin 5 daysOn-call SRE + Tech Lead
Migration risk reviewBefore each migration phasePlatform Eng Lead