AIA Insurance — Policy as Code
AI-Powered Rule Engine · Underwriting · Claims · Compliance · Live Evaluation
🛡️ PaC v2.0 ← Back to Prototype
⚙️

Policy as Code — What is it?

Policy as Code transforms insurance rules, underwriting criteria, compliance obligations, and eligibility conditions into executable, version-controlled, auditable code. Rules are no longer buried in PDFs or tribal knowledge — they are machine-readable, testable, and automatically enforced in real time.

✅ Auditable 🔄 Version-Controlled ⚡ Real-Time 🧪 Testable 🚫 Zero Human Error
→ Choose from 5 AIA policy documents, extract fields, and run all rule checks instantly
📝 Underwriting Rules (as Code)
underwriting_rules.json
// AIA Underwriting Rules — Policy as Code
// Version: 2.4.1 | Last updated: 2026-03-13

{
  "ruleset": "AIA_Underwriting_v2",
  "rules": [
    {
      "id": "UW-001",
      "name": "Maximum Entry Age",
      "condition": "applicant.age <= policy.maxEntryAge",
      "maxEntryAge": 65,
      "severity": "hard_stop",
      "message": "Applicant age exceeds 65 — not eligible"
    },
    {
      "id": "UW-002",
      "name": "Minimum Entry Age",
      "condition": "applicant.age >= 18",
      "severity": "hard_stop",
      "message": "Applicant must be at least 18 years old"
    },
    {
      "id": "UW-003",
      "name": "Sum Insured Cap",
      "condition": "applicant.sumInsured <= occupation.maxCoverage",
      "caps": {
        "professional": 5000000,
        "trades": 2000000,
        "manual_labour": 1000000
      },
      "severity": "hard_stop",
      "message": "Sum insured exceeds occupation risk cap"
    },
    {
      "id": "UW-004",
      "name": "Occupation Risk Tier",
      "condition": "occupation.riskTier <= 3",
      "tiers": {
        "tier_1": "Sedentary/Professional",
        "tier_2": "Light manual",
        "tier_3": "Moderate manual",
        "tier_4": "Heavy manual — excluded"
      },
      "severity": "hard_stop",
      "message": "Occupation tier 4 not eligible for coverage"
    },
    {
      "id": "UW-005",
      "name": "BMI Loading Check",
      "condition": "applicant.bmi < 35",
      "loading_if_over": 30,
      "exclusion_if_over": 40,
      "severity": "warning",
      "message": "BMI loading applies — refer to underwriter"
    },
    {
      "id": "UW-006",
      "name": "Pre-existing Condition Disclosure",
      "condition": "applicant.disclosedPreExisting == true",
      "severity": "warning",
      "message": "Pre-existing conditions require medical underwriting review"
    },
    {
      "id": "UW-007",
      "name": "Smoker Loading",
      "condition": "applicant.smoker == false",
      "loading_percent": 25,
      "severity": "info",
      "message": "25% premium loading applied for smokers"
    }
  ]
}
🎛️ Active Rules
➕ Add Custom Rule
🧪 Test Applicant Against Rules
LOAD SAMPLE APPLICANT:
Applicant Age
Sum Insured (AUD)
Occupation
BMI
Smoker?
Pre-existing Conditions?
Fill in applicant details and click Run to evaluate rules.
📝 Claims Eligibility Rules (as Code)
claims_eligibility.json
// AIA Claims Eligibility Rules
// Version: 1.8.3 | Domain: Life & Health

