• Jobs
  • Support
Sign in
  • Jobs
  • Support
    • Developer Overview
  • Business Context

    • Business Overview
    • Business Glossary
    • Business Rules Reference
  • Architecture Documentation

    • System Architecture
    • Database Schema
    • Integration Points
    • Data Flow
  • Program Reference

    • Insurance.cbl (INSMASTR)
      • 1. Program Overview
      • 2. Technical Architecture
      • 3. Key Algorithms
      • 4. Code Organization
      • 5. Database Operations
      • 6. File Processing
      • 7. Error Handling
      • 8. API/Interface
  • Sign in
DocumentationCode Explorer
Loading...
Hypercubic

© Copyright 2025. All rights reserved.

On this page

  1. 1. Program Overview
  2. 2. Technical Architecture
  3. 3. Key Algorithms
  4. 4. Code Organization
  5. 5. Database Operations
  6. 6. File Processing
  7. 7. Error Handling
  8. 8. API/Interface

Insurance.cbl / INSMASTR - Comprehensive Program Reference

1. Program Overview

Purpose and Functionality

The INSMASTR program is a comprehensive, enterprise-grade Insurance Management System that handles all core insurance operations in batch mode. This mission-critical application processes three primary types of insurance transactions:

  1. Policy Creation: Complete processing of new insurance policy applications including customer enrollment, coverage validation, risk assessment, premium calculation, and database persistence
  2. Policy Renewal: Handles existing policy renewals with support for upgrades, downgrades, multi-year terms, and automatic discount calculations (loyalty, no-claims, multi-policy)
  3. Claims Processing: Manages insurance claim submissions with sophisticated fraud detection, payment calculations based on deductibles and copays, and policy usage tracking

The program operates as a high-performance batch processor, reading sequential input files, executing complex business logic, updating DB2 database tables, and generating comprehensive output files with detailed error logging and statistical reporting.

Version and Metadata

Program Constants (Lines 211-225):

01  WS-PROGRAM-CONSTANTS.
    05  WS-PROGRAM-NAME             PIC X(08) VALUE 'INSMASTR'.
    05  WS-VERSION                  PIC X(05) VALUE '03.00'.
    05  WS-RELEASE-DATE             PIC X(10) VALUE '2024-01-15'.

Maintenance History (Lines 26-31):

DateProgrammerDescription
2024-01-15JOHN DOEInitial Version
2024-01-20JANE SMITHAdded Fraud Detection Engine
2024-01-25BOB JONESEnhanced Premium Calculation

Entry Points and Execution Modes

Main Entry Point:

  • 0000-MAIN-CONTROL section (lines 853-879)
  • Single entry point following standard COBOL batch processing pattern
  • Execution via JCL with PARM parameter

Processing Modes (Lines 260-285): The program supports four distinct processing modes controlled via JCL PARM parameter from SYSIN:

01  WS-CONTROL-FLAGS.
    05  WS-PROCESSING-MODE          PIC X(10).
        88  PROCESS-POLICIES-ONLY   VALUE 'POLICY'.
        88  PROCESS-RENEWALS-ONLY   VALUE 'RENEWAL'.
        88  PROCESS-CLAIMS-ONLY     VALUE 'CLAIM'.
        88  PROCESS-ALL-FILES       VALUE 'ALL'.
ModePARM ValueDescriptionFiles Processed
POLICYPOLICYProcess policy applications onlyPOLFILE input, POLOUT output
RENEWALRENEWALProcess renewals onlyRENFILE input, RENOUT output
CLAIMCLAIMProcess claims onlyCLMFILE input, CLMOUT output
ALLALL or blankProcess all transaction types sequentiallyAll input and output files

Default Behavior (Lines 889-893): If no parameter is provided or SYSIN is empty, the program defaults to 'ALL' mode for comprehensive processing.


2. Technical Architecture

2.1 Program Structure (39 Sections)

The INSMASTR program is organized into 39 distinct sections across 3,228 lines of code, following a hierarchical numbering scheme:

Division Structure:

  • IDENTIFICATION DIVISION (Lines 33-37): Program metadata
  • ENVIRONMENT DIVISION (Lines 43-116): File definitions and special names
  • DATA DIVISION (Lines 121-840): File section and working storage
  • PROCEDURE DIVISION (Lines 847-3228): 39 numbered sections

Section Numbering Scheme:

0000-XXXX: Main Control (1 section)
1000-XXXX: Initialization routines (5 sections)
2000-XXXX: Policy processing (10 sections)
3000-XXXX: Renewal processing (7 sections)
4000-XXXX: Claims processing (9 sections)
7000-XXXX: Transaction management (1 section)
8000-XXXX: Error handling (1 section)
9000-XXXX: Finalization and cleanup (5 sections)

2.2 Main Processing Flow

Main Control Logic (Lines 853-879):

0000-MAIN-CONTROL SECTION.
    PERFORM 1000-INITIALIZE-PROGRAM

    EVALUATE TRUE
        WHEN PROCESS-POLICIES-ONLY
            PERFORM 2000-PROCESS-POLICIES
        WHEN PROCESS-RENEWALS-ONLY
            PERFORM 3000-PROCESS-RENEWALS
        WHEN PROCESS-CLAIMS-ONLY
            PERFORM 4000-PROCESS-CLAIMS
        WHEN PROCESS-ALL-FILES
            PERFORM 2000-PROCESS-POLICIES
            PERFORM 3000-PROCESS-RENEWALS
            PERFORM 4000-PROCESS-CLAIMS
        WHEN OTHER
            DISPLAY 'INVALID PROCESSING MODE: ' WS-PROCESSING-MODE
            MOVE 8 TO RETURN-CODE
    END-EVALUATE

    PERFORM 9000-FINALIZE-PROGRAM

    GOBACK.

2.3 Call Graph / Section Relationships

Loading diagram...

3. Key Algorithms

3.1 Risk Scoring Algorithm (5 Factors)

Section: 2130-CALCULATE-RISK-SCORE (Lines 1388-1444)

This algorithm evaluates five distinct risk factors to calculate a composite risk score from 0-100, which directly influences premium pricing and customer risk classification.

Algorithm Structure:

* Initialize risk score
MOVE ZERO TO WS-RISK-SCORE

* Factor 1: Age-Based Risk
IF WS-CUSTOMER-AGE < 25
    ADD 20 TO WS-RISK-SCORE
END-IF

IF WS-CUSTOMER-AGE > 65
    ADD 30 TO WS-RISK-SCORE
ELSE IF WS-CUSTOMER-AGE > 55
    ADD 15 TO WS-RISK-SCORE
END-IF

* Factor 2: Gender-Based Risk
IF POL-GENDER = 'M'
    ADD 5 TO WS-RISK-SCORE
END-IF

* Factor 3: Smoker Status
IF POL-SMOKER-FLAG = 'Y'
    ADD 25 TO WS-RISK-SCORE
END-IF

* Factor 4: Pre-existing Medical Conditions
IF POL-PRE-EXISTING-CONDITIONS = 'Y'
    ADD 20 TO WS-RISK-SCORE
