CareNucleus — PIPEDA alignment assessment (technical)

Document type: Internal technical mapping · Not a legal opinion
Framework: PIPEDA Schedule 1 — Fair Information Principles
Scope: apps/web-carenucleus codebase + published privacy materials
First issued: March 2026 · Last revised: March 23, 2026 (aligned with incremental privacy implementation)

Executive summary

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):

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).

Methodology

Principle-by-principle mapping

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.

Cross-cutting technical topics

AI & cross-border processing

Multi-tenancy

Storage architecture (dev vs prod)

Recommended action checklist

  1. Legal/privacy: Have counsel review privacy policy vs actual hosting, AI providers, and provincial health law roles (custodian/agent).
  2. Subprocessors: Keep SUBPROCESSORS.html current; execute DPAs with providers per policy.
  3. Production infra: Migrate PHI to encrypted managed DB + KMS where promised; backup encryption; pen test.
  4. Done (incremental): Persistent DSAR/breach stores; privacyPosture API; consent metrics from prefs keys; playbook + subprocessors pages; logAudit actor fields; AI skip-minimization guard.
  5. Security testing: Schedule penetration test and dependency scanning; document results for enterprise customers.
  6. AI governance: Monitor guard blocks; prefer Azure OpenAI in Canada for residency-sensitive tenants.

Key file references