KafkaTopic
type: Class
comment: A Kafka topic carrying domain events between Olly services.
layer: contracts
has property: topicName
has property: eventSchema

McpTool
type: Class
comment: An MCP tool exposed by olly-mcp; consumed by AI agents.
layer: contracts
has property: toolName
has property: inputSchema

Service
type: Class
comment: A deployable Olly microservice (e.g. claims, billing).
layer: contracts
has property: servicePort
has property: serviceContainer

OpenSearchIndex
type: Class
comment: An OpenSearch index used for full-text or analytics queries.
layer: data
has property: indexName

PostgresTable
type: Class
comment: A Postgres table owned by an Olly service, holding domain data.
layer: data
has property: tableName
has property: primaryKey

SnowflakeTable
type: Class
comment: A Snowflake warehouse table for BI / actuarial reporting.
layer: data
has property: warehouseLayer

Account
type: Class
comment: The financial container that owns policies and receives invoices. An Account may bill at the ACCOUNT level (all policies consolidated, typical for employer groups) or at the POLICY level (each policy billed independently). All Charges, Invoices, Payments, and LedgerEntries roll up to the Account. Aligned to Socotra's Account resource, which also represents a billing entity holding policies and financial balances.
layer: domain
owner service: policy-admin
aligns with:
  standard: socotra
  ref: Account
has property: locator
has property: name
has property: billingLevel
has property: currency
has property: displayNumber

Accumulator Bucket
type: Class
comment: A named counter that tracks a member's year-to-date spending against a specific benefit limit — for example, the amount applied toward a deductible, out-of-pocket maximum, or visit cap. AccumulatorBuckets reset on the plan anniversary or calendar year boundary and are updated whenever a claim line is adjudicated. They feed eligibility checks during real-time prior-auth and claim decisions, ensuring that benefit caps are correctly enforced across all submitted claims within a coverage period.
layer: domain
owner service: member-portal-api
status: aspirational

Adjustment
type: Class
comment: A manual debit or credit applied to an Account outside of the regular invoice cycle, such as a pro-rata refund on mid-term cancellation or a goodwill credit. Adjustments generate corresponding LedgerEntry records that maintain double-entry balance.
layer: domain
owner service: billing
has property: locator
has property: accountId
has property: policyId
has property: type
has property: amount
has property: currency
has property: reason
has property: status
has property: appliedAt

Appointment
type: Class
comment: A scheduled encounter between a Member and a healthcare Provider, booked through the care service. Appointments are linked to a care Episode and a specific ProviderSlot, and carry status (BOOKED, ATTENDED, CANCELLED) plus a telehealth link-out URL where applicable.
layer: domain
owner service: care
has property: locator
has property: episodeLocator
has property: providerLocator
has property: type
has property: status
has property: slotLocator
has property: linkOutUrl
has property: scheduledAt
has property: notes

Audit Item
type: Class
comment: An immutable log record capturing who did what to which entity and when, supporting regulatory compliance and internal governance. Audit items are created automatically whenever a sensitive consent, data-sharing, or policy action is performed, linking the acting user, the affected party, and the operation performed. They are append-only: no audit item can be modified or deleted, ensuring a tamper-evident trail for GDPR and clinical data governance purposes.
layer: domain
owner service: consent
status: aspirational

Auth Token
type: Class
comment: A short-lived API credential issued to a service or external integration to authenticate against the insurance platform API. AuthTokens are scoped to a tenant, carry an expiry timestamp, and are stored hashed. In Olly, API authentication is handled by Keycloak JWT tokens and OpenBao dynamic secrets; AuthToken as a platform-managed credential type is aspirational. Concept sourced from Socotra; not yet modeled in Olly code.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: AuthToken

Autopay Preference
type: Class
comment: A per-policy flag indicating whether direct debit should be initiated automatically on the invoice due date. When Enabled is true, the billing service triggers payment collection without manual intervention, reducing late-payment risk.
layer: domain
owner service: billing
has property: policyId
has property: enabled
has property: method

Aux Data
type: Class
comment: Extensible key-value metadata that can be attached to any Socotra entity (policy, account, claim, etc.) without requiring a schema change. AuxData entries are schematised via AuxDataKeySet definitions that specify allowed keys, data types, and validation rules. In Olly, auxiliary data is currently stored as JSONB columns (e.g. Policy.Document, PolicyElement.Data); AuxData would provide a more structured, queryable alternative. Concept sourced from Socotra; not yet modeled in Olly code.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: AuxData

Benefit
type: Class
comment: A categorised allowance under a Coverage (e.g. "annual physiotherapy visits", "outpatient pharmacy"). Aspirational: not currently backed by an Olly service or Postgres table.
layer: domain
owner service: tbd
status: aspirational
has property: benefitCode
has property: annualLimit

Billing Aggregate
type: Class
comment: An aggregated billing view that summarises the financial position of all active policies within a Group Scheme, giving employers and brokers a consolidated picture of outstanding invoices, total premiums due, and payment status across their entire member cohort. BillingAggregate is computed from the billing service's account and invoice data rather than stored as a persisted entity; it is assembled on-demand when the employer portal requests the scheme billing dashboard. The concept parallels account-level balance reporting in the Socotra platform, where invoice and payment totals roll up to the account.
layer: domain
owner service: group-scheme-service
status: aspirational

Billing Plan
type: Class
comment: A product-level billing configuration that governs invoicing frequency, payment due dates, grace period length, and retry strategy for a policy or account. BillingPlans abstract the billing rules away from individual policies, enabling consistent billing across all policies on a product. Concept sourced from Socotra; not yet modeled as a separate entity in Olly code.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: BillingPlan

Broker Config
type: Class
comment: Configuration for a broker integration, recording the broker's Party reference and their delegated authority limit — the maximum policy size the broker may bind without insurer countersignature.
layer: domain
owner service: broker-api
has property: locator
has property: brokerId
has property: delegatedAuthorityLimit

Bulk Enrollment Job
type: Class
comment: An asynchronous batch job that processes a CSV or API upload of employee enrollments for a Group Scheme. Tracks total records, processed count, failure count, and per-row error messages to enable partial recovery and audit.
layer: domain
owner service: group-scheme-service
has property: locator
has property: schemeId
has property: status
has property: total
has property: processed
has property: failedCount
has property: errors