END-IF

* Factor 5: Occupation-Based Risk (Table Lookup)
SET OCC-IDX TO 1
SEARCH WS-OCCUPATION-ENTRY
    AT END
        ADD 10 TO WS-RISK-SCORE    * Default if not found
    WHEN WS-OCCUPATION-NAME(OCC-IDX) = POL-OCCUPATION
        ADD WS-OCCUPATION-RISK(OCC-IDX) TO WS-RISK-SCORE
END-SEARCH

* Apply bounds (0-100)
IF WS-RISK-SCORE > 100
    MOVE 100 TO WS-RISK-SCORE
END-IF

IF WS-RISK-SCORE < 0
    MOVE 0 TO WS-RISK-SCORE
END-IF

Risk Factor Breakdown:

FactorConditionPointsBusiness Rationale
Age< 25 years+20Young drivers/policyholders higher risk
56-65 years+15Pre-senior increased risk
> 65 years+30Senior age highest risk category
GenderMale+5Statistical risk difference
SmokingSmoker+25Significant health risk factor
Pre-existingHas conditions+20Known health issues
OccupationVariable+10 to +60Job-specific risk (table-driven)

Example Calculation:

  • Customer: 60-year-old male, smoker, office worker, no pre-existing conditions
  • Age: 15 points (56-65 range)
  • Gender: 5 points (male)
  • Smoker: 25 points
  • Pre-existing: 0 points
  • Occupation: 10 points (office worker - low risk)
  • Total Risk Score: 55 (MEDIUM risk)

Risk Profile Classification (Lines 1582-1589):

EVALUATE TRUE
    WHEN WS-RISK-SCORE < 30
        MOVE 'LOW' TO HV-CUST-RISK-PROFILE
    WHEN WS-RISK-SCORE < 70
        MOVE 'MEDIUM' TO HV-CUST-RISK-PROFILE
    WHEN OTHER
        MOVE 'HIGH' TO HV-CUST-RISK-PROFILE
END-EVALUATE

3.2 Premium Calculation (Base Rate + Adjustments)

Section: 2140-CALCULATE-POLICY-PREMIUM (Lines 1450-1551)

This sophisticated algorithm calculates insurance premiums using a multi-step process incorporating coverage amount, insurance type, customer demographics, risk factors, deductibles, and applicable discounts.

Formula:

Base Premium = Coverage Amount × Insurance Type Base Rate
Adjusted for Deductible = Base × (1 - (Deductible/Coverage × 0.3))
Age-Adjusted = Adjusted × Age Factor (from table)
Risk-Adjusted = Age-Adjusted + (Age-Adjusted × Risk Score / 100)
After Discounts = Risk-Adjusted - Total Discounts
Tax Amount = After Discounts × State Tax Rate
Final Premium = After Discounts + Tax Amount + $25 Processing Fee

Step-by-Step Implementation:

Step 1: Calculate Base Premium by Insurance Type (Lines 1454-1473):

EVALUATE TRUE
    WHEN POL-TYPE-HEALTH
        COMPUTE WS-BASE-PREMIUM =
                POL-COVERAGE-AMOUNT * WS-HEALTH-BASE-RATE      * 0.0040
    WHEN POL-TYPE-LIFE
        COMPUTE WS-BASE-PREMIUM =
                POL-COVERAGE-AMOUNT * WS-LIFE-BASE-RATE        * 0.0020
    WHEN POL-TYPE-AUTO
        COMPUTE WS-BASE-PREMIUM =
                POL-COVERAGE-AMOUNT * WS-AUTO-BASE-RATE        * 0.0080
    WHEN POL-TYPE-PROPERTY
        COMPUTE WS-BASE-PREMIUM =
                POL-COVERAGE-AMOUNT * WS-PROPERTY-BASE-RATE    * 0.0030
    WHEN POL-TYPE-DENTAL
        COMPUTE WS-BASE-PREMIUM =
                POL-COVERAGE-AMOUNT * WS-DENTAL-BASE-RATE      * 0.0015
    WHEN POL-TYPE-VISION
        COMPUTE WS-BASE-PREMIUM =
                POL-COVERAGE-AMOUNT * WS-VISION-BASE-RATE      * 0.0010
END-EVALUATE

Insurance Type Base Rates (Lines 624-630):

Insurance TypeBase RateExample Premium ($100k coverage)
Health0.0040$400
Life0.0020$200
Auto0.0080$800
Property0.0030$300
Dental0.0015$150
Vision0.0010$100

Step 2: Apply Deductible Adjustment (Lines 1478-1481):

IF POL-DEDUCTIBLE > 0
    COMPUTE WS-BASE-PREMIUM = WS-BASE-PREMIUM *
            (1 - (POL-DEDUCTIBLE / POL-COVERAGE-AMOUNT) * 0.3)
END-IF

Logic: Higher deductible reduces premium by up to 30% based on deductible/coverage ratio

Step 3: Apply Age Factor (Lines 1486-1495):

SET AGE-IDX TO 1
SEARCH WS-AGE-RATE-ENTRY
    AT END
        MOVE 1.000 TO WS-AGE-FACTOR
    WHEN WS-CUSTOMER-AGE >= WS-AGE-RANGE-LOW(AGE-IDX)
      AND WS-CUSTOMER-AGE <= WS-AGE-RANGE-HIGH(AGE-IDX)
        MOVE WS-AGE-RATE-FACTOR(AGE-IDX) TO WS-AGE-FACTOR
END-SEARCH

COMPUTE WS-BASE-PREMIUM = WS-BASE-PREMIUM * WS-AGE-FACTOR

Age Rate Table (Lines 1059-1085):

Age RangeFactorImpact
18-250.80020% discount (young, healthy)
26-351.000Baseline
36-451.20020% increase
46-551.50050% increase
56-652.000100% increase
66-753.000200% increase
76-854.000300% increase

Step 4: Apply Risk Adjustment (Lines 1500-1501):

COMPUTE WS-RISK-ADJUSTMENT = WS-BASE-PREMIUM * (WS-RISK-SCORE / 100)
ADD WS-RISK-ADJUSTMENT TO WS-BASE-PREMIUM

Logic: Risk score directly increases premium proportionally (50 risk score = 50% increase)

Step 5: Calculate Discounts (Lines 1506-1518):

* Annual Payment Discount (5%)
IF POL-PAYMENT-FREQUENCY = 'A'
    COMPUTE WS-PREPAY-DISCOUNT = WS-BASE-PREMIUM * 0.05
    ADD WS-PREPAY-DISCOUNT TO WS-TOTAL-DISCOUNT
END-IF

* Large Coverage Discount (10% for > $500,000)
IF POL-COVERAGE-AMOUNT > 500000
    COMPUTE WS-TEMP-AMOUNT = WS-BASE-PREMIUM * 0.10
    ADD WS-TEMP-AMOUNT TO WS-TOTAL-DISCOUNT
END-IF

SUBTRACT WS-TOTAL-DISCOUNT FROM WS-BASE-PREMIUM