{
  "ruleset": "AIA_Claims_v1",
  "rules": [
    {
      "id": "CL-001",
      "name": "Policy Active at Time of Claim",
      "condition": "policy.status == 'active'",
      "severity": "hard_stop",
      "message": "Policy was not active at date of claim"
    },
    {
      "id": "CL-002",
      "name": "General Waiting Period",
      "condition": "claim.daysSinceInception >= policy.waitingPeriodDays",
      "waitingPeriodDays": 90,
      "severity": "hard_stop",
      "message": "Claim lodged within 90-day waiting period"
    },
    {
      "id": "CL-003",
      "name": "Cancer Waiting Period",
      "condition": "claim.type != 'cancer' || claim.daysSinceInception >= 90",
      "severity": "hard_stop",
      "message": "Cancer claims have a 90-day waiting period"
    },
    {
      "id": "CL-004",
      "name": "Exclusion Matching",
      "condition": "!policy.exclusions.includes(claim.condition)",
      "commonExclusions": [
        "self-inflicted injury",
        "war or armed conflict",
        "extreme sports",
        "pre-existing undisclosed"
      ],
      "severity": "hard_stop",
      "message": "Claimed condition is listed as a policy exclusion"
    },
    {
      "id": "CL-005",
      "name": "Benefit Amount Cap",
      "condition": "claim.amount <= policy.maxBenefitAmount",
      "severity": "warning",
      "message": "Claim amount exceeds maximum benefit — partial payment"
    },
    {
      "id": "CL-006",
      "name": "Documentation Complete",
      "condition": "claim.documents.length >= policy.requiredDocs",
      "requiredDocs": [
        "medical_certificate",
        "doctor_report",
        "claim_form"
      ],
      "severity": "warning",
      "message": "Missing required claim documentation"
    },
    {
      "id": "CL-007",
      "name": "Survival Period (Life Cover)",
      "condition": "claim.type != 'death' || claim.survivedDays >= 14",
      "severity": "hard_stop",
      "message": "Insured must survive 14 days for life claim"
    }
  ]
}
🎛️ Active Rules
🧪 Test Claim Against Rules
Policy Status
Days Since Inception
Claim Type
Condition / Cause
Claim Amount (AUD)
Max Benefit (AUD)
Documents Submitted
Days Survived (Death claim)
Fill in claim details and click Run to evaluate eligibility.
📝 Regulatory Compliance Rules (as Code)
compliance_rules.json
// AIA Compliance Rules — APRA, AML, Privacy Act
// Jurisdiction: Australia | Version: 3.1.0

{
  "ruleset": "AIA_Compliance_AU_v3",
  "frameworks": ["APRA CPS 234", "AML/CTF Act 2006", "Privacy Act 1988"],
  "rules": [
    {
      "id": "CO-001",
      "name": "KYC — Identity Verified",
      "framework": "AML/CTF Act 2006",
      "condition": "customer.kycStatus == 'verified'",
      "severity": "hard_stop",
      "message": "Policy cannot be issued without KYC verification"
    },
    {
      "id": "CO-002",
      "name": "AML Screening — PEP & Sanctions",
      "framework": "AML/CTF Act 2006",
      "condition": "customer.pepFlag == false && customer.sanctionsFlag == false",
      "severity": "hard_stop",
      "message": "Customer flagged on PEP/sanctions list — escalate to compliance"
    },
    {
      "id": "CO-003",
      "name": "Premium Threshold Reporting",
      "framework": "AML/CTF Act 2006",
      "condition": "policy.annualPremium < 10000",
      "reportingThreshold": 10000,
      "severity": "warning",
      "message": "Annual premium exceeds AUD $10,000 — AUSTRAC reporting required"
    },
    {
      "id": "CO-004",
      "name": "Privacy Consent Obtained",
      "framework": "Privacy Act 1988",
      "condition": "customer.privacyConsentDate != null",
      "severity": "hard_stop",
      "message": "Privacy consent must be obtained before data collection"
    },
    {
      "id": "CO-005",
      "name": "APRA Capital Adequacy",
      "framework": "APRA LPS 110",
      "condition": "insurer.capitalRatio >= 1.25",
      "minimumRatio": 1.25,
      "severity": "hard_stop",
      "message": "Insurer capital ratio below APRA minimum of 1.25"
    },
    {
      "id": "CO-006",
      "name": "Product Disclosure Statement Issued",
      "framework": "Corporations Act 2001",
      "condition": "policy.pdsIssuedDate != null",
      "severity": "hard_stop",
      "message": "PDS must be issued before policy is bound"
    },
    {
      "id": "CO-007",
      "name": "Cooling-Off Period Honoured",
      "framework": "Insurance Contracts Act 1984",
      "condition": "policy.coolingOffDays >= 14",
      "severity": "warning",
      "message": "14-day cooling off period must be communicated at point of sale"
    },
    {
      "id": "CO-008",
      "name": "Tax File Number Handling",
      "framework": "Privacy Act 1988 — Tax File Rule",
      "condition": "customer.tfnStoredEncrypted == true",
      "severity": "hard_stop",
      "message": "TFN must be stored encrypted — plain text storage is illegal"
    }
  ]
}
🎛️ Active Rules
🧪 Test Policy Against Compliance Rules
KYC Status
PEP Flag
Sanctions Flag
Annual Premium (AUD)
Privacy Consent
PDS Issued
TFN Encrypted
Cooling Off Days
Fill in policy details and click Run to check compliance.
📂 Step 1 — Load a Policy Document
Select a document above, or click From Prototype to use whichever document is currently loaded in aia_uc1_prototype.html.
Document Extracted
Fields identified and mapped to rule engine
0
Fields Extracted
0%
Avg Confidence
Extraction Metadata
Document ID--
Document Type--
Extraction Status--
Text Length--
Fields Identified--
Fields Mapped to PaC--
Extracted At--
Extracted Fields & Confidence Scores
🎬 Starting demo... Step 1 / 24