Bulk Enrollment Job Error
type: Class
comment: A structured error record produced when a single row within a BulkEnrollmentJob fails to process — for example, because a member's identifier is missing, coverage dates are invalid, or a product rule rejects the application. Each error captures the offending row reference, error code, and human-readable message so that HR administrators can correct and resubmit without re-processing the entire batch. Errors are aggregated on the parent BulkEnrollmentJob and surfaced in the employer portal's batch report view.
layer: domain
owner service: group-scheme-service
status: aspirational

Bulk Member
type: Class
comment: A single member record submitted as part of a BulkEnrollmentJob, representing one employee or dependent whose coverage is being created or amended in a batch upload. BulkMember carries enough identity and coverage data (name, date of birth, product code, effective date) for the enrollment service to validate and bind a policy without a live quote flow. Successfully processed BulkMember records result in a fully active Member and MemberCoverage; failed rows generate BulkEnrollmentJobError entries.
layer: domain
owner service: group-scheme-service
status: aspirational

Charge
type: Class
comment: A discrete monetary obligation raised against an Account, categorised as PREMIUM, TAX, or FEE. Charges are the atomic unit of billing: each InvoiceLineItem references exactly one Charge, and each Charge generates a corresponding DEBIT LedgerEntry. Aligned to Socotra's Charge resource, which similarly represents a fee or premium amount applied to a policy account.
layer: domain
owner service: billing
aligns with:
  standard: socotra
  ref: Charge
has property: locator
has property: policyId
has property: termId
has property: claimId
has property: claimLocator
has property: accountId
has property: category
has property: amount
has property: currency
has property: status
has property: chargeDate
has property: description

Claim
type: Class
comment: A member's request for reimbursement of covered medical services. Claims are submitted complete and progress through adjudication (SUBMITTED → UNDER_REVIEW → APPROVED/REJECTED → PAID → CLOSED). Each Claim is itemised into ClaimLine records and may carry supporting ClaimDocument attachments. Aligned to Socotra's Claim resource, which also represents an insurance loss event progressing through an adjudication lifecycle.
subclass of: Claim
layer: domain
owner service: claims
aligns with:
  standard: fhir
  ref: Claim
aligns with:
  standard: fibo
  ref: Claim
aligns with:
  standard: socotra
  ref: Claim
has property: locator
has property: policyId
has property: termId
has property: claimantPartyId
has property: status
has property: incidentDate
has property: document
lifecycle states: submitted
lifecycle states: in_review
lifecycle states: approved
lifecycle states: denied
lifecycle states: paid
lifecycle states: appealed

Claim Detail
type: Class
comment: A denormalised read model that aggregates a Claim together with its ClaimLines, adjudication outcome, prior-auth reference, and payment amounts into a single response payload for the member portal. ClaimDetail avoids multiple round-trips when displaying a claim receipt or EOB to a member. It is not a separately persisted entity; the claims service assembles it on the fly from the underlying relational tables and exposes it through the member-portal-api contract.
layer: domain
owner service: member-portal-api
status: aspirational

Claim Document
type: Class
comment: A supporting file attached to a Claim during adjudication, such as a medical invoice, discharge summary, or diagnostic report. ClaimDocument records store the S3 URL, content type, and upload timestamp; they are created when a claim enters PENDING_INFO status.
layer: domain
owner service: claims
has property: claimId
has property: filename
has property: contentType
has property: url
has property: uploadedAt

Claim Event
type: Class
comment: An immutable audit record of every status change, actor action, and note on a Claim. ClaimEvents are append-only and include APPEAL_SUBMITTED and APPEAL_DENIED events alongside normal state transitions, forming a complete adjudication audit trail.
layer: domain
owner service: claims
has property: claimId
has property: eventType
has property: fromStatus
has property: toStatus
has property: actor
has property: note

Claim Line
type: Class
comment: One itemised procedure or service within a Claim, corresponding to a loop in an EDI 837 transaction. Records the billed amount (AmountClaimed), the plan-allowed amount (AmountAllowed), and the plan's payment (AmountPaid), with ANSI X12 reason codes for any contractual adjustment.
layer: domain
owner service: claims
has property: claimId
has property: lineNumber
has property: elementId
has property: coverageTermKey
has property: description
has property: amountClaimed
has property: amountAllowed
has property: amountPaid
has property: reasonCode
has property: metadata

Claim Submission
type: Class
comment: The intake payload a member or provider submits to initiate the claims adjudication process. A ClaimSubmission bundles the member identifier, incident date, diagnosis codes, procedure codes, provider reference, and any supporting document references into a single request. On successful ingestion the claims service creates a Claim entity and transitions it to the SUBMITTED state, from which adjudication, prior-auth checks, and payment flow proceed.
layer: domain
owner service: claims
status: aspirational

Claim Summary
type: Class
comment: A lightweight projection of a Claim designed for list views in the member portal and broker dashboard, returning only the fields needed for scanning — claim reference, date of service, provider name, status, and total amount — without the full line-item detail. ClaimSummary is generated by the claims service at query time and is not persisted independently; it complements ClaimDetail by giving consumers a fast, paginated overview before they drill into individual claims.
layer: domain
owner service: member-portal-api
status: aspirational

Commission
type: Class
comment: A fee payable to a broker when a policy they introduced is bound or renewed. Commission records capture the applicable rate, computed amount, and settlement status, and are reconciled against invoices generated by the billing service.
layer: domain
owner service: broker-api
has property: locator
has property: brokerId
has property: policyLocator
has property: rate
has property: amount
has property: status

Condition
type: Class
comment: A clinically established diagnosis attached to a Member, sourced from Encounter outputs or self-reported history. Aspirational: not currently backed by an Olly service or Postgres table.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: fhir
  ref: Condition
aligns with:
  standard: snomed
  ref: http://snomed.info/sct/64572001
has property: conditionText

Config Bundle
type: Class
comment: A versioned, tenant-scoped package of product and billing configuration that is deployed atomically to the policy-admin service. A ConfigBundle bundles product definitions, rule sets, market profiles, document templates, and installment plan settings into a single artifact, ensuring that all configuration is consistent and auditable. Deploying a new ConfigBundle version advances the active product configuration without requiring individual resource updates, supporting zero-downtime configuration releases.
layer: domain
owner service: policy-admin
status: aspirational