Step 6: Apply State Tax (Lines 1523-1534):

SET STATE-IDX TO 1
SEARCH WS-STATE-RATE-ENTRY
    AT END
        MOVE 0.08 TO WS-STATE-TAX-RATE    * Default 8%
    WHEN WS-STATE-CODE(STATE-IDX) = POL-STATE
        COMPUTE WS-STATE-TAX-RATE = WS-STATE-TAX-PCT(STATE-IDX) / 100
END-SEARCH

COMPUTE WS-TAX-AMOUNT = WS-BASE-PREMIUM * WS-STATE-TAX-RATE
ADD WS-TAX-AMOUNT TO WS-BASE-PREMIUM

State Rate Table Sample (Lines 1091-1105):

StateBase RateTax %
NY$110.008.875%
CA$105.008.250%
TX$95.006.250%
FL$98.007.000%

Step 7: Add Processing Fee and Finalize (Lines 1539-1544):

ADD 25.00 TO WS-BASE-PREMIUM    * Standard processing fee
MOVE WS-BASE-PREMIUM TO WS-FINAL-PREMIUM

Complete Example:

  • Health Insurance, $100,000 coverage, $5,000 deductible
  • Customer: 40 years old, risk score 50, annual payment
  • State: NY (8.875% tax)

Calculation:

  1. Base: $100,000 × 0.0040 = $400.00
  2. Deductible: $400 × (1 - 0.05 × 0.3) = $394.00
  3. Age Factor: $394 × 1.200 = $472.80
  4. Risk Adjustment: $472.80 × 0.50 = $236.40 → Total: $709.20
  5. Annual Discount: $709.20 × 0.05 = $35.46 → After: $673.74
  6. Tax: $673.74 × 0.08875 = $59.79
  7. Final Premium: $673.74 + $59.79 + $25.00 = $758.53

3.3 Fraud Detection Scoring (5 Factors with Thresholds)

Section: 4140-FRAUD-DETECTION (Lines 2454-2561)

This multi-component fraud detection system analyzes claims using five distinct fraud indicators, calculating a composite score that determines claim routing (auto-approve, manual review, or fraud investigation).

Detection Components:

Component 1: Claim Frequency Analysis (Lines 2460-2474):

EXEC SQL
    SELECT COUNT(*)
    INTO :WS-ROW-COUNT
    FROM CLAIM_TABLE
    WHERE CUSTOMER_NUMBER = :CLM-CUSTOMER-NUMBER
      AND CLAIM_DATE >= CURRENT_DATE - 30 DAYS
END-EXEC

EVALUATE TRUE
    WHEN WS-ROW-COUNT > 3
        ADD 25 TO WS-FRAUD-SCORE    * High frequency red flag
    WHEN WS-ROW-COUNT > 1
        ADD 10 TO WS-FRAUD-SCORE    * Moderate frequency warning
END-EVALUATE

Rationale: Multiple claims in 30 days is statistically suspicious

Component 2: Claim Amount Analysis (Lines 2479-2485):

EVALUATE TRUE
    WHEN CLM-CLAIM-AMOUNT > 50000
        ADD 15 TO WS-FRAUD-SCORE    * Very high amount
    WHEN CLM-CLAIM-AMOUNT > 25000
        ADD 10 TO WS-FRAUD-SCORE    * High amount
END-EVALUATE

Rationale: Large claims warrant extra scrutiny due to financial impact

Component 3: Provider History Check (Lines 2490-2508):

EXEC SQL
    SELECT FRAUD_SCORE, ACTIVE_FLAG
    INTO :HV-PROV-FRAUD-SCORE, :HV-PROV-ACTIVE-FLAG
    FROM PROVIDER_TABLE
    WHERE PROVIDER_CODE = :CLM-PROVIDER-CODE
END-EXEC

IF SQLCODE = 0
    IF HV-PROV-FRAUD-SCORE > 50
        ADD 20 TO WS-FRAUD-SCORE    * Suspicious provider
    END-IF

    IF HV-PROV-ACTIVE-FLAG = 'N'
        ADD 30 TO WS-FRAUD-SCORE    * Inactive provider (major red flag)
    END-IF
END-IF

Rationale: Provider fraud history strongly correlates with claim fraud

Component 4: Pattern Detection (Lines 2513-2526):

EXEC SQL
    SELECT COUNT(*)
    INTO :WS-ROW-COUNT
    FROM CLAIM_TABLE
    WHERE CUSTOMER_NUMBER = :CLM-CUSTOMER-NUMBER
      AND CLAIM_TYPE = :CLM-CLAIM-TYPE
      AND CLAIM_AMOUNT = :CLM-CLAIM-AMOUNT
      AND CLAIM_DATE >= CURRENT_DATE - 90 DAYS
END-EXEC

IF WS-ROW-COUNT > 0
    ADD 20 TO WS-FRAUD-SCORE    * Duplicate claim pattern
END-IF

Rationale: Identical claims (same type and exact amount) suggest fraud scheme

Component 5: Timing Analysis (Lines 2531-2535):

MOVE FUNCTION DAY-OF-WEEK(CLM-INCIDENT-DATE) TO WS-TEMP-NUMERIC

IF WS-TEMP-NUMERIC = 1 OR WS-TEMP-NUMERIC = 7
    ADD 5 TO WS-FRAUD-SCORE    * Weekend incident (minor indicator)
END-IF

Rationale: Weekend claims statistically show slight fraud increase

Fraud Score Decision Logic (Lines 2542-2561):

EVALUATE TRUE
    WHEN WS-FRAUD-SCORE >= WS-FRAUD-THRESHOLD (70)
        * High risk - fraud investigation required
        MOVE 'Y' TO HV-FRAUD-FLAG
        MOVE 'Y' TO HV-INVESTIGATION-FLAG
        MOVE 'UNDER REVIEW' TO HV-CLAIM-STATUS
        MOVE 'FRAUD INVESTIGATION' TO HV-APPROVAL-STATUS

    WHEN WS-FRAUD-SCORE >= 50
        * Medium risk - manual review required
        MOVE 'N' TO HV-FRAUD-FLAG
        MOVE 'Y' TO HV-INVESTIGATION-FLAG
        MOVE 'PENDING' TO HV-CLAIM-STATUS
        MOVE 'MANUAL REVIEW' TO HV-APPROVAL-STATUS

    WHEN WS-FRAUD-SCORE < 50
        * Low risk - normal processing
        MOVE 'N' TO HV-FRAUD-FLAG
        MOVE 'N' TO HV-INVESTIGATION-FLAG
        MOVE 'PROCESSING' TO HV-CLAIM-STATUS

        IF CLM-CLAIM-AMOUNT <= WS-AUTO-APPROVE-LIMIT (5000)
            MOVE 'AUTO-APPROVED' TO HV-APPROVAL-STATUS
        ELSE
            MOVE 'PENDING APPROVAL' TO HV-APPROVAL-STATUS
        END-IF
END-EVALUATE

