Dev Reference

Clinical Documentation

Encounter lifecycle, SOAP/APSO notes with versioning, longitudinal problem lists, and ambient-scribe pipeline with full provenance tracking.

Data Classification: Mixed scoping. Encounter, EncounterNote, and all Scribe entities are org-scoped (partition key: OrganizationID). Problem and ProblemList are global with SourceOrganizationID for provenance (no OrganizationID partition — patient-centric across orgs). See Data Model for ownership conventions.

Encounter P0

A clinical visit instance created from a completed Appointment. Tracks lifecycle from planned through finished/cancelled with signing timestamp.

Schema

FieldTypeRequiredPKFKNotes
EncounterIDUUIDYesYes
PatientIDUUIDYesPatient
ProviderIDUUIDYesProvider
AppointmentIDUUIDYesAppointmentFrom Scheduling module
EncounterTypeString(50)Yesannual | acute | follow-up | telehealth | awv
EncounterStatusString(50)Yesplanned | in-progress | finished | cancelled
StartedDateTimeUTCNo
EndedDateTimeUTCNo
SignedDateTimeUTCNoWhen provider signs the note
OrganizationIDUUIDYesOrganizationPartition key
CreatedByUserIDUUIDYesUserAudit
CreatedDateTimeUTCDateTimeUTCYesAudit
UpdatedByUserIDUUIDYesUserAudit
UpdatedDateTimeUTCDateTimeUTCYesAudit
IsDeletedBoolYesSoft-delete

RBAC

Role (Tier)Access
Patient (10)Read own encounters (after note signed)
FrontDesk (30)Read status only
MA / RN (40)Read & update status (in-progress)
Provider (50)Full CRUD on own encounters
PracticeMgr (70)Read all org encounters
EditAMI (90+)Schema management

EncounterNote P0

SOAP or APSO note attached to an encounter. Supports draft/in-review/signed/corrected/retracted lifecycle with semantic versioning.

Schema

FieldTypeRequiredPKFKNotes
EncounterNoteIDUUIDYesYes
EncounterIDUUIDYesEncounter
SignedByUserIDUUIDNoUserSet on signing
NoteFormatString(50)YesSOAP | APSO
SubjectiveTextNoS section
ObjectiveTextNoO section
AssessmentTextNoA section
PlanTextNoP section
NoteStatusString(50)Yesdraft | in-review | signed | corrected | retracted
NoteVersionString(100)YesFormat: break.feature.bug.buildtimestamp
SignedDateTimeUTCNo
OrganizationIDUUIDYesOrganizationPartition key
CreatedByUserIDUUIDYesUserAudit
CreatedDateTimeUTCDateTimeUTCYesAudit
UpdatedByUserIDUUIDYesUserAudit
UpdatedDateTimeUTCDateTimeUTCYesAudit
IsDeletedBoolYesSoft-delete

RBAC

Role (Tier)Access
Patient (10)Read own signed notes
FrontDesk (30)None
MA / RN (40)Read; create draft (scribe-assisted)
Provider (50)Full CRUD on own notes; sign/correct/retract
PracticeMgr (70)Read all org notes
EditAMI (90+)Schema management

Problem P0

A clinical problem/condition on a patient's problem list. Dual-coded (SNOMED CT + ICD-10-CM). Global entity with SourceOrganizationID for provenance.

Schema

FieldTypeRequiredPKFKNotes
ProblemIDUUIDYesYes
PatientIDUUIDYesPatient
ProblemListIDUUIDYesProblemList
FirstAddedByEncounterIDUUIDNoEncounterEncounter where problem was first documented
SnomedCodeString(50)NoSNOMED CT concept ID
Icd10CodeString(50)NoICD-10-CM
DisplayString(100)YesHuman-readable problem name
OnsetDateTimeUTCNo
ResolvedDateTimeUTCNo
ClinicalStatusString(50)Yesactive | inactive | resolved
VerificationStatusString(50)Yesprovisional | confirmed | refuted | entered-in-error
SourceOrganizationIDUUIDYesOrganizationOrg that first documented this problem
CreatedByUserIDUUIDYesUserAudit
CreatedDateTimeUTCDateTimeUTCYesAudit
UpdatedByUserIDUUIDYesUserAudit
UpdatedDateTimeUTCDateTimeUTCYesAudit
IsDeletedBoolYesSoft-delete