Consent Item
type: Class
comment: A single discrete consent decision within a ConsentRecord, capturing the consent type (e.g. NHS_DATA_SHARING, MARKETING_EMAIL, THIRD_PARTY_ACCESS), the decision value (granted or withdrawn), and the timestamp at which the decision was recorded. ConsentItems provide the granular audit trail required under GDPR Article 7 and NHS data governance standards, allowing each consent category to be independently granted or withdrawn without affecting the member's other consent preferences.
layer: domain
owner service: consent
status: aspirational

Consent Record
type: Class
comment: A member's preference for a specific consent type (e.g. NHS_DATA_SHARING, WEARABLE_SYNC, MARKETING_COMMUNICATIONS), keyed by (PartyLocator, ConsentType). At most one record per combination exists; the Granted boolean captures the current preference.
layer: domain
owner service: consent
has property: partyLocator
has property: consentType
has property: granted

Contact
type: Class
comment: A named contact point associated with an Account or Policy — distinct from the Account holder Party. Contacts carry a name, role (e.g. BILLING_CONTACT, BENEFITS_ADMINISTRATOR), email, and phone, enabling multiple communication targets per account. In Olly, contact information is currently embedded in the Party record; Contact as a separate entity is aspirational. Concept sourced from Socotra; not yet modeled in Olly code.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: Contact

Conversation
type: Class
comment: An AI chat session between a user and the Olly AI assistant, scoped to an organisation (org_locator). Conversations contain an ordered sequence of Messages and carry a persona identifier that controls the assistant's behaviour.
layer: domain
owner service: ai-chat
has property: orgLocator
has property: userSub
has property: title
has property: persona

Coverage
type: Class
comment: The abstract insurance entitlement a Member holds under a Policy at a given point in time. Coverage is the eligibility service's read model: it denormalises PolicyElement and MemberCoverage data into a queryable form for fast eligibility checks during claim adjudication.
layer: domain
owner service: eligibility
aligns with:
  standard: fhir
  ref: Coverage
aligns with:
  standard: fibo
  ref: InsuranceCoverage

Coverage Accumulator
type: Class
comment: A running balance tracking how much of a benefit limit a Member has consumed in a PolicyTerm — deductible, out-of-pocket maximum, or benefit-category cap. Accumulators are loaded and updated during adjudication to determine how much the plan pays on each ClaimLine.
layer: domain
owner service: eligibility
has property: partyId
has property: termId
has property: accumulatorType
has property: coverageTermKey
has property: limitAmount
has property: consumedAmount
has property: currency
has property: lastClaimLocator

Coverage Term
type: Class
comment: A discrete benefit category within a product definition, specifying the type of coverage (e.g. INPATIENT_HOSPITAL, OUTPATIENT_SPECIALIST, MENTAL_HEALTH) and its associated benefit parameters such as copay, coinsurance percentage, deductible, and annual limit. In Olly, CoverageTerms are currently embedded as a JSONB blob on PolicyElement; Socotra models them as a first-class configurable resource. Concept sourced from Socotra; not yet modeled as a separate entity in Olly code.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: CoverageTerm

Credentialing Request
type: Class
comment: A provider's application to join the Olly network, implemented as a Temporal workflow to handle the multi-week human review process. Records submission timestamp, reviewer decision (APPROVED/REJECTED), and reviewer notes; on approval, Provider.NetworkStatus is set to ACTIVE.
layer: domain
owner service: provider
has property: locator
has property: providerId
has property: status
has property: submittedAt
has property: reviewedAt
has property: reviewerNotes

Credentialing Status
type: Class
comment: A read-model snapshot of where a CredentialingRequest currently stands in the provider verification lifecycle. CredentialingStatus exposes the stage (e.g. DOCUMENTS_RECEIVED, VERIFICATION_IN_PROGRESS, APPROVED, SUSPENDED), the date the last status change occurred, and any blocking reason notes. Brokers and network managers query it to track which providers are cleared for service without reading the full credentialing workflow history; it is updated whenever the underlying CredentialingRequest transitions state.
layer: domain
owner service: provider
status: aspirational

Credit
type: Class
comment: An unapplied balance on an Account that can be applied against future invoices — arising from overpayments, mid-term cancellation refunds, or goodwill adjustments. Credits are distributed (CreditDistribution) to specific invoices to reduce the amount due. In Olly, credits are currently handled as CREDIT-direction LedgerEntries and Adjustment records; Socotra models them as a distinct distributable entity. Concept sourced from Socotra; not yet a separate entity in Olly code.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: Credit

Deductible Status
type: Class
comment: A real-time snapshot of a member's progress toward satisfying the deductible threshold on their active coverage for the current benefit period. DeductibleStatus combines the configured deductible limit from the coverage terms with the year-to-date amounts applied from adjudicated claims, exposing the remaining balance a member must pay before the insurer begins covering costs. It is computed by the eligibility service from AccumulatorBucket values and coverage term data, and is surfaced during eligibility checks and in the member portal.
layer: domain
owner service: eligibility
status: aspirational

Deletion Request
type: Class
comment: A GDPR Article 17 right-to-erasure request for a Party. SOFT deletion anonymises PHI fields while preserving referential integrity; HARD deletion purges all party data with tombstones. A Temporal workflow fans out the request to every service holding PHI for that PartyLocator.
layer: domain
owner service: consent
has property: partyLocator
has property: deleteType
has property: status
has property: requestedByType
has property: reason
has property: requestedAt
has property: completedAt
has property: attemptCount

Delinquency
type: Class
comment: A formal delinquency record created when an Invoice remains unpaid past its grace period. Delinquency tracks the escalation timeline from missed payment through lapse notification to cancellation, and may be subject to a moratorium (suspension of delinquency processing). In Olly, delinquency state is currently embedded in Invoice and Policy fields; Socotra models it as a standalone lifecycle entity. Concept sourced from Socotra; not yet a separate entity in Olly code.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: Delinquency

Diagnostics Referral
type: Class
comment: A care-pathway instruction for a Member to undergo diagnostic tests (imaging, blood work, etc.), generated within a clinical Episode. Records the referring provider, target clinic, referral type, and the resulting Appointment locator once booked.
layer: domain
owner service: care
has property: locator
has property: episodeLocator
has property: referralType
has property: clinicLocator
has property: status
has property: appointmentLocator

