erDiagram
addresses {
UUID id PK
UUID person_id FK
UUID entity_id FK
CHARACTER VARYING line1
CHARACTER VARYING line2
CHARACTER VARYING city
CHARACTER VARYING region
CHARACTER VARYING postal_code
CHARACTER VARYING country
TEXT inserted_at
TEXT updated_at
}
answers {
UUID id PK
UUID question_id FK
UUID person_id FK
TEXT value
TEXT inserted_at
TEXT updated_at
CHARACTER VARYING source
UUID authored_by_person_id FK
}
attestations {
UUID id PK
UUID notation_id FK
CHARACTER VARYING chain
CHARACTER VARYING sha256
CHARACTER VARYING status
CHARACTER VARYING pda
CHARACTER VARYING tx_signature
CHARACTER VARYING firm_wallet
CHARACTER VARYING client_wallet
CHARACTER VARYING recorded_at
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
blobs {
UUID id PK
CHARACTER VARYING storage_key
CHARACTER VARYING content_type
BIGINT byte_size
CHARACTER VARYING sha256_hex
TEXT inserted_at
TEXT updated_at
}
communications {
UUID id PK
UUID project_id FK
CHARACTER VARYING channel
CHARACTER VARYING direction
UUID author_person_id FK
CHARACTER VARYING counterparty
CHARACTER VARYING subject
TEXT body
CHARACTER VARYING source_ref
UUID blob_id FK
CHARACTER VARYING occurred_at
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
contract_reviews {
UUID id PK
UUID notation_id FK
UUID playbook_id FK
UUID document_id FK
CHARACTER VARYING status
TEXT risk_summary
JSONB findings
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
coupons {
UUID id PK
CHARACTER VARYING code
INTEGER discount_percent
BIGINT discount_amount_cents
CHARACTER VARYING product_code
CHARACTER VARYING expires_at
INTEGER max_redemptions
INTEGER redeemed_count
BOOLEAN active
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
credentials {
UUID id PK
UUID person_id FK
UUID jurisdiction_id FK
CHARACTER VARYING license_number
TEXT inserted_at
TEXT updated_at
}
disclosures {
UUID id PK
UUID entity_id FK
UUID project_id FK
CHARACTER VARYING kind
TEXT summary
TEXT inserted_at
TEXT updated_at
}
document_comments {
UUID id PK
UUID review_document_id FK
UUID person_id FK
INTEGER anchor_start
INTEGER anchor_end
TEXT quoted_text
TEXT body
BOOLEAN resolved
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
UUID communication_id FK
}
documents {
UUID id PK
UUID project_id FK
UUID blob_id FK
CHARACTER VARYING filename
CHARACTER VARYING kind
TEXT inserted_at
TEXT updated_at
TEXT source
TEXT source_revision_id
TEXT received_at
TEXT description
CHARACTER VARYING git_commit_oid
}
email_conversation_messages {
UUID id PK
UUID conversation_id FK
CHARACTER VARYING direction
CHARACTER VARYING from_addr
CHARACTER VARYING to_addr
CHARACTER VARYING subject
TEXT body_text
CHARACTER VARYING raw_storage_key
CHARACTER VARYING provider_message_id
CHARACTER VARYING in_reply_to
TEXT command_payload
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
email_conversations {
UUID id PK
CHARACTER VARYING token
CHARACTER VARYING external_email
CHARACTER VARYING external_name
UUID person_id FK
CHARACTER VARYING subject
CHARACTER VARYING status
UUID notation_id FK
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
email_tokens {
UUID id PK
UUID person_id FK
CHARACTER VARYING email
CHARACTER VARYING purpose
CHARACTER VARYING token_hash
CHARACTER VARYING expires_at
CHARACTER VARYING used_at
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
entities {
UUID id PK
CHARACTER VARYING name
UUID entity_type_id FK
UUID jurisdiction_id FK
TEXT inserted_at
TEXT updated_at
CHARACTER VARYING phone
CHARACTER VARYING url
}
entity_billing_profiles {
UUID id PK
UUID entity_id FK
CHARACTER VARYING billing_email
UUID billing_address_id FK
TEXT inserted_at
TEXT updated_at
}
entity_types {
UUID id PK
CHARACTER VARYING name
TEXT inserted_at
TEXT updated_at
}
expunge_records {
UUID id PK
UUID project_id FK
CHARACTER VARYING path
CHARACTER VARYING category
UUID authorized_by_person_id FK
CHARACTER VARYING head_before
CHARACTER VARYING head_after
TEXT note
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
expunge_requests {
UUID id PK
UUID project_id FK
UUID document_id FK
UUID requested_by_person_id FK
CHARACTER VARYING status
TEXT note
UUID resolved_by_person_id FK
UUID expunge_record_id FK
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
filings {
UUID id PK
UUID notation_id FK
CHARACTER VARYING kind
CHARACTER VARYING office
CHARACTER VARYING reference
TEXT summary
CHARACTER VARYING submitted_at
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
git_access_tokens {
UUID id PK
UUID person_id FK
UUID project_id FK
CHARACTER VARYING token_hash
CHARACTER VARYING scope
CHARACTER VARYING expires_at
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
git_repositories {
UUID id PK
CHARACTER VARYING remote_hash
CHARACTER VARYING last_commit_sha
TEXT inserted_at
TEXT updated_at
}
invoice_line_items {
UUID id PK
UUID invoice_id FK
CHARACTER VARYING description
INTEGER quantity
BIGINT unit_price_cents
TEXT inserted_at
TEXT updated_at
}
invoices {
UUID id PK
UUID entity_billing_profile_id FK
CHARACTER VARYING number
CHARACTER VARYING status
BIGINT total_cents
CHARACTER VARYING currency
TEXT inserted_at
TEXT updated_at
}
jurisdictions {
UUID id PK
CHARACTER VARYING name
CHARACTER VARYING code
TEXT inserted_at
TEXT updated_at
CHARACTER VARYING jurisdiction_type
}
letters {
UUID id PK
UUID mailroom_id FK
CHARACTER VARYING direction
CHARACTER VARYING sender
CHARACTER VARYING recipient
TEXT summary
TEXT inserted_at
TEXT updated_at
}
mailrooms {
UUID id PK
CHARACTER VARYING name
UUID address_id FK
TEXT inserted_at
TEXT updated_at
}
notation_clauses {
UUID id PK
UUID notation_id FK
INTEGER position
TEXT body_markdown
UUID authored_by_person_id FK
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
notation_events {
UUID id PK
UUID notation_id FK
CHARACTER VARYING machine_kind
CHARACTER VARYING from_state
CHARACTER VARYING to_state
CHARACTER VARYING condition
TEXT payload
CHARACTER VARYING recorded_at
TEXT inserted_at
TEXT updated_at
}
notations {
UUID id PK
UUID template_id FK
UUID person_id FK
UUID entity_id FK
CHARACTER VARYING state
UUID project_id FK
TEXT inserted_at
TEXT updated_at
CHARACTER VARYING signature_request_id
CHARACTER VARYING delivery
INTEGER discount_pct
BIGINT discount_amount_cents
CHARACTER VARYING discount_reason
CHARACTER VARYING discount_approved_by
CHARACTER VARYING discount_approved_at
}
person_entity_roles {
UUID id PK
UUID person_id FK
UUID entity_id FK
CHARACTER VARYING role
TEXT inserted_at
TEXT updated_at
}
person_project_roles {
UUID id PK
UUID person_id FK
UUID project_id FK
CHARACTER VARYING participation
TEXT inserted_at
TEXT updated_at
}
persons {
UUID id PK
CHARACTER VARYING name
CHARACTER VARYING email
CHARACTER VARYING oidc_subject
TEXT inserted_at
TEXT updated_at
TEXT role
CHARACTER VARYING preferred_language
CHARACTER VARYING title
CHARACTER VARYING phone
CHARACTER VARYING xero_contact_id
}
playbooks {
UUID id PK
UUID entity_id FK
CHARACTER VARYING name
JSONB positions
BOOLEAN active
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
products {
UUID id PK
CHARACTER VARYING code
CHARACTER VARYING display_name
BIGINT list_price_cents
CHARACTER VARYING currency
CHARACTER VARYING cadence
CHARACTER VARYING billing_kind
BOOLEAN active
CHARACTER VARYING xero_item_code
CHARACTER VARYING matter_close_template_code
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
CHARACTER VARYING account_code
CHARACTER VARYING retainer_template_code
}
projects {
UUID id PK
CHARACTER VARYING name
CHARACTER VARYING status
UUID entity_id FK
TEXT inserted_at
TEXT updated_at
CHARACTER VARYING git_initialized_at
CHARACTER VARYING closed_at
TEXT description
UUID staff_dri_person_id FK
UUID client_dri_person_id FK
}
question_translations {
UUID id PK
UUID question_id FK
CHARACTER VARYING locale
TEXT prompt
TEXT help_text
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
questions {
UUID id PK
CHARACTER VARYING code
TEXT prompt
CHARACTER VARYING answer_type
TEXT inserted_at
TEXT updated_at
CHARACTER VARYING audience
}
relationship_logs {
UUID id PK
UUID actor_person_id FK
CHARACTER VARYING subject_type
UUID subject_id
CHARACTER VARYING action
TEXT detail
TEXT inserted_at
TEXT updated_at
}
review_documents {
UUID id PK
UUID notation_id FK
CHARACTER VARYING kind
CHARACTER VARYING title
TEXT body_html
CHARACTER VARYING status
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
sent_emails {
UUID id PK
CHARACTER VARYING recipient
CHARACTER VARYING subject
CHARACTER VARYING sender
CHARACTER VARYING template_slug
TEXT body
CHARACTER VARYING outcome
CHARACTER VARYING sent_at
TEXT inserted_at
TEXT updated_at
CHARACTER VARYING sg_message_id
}
share_issuances {
UUID id PK
UUID entity_id FK
CHARACTER VARYING holder_name
CHARACTER VARYING share_class
BIGINT shares
CHARACTER VARYING issued_at
TEXT inserted_at
TEXT updated_at
}
statute_revisions {
UUID id PK
UUID statute_id FK
TEXT body
CHARACTER VARYING body_sha256
CHARACTER VARYING section_title
CHARACTER VARYING history_note
CHARACTER VARYING observed_at
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
statutes {
UUID id PK
CHARACTER VARYING jurisdiction
CHARACTER VARYING code
CHARACTER VARYING chapter
CHARACTER VARYING chapter_title
CHARACTER VARYING section
CHARACTER VARYING source_url
CHARACTER VARYING status
CHARACTER VARYING first_seen_at
CHARACTER VARYING last_checked_at
CHARACTER VARYING last_changed_at
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
subscriptions {
UUID id PK
UUID person_id
UUID entity_id
UUID project_id
CHARACTER VARYING product_code
CHARACTER VARYING contact_name
CHARACTER VARYING contact_email
CHARACTER VARYING status
CHARACTER VARYING started_at
CHARACTER VARYING last_invoiced_period
INTEGER discount_percent
BIGINT discount_amount_cents
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
templates {
UUID id PK
CHARACTER VARYING code
CHARACTER VARYING title
CHARACTER VARYING respondent_type
TEXT inserted_at
TEXT updated_at
UUID project_id FK
UUID blob_id FK
CHARACTER VARYING form_code
}
xero_invoices {
UUID id PK
UUID project_id FK
CHARACTER VARYING xero_invoice_id
CHARACTER VARYING reference
CHARACTER VARYING status
BIGINT amount_cents
BIGINT amount_paid_cents
CHARACTER VARYING currency
CHARACTER VARYING inserted_at
CHARACTER VARYING updated_at
}
persons ||--o{ addresses : "person_id"
entities ||--o{ addresses : "entity_id"
questions ||--o{ answers : "question_id"
persons ||--o{ answers : "person_id"
persons ||--o{ answers : "authored_by_person_id"
notations ||--o{ attestations : "notation_id"
projects ||--o{ communications : "project_id"
persons ||--o{ communications : "author_person_id"
blobs ||--o{ communications : "blob_id"
notations ||--o{ contract_reviews : "notation_id"
playbooks ||--o{ contract_reviews : "playbook_id"
documents ||--o{ contract_reviews : "document_id"
persons ||--o{ credentials : "person_id"
jurisdictions ||--o{ credentials : "jurisdiction_id"
entities ||--o{ disclosures : "entity_id"
projects ||--o{ disclosures : "project_id"
review_documents ||--o{ document_comments : "review_document_id"
persons ||--o{ document_comments : "person_id"
communications ||--o{ document_comments : "communication_id"
projects ||--o{ documents : "project_id"
blobs ||--o{ documents : "blob_id"
email_conversations ||--o{ email_conversation_messages : "conversation_id"
persons ||--o{ email_conversations : "person_id"
notations ||--o{ email_conversations : "notation_id"
persons ||--o{ email_tokens : "person_id"
entity_types ||--o{ entities : "entity_type_id"
jurisdictions ||--o{ entities : "jurisdiction_id"
entities ||--o{ entity_billing_profiles : "entity_id"
addresses ||--o{ entity_billing_profiles : "billing_address_id"
projects ||--o{ expunge_records : "project_id"
persons ||--o{ expunge_records : "authorized_by_person_id"
projects ||--o{ expunge_requests : "project_id"
documents ||--o{ expunge_requests : "document_id"
persons ||--o{ expunge_requests : "requested_by_person_id"
persons ||--o{ expunge_requests : "resolved_by_person_id"
expunge_records ||--o{ expunge_requests : "expunge_record_id"
notations ||--o{ filings : "notation_id"
persons ||--o{ git_access_tokens : "person_id"
projects ||--o{ git_access_tokens : "project_id"
invoices ||--o{ invoice_line_items : "invoice_id"
entity_billing_profiles ||--o{ invoices : "entity_billing_profile_id"
mailrooms ||--o{ letters : "mailroom_id"
addresses ||--o{ mailrooms : "address_id"
notations ||--o{ notation_clauses : "notation_id"
persons ||--o{ notation_clauses : "authored_by_person_id"
notations ||--o{ notation_events : "notation_id"
templates ||--o{ notations : "template_id"
persons ||--o{ notations : "person_id"
entities ||--o{ notations : "entity_id"
projects ||--o{ notations : "project_id"
persons ||--o{ person_entity_roles : "person_id"
entities ||--o{ person_entity_roles : "entity_id"
persons ||--o{ person_project_roles : "person_id"
projects ||--o{ person_project_roles : "project_id"
entities ||--o{ playbooks : "entity_id"
entities ||--o{ projects : "entity_id"
persons ||--o{ projects : "staff_dri_person_id"
persons ||--o{ projects : "client_dri_person_id"
questions ||--o{ question_translations : "question_id"
persons ||--o{ relationship_logs : "actor_person_id"
notations ||--o{ review_documents : "notation_id"
entities ||--o{ share_issuances : "entity_id"
statutes ||--o{ statute_revisions : "statute_id"
projects ||--o{ templates : "project_id"
blobs ||--o{ templates : "blob_id"
projects ||--o{ xero_invoices : "project_id"