Fraud Thresholds (Lines 224-225):

05  WS-FRAUD-THRESHOLD          PIC 9(03) VALUE 70.
05  WS-AUTO-APPROVE-LIMIT       PIC 9(05) VALUE 5000.

Fraud Score Interpretation:

Score RangeClassificationActionProcessing Time
0-49Low RiskAuto-process (if ≤$5k) or standard approvalFast
50-69Medium RiskRoute to senior claims adjuster2-3 days
70+High RiskRoute to fraud investigation unit7-14 days

Example Fraud Scenario:

  • Customer: 4 claims in last 30 days (+25)
  • Amount: $35,000 (+10)
  • Provider: Fraud score 60 (+20)
  • Pattern: No duplicates (0)
  • Timing: Weekday (0)
  • Total Fraud Score: 55 → Manual Review Required

3.4 Discount Calculations (Loyalty, No-Claims, Multi-Policy)

Renewal Premium Discounts (Section 3130-CALCULATE-RENEWAL-PREMIUM, Lines 1948-2045)

Loyalty Discount (Lines 1991-1998):

* 1% per year, maximum 15%
IF REN-LOYALTY-YEARS > 0
    COMPUTE WS-LOYALTY-DISCOUNT = WS-BASE-PREMIUM *
            (REN-LOYALTY-YEARS * 0.01)

    IF WS-LOYALTY-DISCOUNT > (WS-BASE-PREMIUM * 0.15)
        COMPUTE WS-LOYALTY-DISCOUNT = WS-BASE-PREMIUM * 0.15
    END-IF

    ADD WS-LOYALTY-DISCOUNT TO WS-TOTAL-DISCOUNT
END-IF

No-Claims Discount (Lines 2003-2011):

* 2% per claim-free year, maximum 20%
IF REN-NO-CLAIMS-YEARS > 0
    COMPUTE WS-NO-CLAIMS-DISCOUNT = WS-BASE-PREMIUM *
            (REN-NO-CLAIMS-YEARS * 0.02)

    IF WS-NO-CLAIMS-DISCOUNT > (WS-BASE-PREMIUM * 0.20)
        COMPUTE WS-NO-CLAIMS-DISCOUNT = WS-BASE-PREMIUM * 0.20
    END-IF

    ADD WS-NO-CLAIMS-DISCOUNT TO WS-TOTAL-DISCOUNT
END-IF

Multi-Policy Discount (Lines 2016-2030):

* 10% if customer has multiple active policies
IF REN-MULTI-POLICY-FLAG = 'Y'
    EXEC SQL
        SELECT COUNT(*)
        INTO :WS-POLICY-COUNT
        FROM POLICY_TABLE
        WHERE CUSTOMER_NUMBER = :REN-CUSTOMER-NUMBER
          AND POLICY_STATUS = 'ACTIVE'
    END-EXEC

    IF WS-POLICY-COUNT > 1
        COMPUTE WS-MULTI-POLICY-DISCOUNT = WS-BASE-PREMIUM * 0.10
        ADD WS-MULTI-POLICY-DISCOUNT TO WS-TOTAL-DISCOUNT
    END-IF
END-IF

Discount Summary Table:

Discount TypeFormulaMaximumExample (10 years, $1000 premium)
Loyalty1% per year15%10% = $100
No-Claims2% per year20%20% = $200 (if 10 years no claims)
Multi-Policy10% flat10%10% = $100
Total PossibleCumulative45%$400 maximum discount

4. Code Organization

4.1 Major Sections with Line Numbers and Descriptions

All 39 Sections Mapped:

0000-Series: Main Control

SectionLinesDescription
0000-MAIN-CONTROL853-879Program entry point; evaluates processing mode; orchestrates main flow

1000-Series: Initialization (5 sections)

SectionLinesDescription
1000-INITIALIZE-PROGRAM885-948Master initialization; accepts SYSIN mode; initializes variables; calls subordinate init sections
1100-OPEN-FILES954-1014Opens all files based on processing mode; handles file status errors
1200-CONNECT-DB21020-1049Establishes DB2 connection; sets isolation level CS; sets lock timeout 30 seconds
1300-INITIALIZE-RATE-TABLES1055-1123Loads age, state, and occupation rate tables into memory
1400-WRITE-REPORT-HEADERS1129-1133Writes report headers with program info and current date

2000-Series: Policy Processing (10 sections)

SectionLinesDescription
2000-PROCESS-POLICIES1139-1168Main policy loop; reads POLFILE until EOF; commits every 500 records
2100-PROCESS-POLICY-RECORD1179-1240Orchestrates individual policy processing; calls validation, calculation, database operations
2110-VALIDATE-POLICY-INPUT1246-1329Validates customer number, name, age, SSN, insurance type, coverage, email
2111-CALCULATE-CUSTOMER-AGE1335-1351Calculates age from DOB accounting for birthday occurrence
2120-CHECK-DUPLICATE-POLICY1358-1382SQL COUNT(*) to check for existing active policy
2130-CALCULATE-RISK-SCORE1388-1444Calculates 5-factor risk score (age, gender, smoker, conditions, occupation)
2140-CALCULATE-POLICY-PREMIUM1450-1551Multi-step premium calculation with base rate, age factor, risk adjustment, discounts, tax
2150-CREATE-UPDATE-CUSTOMER1557-1641MERGE operation to insert new customer or update existing
2160-INSERT-POLICY-RECORD1645-1733Generates policy number from POLICY_SEQ; inserts policy record
2170-WRITE-POLICY-OUTPUT1739-1766Writes pipe-delimited success record to POLOUT

3000-Series: Renewal Processing (7 sections)

SectionLinesDescription
3000-PROCESS-RENEWALS1766-1794Main renewal loop; reads RENFILE until EOF; commits every 500 records
3100-PROCESS-RENEWAL-RECORD1806-1862Orchestrates individual renewal processing
3110-VALIDATE-RENEWAL-INPUT1868-1899Validates policy number, renewal term (12/24/36), renewal type (ST/UP/DN/MY)
3120-GET-EXISTING-POLICY1905-1942SELECT to retrieve existing policy details; verifies ACTIVE status
3130-CALCULATE-RENEWAL-PREMIUM1948-2045Renewal premium with loyalty, no-claims, multi-policy discounts
3140-CREATE-RENEWAL-POLICY2051-2145Creates new policy record for renewal with new policy number
3150-UPDATE-OLD-POLICY2145-2165Updates old policy status to 'RENEWED'; links to new policy
3160-WRITE-RENEWAL-OUTPUT2171-2197Writes renewal confirmation to RENOUT

4000-Series: Claims Processing (9 sections)

