Skip to main content

Knowledge Domain Database - Business Insurance

How does the domain work before writing a line of code? Choose a document from the left tree: each page explains part of the model.

Business Rules - Business Insurance

Domain: Business Insurance Type: Business Rule Catalogue Language: English Format: BR-NNN with trigger, invariant, enforcement level

> Regulatory disclaimer: rules reference Italian (D.Lgs. 209/2005) and EU (Solvency II) frameworks by reference. This is descriptive documentation for software developers, not legal advice.

---

BR-001 - Indemnity Principle (Underinsurance)

Context: Claims settlement - all property lines (Fire, Engineering, Cargo)

Rule: If the insured value declared in the policy (insured_value) is lower than the actual value of the asset at the time of loss (actual_value), the indemnity is reduced proportionally:

` net_indemnity = verified_loss × (insured_value / actual_value) − deductible `

Trigger: insured_value < actual_value at the date of loss.

Invariant: net_indemnity ≤ verified_loss × (insured_value / actual_value). The insurer never pays more than the proportional share of the loss.

Enforcement: Domain layer - ClaimSettlementService.calculateIndemnity(). Validated before generating IndemnitySettled event.

Regulatory basis: Civil Code art. 1907; D.Lgs. 209/2005.

---

BR-002 - Claim Notification Deadline

Context: All lines of business - claim filing

Rule: The policyholder must notify the insurer of a claim within the contractual deadline from the date of loss (typically 3–10 days for property; 24 hours for cargo in transit). Failure to notify on time may result in partial or full loss of coverage right, unless the delay was not attributable to the policyholder.

Trigger: report_date − loss_date > contractual_deadline.

Enforcement: System warning on claim entry; underwriter/adjuster manual review. Does not auto-reject - requires human decision.

Regulatory basis: Civil Code art. 1913.

---

BR-003 - Deductible Calculation

Context: Claims settlement - all lines

Rule:

  • Absolute deductible: net_indemnity = MAX(0, verified_loss − deductible_amount)
  • Percentage excess (scoperto): net_indemnity = MAX(0, verified_loss × (1 − excess_pct))
  • Combined: apply deductible first, then excess on remainder
  • In all cases: net_indemnity ≤ policy_limit
Enforcement: Domain layer - ClaimSettlementService. All intermediate values logged for audit.

---

BR-004 - Maker-Checker for High-Value Payments

Context: Claims Management - settlement approval

Rule: Any settlement amount above the Claims Adjuster's authority limit requires explicit approval from the Claims Manager before payment execution. The system records both the proposal (Maker) and the approval (Checker) with timestamps and user IDs.

Trigger: net_indemnity > adjuster.authority_limit.

Enforcement: Application layer - ClaimSettlementApprovalUseCase. The IndemnitySettled event is only emitted after approval is recorded.

Pattern: Maker-Checker (dual control). Audit trail mandatory.

---

BR-005 - Immutable Claim Event Log

Context: Claims Management - all claim state transitions

Rule: Every transition of claim status generates an immutable ClaimEvent appended to the claim's event log. No event may be deleted or modified after creation. The claim state is always derivable by replaying the event sequence from the initial ClaimReported event.

Trigger: Any claim state transition.

Invariant: events.length >= 1 for any claim. events[i].occurred_at <= events[i+1].occurred_at (monotonic).

Enforcement: Infrastructure layer - append-only write, no DELETE or UPDATE on claim_event table. DB constraint: INSERT ONLY trigger.

Regulatory basis: IVASS Reg. 40/2018 (mandatory audit trail); GDPR art. 5 (accountability).

---

BR-006 - RC Auto Settlement Deadlines

Context: Claims Management - Motor Third Party Liability (RC Auto)

Rule:

  • Without personal injury: insurer must make a settlement offer within 30 days of claim documentation
  • With personal injury: 90 days
  • Failure to comply: statutory interest accrues on the settlement amount
  • Trigger: now() − claim.documentation_complete_date > sla_days.

    Enforcement: SLA monitoring service - daily batch job alerts Claims Manager on approaching/exceeded deadlines.

    Regulatory basis: D.Lgs. 209/2005 artt. 145-155.

    ---

    BR-007 - Health Data Segregation (GDPR)

    Context: All bounded contexts - data management

    Rule: Special categories of personal data under GDPR art. 9 (health, biometric data) must be stored in segregated, access-controlled data stores, separate from general policyholder data. Explicit consent is mandatory before processing. Data minimisation applies.

    Trigger: Any data involving natural persons with health-related information (e.g., income protection, accident policies).

    Enforcement: Infrastructure layer - separate schema or encrypted column with role-based access. Audit log of all access events.

    Regulatory basis: GDPR art. 9; D.Lgs. 196/2003 (Italian Privacy Code).

    ---

    BR-008 - Coverage Validation Before Claim Opening

    Context: Claims Management - claim intake

    Rule: Before a claim is accepted, the system must validate: (a) the policy is IN_FORCE at the loss_date; (b) the activated guarantee is ACTIVE at the loss_date; (c) the loss type is not in the guarantee's exclusion list; (d) the loss date falls within the coverage period.

    Trigger: ClaimReported command.

    Enforcement: Domain layer - ClaimValidationService.validateCoverage(). Returns CoverageValidationResult before creating the claim aggregate.

    ---

    BR-009 - Document Version Control

    Context: All bounded contexts - document management

    Rule: Every contract document (policy, endorsement, CGA, IPID) must be versioned. Once signed and issued, a document version is immutable. Amendments create new document versions linked to the original.

    Trigger: Any document modification or re-issuance.

    Enforcement: Document management service - version field + immutable storage. Audit trail of who issued and when.

    Regulatory basis: IDD Dir. 2016/97 (IPID immutability); IVASS Reg. 40/2018.

    ---

    BR-010 - Aggregate Annual Limit

    Context: Claims Management - multi-claim policies

    Rule: Where a guarantee has an aggregate annual limit (massimale aggregato annuo), the total indemnities paid under that guarantee in a policy year must not exceed the aggregate limit, regardless of the number of individual claims.

    Trigger: Each settlement where the guarantee has aggregate_limit defined.

    Enforcement: Domain layer - ClaimSettlementService checks sum(paid_indemnities for guarantee in policy_year) + net_indemnity ≤ aggregate_limit.

    ---

    Tracciability

    • Regulatory basis: D.Lgs. 209/2005 (Italian Insurance Code); IVASS Reg. 40/2018; GDPR 2016/679; Civil Code arts. 1882-1932; Solvency II Dir. 2009/138/EC
    • Linked to: entities.md; invariants.md; workflows/claim-management.md