CareNucleus shows privacy-by-design in code: tenant-scoped data access (service-store, secureHandler),
PHI minimization and runtime guards before LLM calls, encrypted EMR refresh tokens when ACCURO_TOKEN_ENCRYPTION_KEY is set,
and graceful AI degradation on errors. The privacy policy and subprocessors materials describe purposes, consent, retention, transfers, and breach themes.
Current product evidence (revised March 23, 2026):
privacyPosture from src/lib/privacy/compliance-posture.ts (no hard-coded "compliant" flags).patient_prefs_{tenantId}_* in src/lib/privacy/consent-metrics.ts (not full clinical consent inventory).dataStore.logAudit accepts actorUserId / actorUserName in details; dashboard merges getAuditEventsByTenant.skipMinimization only in local dev (not production-like); one-time log when using public LLM APIs without Azure OpenAI.
Remaining gaps: production-grade DB + KMS if you promise them contractually; automated retention jobs; pen test; legal sign-off; optional DSAR seed only with CN_PRIVACY_SEED_DEMO=true (non-production).
| Principle | Status | Evidence in CareNucleus | Notes / gaps |
|---|---|---|---|
| 1 — Accountability | Partial | Privacy policy designates a Privacy Officer and accountability for subprocessors (public/legal/PRIVACY-POLICY-CANADA.md §3). API layer centralizes auth, optional audit flags (src/lib/api/secure-handler.ts). |
Ensure a named officer, board-approved privacy program, vendor DPAs, and training records exist outside the repo.
Updated: Dashboard API exposes privacyPosture (derived signals) instead of static compliance flags.
|
| 2 — Identifying purposes | Policy + Partial | Policy tables list purposes for collection (healthcare delivery, AI documentation, billing, security, etc.) — §4.2. Patient preferences API documents consent timestamps (src/app/api/v1/patients/[patientId]/preferences/route.ts). | Confirm in-product notices and customer agreements match policy for each module (voice, fax, outreach, AI interviewer). |
| 3 — Consent | Policy + Partial |
Policy distinguishes express vs implied consent; custodian vs agent roles (§5).
Patient prefs API stores opt-ins and consentRecordedAt (preferences/route.ts).
Privacy dashboard consent KPIs derive from consent-metrics.ts (communication channels — scoped note in privacyPosture.consentMetricsScopeNote).
Related UI types: src/lib/api/dashboard.ts ConsentState.
|
Validate consent UX and custodian workflows per province; AI/audio need explicit paths in runbooks. Dashboard percentages are communication-prefs, not a full clinical consent register. |
| 4 — Limiting collection | Partial |
PHI minimization pipeline before LLM calls (src/lib/ai/clinical-ai-service.ts, src/lib/ai/phi-minimization).
Runtime guard blocks payloads that fail validation (validateLlmPayload).
|
Audit each feature for “nice to have” fields; ensure analytics/logging does not over-collect identifiers. |
| 5 — Limiting use, disclosure, retention | Policy + Partial | Policy §6 (updated subprocessors / cross-border narrative) links to SUBPROCESSORS.html. Tenant-scoped stores; DSAR/breach records persist with other entities via privacy-ops-store.ts. | Infra gap: Same JSON file persistence (.data/store.json in dev) — not a substitute for production DB, legal hold, or automated disposition. Implement retention jobs and secure disposal in target hosting. |
| 6 — Accuracy | Partial |
Policy §7; clinical documentation has authorship, versioning, provenance structures (data-store.ts PatientDocumentRecord).
|
DSAR/correction flows should update authoritative records and EMR writebacks consistently; test edge cases. |
| 7 — Safeguards | Partial |
secureHandler: auth context, CSRF for state-changing methods, rate limiting, optional audit (secure-handler.ts).
EMR refresh tokens: AES-256-GCM when ACCURO_TOKEN_ENCRYPTION_KEY set (emr-token-protection.ts).
AI errors caught; fallback responses (clinical-ai-service.ts).
Startup privacy signals logged (instrumentation.ts + compliance-posture.ts).
|
Policy aligned: §8.2/§8.3 now describe deployment-dependent encryption and hosting (dev JSON vs production targets). Still required for enterprise claims: KMS, field/database encryption scope, backup encryption, RBAC review, pen test. |
| 8 — Openness | Met (docs) | Privacy policy; compliance & privacy marketing pages link to subprocessors, playbook, and this assessment (compliance/page.tsx, privacy/page.tsx); i18n in en.json / fr.json. SUBPROCESSORS.md / .html; policy §6.3 references subprocessors path. | Keep subprocessors list current when vendors change; ensure deployed URL matches customer communications. |
| 9 — Individual access | Partial |
Policy §9 (30-day framing). privacy-dashboard/route.ts: DSAR CRUD on ctx.tenantId; PUT/POST audited with actor fields;
in-app UI src/app/(app)/privacy-dashboard/page.tsx shows privacyPosture caveats.
|
DSAR/breach rows persist via privacy-ops-store.ts; audit tab merges getAuditEventsByTenant.
Optional demo DSARs: env CN_PRIVACY_SEED_DEMO=true (tenant tenant-1 only). Enterprise immutable ledger / ticketing still optional hardening.
|
| 10 — Challenging compliance | Policy + Partial |
Policy: Privacy Officer contact and complaints (§9–10).
Playbook: PRIVACY-OPERATIONS-PLAYBOOK.html.
API: authenticated POST with type: "breach_record" + logAudit on privacy events.
|
Formal intake (ticketing, mailbox SLAs) and OPC filing workflows stay organizational; link playbook from compliance/page.tsx and privacy/page.tsx. |
validateLlmPayload run before send; skipMinimization is blocked outside local dev.AZURE_OPENAI_ENDPOINT; production startup warns via compliance-posture.ts / instrumentation.ts.tenantId; use ctx.tenantId from auth.logAudit maps actorUserId / actorUserName from details to audit event identity fields.secureHandler or equivalent; webhooks use signed handlers — periodic static audit recommended.DATABASE_URL / DB store is primary.privacyPosture API; consent metrics from prefs keys; playbook + subprocessors pages; logAudit actor fields; AI skip-minimization guard.logAudit, getAuditEventsByTenant, custom data keysprivacyPosture, breach POSTCN_PRIVACY_SEED_DEMO, AI, EMR key notes