SectionLinesDescription
4000-PROCESS-CLAIMS2197-2225Main claims loop; reads CLMFILE until EOF; commits every 500 records
4100-PROCESS-CLAIM-RECORD2237-2310Orchestrates individual claim processing
4110-VALIDATE-CLAIM-INPUT2316-2377Validates claim number, policy number, amount, type, dates
4120-GET-CLAIM-POLICY2383-2430SELECT to retrieve policy for claim; verifies active status and coverage dates
4130-CHECK-DUPLICATE-CLAIM2436-2454SQL COUNT(*) to check for duplicate claim number
4140-FRAUD-DETECTION2454-25615-component fraud analysis with frequency, amount, provider, pattern, timing checks
4150-CALCULATE-CLAIM-PAYMENT2567-2671Payment calculation: deductible application, copay, out-of-pocket max
4160-INSERT-CLAIM-RECORD2675-2761Generates claim ID from CLAIM_SEQ; inserts claim record
4170-UPDATE-POLICY-USAGE2767-2806Updates policy: increments deductible met, OOP met, claims count
4180-WRITE-CLAIM-OUTPUT2811-2852Writes claim decision to CLMOUT

7000-Series: Transaction Management (1 section)

SectionLinesDescription
7000-COMMIT-WORK2852-2867Executes DB2 COMMIT; resets commit counter; handles commit errors

8000-Series: Error Handling (1 section)

SectionLinesDescription
8000-ERROR-HANDLER2873-2941Central error handler; determines severity; formats error message; writes to ERRFILE; displays on console; rolls back DB errors; aborts if critical

9000-Series: Finalization (5 sections)

SectionLinesDescription
9000-FINALIZE-PROGRAM2947-2973Master finalization routine; calls final commit, summary, close, disconnect
9100-WRITE-SUMMARY-REPORT2979-3097Writes comprehensive summary report with statistics by function and overall
9200-CLOSE-FILES3103-3169Closes all open files; handles close errors as warnings
9300-DISCONNECT-DB23175-3197Disconnects from DB2 with RELEASE ALL
9999-ABORT-PROGRAM3203-3228Abnormal termination for critical errors; rolls back; closes files; STOP RUN with RC=16

4.2 Section Dependencies

Dependency Map:

  • All processing sections (2000, 3000, 4000) depend on initialization (1000-series) completing successfully
  • Transaction commits (7000) are called from all processing loops
  • Error handler (8000) can be called from any section
  • Finalization (9000) depends on all processing completing
  • Abort (9999) is independent and can be called from error handler

5. Database Operations

5.1 All 27 SQL Operations Cataloged

Connection and Setup (3 operations):

  1. CONNECT TO INSPROD (Line 1025)
  2. SET CURRENT ISOLATION = CS (Line 1031)
  3. SET CURRENT LOCK TIMEOUT = 30 (Line 1037)

SELECT Operations (10 operations): 4. Get policy number from POLICY_SEQ (Lines 1645-1649, 2055-2059) 5. Check duplicate policy COUNT() (Lines 1358-1365) 6. Get existing policy for renewal (Lines 1906-1920) 7. Count active policies for multi-policy discount (Lines 2019-2026) 8. Get claim ID from CLAIM_SEQ (Lines 2675-2679) 9. Get policy for claim (Lines 2389-2407) 10. Check duplicate claim COUNT() (Lines 2437-2442) 11. Fraud: Claim frequency last 30 days (Lines 2460-2466) 12. Fraud: Provider history (Lines 2491-2496) 13. Fraud: Pattern detection 90 days (Lines 2513-2521)

INSERT Operations (3 operations): 14. Insert policy record (Lines 1697-1719) 15. Insert renewal policy (Lines 2084-2115) 16. Insert claim record (Lines 2685-2747)

UPDATE Operations (2 operations): 17. Update old policy status to RENEWED (Lines 2146-2153) 18. Update policy usage (deductible met, claims count) (Lines 2774-2785)

MERGE Operations (1 operation): 19. Merge customer (insert new or update existing) (Lines 1597-1629)

Transaction Management (4 operations): 20. COMMIT WORK (Lines 2855-2857) 21. ROLLBACK WORK (Lines 2929-2931, 3206-3208) 22. RELEASE ALL (Line 3181) 23. CONNECT RESET (Line 3186)

5.2 CRUD Operations by Table

POLICY_TABLE (6 operations):

  • C: Insert new policy (Lines 1697-1719), Insert renewal policy (Lines 2084-2115)
  • R: Check duplicate (Lines 1358-1365), Get existing policy (Lines 1906-1920), Get policy for claim (Lines 2389-2407), Count active policies (Lines 2019-2026)
  • U: Update status to RENEWED (Lines 2146-2153), Update usage (Lines 2774-2785)
  • D: None

CUSTOMER_TABLE (1 operation):

  • C/U: Merge (insert or update) (Lines 1597-1629)
  • R: None (customer data retrieved via policy joins if needed)
  • D: None

CLAIM_TABLE (4 operations):

  • C: Insert claim record (Lines 2685-2747)
  • R: Check duplicate (Lines 2437-2442), Fraud frequency check (Lines 2460-2466), Fraud pattern check (Lines 2513-2521)
  • U: None
  • D: None

PROVIDER_TABLE (1 operation):

  • C: None
  • R: Get provider fraud score (Lines 2491-2496)
  • U: None
  • D: None

Sequences (2 operations):

  • POLICY_SEQ: Get next value (Lines 1645-1649, 2055-2059)
  • CLAIM_SEQ: Get next value (Lines 2675-2679)

5.3 Transaction Management (Commit Every 500 Records)

Commit Strategy (Lines 220, 2852-2867):

* Constant definition
05  WS-COMMIT-FREQUENCY         PIC 9(04) VALUE 500.

* Commit logic
7000-COMMIT-WORK SECTION.
    EXEC SQL
        COMMIT WORK
    END-EXEC

    IF SQLCODE NOT = 0
        MOVE 'COMMIT FAILED' TO WS-ERROR-MESSAGE
        MOVE 7001 TO WS-ERROR-CODE
        PERFORM 8000-ERROR-HANDLER
    ELSE
        DISPLAY 'COMMIT SUCCESSFUL - RECORDS: ' WS-COMMIT-COUNT
        MOVE ZERO TO WS-COMMIT-COUNT
    END-IF.

Commit Triggers:

  1. After every 500 records processed (checked in main processing loops)
  2. At program finalization (before closing files)
  3. Automatic rollback on any SQL error

Commit Pattern in Processing Loops (Example from Lines 1165-1167):

ADD 1 TO WS-COMMIT-COUNT
IF WS-COMMIT-COUNT >= WS-COMMIT-FREQUENCY
    PERFORM 7000-COMMIT-WORK
END-IF

5.4 Error Handling Patterns

SQLCODE Handling Pattern:

EXEC SQL
    [SQL OPERATION]
END-EXEC

IF SQLCODE NOT = 0
    MOVE [ERROR CODE] TO WS-ERROR-CODE
    MOVE '[ERROR MESSAGE]' TO WS-ERROR-MESSAGE
    PERFORM 8000-ERROR-HANDLER
END-IF

Special SQLCODE Values:

  • 0: Success
  • +100: No data found (may be acceptable depending on context)
  • Negative: Error condition (triggers rollback)

Automatic Rollback (Lines 2928-2933):

