Master Names operations
Internal operations guide for Cadmus Master Names v1.Feature flags
Env overrides (local/dev):
CADMUS_MASTER_NAMES_ENABLED=true|falseCADMUS_MASTER_NAMES_FULL_SSN_ENABLED=true|false
Secrets
Set separately from JWT secrets (never commit):MASTER_NAMES_SSN_ENCRYPTION_KEY— 64 hex chars (AES-256-GCM)MASTER_NAMES_SSN_HMAC_KEY— 64 hex chars (HMAC-SHA256 for match)
SSNEncryptionVersion on write after deploying a new encryption key; re-encrypt gradually via ops job if needed.
Migration
MasterNames, MasterNameSources, MasterNameAgencies, MasterNameUpsertOutbox, MasterNameSyncState, MasterNameBackfillCheckpoint, SensitiveDataAudit. Later migrations add MasterNamePhotos and MasterNameVehicles for attached photos and known vehicles.
Backfill
Outbox recovery
Oasis sync
MasterNameSyncState. Cadmus rows are never deleted when Oasis drops a source — source link is marked inactive.
Cadmus Admin search
CadmusAdmin users can search and edit Cadmus Master Names from Cadmus Admin → Master Names.- Select a concrete organization in the header (not All).
- Ensure
cadmus_master_namesis enabled for that organization. - Search by name (2+ characters on first or last), DOB, SSN last 4 (with another criterion), full SSN, or driver’s license + state.
- Results show masked SSN by default. Full SSN appears only when
cadmus_master_names_full_ssnis on and the user hasmaster_names.view_full_ssn. - Click Open on a result to view the record. Choose Edit to change name, address, phone, DL, or SSN fields, then Save.
Photos and known vehicles
On Open, Cadmus Admin can:- Upload and delete photos (JPEG/PNG/GIF/WebP, max 5 MB; stored like BOLO images, not in the database as varbinary)
- Add and remove known vehicles (plate, state, year/make/model/color)
Sex from MULES
OneNet MULES/NCIC note parsing capturesSEX/M or SEX/F (and DOR CURRENT NAME sex column). Re-import or run the sex backfill script to fill MasterNames.Sex when empty without overwriting existing values.
Rollout checklist
- Migrate tables
- Deploy backend with flags off
- Deploy client/mobile UUID parsers
- Dry-run backfill → review conflicts
- Real backfill for pilot org
- Validate SSN search/view +
SensitiveDataAudit - Oasis sync where configured
- Enable
cadmus_master_namesfor pilot - Confirm Cadmus Admin → Master Names search for the pilot org
- Monitor latency, errors, outbox backlog, conflicts
- Expand org by org
Sensitive audit
SensitiveDataAudit stores encrypted SSN payloads for SSN search/view/create/update/deny events. Do not export raw ciphertext in support bundles without redaction.
Enrich from GoEJail (ops)
One-way batch job reads the local GoEJail database and filestore, then updates Cadmus Master Names for an organization:- Fills Phone and Emergency contact only when those fields are empty
- Creates a Master Name when there is no confident match and the inmate has enough identity (SSN, OLN+state, or name+DOB)
- Copies Mugshot / Mugshot Side photos into Master Name photos (link to Cadmus JMS later)
- Emergency contacts stay as text on the inmate record — they are not created as separate Master Names
--dry-run to apply. Use --skip-photos to update demographics only.
Master Name photo storage (Azure Blob)
Photos are stored in Azure Blob Storage, not on the API local disk (local disk is wiped on App Service revisions).- Container:
uploads(override withMASTER_NAMES_PHOTO_CONTAINER) - Blob key:
master-names/{organizationId}/{photoId}.jpg - Env:
AZURE_STORAGE_CONNECTION_STRING(required in production)