Diary Entry
type: Class
comment: A time-stamped note or task record attached to an insurance entity (policy, claim, account), used by operations teams to track action items, follow-ups, and adjudicator notes. DiaryEntries differ from audit events in that they are authored by humans for human consumption and can be updated. Concept sourced from Socotra; in Olly, notes are currently embedded in claim and credentialing event records.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: DiaryEntry

Disbursement
type: Class
comment: An outbound payment from the insurer to a payee — such as a claims payment to a provider or a refund to a policyholder. Disbursements are distinct from Payments (inbound premium receipts) and are tracked separately for cash management and regulatory reporting. Concept sourced from Socotra; in Olly, provider claim payments are currently modelled as outbound Payment records rather than a distinct Disbursement entity.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: Disbursement

Document
type: Class
comment: A generated or uploaded file associated with a policy, claim, or member record. Documents include policy schedules, Explanations of Benefit (EOBs), EDI-generated PDFs, and consent forms. Files are stored in S3 with SSE-KMS encryption and referenced by URL. Aligned to Socotra's Document resource, which similarly represents persisted document instances attached to insurance entities.
layer: domain
owner service: document-service
aligns with:
  standard: socotra
  ref: Document
has property: locator
has property: partyLocator
has property: templateType
has property: marketCode
has property: content

Document Summary
type: Class
comment: A lightweight projection of a Document containing only the metadata fields needed for list and browse views — document reference, type, associated entity (policy or claim), creation date, and download URL — without the full binary payload. DocumentSummary allows the member portal to display a document inbox and let members choose which files to download, deferring retrieval of the actual content until explicitly requested. It mirrors the document management pattern described in the Socotra platform, where documents are associated with policies, transactions, quotes, and claims and retrieved by reference.
layer: domain
owner service: member-portal-api
status: aspirational

Eligibility Roster
type: Class
comment: A consolidated snapshot of eligibility status for every active member in a Group Scheme, used by HR administrators and brokers to verify that all employees have valid, in-force coverage. The EligibilityRoster aggregates MemberCoverage records across the scheme's policies and returns a structured list showing each member's coverage tier, effective date, and eligibility status. It is assembled on demand from eligibility service data rather than persisted independently, and serves as the primary audit artefact for group scheme compliance checks.
layer: domain
owner service: group-scheme-service
status: aspirational

Encounter
type: Class
comment: A clinical interaction between a Member and a Provider — appointment, hospital admission, telehealth call, etc. Aspirational: not currently backed by an Olly service or Postgres table.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: fhir
  ref: Encounter
has property: encounterType
has property: performedBy

Enrollment
type: Class
comment: The act and record of a member being admitted into a coverage product, tying a Party to a Policy with a defined effective date and coverage tier. An Enrollment is initiated either through the quote-and-bind flow (for individual members) or via a BulkEnrollmentJob (for group schemes). Once complete, it results in an active MemberCoverage record that gates eligibility checks and claim adjudication. The enrollment service orchestrates the transition from a bound quote to an in-force policy, including triggering billing setup and notification dispatch.
layer: domain
owner service: enrollment
status: aspirational

EOB Reference
type: Class
comment: A pointer to an Explanation of Benefits document generated after a claim is adjudicated, linking the claim to the rendered EOB file that details what was billed, what the insurer allowed, what was applied to the deductible, and what the member owes. EOBReference stores the document locator and metadata so the billing and member-portal services can surface the EOB alongside the invoice without re-fetching the full claim payload. It is analogous to the document reference pattern used throughout the Socotra platform where documents are associated with financial transactions.
layer: domain
owner service: billing
status: aspirational

Episode
type: Class
comment: A bounded care episode — a single clinical interaction or course of treatment — linking a triage Session to one or more Appointments, Prescriptions, and DiagnosticsReferrals. Episodes carry a care type (GP, SPECIALIST, MENTAL_HEALTH) and close when the clinical need is resolved.
layer: domain
owner service: care
has property: locator
has property: partyLocator
has property: triageSessionLocator
has property: careType
has property: status
has property: summary
has property: closedAt

Field Definition
type: Class
comment: A product-level metadata schema entry that defines a custom field (name, type, required flag, allowed values) collectible on policies, quotes, or transactions of a given ProductVersion. Field definitions drive dynamic form rendering in the employer and member portals.
layer: domain
owner service: policy-admin
has property: locator
has property: productVersionId
has property: name
has property: fieldType
has property: required
has property: defaultValue
has property: allowedValues
has property: displayOrder

Financial Instrument
type: Class
comment: A stored payment method on file for an Account — such as a bank account (for direct debit), credit card token (for card payments), or ACH routing details. FinancialInstruments are used by the autopay and billing services to initiate payment collection without requiring the account holder to re-enter payment details. Concept sourced from Socotra; Olly stores payment method details in payment gateway tokens but has no explicit FinancialInstrument entity yet.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: FinancialInstrument

FNOL
type: Class
comment: First Notice of Loss — the initial report filed by a policyholder or claimant to notify the insurer of an insured event before a full claim is submitted. An FNOL captures the date, nature, and location of the loss and creates a claim shell that the adjudication team can enrich. In Olly's current model, claims are submitted complete; FNOL as a pre-claim stage is not yet implemented. Concept sourced from Socotra; not yet modeled in Olly code.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: Fnol

Installment Plan
type: Class
comment: A configuration template that defines the frequency, number of installments, and billing rules for splitting a premium into periodic payments. InstallmentPlans are assigned to products or accounts and drive the generation of InstallmentSchedule instances. Concept sourced from Socotra; not yet modeled as a separate entity in Olly code (currently embedded in InstallmentSchedule).
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: InstallmentPlan

Installment Schedule
type: Class
comment: A plan for splitting an annual premium into periodic invoices. The billing scheduler reads active InstallmentSchedules and generates the next Invoice on each due date until all installments are exhausted, supporting MONTHLY, QUARTERLY, and ANNUAL frequencies.
layer: domain
owner service: billing
has property: locator
has property: accountId
has property: policyId
has property: totalAmount
has property: currency
has property: frequency
has property: installments
has property: startDate
has property: status