RBAC

Role (Tier)Access
Patient (10)Read own problem list
FrontDesk (30)None
MA / RN (40)Read
Provider (50)Full CRUD (add, resolve, refute problems)
PracticeMgr (70)Read
EditAMI (90+)Schema management

ProblemList P0

A 1:1 container per patient holding all Problem entries. Tracks last review and schema version. Global entity with SourceOrganizationID.

Schema

FieldTypeRequiredPKFKNotes
ProblemListIDUUIDYesYes
PatientIDUUIDYesPatient (1:1)One list per patient
LastReviewedByUserIDUUIDNoUser
LastReviewedDateTimeUTCNo
SchemaVersionString(100)Yes
SourceOrganizationIDUUIDYesOrganizationOrg that created the list
CreatedByUserIDUUIDYesUserAudit
CreatedDateTimeUTCDateTimeUTCYesAudit
UpdatedByUserIDUUIDYesUserAudit
UpdatedDateTimeUTCDateTimeUTCYesAudit
IsDeletedBoolYesSoft-delete

RBAC

Role (Tier)Access
Patient (10)Read own
FrontDesk (30)None
MA / RN (40)Read
Provider (50)Read & review (set LastReviewed)
PracticeMgr (70)Read
EditAMI (90+)Schema management

ScribeSession P0

An ambient-scribe recording session attached to an encounter. Captures consent, audio storage, language, and session lifecycle.

Schema

FieldTypeRequiredPKFKNotes
ScribeSessionIDUUIDYesYes
EncounterIDUUIDYesEncounter
StartedByUserIDUUIDYesUser
ConsentCapturedBoolYesMust be true to proceed
ConsentMethodString(50)Yesverbal-recorded | written | portal-pre-consent
StartedDateTimeUTCYes
EndedDateTimeUTCNo
AudioStorageUrlStringNoBlob storage URI
AudioRetentionDaysIntYesDefault 365, max 3650
LanguageCodeString(50)YesBCP-47 (e.g. en-US, es-MX)
SessionStatusString(50)Yesrecording | processing | ready | failed
OrganizationIDUUIDYesOrganizationPartition key
CreatedByUserIDUUIDYesUserAudit
CreatedDateTimeUTCDateTimeUTCYesAudit
UpdatedByUserIDUUIDYesUserAudit
UpdatedDateTimeUTCDateTimeUTCYesAudit
IsDeletedBoolYesSoft-delete

RBAC

Role (Tier)Access
Patient (10)None (audio is clinician-side)
FrontDesk (30)None
MA / RN (40)Start/stop session (scribe role)
Provider (50)Full CRUD on own sessions
PracticeMgr (70)Read all org sessions
EditAMI (90+)Schema management

ScribeUtterance P0

An individual ASR-transcribed speech segment within a scribe session, with speaker diarization and confidence scoring.

Schema

FieldTypeRequiredPKFKNotes
ScribeUtteranceIDUUIDYesYes
ScribeSessionIDUUIDYesScribeSession
SpeakerUserIDUUIDNoUserOptional; null for patient/family/unknown
SpeakerLabelString(50)Yesclinician | patient | family | staff | unknown
StartOffsetMillisecondsIntYesOffset from session start
EndOffsetMillisecondsIntYes
TranscriptTextYesASR output text
LanguageCodeString(50)YesBCP-47
ConfidenceDecimalYes0.0000 - 1.0000
OrganizationIDUUIDYesOrganizationPartition key
CreatedByUserIDUUIDYesUserAudit
CreatedDateTimeUTCDateTimeUTCYesAudit
UpdatedByUserIDUUIDYesUserAudit
UpdatedDateTimeUTCDateTimeUTCYesAudit
IsDeletedBoolYesSoft-delete

RBAC

Role (Tier)Access
Patient (10)None
FrontDesk (30)None
MA / RN (40)Read (scribe role)
Provider (50)Read own session utterances
PracticeMgr (70)Read all org utterances
EditAMI (90+)Schema management

ScribeStructuredOutput P0

An LLM-generated structured proposal (note section, problem add/resolve, medication change, etc.) derived from utterances. Full provenance: links to source utterance range, model name/version, and DSI flag per HTI-1.

Schema

FieldTypeRequiredPKFKNotes
ScribeStructuredOutputIDUUIDYesYes
ScribeSessionIDUUIDYesScribeSession
EvidenceUtteranceFromIDUUIDYesScribeUtteranceStart of utterance range
EvidenceUtteranceToIDUUIDYesScribeUtteranceEnd of utterance range
OutputKindString(50)Yesnote-section | problem-add | problem-resolve | medication-change | allergy | order | vital
NoteSectionString(50)NoS | O | A | P (when OutputKind = note-section)
ProposedJsonTextYesStructured output payload
ModelNameString(100)YesLLM identifier for DSI transparency
ModelVersionString(100)Yes
ConfidenceDecimalYes0.0000 - 1.0000
WrittenBackBoolYesTrue after accepted and written to target entity
WrittenBackEntityIDUUIDNoPK of the target entity (Problem, EncounterNote, etc.)
OrganizationIDUUIDYesOrganizationPartition key
CreatedByUserIDUUIDYesUserAudit
CreatedDateTimeUTCDateTimeUTCYesAudit
UpdatedByUserIDUUIDYesUserAudit
UpdatedDateTimeUTCDateTimeUTCYesAudit
IsDeletedBoolYesSoft-delete

RBAC

Role (Tier)Access
Patient (10)None
FrontDesk (30)None
MA / RN (40)Read
Provider (50)Read & review (accept/reject/edit) own session outputs
PracticeMgr (70)Read all org outputs
EditAMI (90+)Schema management

ScribeReviewState P0

The clinician's review decision on a ScribeStructuredOutput. Immutable audit record of accept/reject/edit actions.

Schema

FieldTypeRequiredPKFKNotes
ScribeReviewStateIDUUIDYesYes
ScribeStructuredOutputIDUUIDYesScribeStructuredOutput
ReviewerUserIDUUIDYesUser
ReviewActionString(50)Yesaccept | accept-edited | reject | defer | undo
EditedJsonTextNoModified payload (when accept-edited)
ReviewerCommentTextNo
ReviewedDateTimeUTCYes
OrganizationIDUUIDYesOrganizationPartition key
CreatedByUserIDUUIDYesUserAudit
CreatedDateTimeUTCDateTimeUTCYesAudit
UpdatedByUserIDUUIDYesUserAudit
UpdatedDateTimeUTCDateTimeUTCYesAudit
IsDeletedBoolYesSoft-delete

RBAC

Role (Tier)Access
Patient (10)None
FrontDesk (30)None
MA / RN (40)Read
Provider (50)Create & read own reviews
PracticeMgr (70)Read all org reviews
EditAMI (90+)Schema management

Trust Tier Assignments

Trust tiers govern the level of authentication and authorization required to read or write each entity. tier-1 = patient-self / public-record; tier-2 = clinician of record; tier-3 = privileged role (admin, compliance officer, break-glass).

