The INSMASTR insurance management system utilizes a DB2 relational database named INSPROD with five primary tables that manage the complete lifecycle of insurance policies, customers, claims, and providers. The database is designed to support high-volume batch processing with a focus on data integrity, audit trails, and fraud detection.
The schema follows these principles:
Relationship Summary:
| Parameter | Value | Description |
|---|---|---|
| Database Name | INSPROD | Production database instance |
| Isolation Level | CS (Cursor Stability) | Allows uncommitted reads for performance while maintaining consistency |
| Lock Timeout | 30 seconds | Maximum time to wait for a locked resource |
| Commit Frequency | 500 records | Records processed before issuing COMMIT |
| Auto-Commit | Disabled | Manual commit control for batch processing |
| Connection Type | Embedded SQL | COBOL program with embedded SQL statements |
Commit Strategy:
SQL Operations:
Purpose: Central table storing all insurance policy records including new policies and renewals.
Primary Key: POLICY_NUMBER Row Estimate: High volume (millions of records) Access Pattern: Primarily INSERT for new policies, UPDATE for usage tracking, SELECT for lookups
| Column Name | Data Type | Size | Nullable | Default | Description |
|---|---|---|---|---|---|
| POLICY_NUMBER | NUMERIC | 15 | NO | Generated | Unique policy identifier (PK) |
| CUSTOMER_NUMBER | NUMERIC | 10 | NO | - | Foreign key to CUSTOMER_TABLE |
| CUSTOMER_NAME | VARCHAR | 50 | NO | - | Denormalized customer name for reporting |
| INSURANCE_TYPE | VARCHAR | 10 | NO | - | Type: HEALTH, LIFE, AUTO, PROPERTY, DENTAL, VISION |
| POLICY_START_DATE | DATE/VARCHAR | 10 | NO | - | Policy effective date (YYYY-MM-DD) |
| POLICY_END_DATE | DATE/VARCHAR | 10 | NO | - | Policy expiration date (YYYY-MM-DD) |
| POLICY_TERM_MONTHS | SMALLINT | 2 | NO | - | Policy term duration in months |
| POLICY_STATUS | VARCHAR | 10 | NO | - | Status: ACTIVE, RENEWED, EXPIRED, CANCELLED |
| COVERAGE_AMOUNT | DECIMAL | (9,2) | NO | - | Total coverage amount (max 999,999,999.99) |
| DEDUCTIBLE_AMOUNT | DECIMAL | (7,2) | NO | - | Annual deductible amount |
| DEDUCTIBLE_MET | DECIMAL | (7,2) | NO | 0.00 | Year-to-date deductible met |
| OUT_OF_POCKET_MAX | DECIMAL | (7,2) | NO | - | Maximum out-of-pocket expense |
| OUT_OF_POCKET_MET | DECIMAL | (7,2) | NO | 0.00 | Year-to-date out-of-pocket expenses |
| PREMIUM_AMOUNT | DECIMAL | (7,2) | NO | - | Calculated premium amount |
| PAYMENT_FREQUENCY | CHAR | 1 | NO | - | M=Monthly, Q=Quarterly, S=Semi-Annual, A=Annual |
| PAYMENT_METHOD | CHAR | 2 | NO | - | CH=Check, CC=Credit Card, DC=Debit Card, EF=EFT |
| RISK_SCORE | SMALLINT | 2 | NO | 0 | Customer risk score (0-100) |
| FRAUD_SCORE | SMALLINT | 2 | NO | 0 | Policy fraud detection score (0-100) |
| CLAIMS_COUNT | INTEGER | 4 | NO | 0 | Number of claims filed against this policy |
| RENEWAL_COUNT | SMALLINT | 2 | NO | 0 | Number of times this policy has been renewed |
| RENEWAL_FROM_POLICY | NUMERIC | 15 | YES | NULL | Previous policy number (for renewed policies) |
| RENEWAL_TO_POLICY | NUMERIC | 15 | YES | NULL | New policy number (when this policy is renewed) |
| LAST_CLAIM_DATE | DATE | 10 | YES | NULL | Date of most recent claim |
| CREATED_DATE | TIMESTAMP | 26 | NO | CURRENT | Record creation timestamp |
| CREATED_BY | VARCHAR | 10 | NO | - | Program or user ID that created record |
| LAST_UPDATE_DATE | TIMESTAMP | 26 | YES | NULL | Last modification timestamp |
| UPDATED_BY | VARCHAR | 10 | YES | NULL | Program or user ID that last modified record |
| Index Name | Type | Columns | Purpose |
|---|---|---|---|
| PK_POLICY | PRIMARY KEY | POLICY_NUMBER | Unique policy identification |
| IX_POLICY_CUSTOMER | NON-UNIQUE | CUSTOMER_NUMBER | Customer policy lookup |
| IX_POLICY_STATUS | NON-UNIQUE | POLICY_STATUS | Status-based queries |
| IX_POLICY_DATES | NON-UNIQUE | POLICY_START_DATE, POLICY_END_DATE | Date range queries |
Purpose: Master table for customer demographic and contact information.
Primary Key: CUSTOMER_NUMBER Unique Key: SSN Row Estimate: Medium to high volume Access Pattern: MERGE operations (INSERT new, UPDATE existing), SELECT for validation
| Column Name | Data Type | Size | Nullable | Default | Description |
|---|---|---|---|---|---|
| CUSTOMER_NUMBER | NUMERIC | 10 | NO | - | Unique customer identifier (PK) |
| CUSTOMER_NAME | VARCHAR | 50 | NO | - | Customer full name |
| DOB | DATE/VARCHAR | 10 | NO | - | Date of birth (YYYY-MM-DD) |
| SSN | NUMERIC | 9 | NO | - | Social Security Number (unique) |
| GENDER | CHAR | 1 | NO | - | M=Male, F=Female, O=Other |
| MARITAL_STATUS | CHAR | 1 | YES | NULL | S=Single, M=Married, D=Divorced, W=Widowed |
| ADDRESS | VARCHAR | 200 | YES | NULL | Full address string (concatenated) |
| PHONE | VARCHAR | 15 | YES | NULL | Primary phone number |
| VARCHAR | 50 | YES | NULL | Email address | |
| STATUS | VARCHAR | 10 | NO | ACTIVE | ACTIVE, INACTIVE, SUSPENDED |
| RISK_PROFILE | VARCHAR | 10 | NO | - | LOW, MEDIUM, HIGH (calculated from risk score) |
| CREDIT_SCORE | SMALLINT | 2 | YES | NULL | Credit score (300-850 range typical) |
| FRAUD_ALERT | CHAR | 1 | NO | N | Y/N fraud alert flag |
| CREATED_DATE | TIMESTAMP | 26 | NO | CURRENT | Record creation timestamp |
| CREATED_BY | VARCHAR | 10 | NO | - | Program or user ID that created record |
| LAST_UPDATE_DATE | TIMESTAMP | 26 | YES | NULL | Last modification timestamp |
| UPDATED_BY | VARCHAR | 10 | YES | NULL | Program or user ID that last modified record |
| Index Name | Type | Columns | Purpose |
|---|---|---|---|
| PK_CUSTOMER | PRIMARY KEY | CUSTOMER_NUMBER | Unique customer identification |
| UK_CUSTOMER_SSN | UNIQUE | SSN | SSN uniqueness enforcement |
| IX_CUSTOMER_NAME | NON-UNIQUE | CUSTOMER_NAME | Name-based searches |
| IX_CUSTOMER_STATUS | NON-UNIQUE | STATUS | Active customer queries |
Purpose: Records all insurance claim submissions with financial details and fraud indicators.
Primary Key: CLAIM_ID Unique Key: CLAIM_NUMBER Row Estimate: Very high volume Access Pattern: Primarily INSERT, SELECT for duplicate checking and fraud analysis
| Column Name | Data Type | Size | Nullable | Default | Description |
|---|---|---|---|---|---|
| CLAIM_ID | NUMERIC | 10 | NO | Generated | Auto-generated unique claim identifier (PK) |
| CLAIM_NUMBER | VARCHAR | 15 | NO | - | External claim number from input file (UK) |
| POLICY_NUMBER | NUMERIC | 15 | NO | - | Foreign key to POLICY_TABLE |
| CUSTOMER_NUMBER | NUMERIC | 10 | NO | - | Foreign key to CUSTOMER_TABLE |
| CLAIM_TYPE | VARCHAR | 10 | NO | - | MEDICAL, HOSPITAL, EMERGENCY, DENTAL, VISION, AUTO, PROPERTY |
| INCIDENT_DATE | DATE/VARCHAR | 10 | NO | - | Date incident occurred (YYYY-MM-DD) |
| CLAIM_DATE | DATE/VARCHAR | 10 | NO | - | Date claim was submitted (YYYY-MM-DD) |
| CLAIM_AMOUNT | DECIMAL | (9,2) | NO | - | Total amount claimed |
| APPROVED_AMOUNT | DECIMAL | (9,2) | NO | - | Amount approved for payment |
| DEDUCTIBLE_APPLIED | DECIMAL | (7,2) | NO | 0.00 | Deductible amount applied to this claim |
| COPAY_APPLIED | DECIMAL | (7,2) | NO | 0.00 | Copay amount applied |
| COINSURANCE_APPLIED | DECIMAL | (7,2) | NO | 0.00 | Coinsurance amount applied |
| INSURANCE_PAID | DECIMAL | (9,2) | NO | 0.00 | Amount insurance company pays |
| PATIENT_RESPONSIBILITY | DECIMAL | (7,2) | NO | 0.00 | Amount patient/policyholder pays |
| CLAIM_STATUS | VARCHAR | 20 | NO | - | PROCESSING, UNDER REVIEW, APPROVED, DENIED |
| APPROVAL_STATUS | VARCHAR | 20 | NO | - | AUTO-APPROVED, PENDING APPROVAL, MANUAL REVIEW, FRAUD INVESTIGATION |
| PAYMENT_STATUS | VARCHAR | 20 | NO | - | APPROVED, PATIENT RESPONSIBILITY, DENIED |
| DENIAL_REASON | VARCHAR | 200 | YES | NULL | Reason for denial if applicable |
| PROVIDER_CODE | VARCHAR | 10 | NO | - | Foreign key to PROVIDER_TABLE |
| PROVIDER_NAME | VARCHAR | 50 | NO | - | Denormalized provider name |
| DIAGNOSIS_CODE | VARCHAR | 10 | YES | NULL | Medical diagnosis code (ICD-10) |
| PROCEDURE_CODE | VARCHAR | 10 | YES | NULL | Medical procedure code (CPT) |
| FRAUD_FLAG | CHAR | 1 | NO | N | Y/N fraud detected indicator |
| FRAUD_SCORE | SMALLINT | 2 | NO | 0 | Fraud detection score (0-100) |
| INVESTIGATION_FLAG | CHAR | 1 | NO | N | Y/N requires investigation |
| CREATED_DATE | TIMESTAMP | 26 | NO | CURRENT | Record creation timestamp |
| CREATED_BY | VARCHAR | 10 | NO | - | Program or user ID that created record |
| Index Name | Type | Columns | Purpose |
|---|---|---|---|
| PK_CLAIM | PRIMARY KEY | CLAIM_ID | Unique claim identification |
| UK_CLAIM_NUMBER | UNIQUE | CLAIM_NUMBER | External claim number uniqueness |
| IX_CLAIM_POLICY | NON-UNIQUE | POLICY_NUMBER | Policy claim lookup |
| IX_CLAIM_CUSTOMER | NON-UNIQUE | CUSTOMER_NUMBER | Customer claim history |
| IX_CLAIM_STATUS | NON-UNIQUE | CLAIM_STATUS | Status-based queries |
| IX_CLAIM_TYPE | NON-UNIQUE | CLAIM_TYPE | Claim type analysis |
| IX_CLAIM_FRAUD | NON-UNIQUE | FRAUD_FLAG | Fraud investigation queries |
| IX_CLAIM_DATES | NON-UNIQUE | INCIDENT_DATE, CLAIM_DATE | Date range analysis |
Purpose: Reference table for healthcare providers and service providers.
Primary Key: PROVIDER_CODE Row Estimate: Medium volume (thousands of records) Access Pattern: Primarily SELECT for validation and fraud scoring
| Column Name | Data Type | Size | Nullable | Default | Description |
|---|---|---|---|---|---|
| PROVIDER_CODE | VARCHAR | 10 | NO | - | Unique provider identifier (PK) |
| PROVIDER_NAME | VARCHAR | 50 | NO | - | Provider business name |
| PROVIDER_TYPE | VARCHAR | 10 | NO | - | HOSPITAL, CLINIC, DOCTOR, LAB |
| NETWORK_FLAG | CHAR | 1 | NO | - | Y=In-Network, N=Out-of-Network |
| ACTIVE_FLAG | CHAR | 1 | NO | Y | Y=Active, N=Inactive |
| FRAUD_SCORE | SMALLINT | 2 | NO | 0 | Provider fraud risk score (0-100) |
| RATING | DECIMAL | (1,2) | YES | NULL | Provider quality rating (0.00-9.99) |
| Index Name | Type | Columns | Purpose |
|---|---|---|---|
| PK_PROVIDER | PRIMARY KEY | PROVIDER_CODE | Unique provider identification |
| IX_PROVIDER_TYPE | NON-UNIQUE | PROVIDER_TYPE | Provider type queries |
| IX_PROVIDER_NETWORK | NON-UNIQUE | NETWORK_FLAG | In-network provider searches |
| IX_PROVIDER_ACTIVE | NON-UNIQUE | ACTIVE_FLAG | Active provider filtering |
Purpose: Audit trail for all database changes (referenced but not fully implemented in current version).
Primary Key: AUDIT_ID Row Estimate: Very high volume Access Pattern: INSERT only (append-only log)
| Column Name | Data Type | Size | Nullable | Default | Description |
|---|---|---|---|---|---|
| AUDIT_ID | BIGINT | 8 | NO | Generated | Auto-generated audit record ID (PK) |
| TABLE_NAME | VARCHAR | 30 | NO | - | Name of table that was modified |
| OPERATION | VARCHAR | 10 | NO | - | INSERT, UPDATE, DELETE |
| RECORD_KEY | VARCHAR | 50 | NO | - | Primary key value of modified record |
| TIMESTAMP | TIMESTAMP | 26 | NO | CURRENT | Timestamp of change |
| USER_ID | VARCHAR | 10 | NO | - | User or program that made the change |
| CHANGE_DETAILS | VARCHAR | 1000 | YES | NULL | JSON or text description of changes |
| Index Name | Type | Columns | Purpose |
|---|---|---|---|
| PK_AUDIT | PRIMARY KEY | AUDIT_ID | Unique audit record identification |
| IX_AUDIT_TABLE | NON-UNIQUE | TABLE_NAME, TIMESTAMP | Table-specific audit queries |
| IX_AUDIT_KEY | NON-UNIQUE | TABLE_NAME, RECORD_KEY | Record-specific audit trail |
Note: The AUDIT_TABLE is referenced in the code but not fully implemented in the current version (3.0). It is designed for future implementation to provide comprehensive audit trail functionality.
| FK Name | Column | References | On Delete | On Update | Description |
|---|---|---|---|---|---|
| FK_POLICY_CUSTOMER | CUSTOMER_NUMBER | CUSTOMER_TABLE(CUSTOMER_NUMBER) | RESTRICT | CASCADE | Links policy to customer |
| FK_POLICY_RENEWAL_FROM | RENEWAL_FROM_POLICY | POLICY_TABLE(POLICY_NUMBER) | SET NULL | CASCADE | Previous policy in renewal chain |
| FK_POLICY_RENEWAL_TO | RENEWAL_TO_POLICY | POLICY_TABLE(POLICY_NUMBER) | SET NULL | CASCADE | Next policy in renewal chain |
| FK Name | Column | References | On Delete | On Update | Description |
|---|---|---|---|---|---|
| FK_CLAIM_POLICY | POLICY_NUMBER | POLICY_TABLE(POLICY_NUMBER) | RESTRICT | CASCADE | Links claim to policy |
| FK_CLAIM_CUSTOMER | CUSTOMER_NUMBER | CUSTOMER_TABLE(CUSTOMER_NUMBER) | RESTRICT | CASCADE | Links claim to customer |
| FK_CLAIM_PROVIDER | PROVIDER_CODE | PROVIDER_TABLE(PROVIDER_CODE) | RESTRICT | CASCADE | Links claim to provider |
| Parent Table | Child Table | Relationship | Enforcement |
|---|---|---|---|
| CUSTOMER_TABLE | POLICY_TABLE | 1:N (One-to-Many) | FK_POLICY_CUSTOMER |
| POLICY_TABLE | CLAIM_TABLE | 1:N (One-to-Many) | FK_CLAIM_POLICY |
| CUSTOMER_TABLE | CLAIM_TABLE | 1:N (One-to-Many) | FK_CLAIM_CUSTOMER |
| PROVIDER_TABLE | CLAIM_TABLE | 1:N (One-to-Many) | FK_CLAIM_PROVIDER |
| POLICY_TABLE | POLICY_TABLE | 1:1 (Self-Referencing) | FK_POLICY_RENEWAL_FROM, FK_POLICY_RENEWAL_TO |
The database uses a combination of primary keys, unique keys, and non-unique indexes to support:
| Index Name | Type | Columns | Cardinality | Purpose |
|---|---|---|---|---|
| PK_POLICY | PRIMARY KEY, UNIQUE | POLICY_NUMBER | High | Record identification |
| IX_POLICY_CUSTOMER | NON-UNIQUE | CUSTOMER_NUMBER | Medium | Customer's policy list |
| IX_POLICY_STATUS | NON-UNIQUE | POLICY_STATUS | Low | Active policy queries |
| IX_POLICY_DATES | NON-UNIQUE, COMPOSITE | POLICY_START_DATE, POLICY_END_DATE | High | Date range searches |
| Index Name | Type | Columns | Cardinality | Purpose |
|---|---|---|---|---|
| PK_CUSTOMER | PRIMARY KEY, UNIQUE | CUSTOMER_NUMBER | High | Record identification |
| UK_CUSTOMER_SSN | UNIQUE | SSN | High | SSN uniqueness |
| IX_CUSTOMER_NAME | NON-UNIQUE | CUSTOMER_NAME | High | Name searches |
| IX_CUSTOMER_STATUS | NON-UNIQUE | STATUS | Low | Active customer filter |
| Index Name | Type | Columns | Cardinality | Purpose |
|---|---|---|---|---|
| PK_CLAIM | PRIMARY KEY, UNIQUE | CLAIM_ID | Very High | Record identification |
| UK_CLAIM_NUMBER | UNIQUE | CLAIM_NUMBER | Very High | Duplicate prevention |
| IX_CLAIM_POLICY | NON-UNIQUE | POLICY_NUMBER | Medium | Policy claim lookup |
| IX_CLAIM_CUSTOMER | NON-UNIQUE | CUSTOMER_NUMBER | Medium | Customer claim history |
| IX_CLAIM_STATUS | NON-UNIQUE | CLAIM_STATUS | Low | Status filtering |
| IX_CLAIM_TYPE | NON-UNIQUE | CLAIM_TYPE | Low | Type-based analysis |
| IX_CLAIM_FRAUD | NON-UNIQUE | FRAUD_FLAG | Very Low | Fraud investigations |
| IX_CLAIM_DATES | NON-UNIQUE, COMPOSITE | INCIDENT_DATE, CLAIM_DATE | High | Date analysis |
| Index Name | Type | Columns | Cardinality | Purpose |
|---|---|---|---|---|
| PK_PROVIDER | PRIMARY KEY, UNIQUE | PROVIDER_CODE | Medium | Record identification |
| IX_PROVIDER_TYPE | NON-UNIQUE | PROVIDER_TYPE | Very Low | Type filtering |
| IX_PROVIDER_NETWORK | NON-UNIQUE | NETWORK_FLAG | Very Low | Network queries |
| IX_PROVIDER_ACTIVE | NON-UNIQUE | ACTIVE_FLAG | Very Low | Active provider filter |
Purpose: Generates unique policy numbers
Configuration:
Usage:
SELECT NEXT VALUE FOR POLICY_SEQ INTO :HV-POLICY-NUMBER
Capacity: 900 trillion unique policy numbers available
Purpose: Generates unique claim IDs
Configuration:
Usage:
SELECT NEXT VALUE FOR CLAIM_SEQ INTO :HV-CLAIM-ID
Capacity: 10 billion unique claim IDs available
Policy Creation Rules:
Policy Renewal Rules:
Policy Status Transitions:
Customer Validation:
Risk Profile Classification:
Fraud Alert:
Claim Validation:
Fraud Detection Scoring:
| Factor | Condition | Score Addition |
|---|---|---|
| High Claim Frequency | > 3 claims in 30 days | +25 |
| Moderate Frequency | > 1 claim in 30 days | +10 |
| Very High Amount | Amount > $50,000 | +15 |
| High Amount | Amount > $25,000 | +10 |
| Provider Risk | Provider fraud score > 50 | +20 |
| Inactive Provider | Provider ACTIVE_FLAG = 'N' | +30 |
| Pattern Match | Similar claim in last 90 days | +20 |
| Weekend Incident | Incident on Saturday or Sunday | +5 |
Fraud Decision Logic:
Step 1: Apply Deductible
DEDUCTIBLE_REMAINING = DEDUCTIBLE_AMOUNT - DEDUCTIBLE_MET
DEDUCTIBLE_APPLIED = MIN(CLAIM_AMOUNT, DEDUCTIBLE_REMAINING)
REMAINING_AMOUNT = CLAIM_AMOUNT - DEDUCTIBLE_APPLIED
Step 2: Apply Copay/Coinsurance
COPAY_AMOUNT = REMAINING_AMOUNT * COPAY_PERCENTAGE
REMAINING_AMOUNT = REMAINING_AMOUNT - COPAY_AMOUNT
Step 3: Check Out-of-Pocket Maximum
OOP_REMAINING = OUT_OF_POCKET_MAX - OUT_OF_POCKET_MET
PATIENT_TOTAL = DEDUCTIBLE_APPLIED + COPAY_AMOUNT
If PATIENT_TOTAL > OOP_REMAINING:
PATIENT_RESPONSIBILITY = OOP_REMAINING
INSURANCE_PAID = CLAIM_AMOUNT - OOP_REMAINING
Else:
PATIENT_RESPONSIBILITY = PATIENT_TOTAL
INSURANCE_PAID = REMAINING_AMOUNT
Provider Validation:
Fraud Score Impact:
Table Names:
_TABLE for all tablesColumn Names:
Index Names:
Sequence Names:
_SEQ for sequences| COBOL Picture | DB2 Type | Size | Range | Usage |
|---|---|---|---|---|
| 9(10) | NUMERIC(10) | 5 bytes | 0 to 9,999,999,999 | Customer numbers |
| 9(15) | NUMERIC(15) | 8 bytes | 0 to 999,999,999,999,999 | Policy numbers |
| 9(09) | NUMERIC(9) | 5 bytes | 0 to 999,999,999 | SSN |
| 9(09)V99 | DECIMAL(9,2) | 5 bytes | 0.00 to 9,999,999.99 | Claim amounts |
| 9(07)V99 | DECIMAL(7,2) | 4 bytes | 0.00 to 99,999.99 | Deductibles, copays |
| S9(04) COMP | SMALLINT | 2 bytes | -32,768 to 32,767 | Term months, counts |
| S9(03) COMP-3 | SMALLINT | 2 bytes | -999 to 999 | Risk scores, fraud scores |
| S9(09) COMP-3 | INTEGER | 4 bytes | Large counters | Claims count |
| COBOL Picture | DB2 Type | Max Size | Usage |
|---|---|---|---|
| X(01) | CHAR(1) | 1 byte | Flags (Y/N), codes (M/F) |
| X(02) | CHAR(2) | 2 bytes | Payment method, state codes |
| X(10) | VARCHAR(10) | 10 bytes | Status codes, insurance types |
| X(15) | VARCHAR(15) | 15 bytes | Phone numbers, claim numbers |
| X(50) | VARCHAR(50) | 50 bytes | Names, provider names |
| X(200) | VARCHAR(200) | 200 bytes | Addresses, denial reasons |
| COBOL Picture | DB2 Type | Format | Usage |
|---|---|---|---|
| X(10) | DATE or VARCHAR(10) | YYYY-MM-DD | Policy dates, incident dates |
| X(26) | TIMESTAMP(26) | YYYY-MM-DD-HH.MM.SS.NNNNNN | Created date, update date |
Note: Dates are stored as VARCHAR(10) in some columns for flexibility, but DATE type is recommended for new implementations.
| Code | Description | Meaning |
|---|---|---|
| ACTIVE | Active Policy | Policy is currently in force |
| RENEWED | Renewed | Policy has been renewed (points to new policy) |
| EXPIRED | Expired | Policy term has ended |
| CANCELLED | Cancelled | Policy was terminated before end date |
| Code | Description | Meaning |
|---|---|---|
| PROCESSING | Processing | Claim is being evaluated |
| UNDER REVIEW | Under Review | Claim requires manual review or fraud investigation |
| APPROVED | Approved | Claim has been approved for payment |
| DENIED | Denied | Claim has been rejected |
| Code | Description | Meaning |
|---|---|---|
| AUTO-APPROVED | Auto-Approved | System automatically approved claim |
| PENDING APPROVAL | Pending Approval | Awaiting manual approval |
| MANUAL REVIEW | Manual Review | Requires reviewer attention |
| FRAUD INVESTIGATION | Fraud Investigation | Flagged for fraud investigation |
| Code | Description | Meaning |
|---|---|---|
| APPROVED | Approved | Payment authorized |
| PATIENT RESPONSIBILITY | Patient Responsibility | No insurance payment (patient pays all) |
| DENIED | Denied | No payment due to denial |
| Code | Description |
|---|---|
| HEALTH | Health Insurance |
| LIFE | Life Insurance |
| AUTO | Auto Insurance |
| PROPERTY | Property Insurance |
| DENTAL | Dental Insurance |
| VISION | Vision Insurance |
| Code | Description |
|---|---|
| MEDICAL | Medical Treatment |
| HOSPITAL | Hospital Stay |
| EMERGENCY | Emergency Room |
| DENTAL | Dental Services |
| VISION | Vision Services |
| AUTO | Auto Accident |
| PROPERTY | Property Damage |
| Code | Description |
|---|---|
| HOSPITAL | Hospital |
| CLINIC | Medical Clinic |
| DOCTOR | Individual Doctor |
| LAB | Laboratory |
All boolean flags use:
Examples: FRAUD_FLAG, INVESTIGATION_FLAG, NETWORK_FLAG, ACTIVE_FLAG, FRAUD_ALERT
Use NULL for:
Use ZERO for:
SELECT COUNT(*)
INTO :WS-DUPLICATE-COUNT
FROM POLICY_TABLE
WHERE CUSTOMER_NUMBER = :HV-CUSTOMER-NUMBER
AND INSURANCE_TYPE = :HV-INSURANCE-TYPE
AND POLICY_STATUS = 'ACTIVE'
Index Used: IX_POLICY_CUSTOMER, IX_POLICY_STATUS Frequency: Every new policy creation Performance: Sub-millisecond with proper indexes
SELECT CUSTOMER_NUMBER, CUSTOMER_NAME, RISK_PROFILE
INTO :HV-CUST-NUMBER, :HV-CUST-NAME, :HV-CUST-RISK-PROFILE
FROM CUSTOMER_TABLE
WHERE SSN = :POL-SSN
Index Used: UK_CUSTOMER_SSN (unique index) Frequency: Every new policy creation Performance: Direct index lookup
SELECT *
INTO :HV-POLICY-TABLE
FROM POLICY_TABLE
WHERE POLICY_NUMBER = :REN-POLICY-NUMBER
AND POLICY_STATUS = 'ACTIVE'
Index Used: PK_POLICY (primary key) Frequency: Every renewal request Performance: Single-row fetch via PK
SELECT COUNT(*)
INTO :WS-DUPLICATE-COUNT
FROM CLAIM_TABLE
WHERE CLAIM_NUMBER = :CLM-CLAIM-NUMBER
Index Used: UK_CLAIM_NUMBER (unique index) Frequency: Every claim submission Performance: Direct index lookup
SELECT COUNT(*)
INTO :WS-FREQUENCY-COUNT
FROM CLAIM_TABLE
WHERE CUSTOMER_NUMBER = :HV-CLM-CUSTOMER-NUMBER
AND CLAIM_DATE >= :WS-30-DAYS-AGO
AND CLAIM_STATUS <> 'DENIED'
Index Used: IX_CLAIM_CUSTOMER, IX_CLAIM_DATES Frequency: Every claim for fraud scoring Performance: Index range scan
SELECT COUNT(*)
INTO :WS-PATTERN-COUNT
FROM CLAIM_TABLE
WHERE CUSTOMER_NUMBER = :HV-CLM-CUSTOMER-NUMBER
AND CLAIM_TYPE = :HV-CLAIM-TYPE
AND CLAIM_AMOUNT = :HV-CLAIM-AMOUNT
AND PROVIDER_CODE = :HV-PROVIDER-CODE
AND CLAIM_DATE >= :WS-90-DAYS-AGO
AND CLAIM_ID <> :HV-CLAIM-ID
Index Used: IX_CLAIM_CUSTOMER, IX_CLAIM_DATES Frequency: Every claim for fraud scoring Performance: Index range scan with filters
SELECT PROVIDER_CODE, PROVIDER_NAME, PROVIDER_TYPE,
FRAUD_SCORE, ACTIVE_FLAG
INTO :HV-PROV-CODE, :HV-PROV-NAME, :HV-PROV-TYPE,
:HV-PROV-FRAUD-SCORE, :HV-PROV-ACTIVE-FLAG
FROM PROVIDER_TABLE
WHERE PROVIDER_CODE = :CLM-PROVIDER-CODE
Index Used: PK_PROVIDER (primary key) Frequency: Every claim submission Performance: Single-row fetch via PK
MERGE INTO CUSTOMER_TABLE AS C
USING (VALUES (:HV-CUST-NUMBER, :HV-CUST-NAME, ...))
AS S(CUSTOMER_NUMBER, CUSTOMER_NAME, ...)
ON C.CUSTOMER_NUMBER = S.CUSTOMER_NUMBER
WHEN MATCHED THEN
UPDATE SET C.CUSTOMER_NAME = S.CUSTOMER_NAME, ...
WHEN NOT MATCHED THEN
INSERT (CUSTOMER_NUMBER, CUSTOMER_NAME, ...)
VALUES (S.CUSTOMER_NUMBER, S.CUSTOMER_NAME, ...)
Index Used: PK_CUSTOMER (primary key for match) Frequency: Every new policy creation Performance: Single-row operation
UPDATE POLICY_TABLE
SET DEDUCTIBLE_MET = DEDUCTIBLE_MET + :WS-DEDUCTIBLE-APPLIED,
OUT_OF_POCKET_MET = OUT_OF_POCKET_MET + :WS-PATIENT-PAYS,
CLAIMS_COUNT = CLAIMS_COUNT + 1,
LAST_CLAIM_DATE = :WS-CURRENT-DATE,
LAST_UPDATE_DATE = CURRENT TIMESTAMP,
UPDATED_BY = :WS-PROGRAM-NAME
WHERE POLICY_NUMBER = :HV-POLICY-NUMBER
Index Used: PK_POLICY (primary key) Frequency: Every approved claim Performance: Single-row update via PK
UPDATE POLICY_TABLE
SET POLICY_STATUS = 'RENEWED',
RENEWAL_COUNT = RENEWAL_COUNT + 1,
RENEWAL_TO_POLICY = :HV-NEW-POLICY-NUMBER,
LAST_UPDATE_DATE = CURRENT TIMESTAMP,
UPDATED_BY = :WS-PROGRAM-NAME
WHERE POLICY_NUMBER = :REN-POLICY-NUMBER
Index Used: PK_POLICY (primary key) Frequency: Every successful renewal Performance: Single-row update via PK
Transaction Boundaries:
Example Transaction for Policy Creation:
Performance Characteristics:
Isolation Level CS (Cursor Stability):
Lock Timeout: 30 seconds
Lock Granularity:
Index Maintenance:
Statistics:
Buffer Pool Tuning:
Commit Frequency: