Skip to content

Policies & Coverage

A Policy is the master insurance contract between an insurer and an Account (an employer group or an individual). This page walks through the full lifecycle from quote to cancellation.


Policy Lifecycle

A policy begins as a Quote — a priced proposal. Once accepted and underwritten, the quote converts to an active Policy. The policy accumulates PolicyTerm records as it renews annually. At any point it can be endorsed (mid-term changed), lapsed for non-payment, or explicitly cancelled.


PolicyStatus State Machine

StatusDescription
ACTIVECoverage is in force. Claims are adjudicable.
LAPSEDPremium unpaid beyond the grace period. Coverage suspended; new claims rejected. Reinstatement possible.
CANCELLEDIrrevocably terminated. No further claims accepted.
EXPIREDPolicy term ended and renewal was not completed.

PolicyTerm and PolicyElement

PolicyTerm

Each annual (or custom-length) coverage period is a PolicyTerm. Key fields:

FieldTypeNotes
TermNumberintSequential counter (1, 2, 3 …)
EffectiveFromdateInclusive start of coverage
EffectiveTodateInclusive end of coverage
StatusstringMirrors the parent Policy.Status

PolicyElement

A PolicyElement represents one insured unit within a term — either an employee or a dependent. It carries the per-member benefit schedule as a CoverageTerms JSON blob.

FieldTypeNotes
ElementTypestring"employee" or "dependent"
StatusstringACTIVE or REMOVED
PartyIDuuidLinks to the Party (person)
StaticIDuuidStable across term versions; used for accumulator tracking
EffectiveFromdateWhen this element became active
EffectiveTodate*Null if currently active
CoverageTermsjsonbCopay, coinsurance, deductible, OOP max per benefit category

Quote → Policy Issuance Flow

Key structs in this flow:

  • Quote — holds Status QuoteStatus, ProductVersionID, and a Document JSONB blob with the rated premium, benefit schedule, and applicant data.
  • QuoteEvent — immutable audit trail of every status change on the quote.
  • UnderwritingFlag — records an individual underwriter decision (APPROVE, BLOCK, or DECLINE) applied to a quote. Multiple flags can coexist; the strictest wins.
  • Policy — created when the quote reaches ACCEPTED and the first premium is collected. Policy.QuoteID links back to the originating quote.

Enrollment, Renewal, Endorsement, and Cancellation

All post-issuance changes are tracked as PolicyTransaction records:

CategoryWhen usedTypical status progression
ISSUANCEPolicy first boundDRAFT → PRICED → UNDERWRITTEN → APPLIED
RENEWALAnnual term rolloverDRAFT → PRICED → APPLIED
ENDORSEMENTMid-term change (add dependent, change address)DRAFT → PRICED → APPLIED
CANCELLATIONPolicy terminatedDRAFT → APPLIED
REINSTATEMENTLapsed policy restoredDRAFT → APPLIED
REVERSALCorrects a previous transactionDRAFT → REVERSED

Each transaction optionally references a TermID to anchor it to a specific coverage period. The EffectiveDate field controls when the change takes economic effect (which may differ from the processing date).


Key Go Struct Fields at a Glance

go
type Policy struct {
    ID               uuid.UUID
    Locator          string       // human-readable ref (e.g. "POL-2026-001234")
    AccountID        uuid.UUID    // billing account owner
    QuoteID          *uuid.UUID   // nil if not quote-originated
    ProductVersionID uuid.UUID    // the product/plan version
    Status           PolicyStatus // ACTIVE | LAPSED | CANCELLED | EXPIRED
    InceptionDate    time.Time    // date coverage first started
    Jurisdiction     string       // regulatory jurisdiction (e.g. "GB-ENG")
    BrokerLocator    *string      // optional broker reference
    Document         []byte       // jsonb: full policy document snapshot
}

Olly Health Insurance Platform