CRO PlatformAI-Native CRO OS
Toggle navigationMenu

Reference

Database schema — `cro.*` ERD

The canonical data model. Tables are color-coded by category: regulated tables carry provenance and require a Part 11 signature to promote staging → live. Click any table in the diagram to jump to its details card below, or open `/schema?table=study` to deep link.

Tables

15

Columns

174

Foreign keys

20

Regulated tables

9

Regulated9

Carries created_at / updated_at / created_by / provenance_id. Promotion requires a Part 11 signature.

Staging2

Where agents land their writes. State machine: proposed → reviewing → signed → promoted.

Audit2

Append-only provenance and ops logs. Not part of the regulated write path.

Reference2

External or read-only data we index but do not own.

Entity-relationship diagram of the `cro.*` schema — click a table for detailscroprovenance_eventAuditPKiduuid○study_iduuid·actor_kindtext·actor_idtext○model_providertext○model_idtextFKmodel_version_iduuid·actiontext·subject_kindtext·subject_idtext·retrieved_contextjsonb○reviewer_user_iduuid○signature_iduuid·occurred_attimestamptz·payloadjsonbcrostaging_recordStagingPKiduuid·entity_kindtext○entity_iduuid·agent_idtextFKmodel_version_iduuidFKprovenance_iduuid·stateenum·proposed_statejsonb·created_attimestamptz·updated_attimestamptz·created_byuuidcrosignature_eventRegulatedPKiduuid·user_iduuid·user_display_nametext·intentenum·subject_kindtext·subject_idtext·re_auth_attimestamptz·meaning_of_signaturetext·signed_attimestamptz·created_attimestamptz·updated_attimestamptz·created_byuuidFKprovenance_iduuidcromodel_registry_versionRegulatedPKiduuid·providertext·model_idtext·prompt_hashtext·prompt_versiontext·registered_attimestamptz○retired_attimestamptz·notestext·created_attimestamptz·updated_attimestamptz·created_byuuidFKprovenance_iduuidcrovalidation_evidence_runRegulatedPKiduuid○pr_numberinteger·commit_shatext·evidence_pathsjsonb○signed_by_user_idtext○signed_attimestamptz·created_attimestamptz·updated_attimestamptz·created_byuuidFKprovenance_iduuidcrolive_essential_documentRegulatedPKiduuidFKpromoted_from_staging_iduuidFKsignature_iduuid○study_iduuid·document_typetext·document_titletext·storage_uritext·metadatajsonb·created_attimestamptz·updated_attimestamptz·created_byuuidFKprovenance_iduuidcroapp_logAuditPKiduuid·leveltext·componenttext·messagetextFKprovenance_iduuid·payloadjsonb·logged_attimestamptzcrostudyRegulatedPKiduuid·codetext·sponsortext·phasetext·therapeutic_areatext·indicationtext·statustext·healthtext·executive_summarytext·goalsjsonb·start_datedate·planned_end_datedate·current_forecast_end_datedate·contracted_budgetnumeric·ebv_spentnumeric·eac_budgetnumeric·currencytext·created_attimestamptz·updated_attimestamptz·created_byuuidFKprovenance_iduuidcrostudy_kpiRegulatedPKiduuidFKstudy_iduuid○labeltext○valuetext○deltatext○delta_directiontext○thresholdtext·positioninteger·created_attimestamptz·updated_attimestamptz·created_byuuidFKprovenance_iduuidcrostudy_milestoneRegulatedPKiduuidFKstudy_iduuid○nametext○planned_datedate○actual_or_forecast_datedate○statustext○positioninteger·created_attimestamptz·updated_attimestamptz·created_byuuidFKprovenance_iduuidcrostudy_riskRegulatedPKiduuidFKstudy_iduuid○titletext○ownertext○severitytext○mitigationtext○statustext·created_attimestamptz·updated_attimestamptz·created_byuuidFKprovenance_iduuidcrostudy_resourceRegulatedPKiduuidFKstudy_iduuid○roletext○headcountinteger○ftenumeric○rate_per_monthnumeric·created_attimestamptz·updated_attimestamptz·created_byuuidFKprovenance_iduuidcrovector_documentReferencePKiduuid·source_kindtext·source_uritext·chunk_indexinteger·contenttext·embeddingjsonb·metadatajsonb·created_attimestamptz·updated_attimestamptzcrosponsor_requestStagingPKiduuid·sponsor_idtext○study_iduuid·subjecttext·bodytext·prioritytext·statustextFKprovenance_iduuid·created_attimestamptz·updated_attimestamptz·created_byuuidauthusersReferencePKiduuid○emailtext○encrypted_passwordtext○email_confirmed_attimestamptz○raw_app_meta_datajsonb○raw_user_meta_datajsonb○last_sign_in_attimestamptz·created_attimestamptz·updated_attimestamptz
LegendRegulatedStagingAuditReferencePKprimary keyFKforeign key

Table reference

9 of 15 tables shown (Regulated only)

cro

signature_event

Append-only 21 CFR Part 11 signatures. Every promotion staging→live requires one row here. Carries re-auth timestamp and meaning-of-signature text.