IF SQLCODE NOT = 0 AND SQLCODE NOT = 100
    EXEC SQL
        ROLLBACK WORK
    END-EXEC
    MOVE ZERO TO WS-COMMIT-COUNT
END-IF

6. File Processing

6.1 Input File Processing Loops

Generic Processing Pattern:

PERFORM UNTIL [file]-END-OF-FILE
    READ [INPUT-FILE] INTO [WS-INPUT-AREA]

    EVALUATE [file-status]
        WHEN '00'
            ADD 1 TO [READ-COUNT]
            ADD 1 TO WS-TOTAL-READ-COUNT
            PERFORM [PROCESS-RECORD-SECTION]
        WHEN '10'
            SET [file]-END-OF-FILE TO TRUE
        WHEN OTHER
            MOVE '[FILE READ ERROR]' TO WS-ERROR-MESSAGE
            MOVE [ERROR-CODE] TO WS-ERROR-CODE
            PERFORM 8000-ERROR-HANDLER
    END-EVALUATE

    IF WS-COMMIT-COUNT >= WS-COMMIT-FREQUENCY
        PERFORM 7000-COMMIT-WORK
    END-IF
END-PERFORM

Record Type Handling (Header/Detail/Trailer):

EVALUATE TRUE
    WHEN POL-HEADER
        CONTINUE    * Skip header records
    WHEN POL-TRAILER
        CONTINUE    * Skip trailer records
    WHEN POL-DETAIL
        * Process detail record
        [processing logic]
END-EVALUATE

6.2 Output File Generation

Output Format: Pipe-delimited for easy parsing and downstream processing

Policy Output Example (Lines 1739-1758):

STRING 'POLICY|'
       WS-POLICY-NUMBER '|'
       POL-CUSTOMER-NUMBER '|'
       POL-CUSTOMER-NAME '|'
       POL-INSURANCE-TYPE '|'
       HV-POLICY-START-DATE '|'
       HV-POLICY-END-DATE '|'
       WS-FINAL-PREMIUM '|'
       WS-RISK-SCORE '|'
       'SUCCESS|'
       WS-CURR-TIMESTAMP
       DELIMITED BY SIZE INTO POLICY-OUTPUT-RECORD
END-STRING

WRITE POLICY-OUTPUT-RECORD

Output Example:

POLICY|123456789012345|1234567890|JOHN DOE|HEALTH|2024-01-15|2025-01-15|758.53|055|SUCCESS|2024-01-15-10.30.45.123456

6.3 Error File Logging

Error Record Format (Lines 2900-2906):

STRING 'ERROR|'
       WS-ERROR-CODE '|'
       WS-ERROR-SEVERITY '|'
       WS-ERROR-MESSAGE '|'
       'SQLCODE=' SQLCODE '|'
       WS-ERROR-TIMESTAMP
       DELIMITED BY SIZE INTO ERROR-RECORD
END-STRING

WRITE ERROR-RECORD

Error Examples:

ERROR|2114|SEVERE|INVALID SSN|SQLCODE=0|2024-01-15-10.30.45.123456
ERROR|2162|SEVERE|POLICY INSERT FAILED|SQLCODE=-803|2024-01-15-10.30.46.789012
ERROR|4140|SEVERE|FRAUD INVESTIGATION|SQLCODE=0|2024-01-15-10.30.47.234567

6.4 Report Generation

Report Header (Lines 1130-1133):

MOVE '1' TO RPT-CC    * New page
WRITE REPORT-RECORD FROM WS-REPORT-HEADER-1
MOVE ' ' TO RPT-CC    * Single space
WRITE REPORT-RECORD FROM WS-REPORT-HEADER-2

Summary Report (Lines 2979-3097): Includes:

  • Program information and execution timestamp
  • Processing mode
  • File counts by type (read, processed, errors)
  • Overall totals
  • Commit count
  • Return code

Report Example:

INSURANCE MANAGEMENT SYSTEM - PROCESSING SUMMARY
================================================

PROGRAM: INSMASTR VERSION 03.00
DATE: 2024-01-15 TIME: 10:45:23

PROCESSING MODE: ALL

POLICY PROCESSING:
  RECORDS READ:      1,250
  RECORDS PROCESSED: 1,200
  ERRORS:               50

RENEWAL PROCESSING:
  RECORDS READ:        850
  RECORDS PROCESSED:   820
  ERRORS:               30

CLAIMS PROCESSING:
  RECORDS READ:      2,500
  RECORDS PROCESSED: 2,400
  ERRORS:              100

TOTAL SUMMARY:
  RECORDS READ:      4,600
  RECORDS PROCESSED: 4,420
  ERRORS:              180
  COMMITS:               9

RETURN CODE: 4 (PARTIAL SUCCESS)

7. Error Handling

7.1 49 Error Codes Documented

Complete Error Code Catalog:

Initialization Errors (1100-1299) - CRITICAL

CodeMessageSourceAction
1101POLICY INPUT FILE OPEN ERROR1100-OPEN-FILESAbort
1102RENEWAL INPUT FILE OPEN ERROR1100-OPEN-FILESAbort
1103CLAIMS INPUT FILE OPEN ERROR1100-OPEN-FILESAbort
1104POLICY OUTPUT FILE OPEN ERROR1100-OPEN-FILESAbort
1105RENEWAL OUTPUT FILE OPEN ERROR1100-OPEN-FILESAbort
1106CLAIMS OUTPUT FILE OPEN ERROR1100-OPEN-FILESAbort
1107ERROR FILE OPEN ERROR1100-OPEN-FILESAbort
1108REPORT FILE OPEN ERROR1100-OPEN-FILESAbort
1201DB2 CONNECTION FAILED1200-CONNECT-DB2Abort
1202SET ISOLATION LEVEL FAILED1200-CONNECT-DB2Abort
1203SET LOCK TIMEOUT FAILED1200-CONNECT-DB2Abort

Policy Processing Errors (2001-2999) - SEVERE

CodeMessageSourceAction
2001POLICY FILE READ ERROR2000-PROCESS-POLICIESSkip record
2111INVALID CUSTOMER NUMBER2110-VALIDATE-POLICY-INPUTReject
2112CUSTOMER NAME REQUIRED2110-VALIDATE-POLICY-INPUTReject
2113AGE OUTSIDE VALID RANGE (18-85)2110-VALIDATE-POLICY-INPUTReject
2114INVALID SSN2110-VALIDATE-POLICY-INPUTReject
2115INVALID INSURANCE TYPE2110-VALIDATE-POLICY-INPUTReject
2116INVALID COVERAGE AMOUNT2110-VALIDATE-POLICY-INPUTReject
2117INVALID EMAIL FORMAT2110-VALIDATE-POLICY-INPUTReject
2118INVALID PAYMENT FREQUENCY2110-VALIDATE-POLICY-INPUTReject
2119INVALID PAYMENT METHOD2110-VALIDATE-POLICY-INPUTReject
2121ACTIVE POLICY ALREADY EXISTS2120-CHECK-DUPLICATE-POLICYReject
2122DATABASE ERROR CHECKING DUPLICATE2120-CHECK-DUPLICATE-POLICYRollback
2151CUSTOMER MERGE FAILED2150-CREATE-UPDATE-CUSTOMERRollback
2161POLICY NUMBER GENERATION FAILED2160-INSERT-POLICY-RECORDRollback
2162POLICY INSERT FAILED2160-INSERT-POLICY-RECORDRollback
2171POLICY OUTPUT WRITE FAILED2170-WRITE-POLICY-OUTPUTWarning