EntityReadWriteNotes
Encountertier-2tier-2Patient-self (tier-1) via portal; outside-org access via authorization-chain only
EncounterNote (signed)tier-1tier-2Patient sees signed notes in portal
EncounterNote (draft)tier-2tier-2Drafts are clinician-only until signed
Problemtier-1tier-2Patient sees their own; cross-org reads via authorization-chain
ProblemListtier-1tier-2Same as Problem
ScribeSessiontier-2tier-2Audio storage; never patient-readable directly (transcript only)
ScribeUtterancetier-2tier-2Patient-readable transcript section behind tier-1 once note is signed
ScribeStructuredOutputtier-2tier-2Reviewable by clinician of record only
ScribeReviewStatetier-3tier-2Compliance reviews require tier-3

RBAC Permission Thresholds

RoleCapabilities
Clinician (MD / DO / PA / NP)Start/end scribe; review proposals; sign EncounterNote; write-back to global Problem/ProblemList/Allergy/Medication; retract within 24h
RN / MAStart scribe (rooming); enter vitals; propose intake structured output; cannot sign EncounterNote
Front-desk staffRead EncounterNote (signed only) for scheduling/check-out context; no write capability
Compliance OfficerRead-only on all entities including drafts and reviewer states; access audited as tier-3
Practice AdminConfigure templates, retention policies, scribe consent UX strings; cannot modify clinical content
Patient (as user)Read signed EncounterNote and own ProblemList via portal; flag-as-incorrect workflow but no direct edit
Cross-org clinician (referral / break-glass)Read global Problem/ProblemList behind authorization-chain audit; no write to source-org clinical record

FK Relationship Diagram