Invoice
type: Class
comment: A demand for premium payment issued to an Account for one billing period. Invoices progress through DRAFT → FINALISED → PAID (or VOID). Each Invoice contains one or more InvoiceLineItem rows and carries grace period and delinquency timestamps used to trigger policy lapse. Aligned to Socotra's Invoice resource, which also models a billing statement with lifecycle states and settlement tracking.
layer: domain
owner service: billing
aligns with:
  standard: socotra
  ref: Invoice
has property: locator
has property: accountId
has property: status
has property: totalAmount
has property: currency
has property: dueDate
has property: finalisedAt
has property: paidAt

Invoice Line Item
type: Class
comment: One line on an Invoice, linking to a specific Charge record (PREMIUM, TAX, or FEE) and its amount. The sum of all InvoiceLineItem amounts equals Invoice.TotalAmount; this denormalisation enables efficient invoice rendering without re-summing charges.
layer: domain
owner service: billing
has property: invoiceId
has property: chargeId
has property: amount
has property: description

Judgement
type: Class
comment: An automated quality-scoring evaluation of a triage Session by a judge LLM, scoring tone, PRD compliance, and safety against a rubric. Judgements are produced by the triage evaluation harness and stored to track model regression across prompt versions.
layer: domain
owner service: triage
has property: sessionId
has property: judgeModel
has property: rubricVersion
has property: toneScore
has property: prdComplianceScore
has property: safetyScore
has property: summary
has property: judgeInputTokens
has property: judgeOutputTokens

Ledger Account
type: Class
comment: A named chart-of-accounts entry in the double-entry bookkeeping system, representing a category such as PREMIUM_RECEIVABLE, TAX_PAYABLE, or CLAIMS_EXPENSE. LedgerAccounts provide the account classification dimension for regulatory financial reporting and actuarial analysis. In Olly, LedgerEntry records carry direction and type but are not yet categorised against a formal chart of accounts. Concept sourced from Socotra; not yet modeled in Olly code.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: LedgerAccount

Ledger Entry
type: Class
comment: A double-entry bookkeeping record for every financial movement on an Account. EntryType values are CHARGE, PAYMENT, ADJUSTMENT_DEBIT, ADJUSTMENT_CREDIT, and REVERSAL; Direction is DEBIT or CREDIT. The net sum of all LedgerEntries for an Account equals its current balance.
layer: domain
owner service: billing
has property: locator
has property: accountId
has property: policyId
has property: entryType
has property: referenceId
has property: referenceType
has property: direction
has property: amount
has property: currency
has property: description

Market Profile
type: Class
comment: A versioned regulatory and billing configuration bundle for a specific jurisdiction or market segment. MarketProfiles govern which product features are available, which regulatory regime applies, and which document templates are used — enabling multi-market operation from a single platform.
layer: domain
owner service: policy-admin
has property: locator
has property: code
has property: currentVersion

Market Profile Version
type: Class
comment: A published snapshot of a MarketProfile at a point in time, capturing jurisdiction code, regulatory regime, feature flags, billing rules, mandatory fields, and document template assignments. Policies reference the MarketProfileVersion in force at their inception date.
layer: domain
owner service: policy-admin
has property: locator
has property: marketProfileId
has property: version
has property: jurisdictionCode
has property: regulatoryRegime
has property: featureFlags
has property: billingRules
has property: mandatoryFields
has property: documentTemplates
has property: publishedAt

Medication
type: Class
comment: A reference to a drug or therapeutic agent within Olly's clinical data model, used primarily in the context of Prescriptions issued during a care Episode. Medication records carry the drug name, formulary classification, and any relevant prior-auth requirements, enabling the platform to check whether a prescribed drug is covered under a member's benefit plan before dispensing. The concept is clinical in origin and has no direct Socotra analogue; it exists in Olly to support the triage and care pathway services.
layer: domain
owner service: care
status: aspirational

Member
type: Class
comment: An individual insured person (primary subscriber or dependent) covered under a PolicyElement. A Member's identity is stored as a Party of type INDIVIDUAL; their coverage entitlements are in MemberCoverage. The term "member" is the business-facing umbrella for any covered person.
subclass of: Person
alternative label: Insured
alternative label: Beneficiary
layer: domain
owner service: policy-admin
aligns with:
  standard: fhir
  ref: Patient
aligns with:
  standard: schema_org
  ref: Person

Member Coverage
type: Class
comment: The eligibility service's denormalised read model of a Member's active coverage on a Policy and PolicyTerm. Populated by consuming enrollment.completed events, it enables fast eligibility lookups during claim adjudication without joining across enrollment tables.
layer: domain
owner service: eligibility
has property: partyId
has property: policyId
has property: policyElementId
has property: elementStaticId
has property: termId
has property: policyLocator
has property: partyLocator
has property: productCode
has property: elementType
has property: coverageTerms
has property: status
has property: effectiveFrom
has property: effectiveTo

Message
type: Class
comment: A single turn in an AI chat Conversation — either a user message or an assistant response. Messages store the LLM role (user/assistant/tool), content, tool call metadata, and token usage for cost tracking and prompt tracing via Langfuse.
layer: domain
owner service: ai-chat
has property: conversationId
has property: role
has property: content
has property: toolCalls
has property: tokenUsage

Moratorium
type: Class
comment: A temporary suspension of billing enforcement actions (delinquency escalation, lapse, cancellation) for a defined set of policies — typically applied during regulatory-mandated relief periods or catastrophe events. Moratoriums carry match criteria to identify affected policies and a rule set governing which billing events are suppressed. Concept sourced from Socotra; not yet modeled in Olly code.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: Moratorium

Notification Log
type: Class
comment: A delivery record for a single outbound notification (push, SMS, or email) sent on behalf of a domain event. Captures the channel, status (SENT/FAILED), subject, body preview, attempt count, and failure reason to support retry logic and delivery auditing.
layer: domain
owner service: notifications
has property: locator
has property: eventId
has property: partyId
has property: eventType
has property: channel
has property: status
has property: subject
has property: body
has property: failureReason
has property: attemptCount
has property: sentAt

Notification Preference
type: Class
comment: A Member's channel and opt-out preferences for notifications. Records preferred delivery channel (PUSH, SMS, EMAIL), contact details, and the list of event types the member has explicitly opted out of receiving.
layer: domain
owner service: notifications
has property: partyId
has property: partyLocator
has property: email
has property: phone
has property: preferredChannel
has property: optedOutEvents

Notification Preferences
type: Class
comment: The aggregate container of all NotificationPreference records for a given Member, representing their complete channel and opt-in/opt-out configuration across event types. The notifications service reads this container when deciding how to route an outbound notification — email, SMS, push, or in-app — checking each preference before dispatching. NotificationPreferences is returned as a single structured object by the GET preferences endpoint so that the member portal can render the full preferences screen in one call without assembling individual records client-side.
layer: domain
owner service: notifications
status: aspirational

Party
type: Class
comment: The unified identity record for any person or organisation on the platform — members, employers, brokers, and providers all share this entity, distinguished by Type (INDIVIDUAL, ORGANISATION, PROVIDER). PHI fields are application-layer encrypted before storage; the Locator is the externally shareable stable reference.
layer: domain
owner service: policy-admin
has property: locator
has property: type
has property: firstName
has property: lastName
has property: name
has property: email
has property: phone
has property: address
has property: dateOfBirth

Party Role
type: Class
comment: A contextual role a Party plays on a specific entity (Account, Policy, or Quote). One Party can hold multiple roles across multiple entities — for example, ACCOUNT_HOLDER on an employer account and INSURED on individual policies.
layer: domain
owner service: policy-admin
has property: partyId
has property: entityType
has property: entityId
has property: role

Pathway
type: Class
comment: A guided clinical decision flow (NHS 111 style) that maps a presenting Symptom set to a recommended care destination. Aspirational: not currently backed by an Olly service or Postgres table.
layer: domain
owner service: tbd
status: aspirational
has property: pathwayCode

Payment
type: Class
comment: A record of funds received against an Invoice. Payments are collected via DIRECT_DEBIT, CARD, or BANK_TRANSFER. When a Payment reaches SETTLED status and the aggregate payments equal the Invoice total, the Invoice transitions to PAID and a CREDIT LedgerEntry is posted. Aligned to Socotra's Payment resource, which also represents a financial settlement event linked to a billing account.
layer: domain
owner service: billing
aligns with:
  standard: socotra
  ref: Payment
has property: locator
has property: invoiceId
has property: accountId
has property: amount
has property: currency
has property: method
has property: reference
has property: status
has property: settledAt

Policy
type: Class
comment: The master insurance contract between an insurer and an Account. A Policy is created when a Quote is accepted and the first premium collected. It accumulates PolicyTerm records on annual renewal and tracks status through ACTIVE, LAPSED, CANCELLED, and EXPIRED states. Aligned to Socotra's Policy resource, which also represents a central insurance contract entity with term and transaction sub-records.
subclass of: InsurancePolicy
subclass of: Product
disjoint with: Quote
alternative label: Cover
alternative label: Plan
alternative label: Enrollment
layer: domain
owner service: enrollment
aligns with:
  standard: fhir
  ref: Coverage
aligns with:
  standard: fibo
  ref: InsurancePolicy
aligns with:
  standard: schema_org
  ref: Product
aligns with:
  standard: socotra
  ref: Policy
has property: locator
has property: accountId
has property: quoteId
has property: productVersionId
has property: status
has property: inceptionDate
has property: jurisdiction
has property: region
has property: document
lifecycle states: draft
lifecycle states: quoted
lifecycle states: bound
lifecycle states: active
lifecycle states: lapsed
lifecycle states: cancelled
lifecycle states: expired

Policy Element
type: Class
comment: One insured unit within a PolicyTerm — either an employee (primary subscriber) or a dependent. PolicyElement carries the per-member benefit schedule (copay, coinsurance, deductibles, OOP max) as a CoverageTerms JSON blob, and a stable StaticID used to track accumulators across term versions.
layer: domain
owner service: enrollment
has property: locator
has property: policyId
has property: transactionId
has property: staticId
has property: elementType
has property: status
has property: partyId
has property: data
has property: coverageTerms
has property: effectiveFrom
has property: effectiveTo

Policy Field Value
type: Class
comment: A value for a custom FieldDefinition on a specific Policy, supporting the product's dynamic data model. PolicyFieldValues allow product teams to add configurable data fields to policies without database schema migrations.
layer: domain
owner service: enrollment
has property: locator
has property: policyId
has property: fieldDefinitionId
has property: value

Policy Term
type: Class
comment: One bounded coverage period on a Policy, typically annual. PolicyTerms carry a sequential TermNumber, inclusive EffectiveFrom/EffectiveTo dates, and a status that mirrors the parent Policy. Accumulators, ClaimLines, and MemberCoverage records are all scoped to a specific PolicyTerm.
layer: domain
owner service: enrollment
has property: locator
has property: policyId
has property: termNumber
has property: effectiveFrom
has property: effectiveTo
has property: status

Policy Transaction
type: Class
comment: An immutable record of every post-issuance change to a Policy, including ISSUANCE, RENEWAL, ENDORSEMENT, CANCELLATION, REINSTATEMENT, and REVERSAL. Each transaction carries an EffectiveDate that may differ from the processing date, and optionally references a PolicyTerm. Aligned to Socotra's PolicyTransaction resource, which similarly records structured change events against a policy.
layer: domain
owner service: enrollment
aligns with:
  standard: socotra
  ref: PolicyTransaction
has property: locator
has property: policyId
has property: termId
has property: category
has property: status
has property: effectiveDate
has property: document

Premium
type: Class
comment: The amount payable by the Member (or scheme) for a Policy, on a configurable cadence. Aspirational: not currently backed by an Olly service or Postgres table.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: fibo
  ref: Premium
has property: amount
has property: cadence

Prescription
type: Class
comment: A medication prescription issued by a healthcare Provider within a care Episode, recording the medication name, prescribing provider, and issue timestamp. Prescriptions may be linked to prior auth requirements for formulary-controlled drugs.
layer: domain
owner service: care
has property: locator
has property: episodeLocator
has property: providerLocator
has property: medication
has property: status
has property: issuedAt

Prior Auth
type: Class
comment: A pre-approval from the insurer required before certain procedures are performed. PriorAuth progresses from PENDING through APPROVED or DENIED. Claims for procedures requiring prior auth that lack an APPROVED record are automatically rejected with ANSI reason code CO-15.
layer: domain
owner service: claims
has property: locator
has property: providerId
has property: policyId
has property: memberPartyId
has property: status
has property: procedureCode
has property: document
has property: submittedAt
has property: reviewedAt