Renewal Processing Errors (3001-3999) - SEVERE

CodeMessageSourceAction
3001RENEWAL FILE READ ERROR3000-PROCESS-RENEWALSSkip record
3111INVALID POLICY NUMBER3110-VALIDATE-RENEWAL-INPUTReject
3112INVALID RENEWAL TERM3110-VALIDATE-RENEWAL-INPUTReject
3113INVALID RENEWAL TYPE3110-VALIDATE-RENEWAL-INPUTReject
3114INVALID REQUESTED COVERAGE3110-VALIDATE-RENEWAL-INPUTReject
3121POLICY NOT FOUND3120-GET-EXISTING-POLICYReject
3122ERROR RETRIEVING POLICY3120-GET-EXISTING-POLICYRollback
3123POLICY NOT ACTIVE FOR RENEWAL3120-GET-EXISTING-POLICYReject
3141RENEWAL POLICY NUMBER GENERATION FAILED3140-CREATE-RENEWAL-POLICYRollback
3142RENEWAL POLICY INSERT FAILED3140-CREATE-RENEWAL-POLICYRollback
3151OLD POLICY UPDATE FAILED3150-UPDATE-OLD-POLICYRollback
3161RENEWAL OUTPUT WRITE FAILED3160-WRITE-RENEWAL-OUTPUTWarning

Claims Processing Errors (4001-4999) - SEVERE

CodeMessageSourceAction
4001CLAIMS FILE READ ERROR4000-PROCESS-CLAIMSSkip record
4111CLAIM NUMBER REQUIRED4110-VALIDATE-CLAIM-INPUTReject
4112INVALID POLICY NUMBER4110-VALIDATE-CLAIM-INPUTReject
4113INVALID CLAIM AMOUNT4110-VALIDATE-CLAIM-INPUTReject
4114INVALID CLAIM TYPE4110-VALIDATE-CLAIM-INPUTReject
4115FUTURE INCIDENT DATE NOT ALLOWED4110-VALIDATE-CLAIM-INPUTReject
4116CLAIM DATE BEFORE INCIDENT DATE4110-VALIDATE-CLAIM-INPUTReject
4117INVALID PROVIDER CODE4110-VALIDATE-CLAIM-INPUTReject
4121POLICY NOT FOUND FOR CLAIM4120-GET-CLAIM-POLICYReject
4122ERROR RETRIEVING POLICY FOR CLAIM4120-GET-CLAIM-POLICYRollback
4123POLICY NOT ACTIVE4120-GET-CLAIM-POLICYReject
4124INCIDENT OUTSIDE POLICY PERIOD4120-GET-CLAIM-POLICYReject
4131DUPLICATE CLAIM NUMBER4130-CHECK-DUPLICATE-CLAIMReject
4132ERROR CHECKING DUPLICATE CLAIM4130-CHECK-DUPLICATE-CLAIMRollback
4161CLAIM ID GENERATION FAILED4160-INSERT-CLAIM-RECORDRollback
4162CLAIM INSERT FAILED4160-INSERT-CLAIM-RECORDRollback
4171POLICY USAGE UPDATE FAILED4170-UPDATE-POLICY-USAGERollback
4181CLAIM OUTPUT WRITE FAILED4180-WRITE-CLAIM-OUTPUTWarning

Transaction Management Errors (7001-7999) - SEVERE

CodeMessageSourceAction
7001COMMIT FAILED7000-COMMIT-WORKRollback

Finalization Errors (9001-9999) - WARNING

CodeMessageSourceAction
9201ERROR CLOSING FILES9200-CLOSE-FILESWarning
9301DB2 DISCONNECT ERROR9300-DISCONNECT-DB2Warning

7.2 Severity Levels (WARNING, SEVERE, CRITICAL)

Severity Determination (Lines 2882-2893):

EVALUATE WS-ERROR-CODE
    WHEN 1101 THRU 1999
        MOVE 'CRITICAL' TO WS-ERROR-SEVERITY
        SET ERROR-CRITICAL TO TRUE
    WHEN 2001 THRU 2999
        MOVE 'SEVERE' TO WS-ERROR-SEVERITY
        SET ERROR-SEVERE TO TRUE
    WHEN 3001 THRU 3999
        MOVE 'SEVERE' TO WS-ERROR-SEVERITY
        SET ERROR-SEVERE TO TRUE
    WHEN 4001 THRU 4999
        MOVE 'SEVERE' TO WS-ERROR-SEVERITY
        SET ERROR-SEVERE TO TRUE
    WHEN 7001 THRU 7999
        MOVE 'SEVERE' TO WS-ERROR-SEVERITY
        SET ERROR-SEVERE TO TRUE
    WHEN OTHER
        MOVE 'WARNING' TO WS-ERROR-SEVERITY
        SET ERROR-WARNING TO TRUE
END-EVALUATE

Severity Impact:

SeverityMeaningImpactReturn Code
WARNINGNon-critical issueProcessing continues; error logged4 (partial success)
SEVEREBusiness rule violation or data errorRecord rejected; processing continues with next record8 (if all fail)
CRITICALSystem failureAutomatic rollback; program abort12 or 16

7.3 Error Handling Patterns

Central Error Handler Flow (8000-ERROR-HANDLER, Lines 2873-2941):

Loading diagram...

7.4 Rollback and Abort Procedures

Automatic Rollback Triggers (Lines 2928-2933):

  1. Any SQLCODE not equal to 0 or +100
  2. Critical error detected
  3. Commit failure
IF SQLCODE NOT = 0 AND SQLCODE NOT = 100
    EXEC SQL
        ROLLBACK WORK
    END-EXEC
    MOVE ZERO TO WS-COMMIT-COUNT
    DISPLAY 'DATABASE CHANGES ROLLED BACK'
END-IF

Abort Program Section (9999-ABORT-PROGRAM, Lines 3203-3228):

9999-ABORT-PROGRAM SECTION.
    DISPLAY '***********************************************'
    DISPLAY '*  PROGRAM ABORTED DUE TO CRITICAL ERROR      *'
    DISPLAY '***********************************************'
    DISPLAY 'ERROR CODE: ' WS-ERROR-CODE
    DISPLAY 'ERROR MESSAGE: ' WS-ERROR-MESSAGE

    * Rollback all uncommitted changes
    EXEC SQL
        ROLLBACK WORK
    END-EXEC

    * Attempt to close files gracefully
    PERFORM 9200-CLOSE-FILES

    * Disconnect from DB2
    PERFORM 9300-DISCONNECT-DB2

    * Set critical failure return code
    MOVE 16 TO RETURN-CODE

    DISPLAY 'PROGRAM TERMINATED WITH RETURN CODE 16'

    STOP RUN.