erDiagram
    Patient ||--o{ Encounter : "visits"
    Provider ||--o{ Encounter : "conducts"
    Appointment ||--|| Encounter : "creates"
    Encounter ||--o{ EncounterNote : "documented by"
    User ||--o| EncounterNote : "signs"
    Patient ||--|| ProblemList : "has"
    ProblemList ||--o{ Problem : "contains"
    Encounter ||--o| Problem : "first added in"
    Encounter ||--o{ ScribeSession : "recorded during"
    User ||--o{ ScribeSession : "started by"
    ScribeSession ||--o{ ScribeUtterance : "transcribed into"
    User ||--o| ScribeUtterance : "spoken by"
    ScribeSession ||--o{ ScribeStructuredOutput : "generates"
    ScribeUtterance ||--o{ ScribeStructuredOutput : "evidence from"
    ScribeUtterance ||--o{ ScribeStructuredOutput : "evidence to"
    ScribeStructuredOutput ||--o{ ScribeReviewState : "reviewed as"
    User ||--o{ ScribeReviewState : "reviewed by"
  

Scribe Provenance Pipeline

Every AI-generated clinical proposal maintains a full chain of provenance from raw audio to the final written-back entity.

graph TD
    A[Audio Stream] --> B[ScribeSession]
    B --> C[ASR Engine]
    C --> D[ScribeUtterance 1..N]
    D --> E[LLM Structured Extraction]
    E --> F[ScribeStructuredOutput]
    F -->|ModelName + ModelVersion| G[DSI Transparency Label]
    F -->|EvidenceUtteranceFrom/To| D
    F --> H{Clinician Review}
    H -->|accept| I[ScribeReviewState: accept]
    H -->|accept-edited| J[ScribeReviewState: accept-edited]
    H -->|reject| K[ScribeReviewState: reject]
    H -->|defer| L[ScribeReviewState: defer]
    I --> M[Write-back to EncounterNote / Problem / etc.]
    J --> M
    M -->|WrittenBackEntityID| N[Target Entity]
  

Functional Requirements

  1. P0 The system shall create Encounters from completed Appointments with type, status, and provider linkage.
  2. P0 The system shall support SOAP and APSO note formats with draft/in-review/signed/corrected/retracted lifecycle.
  3. P0 The system shall version EncounterNotes using break.feature.bug.buildtimestamp format, preserving all prior versions.
  4. P0 The system shall maintain a longitudinal ProblemList per patient (1:1) with SNOMED CT + ICD-10-CM dual coding.
  5. P0 The system shall track Problem verification status (provisional, confirmed, refuted, entered-in-error) and clinical status (active, inactive, resolved).
  6. P0 The system shall capture patient consent (verbal-recorded, written, or portal-pre-consent) before starting any ScribeSession.
  7. P0 The system shall transcribe audio into ScribeUtterances with speaker diarization, BCP-47 language codes, and ASR confidence scores.
  8. P0 The system shall generate ScribeStructuredOutputs from utterances with full provenance (evidence utterance range, model name/version, DSI flag).
  9. P0 The system shall require clinician review (accept/accept-edited/reject/defer) of every ScribeStructuredOutput before write-back.
  10. P0 The system shall write back accepted ScribeStructuredOutputs to target entities (EncounterNote, Problem, etc.) and record WrittenBackEntityID.
  11. P1 The system shall support undo of accepted scribe outputs within a configurable window (default 5 minutes).
  12. P1 The system shall enforce audio retention policies (default 365 days, max 3650) with automated purge.
  13. P2 The system shall provide a scribe accuracy dashboard showing accept/reject rates, edit frequency, and confidence calibration per model.

Non-Functional Requirements

icApplication Overrides

Stack, project layout, naming, default and override component bindings for scribe-specific surfaces, versioning with worked example, environment cascade, and RBAC enforcement.

Shared generation map. The IC platform code-gen flow, default bindings, environment cascade, RBAC model, and CLI commands are identical across all modules. See the IC Reference for the canonical shared reference. This section covers only Clinical Documentation-specific content.

Canonical Framings (binding for this module) P0

Clinical Data is Global. The generated DDL for Problem and ProblemList emits no OrganizationID column and instead emits SourceOrganizationID. The scaffold respects DEC-RH-002.
Patients ARE Users. The generated PatientID foreign key references the same primary key as UserID. See DEC-RH-005.
rev.health as the Comprehensive Source. Every code-generated write-back path stamps SourceOrganizationID on the global clinical fact, so the longitudinal record converges across every practice the patient visits on the platform.

Technology Stack P0

The shared platform stack (Cosmos DB, Redis, IC-generated API, Angular 21, SQS+SNS, OpenTelemetry, etc.) is documented in the IC Reference. Module-specific additions:

ConcernChoiceNotes
Backend languageC# / .NET 9icApplication-generated services per IC convention
Object storage (audio)S3 (SSE-KMS, per-tenant Azure Key Vault CMK)ScribeSession.AudioStorageUrl points here; bucket per region
ASR (transcription)Vendor-agnostic; pluggable via IScribeTranscriptionProviderv1 binding: Nabla embedded; alternative: AWS HealthScribe; native fine-tune in P2
LLM (structured extraction)Vendor-agnostic; pluggable via IScribeStructuredExtractionProvider. BAA required.v1 candidates: Anthropic Claude / OpenAI GPT / Google MedLM, all behind BAA + zero-retention agreements
Build / CIAzure DevOpsicApplication generator runs on PR merge to main

LLM/ASR vendor independence: the platform binds against IScribeTranscriptionProvider and IScribeStructuredExtractionProvider interfaces. Swapping vendors is a configuration change, not a code change. Every vendor signs a HIPAA BAA, and contracts include zero-retention clauses where the vendor's terms allow.

Project Directory Layout P0

This module uses a non-standard directory layout; the standard skeleton is documented in the IC Reference.

modules/clinical-doc/
├── ami/
│   ├── encounter.ami.yaml
│   ├── encounter-note.ami.yaml
│   ├── problem.ami.yaml                 (global; no OrganizationID; SourceOrganizationID)
│   ├── problem-list.ami.yaml            (global; no OrganizationID; SourceOrganizationID)
│   ├── scribe-session.ami.yaml
│   ├── scribe-utterance.ami.yaml
│   ├── scribe-structured-output.ami.yaml
│   └── scribe-review-state.ami.yaml
├── api/
│   ├── EncounterController.cs
│   ├── EncounterNoteController.cs
│   ├── ScribeSessionController.cs
│   ├── ScribeReviewController.cs
│   └── ProblemListController.cs
├── domain/
│   ├── Scribe/
│   │   ├── IScribeTranscriptionProvider.cs
│   │   ├── IScribeStructuredExtractionProvider.cs
│   │   ├── ScribeOrchestrator.cs
│   │   └── ScribeWriteBackService.cs
│   └── ClinicalRecord/
│       ├── ProblemListService.cs        (cross-org global write path)
│       └── EvidenceLinkService.cs
├── container-definitions/
│   ├── encounter.json
│   ├── encounter-note.json
│   ├── problem.json                      (no OrganizationID partition; SourceOrganizationID)
│   ├── problem-list.json                 (no OrganizationID partition; SourceOrganizationID)
│   ├── scribe-session.json
│   ├── scribe-utterance.json
│   ├── scribe-structured-output.json
│   ├── scribe-review-state.json
│   └── container-policies.json          (org-scoped containers only)
├── ui-angular/
│   ├── ic-ng21-clindoc-encounter-shell/
│   ├── ic-ng21-clindoc-previsit-briefing/
│   ├── ic-ng21-clindoc-soap-editor/
│   ├── ic-ng21-clindoc-apso-editor/
│   ├── ic-ng21-scribe-audio-capture/
│   ├── ic-ng21-scribe-transcript-viewer/
│   ├── ic-ng21-scribe-review-panel/
│   ├── ic-ng21-scribe-writeback-action/
│   ├── ic-ng21-scribe-evidence-link-player/
│   └── ic-ng21-clindoc-version-diff/
├── tests/
│   ├── unit/
│   ├── integration/
│   └── e2e-cypress/
└── ic-application.json                  (generator manifest)

Clinical Documentation component naming

For this module: ic-ng21-clindoc-* for general clinical-documentation surfaces and ic-ng21-scribe-* for scribe-specific surfaces.

Domain-Specific Override Bindings (Scribe surfaces) P1

The Clinical Documentation module registers override bindings for fields where the default scalar component is insufficient. These overrides are declared in ic-application.json:

Field / contextOverride ComponentWhy override
ScribeSession (any field) on the encounter shellic-ng21-scribe-audio-captureAudio capture is a stateful media component; the default scalar bindings cannot drive the WebRTC + consent flow
ScribeUtterance list per sessionic-ng21-scribe-transcript-viewerDiarized transcript with click-to-play; the default list binding does not provide the audio scrubber
ScribeStructuredOutput list (review queue)ic-ng21-scribe-review-panelReview queue with accept/edit/reject actions and inline evidence playback; replaces the generic table binding
ScribeStructuredOutput (single proposal)ic-ng21-scribe-writeback-actionWrite-back action button with destination preview (e.g., "Add to Problem List") and confirmation modal
EncounterNote.SubjectiveText + ObjectiveText + AssessmentText + PlanTextic-ng21-clindoc-soap-editor or ic-ng21-clindoc-apso-editorLayout-aware composite editor with per-section evidence-link sidebar; selected by clinician-pref
EvidenceUtteranceFromID + EvidenceUtteranceToIDic-ng21-scribe-evidence-link-playerInline 5-second audio player keyed by utterance range
EncounterNote.NoteVersionString50 on history viewic-ng21-clindoc-version-diffSide-by-side diff of two note versions
Pre-visit briefing surface (composite)ic-ng21-clindoc-previsit-briefingAggregated read of global Problem/ProblemList/Allergy/Medication/Lab + outside-records summary

DDL Example — Cosmos Container Mapping P0

Generated from problem-list.ami.yaml. Note the absence of OrganizationID in the partition key and the presence of SourceOrganizationID per DEC-RH-002.

// container-definitions/global-clinical-facts.json (generated; do not hand-edit)
{
  "container": "global-clinical-facts",
  "partitionKey": { "paths": ["/PatientID"], "kind": "Hash" },
  "indexingPolicy": {
    "includedPaths": [
      { "path": "/PatientID/?", "indexes": [{ "kind": "Hash", "dataType": "String", "precision": -1 }] },
      { "path": "/SchemaVersionString50/?", "indexes": [{ "kind": "Range", "dataType": "String", "precision": -1 }] },
      { "path": "/SourceOrganizationID/?", "indexes": [{ "kind": "Hash", "dataType": "String", "precision": -1 }] }
    ],
    "excludedPaths": ["/\"DeletedDateTimeUTC\"/?"]
  },
  "entities": ["Problem", "ProblemList"]
}

// No partition-key isolation on OrganizationID for global container;
// access is enforced at application layer via read-access audit
// and authorization-chain trace (DEC-RH-007).

Contrast with the org-scoped encounter_note:

// container-definitions/org-encounter.json (generated)
{
  "container": "org-encounter",
  "partitionKey": { "paths": ["/OrganizationID"], "kind": "Hash" },
  "indexingPolicy": {
    "includedPaths": [
      { "path": "/OrganizationID/?", "indexes": [{ "kind": "Hash", "dataType": "String", "precision": -1 }] },
      { "path": "/EncounterID/?", "indexes": [{ "kind": "Hash", "dataType": "String", "precision": -1 }] },
      { "path": "/UpdatedDateTimeUTC/?", "indexes": [{ "kind": "Range", "dataType": "String", "precision": -1 }] }
    ],
    "excludedPaths": ["/\"DeletedDateTimeUTC\"/?"]
  },
  "entities": ["Encounter", "EncounterNote", "EncounterChiefComplaint"]
}

// Org-scoped container: partition-key isolation on /OrganizationID ensures
// each practice sees only its own encounter data.

Versioning — Worked Example for ProblemList Schema Bump P0

IC convention: break.feature.bug.buildtimestamp. break increments on incompatible changes (column drop or rename, type narrowing); feature increments on additive changes (new column, new index); bug increments on bug-fix-only churn; buildtimestamp is the UTC build clock.

Suppose ProblemList ships at v1.0.0.20270115T1200Z. A subsequent feature adds a PatientReviewedDateTimeUTC field to record when the patient last reviewed their own list. This is an additive change.

StepActionResulting NoteVersionString50
1Baseline1.0.0.20270115T1200Z
2Add nullable column PatientReviewedDateTimeUTC TIMESTAMPTZ via additive migration1.1.0.20270201T1430Z
3Backfill nulls and create partial index1.1.1.20270202T0915Z (bug-fix-grade tweak; non-additive)
4(Hypothetical) Rename column to PatientReviewedAtDateTimeUTC — a breaking change2.0.0.20270301T1200Z (break increment; v1.x view retained for backwards-compat reads)

The Cosmos DB pattern is to deploy a backwards-compatible container at the previous major (global-clinical-facts-v1) so existing API consumers continue to read the prior shape during the rollover window. The SchemaVersionString50 on each document records the schema active at write time.

Clinical Documentation environment details

StagePurposePromotion gate
DevEngineer-driven; ephemeral DB; mock LLM/ASR providersPR merge to main
QAAutomated end-to-end runs against vendor sandboxes (Nabla sandbox, vendor LLM eval keys)Cypress green + smoke pass
UATDesign-partner clinic dogfooding with synthetic patients; full vendor + BAAManual go from product owner
ProdLive patient data; customer-managed encryption keys; per-region S3 audio bucketsManual go + on-call confirmation

Clinical Documentation RBAC notes

Cross-Module Links

See also: Clinical Documentation walkthrough · IC Reference