Product
type: Class
comment: An insurance plan definition (e.g. "Olly Select PMI") owned by policy-admin. A Product groups one or more versioned benefit schedules (ProductVersion). It carries a Line of Business (lob) classifier and a status lifecycle from DRAFT through ACTIVE to RETIRED. Aligned to Socotra's Product configuration entity, which also defines the schema and rules governing policies written under it.
layer: domain
owner service: policy-admin
aligns with:
  standard: socotra
  ref: Product
has property: locator
has property: code
has property: name
has property: lob
has property: status

Product Version
type: Class
comment: A published, immutable version of an insurance Product containing the policy schema, claim schema, element schema, charge types, and status lifecycle. Quotes and Policies reference a specific ProductVersion to ensure benefit schedules remain stable after changes to the parent Product.
layer: domain
owner service: policy-admin
has property: locator
has property: productId
has property: version
has property: policySchema
has property: claimSchema
has property: elementSchema
has property: chargeTypes
has property: status
has property: publishedAt

Provider
type: Class
comment: A credentialed healthcare organisation or individual practitioner in the Olly network. Identified by NPI (National Provider Identifier) for use in EDI 837 transactions and prior auth requests. NetworkStatus (PENDING/ACTIVE/INACTIVE) determines in-network claim adjudication rates and member cost-sharing obligations.
subclass of: MedicalOrganization
alternative label: HealthcareProvider
layer: domain
owner service: provider
aligns with:
  standard: fhir
  ref: Practitioner
aligns with:
  standard: schema_org
  ref: MedicalOrganization
has property: locator
has property: npi
has property: partyId
has property: partyLocator
has property: name
has property: specialty
has property: networkStatus
has property: address
has property: phone
has property: email
has property: activatedAt

Provider Slot
type: Class
comment: A specific bookable time window at a Provider, with start/end times and a status (AVAILABLE/BOOKED/CANCELLED). When a Member books an Appointment, the linked ProviderSlot transitions to BOOKED; cancellations restore it to AVAILABLE.
layer: domain
owner service: care
has property: locator
has property: providerLocator
has property: startTime
has property: endTime
has property: status
has property: appointmentLocator

Quote
type: Class
comment: A priced proposal that precedes a Policy. Quotes advance through DRAFT → PRICED → UNDERWRITTEN → ACCEPTED/DECLINED → (if accepted) converted to a Policy. A Quote holds the rated premium, benefit schedule, and applicant data as a JSONB Document blob, and expires after a configurable timestamp. Aligned to Socotra's Quote resource, which also models a priced insurance proposal that can be accepted or declined.
disjoint with: Policy
layer: domain
owner service: enrollment
aligns with:
  standard: fibo
  ref: Quote
aligns with:
  standard: socotra
  ref: Quote
has property: locator
has property: accountId
has property: productVersionId
has property: status
has property: document
has property: expiresAt

Quote Event
type: Class
comment: An immutable audit record of every status change on a Quote — from DRAFT through pricing, underwriting, acceptance or decline, and expiry. QuoteEvents capture the event type and payload at each transition, forming the complete quote history.
layer: domain
owner service: enrollment
has property: quoteId
has property: eventType
has property: payload

Quote Field Value
type: Class
comment: A value for a custom FieldDefinition collected on a Quote during the application process. Analogous to PolicyFieldValue but scoped to the pre-issuance quote, supporting the same product-defined dynamic data model.
layer: domain
owner service: enrollment
has property: locator
has property: quoteId
has property: fieldDefinitionId
has property: value

Recommendation
type: Class
comment: The structured clinical disposition produced by the triage engine at the end of a member's triage Session, advising the appropriate care pathway — for example, self-care, GP consultation, urgent care, or emergency services. A Recommendation bundles the suggested action, the urgency level, and a plain-language rationale derived from the member's reported symptoms and clinical reasoning. It is the terminal output of a completed triage conversation and may trigger a DiagnosticsReferral or Appointment booking depending on the pathway selected.
layer: domain
owner service: triage
status: aspirational

Role
type: Class
comment: A named permission bundle that can be assigned to platform users, controlling which resources and operations they can access. Roles are evaluated by the OPA policy engine at APISIX and within each service. In Olly, roles are managed in Keycloak as realm roles; a platform-native Role entity would enable programmatic role management without Keycloak API calls. Concept sourced from Socotra; not yet modeled as a standalone entity in Olly code.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: Role

Rule
type: Class
comment: A single executable policy rule within a RuleSet, with a condition expression, an effect (e.g. REJECT, SURCHARGE, FLAG), a human-readable message, and a priority. Rules are evaluated by the underwriting and adjudication engines against quote or claim data.
layer: domain
owner service: policy-admin
has property: locator
has property: ruleSetId
has property: code
has property: priority
has property: condition
has property: effect
has property: message

Rule Evaluation
type: Class
comment: An audit record of a single Rule being evaluated against a specific entity (Quote, Claim, or Policy). Captures whether the condition matched, which effect was applied, and the timestamp, providing a traceable decision log for regulatory audit.
layer: domain
owner service: policy-admin
has property: ruleId
has property: ruleSetId
has property: entityType
has property: entityId
has property: conditionResult
has property: effectApplied
has property: evaluatedAt

Rule Input
type: Class
comment: The structured context object passed into a RuleSet evaluation, containing the data required for the underwriting or adjudication engine to assess each Rule's condition. RuleInput bundles the entity under evaluation (quote, claim, or policy), the triggering event, and any auxiliary data fields (demographic, clinical, or financial) that rules may reference. It is constructed at evaluation time from the current state of the entity and discarded after evaluation, with the results persisted as RuleEvaluation audit records.
layer: domain
owner service: policy-admin
status: aspirational

Rule Set
type: Class
comment: A named collection of Rules associated with a ProductVersion and a trigger context (e.g. QUOTE_UNDERWRITING, CLAIM_ADJUDICATION). RuleSets are the unit of rule configuration: adding or retiring rules is done by publishing a new RuleSet version.
layer: domain
owner service: policy-admin
has property: locator
has property: productVersionId
has property: name
has property: trigger