Abort Conditions:

  • File open error for ERROR-FILE or REPORT-FILE
  • DB2 connection failure
  • SET ISOLATION or LOCK TIMEOUT failure
  • Any error with CRITICAL severity (1101-1999 range)

8. API/Interface

8.1 JCL Parameters (Processing Mode)

Parameter Specification:

//SYSIN    DD *
ALL
/*

Valid Values:

  • POLICY - Process policies only
  • RENEWAL - Process renewals only
  • CLAIM - Process claims only
  • ALL - Process all types (default)

Parameter Handling (Lines 889-893):

ACCEPT WS-PROCESSING-MODE FROM SYSIN

IF WS-PROCESSING-MODE = SPACES
    MOVE 'ALL' TO WS-PROCESSING-MODE
END-IF

DISPLAY 'PROCESSING MODE: ' WS-PROCESSING-MODE

8.2 Input File Formats

Policy Input File (POLFILE) - 800 bytes (Lines 313-383):

FieldPositionLengthTypeDescription
Record Type1-22XHD=Header, DT=Detail, TR=Trailer
Customer Number3-12109Unique customer ID
Customer Name13-6250XFull name
Date of Birth63-7210XYYYY-MM-DD format
Gender731XM/F/O
Marital Status741XS/M/D/W
SSN75-8399Social Security Number
Address Street184-13350X
Address Street2134-18350X
Address City184-21330X
Address State214-2152XTwo-letter state code
Address ZIP216-22510XZIP or ZIP+4
Address Country226-2283XDefault USA
Phone Primary229-24315X
Phone Secondary244-25815X
Email259-30850XMust contain @
Insurance Type309-31810XHEALTH/LIFE/AUTO/PROPERTY/DENTAL/VISION
Coverage Amount319-329119(9)V99Maximum coverage
Deductible330-33899(7)V99Annual deductible
Copay Percentage339-340299Patient copay %
Out-of-Pocket Max341-34999(7)V99Annual OOP max
Payment Frequency3501XM/Q/S/A
Payment Method351-3522XCH/CC/DC/EF
Smoker Flag3531XY/N
Pre-existing Conditions3541XY/N
Occupation355-38430X
Annual Income385-395119(9)V99
Beneficiary Name396-44550X
Beneficiary Relation446-46520X
Agent Code466-47510X
Promo Code476-48510X
Referral Source486-49510X
Special Notes496-595100X
Filler596-800205XReserved

Renewal Input File (RENFILE) - 600 bytes (Lines 389-438):

FieldPositionLengthTypeDescription
Record Type1-22XHD/DT/TR
Policy Number3-17159Existing policy to renew
Customer Number18-27109
Customer Name28-7750X
Renewal Type78-792XST/UP/DN/MY
Current Expiry Date80-8910XYYYY-MM-DD
Renewal Term Months90-9129912, 24, or 36
Requested Coverage92-102119(9)V99New coverage if changing
Requested Deductible103-11199(7)V99New deductible if changing
Add Riders1121XY/N
Rider Codes (5x)113-16250X(10)×5
Payment Method163-1642XCH/CC/DC/EF
Auto Renewal Flag1651XY/N
Loyalty Years166-167299Years with company
No Claims Years168-169299Years without claims
Multi Policy Flag1701XY/N
Discount Codes (5x)171-280110variesCode (10) + Pct (4) ×5
Filler281-600320XReserved

Claims Input File (CLMFILE) - 900 bytes (Lines 444-523):

FieldPositionLengthTypeDescription
Record Type1-22XHD/DT/TR
Claim Number3-1715XExternal claim ID
Policy Number18-32159
Customer Number33-42109
Customer Name43-9250X
Claim Type93-10210XMEDICAL/HOSPITAL/EMERGENCY/DENTAL/VISION/AUTO/PROPERTY
Incident Date103-11210XYYYY-MM-DD
Claim Date113-12210XYYYY-MM-DD
Report Date123-13210XYYYY-MM-DD
Claim Amount133-143119(9)V99Total claim amount
Currency Code144-1463XUSD
Provider Code147-15610X
Provider Name157-20650X
Provider Type207-21610XHospital/Clinic/Doctor/Lab
Network Flag2171XY/N
Provider Tax ID218-23215X
Diagnosis Code233-24210XICD-10
Diagnosis Desc243-29250X
Procedure Code293-30210XCPT
Procedure Desc303-35250X
DRG Code353-3575X
Admission Date358-36710XYYYY-MM-DD
Discharge Date368-37710XYYYY-MM-DD
Length of Stay378-3803999Days
Emergency Flag3811XY/N
Police Report No382-40120XFor auto claims
Other Party Info402-501100XFor auto claims
Damage Estimate502-51099(7)V99For auto claims
Rental Needed5111XY/N
Document Flags512-5165XReceipt/Invoice/Rx/Xray/Lab
Pre-Auth Code517-53115X
Referral Code532-54615X
Override Code547-55610X
Filler557-900344XReserved

8.3 Output File Formats

All output files use pipe-delimited format (|) for easy parsing

Policy Output (POLOUT) - 500 bytes (Lines 1739-1758):

POLICY|{PolicyNum}|{CustNum}|{Name}|{Type}|{StartDate}|{EndDate}|{Coverage}|{Premium}|{RiskScore}|{Status}|{Timestamp}

Example:

POLICY|123456789012345|1234567890|JOHN DOE|HEALTH|2024-01-15|2025-01-15|100000.00|758.53|055|SUCCESS|2024-01-15-10.30.45.123456

Renewal Output (RENOUT) - 500 bytes:

RENEWAL|{OldPolicyNum}|{NewPolicyNum}|{CustNum}|{Name}|{OldPremium}|{NewPremium}|{Discount%}|{Status}|{Timestamp}

Claims Output (CLMOUT) - 500 bytes:

CLAIM|{ClaimID}|{ClaimNum}|{PolicyNum}|{Type}|{ClaimAmt}|{ApprovedAmt}|{InsurancePays}|{PatientPays}|{FraudScore}|{Status}|{Timestamp}

8.4 Return Codes

Return Code Values (Set in Lines 2957-2972):

EVALUATE TRUE
    WHEN WS-TOTAL-ERROR-COUNT = ZERO
        MOVE 0 TO RETURN-CODE    * Perfect success
    WHEN WS-TOTAL-PROCESS-COUNT = ZERO
        MOVE 8 TO RETURN-CODE    * All records failed
    WHEN WS-TOTAL-ERROR-COUNT > ZERO
        MOVE 4 TO RETURN-CODE    * Partial success
END-EVALUATE
Return CodeMeaningCondition
0SuccessAll records processed without errors
4Warning / Partial SuccessSome records had errors, others succeeded
8ErrorAll records failed OR invalid processing mode
12CriticalCannot open required files
16AbendCritical system error requiring abort

Was this page helpful?