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
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:
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