Regulated
ColumnTypeKeyReferencesNotes
iduuidPK—
user_iduuidrequired—
user_display_nametextrequired—
intentenumrequired—signature_intent enum
subject_kindtextrequired—
subject_idtextrequired—
re_auth_attimestamptzrequired—
meaning_of_signaturetextrequired—
signed_attimestamptzrequired—
created_attimestamptzrequired—
updated_attimestamptzrequired—
created_byuuidrequired—
provenance_iduuidFK→ cro.provenance_event

cro

model_registry_version

One row per (provider × model_id × prompt_hash). CI fails if a prompt diff lands without a registry row. Powers /models console and provenance joins.

Regulated
ColumnTypeKeyReferencesNotes
iduuidPK—
providertextrequired—
model_idtextrequired—
prompt_hashtextrequired—
prompt_versiontextrequired—
registered_attimestamptzrequired—
retired_attimestamptznullable—
notestextrequired—
created_attimestamptzrequired—
updated_attimestamptzrequired—
created_byuuidrequired—
provenance_iduuidFK→ cro.provenance_event

cro

validation_evidence_run

One row per CI run that emitted CSV/CSA validation evidence. Captures pr_number, commit_sha, and the storage paths of evidence artifacts.

Regulated
ColumnTypeKeyReferencesNotes
iduuidPK—
pr_numberintegernullable—
commit_shatextrequired—
evidence_pathsjsonbrequired—
signed_by_user_idtextnullable—
signed_attimestamptznullable—
created_attimestamptzrequired—
updated_attimestamptzrequired—
created_byuuidrequired—
provenance_iduuidFK→ cro.provenance_event

cro

live_essential_document

Promoted-from-staging essential documents (TMF artifacts). One row per signed promotion; links back to both the staging row and the signature event.

Regulated
ColumnTypeKeyReferencesNotes
iduuidPK—
promoted_from_staging_iduuidFK→ cro.staging_record
signature_iduuidFK→ cro.signature_event
study_iduuidnullable—
document_typetextrequired—
document_titletextrequired—
storage_uritextrequired—
metadatajsonbrequired—
created_attimestamptzrequired—
updated_attimestamptzrequired—
created_byuuidrequired—
provenance_iduuidFK→ cro.provenance_event

cro

study

One row per clinical study. Carries sponsor, phase, status, health, timeline, financials, and the executive summary used by /studies and /digest.

Regulated
ColumnTypeKeyReferencesNotes
iduuidPK—
codetextrequired—unique short code
sponsortextrequired—
phasetextrequired—
therapeutic_areatextrequired—
indicationtextrequired—
statustextrequired—
healthtextrequired—green | yellow | red
executive_summarytextrequired—
goalsjsonbrequired—
start_datedaterequired—
planned_end_datedaterequired—
current_forecast_end_datedaterequired—
contracted_budgetnumericrequired—
ebv_spentnumericrequired—
eac_budgetnumericrequired—
currencytextrequired—
created_attimestamptzrequired—
updated_attimestamptzrequired—
created_byuuidrequired—
provenance_iduuidFK→ cro.provenance_event

cro

study_kpi

Headline KPI tiles per study (label, value, delta direction, threshold). Position orders them in the /studies/[id] header strip.

Regulated
ColumnTypeKeyReferencesNotes
iduuidPK—
study_iduuidFK→ cro.study
labeltextnullable—
valuetextnullable—
deltatextnullable—
delta_directiontextnullable—
thresholdtextnullable—
positionintegerrequired—
created_attimestamptzrequired—
updated_attimestamptzrequired—
created_byuuidrequired—
provenance_iduuidFK→ cro.provenance_event

cro

study_milestone

Lifecycle milestones per study (FPI, LPI, LPLV, DBL, CSR). Planned vs. actual/forecast dates drive the at-risk indicator.

Regulated
ColumnTypeKeyReferencesNotes
iduuidPK—
study_iduuidFK→ cro.study
nametextnullable—
planned_datedatenullable—
actual_or_forecast_datedatenullable—
statustextnullable—
positionintegernullable—
created_attimestamptzrequired—
updated_attimestamptzrequired—
created_byuuidrequired—
provenance_iduuidFK→ cro.provenance_event

cro

study_risk

Active and closed risks per study. Severity drives the /risks register heatmap; owner is the named human accountable for mitigation.

Regulated
ColumnTypeKeyReferencesNotes
iduuidPK—
study_iduuidFK→ cro.study
titletextnullable—
ownertextnullable—
severitytextnullable—
mitigationtextnullable—
statustextnullable—
created_attimestamptzrequired—
updated_attimestamptzrequired—
created_byuuidrequired—
provenance_iduuidFK→ cro.provenance_event

cro

study_resource

Role-level resource plan per study (headcount, FTE, monthly rate). Feeds the cost-vs-budget rollups on the /costs console.

Regulated
ColumnTypeKeyReferencesNotes
iduuidPK—
study_iduuidFK→ cro.study
roletextnullable—
headcountintegernullable—
ftenumericnullable—
rate_per_monthnumericnullable—
created_attimestamptzrequired—
updated_attimestamptzrequired—
created_byuuidrequired—
provenance_iduuidFK→ cro.provenance_event