Rule Set Bundle
type: Class
comment: A versioned collection of RuleSets packaged together for deployment as a coherent configuration update. A RuleSetBundle groups all the rule sets that belong to a single ProductVersion and trigger context (underwriting, adjudication, billing) so they can be validated, tested, and published atomically. Publishing a new bundle replaces the prior active rule configuration for the product version without requiring individual rule set updates, mirroring the tenant configuration deployment model described in the Socotra platform where all rule and configuration artefacts are deployed together.
layer: domain
owner service: policy-admin
status: aspirational

Scheme
type: Class
comment: An employer group insurance arrangement linking an employer Party to a cohort of member policies. Schemes are administered by the group-scheme service, carry a locator code used in bulk enrollment uploads, and scope the employer portal to the correct member population.
layer: domain
owner service: group-scheme-service
has property: locator
has property: code
has property: name
has property: employerPartyLocator
has property: status

Scheme Member
type: Class
comment: The association between a Group Scheme and an individual member's policy. SchemeMember records the member's Party locator, policy locator, and enrollment status, enabling the employer portal to list and manage all covered employees within the scheme.
layer: domain
owner service: group-scheme-service
has property: schemeId
has property: memberPartyLocator
has property: policyLocator
has property: status

Segment
type: Class
comment: A named sub-division of a policy's insured population or coverage period used for targeted billing and reporting — for example, separating employee-only from family coverage tiers, or dividing a multi-location employer account by cost centre. Segments drive differential premium calculation and claims allocation. Concept sourced from Socotra; not yet modeled in Olly code.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: Segment

Session
type: Class
comment: A single AI triage interaction in which a user works through a clinical decision tree (pathway) to receive a disposition. Sessions carry chief complaint, demographic parameters (sex, age), current pathway state, and a final disposition (e.g. SEE_GP, GO_TO_ED, SELF_CARE).
layer: domain
owner service: triage
has property: userId
has property: pathwayId
has property: currentStateId
has property: sex
has property: age
has property: chiefComplaint
has property: status
has property: disposition
has property: completedAt

Symptom
type: Class
comment: A presenting complaint reported by a Member during triage, mapped to SNOMED-CT clinical findings where licensed. Aspirational: not currently backed by an Olly service or Postgres table.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: snomed
  ref: http://snomed.info/sct/404684003
has property: symptomText

Template
type: Class
comment: A reusable HTML/text layout used by the document service to generate member-facing communications — policy schedules, welcome letters, Explanation of Benefits PDFs, and renewal notices. Templates are keyed by market code and template type. Aligned to Socotra's Template resource, which also defines document generation templates used for policy documents and correspondence.
layer: domain
owner service: document-service
aligns with:
  standard: socotra
  ref: Template
has property: marketCode
has property: templateType
has property: contentHtml

Term
type: Class
comment: In Socotra's model, a Term represents a versioned coverage period on a policy, analogous to Olly's PolicyTerm. The Term entity in Socotra carries the full effective date range, premium amount for that period, and a list of insured elements. Olly's PolicyTerm and PolicyElement together cover this concept. Concept sourced from Socotra; Olly models this as PolicyTerm + PolicyElement.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: Term

Transaction Field Value
type: Class
comment: A value for a custom FieldDefinition collected on a PolicyTransaction (e.g. an endorsement or renewal), capturing transaction-specific dynamic data defined by the product schema.
layer: domain
owner service: enrollment
has property: locator
has property: transactionId
has property: fieldDefinitionId
has property: value

Turn
type: Class
comment: A single conversational exchange within a triage Session — one user input plus the agent's response. Turns record the pathway state before and after the exchange, any tool calls made by the agent, and tool results, enabling full replay of the triage interaction.
layer: domain
owner service: triage
has property: sessionId
has property: role
has property: content
has property: stateId
has property: toolName
has property: toolArgs
has property: toolResult

Underwriting Flag
type: Class
comment: An individual underwriter decision (APPROVE, BLOCK, or DECLINE) applied to a Quote. Multiple flags can coexist on a single Quote; the strictest decision wins. Flags record the reason for the decision and can be voided if superseded. Aligned to Socotra's UnderwritingFlag resource, which similarly captures underwriting decisions during the quote review process.
layer: domain
owner service: enrollment
aligns with:
  standard: socotra
  ref: UnderwritingFlag
has property: locator
has property: quoteId
has property: flagType
has property: reason
has property: voidedAt

User
type: Class
comment: An authenticated platform user — in the triage service context, a triage agent identified by username and hashed API key, with demographic attributes (sex, age) used for clinical pathway routing. Platform-wide human identity is managed in Keycloak. Aligned to Socotra's User resource, which also represents an authenticated operator with access credentials.
layer: domain
owner service: triage
aligns with:
  standard: socotra
  ref: User
has property: username
has property: apiKeyHash
has property: sex
has property: age

Webhook
type: Class
comment: An outbound HTTP callback registration that delivers domain events (e.g. policy.issued, claims.adjudicated) to external systems in real time. Webhooks carry an endpoint URL, subscribed event types, authentication headers, and retry strategy. Concept sourced from Socotra; Olly currently delivers events via Kafka topics rather than HTTP webhooks.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: Webhook

Workgroup
type: Class
comment: A named team of operations staff (claims adjusters, underwriters, credentialing reviewers) to whom work items can be assigned. Workgroups enable round-robin or skill-based routing of claims, prior auth requests, and credentialing reviews. Concept sourced from Socotra; Olly currently assigns reviewers directly; a Workgroup abstraction is aspirational.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: Workgroup

Write Off
type: Class
comment: The formal accounting recognition that an outstanding receivable (unpaid invoice or charge) will not be collected, resulting in a credit entry to the PREMIUM_RECEIVABLE ledger account. Write-offs are typically applied after a policy has been cancelled following the lapse window. Concept sourced from Socotra; not yet modeled as a separate entity in Olly code.
layer: domain
owner service: tbd
status: aspirational
aligns with:
  standard: socotra
  ref: WriteOff

ApisixRoute
type: Class
comment: An APISIX gateway route mapping a public path to a service.
layer: infra
has property: routePath
has property: upstream

KeycloakClient
type: Class
comment: A Keycloak client (web-employer, web-member, etc.) used for auth.
layer: infra
has property: clientId
has property: authFlow