Claims Processing & Adjudication
Libraries: claims, clmentry, clmforms, clmprint, clmrpt, clmshare, clmsproc, clmutils (94 windows, 553 DataWindows).
Requirement prefix: CLM.
Purpose & business capability
This is the core module of HOMER. It captures health-benefit claims on form-specific entry screens (HCFA‑1500, UB92, dental, vision, drug, FSA/reimbursement, weekly-disability, repricing sheets, and others), moves each claim through a staged processing pipeline (corrections → code review → pre-adjudication → duplicate check → pricing → adjudication → payment allocation → audit → funding → paid), automatically applies plan benefit rules (exclusions, copays, deductibles, coinsurance, out-of-pocket, claimed/paid limits, holds), maintains member/family accumulators, coordinates benefits with other carriers, produces EOBs, member/provider letters and operational reports, and hands finished claims to the Funding module (fund register / check issuance). It also stages claims for outbound EDI to trading partners (e.g. PPO networks for repricing).
The pipeline stages themselves are executed by a background batch process (user id SFPIBACK appears throughout as the automated actor); the screens in this module are used to enter claims, correct errors raised as claim messages, override system decisions, and monitor the pipeline. The adjudication engine itself (clmsproc/n_claim_adjudication, 8,800+ lines) lives in this domain and is invoked both by the batch process and by interactive "send back to corrections" logic.
Actors
| Actor | Evidence |
|---|---|
| Claims entry operator ("claim person") | claim id embeds first 3 chars of the entering user's id (clmshare/n_cst_claims, of_getnewclaimid) |
| Claims examiner | claims.claim_examiner_sys_key / claim_examiner_userid columns (clmshare/d_claims_master); examiner audit setup (claims/w_audit_examiners_selection) |
| Claims auditor | Audit status screens (claims/w_claim_editor "Claims Audit" mode; claims/w_setstatusfromaudit) |
| Claims supervisor / MIS | claim unlock (claims/w_claims_unlock), background monitor (clmutils/w_bkgd_monitor), rule utilities (clmutils/w_adjd_rule_utils) |
Background batch process (SFPIBACK) | messages closed by sfpiback treated specially (clmsproc/n_claim_adjudication, of_adjudicateclaims); pricing rules created by SFPIBACK deleted on reset (clmshare/n_cst_return_claim_to_corrections) |
| Security-restricted user groups | group-level claim access; Returned Claims / develop groups may open RETURN/DELETE/UNIDENT claims (clmshare/n_cst_claim_control, of_checksecurityaccess) |
Key workflows
Claim lifecycle (status pipeline)
The pipeline order and display names are data-driven from table claim_status_order (clmshare/d_claim_status_order, used by clmshare/n_claims_status). The nine processing stages monitored by the background monitor are hard-coded in clmutils/w_bkgd_monitor (dw_status_counts, pfc_retrieve):
ls_status = {'RFCP', 'RFCR', 'RFPA', 'RFDC', 'RFPR', 'RFA', 'RFAL', 'RFCA', 'RFF'}
ls_desc = {'Corrections', 'CodeReview', 'Pre-Adjd', 'DupCheck', 'Pricing', 'Adjudication', 'Pmt Alloc', 'Audit', 'Funding'}
Statuses evidenced in code, beyond the nine pipeline stages: PAID, and the sub-statuses VOID, RETURN, DELETE, UNIDENT (claims/w_setclaimsstatus; clmshare/n_cst_claim_control of_checksecurityaccess), the HOLD variants formed by appending HOLD to a status (e.g. RFCPHOLD, RFAHOLD — clmshare/n_cst_claims of_setclaimsstatus strips the trailing "HOLD"; clmsproc/n_claim_adjudication references RFAHOLD), and REXOUT for electronically paid claims released from audit (clmshare/n_cst_claims, of_closemessage case 151).
Notes on the diagram: transitions between adjacent pipeline stages other than those cited are performed by the background batch application, which is outside these libraries (see Open questions). "Send back to corrections" (clmshare/n_cst_return_claim_to_corrections) is possible from any status above RFCPHOLD until funding data exists.
Stage behavior evidenced in this domain
- Entry (→ RFCP). A claim is captured on a form-specific tab object; on first save it receives a generated claim id and status
RFCP(clmshare/n_cst_claims,of_setnewclaim/of_getnewclaimid/of_save). - Corrections (RFCP). Errors raised by the pipeline appear as claim messages (
claim_messages); the Claims Correction screen retrieves claims with open messages and drives resolution message-by-message (claims/w_claim_correction,clmshare/n_cst_claimsof_closemessage). - Pre-adjudication (RFPA).
clmsproc/n_claim_adjudication.of_processclaimdefassigns a benefit definition to every claim line from the benefit package's prioritized definition list, corrects UB92 room & board dates, performs whole-claim (per-diem) pricing for qualifying repricing sheets, and performs accident-record checking. - Duplicate check (RFDC). Lines flagged
duplicate_claim_line_ind = 'Y'are rejected with the system duplicate reason; message 102 carries the list of candidate duplicate claim ids (DupClaims:system comment) for examiner disposition (clmsproc/n_claim_adjudicationof_adjudicateclaims;clmshare/n_cst_claimsof_closemessagecase 102;claims/u_duplicate_claim). - Pricing (RFPR). Allowed amounts / write-offs are produced by the Pricing module (outside this domain); adjudication consumes
allowed_amtand manual pricing entries fromclaim_line_pricing_rules(claims/w_claim_line_pricing_rules). - Adjudication (RFA).
of_adjudicateclaims+of_applypackage+of_applyruleapply the benefit package's rules to each line, writeclaim_line_rules,claim_line_accumsandmember_accums, apply COB, and compute the payable waterfall. - Payment allocation (RFAL) & payment status. Fund-register rows (payments) are shown on the claim's Payment tab (
clmentry/u_payment, DataWindowd_claim_history); missing-vendor message 140 sends a claim back for reprocessing (clmshare/n_cst_claimsof_closemessagecase 140). - Audit (RFCA). Claims selected for audit are held by message 151/171; release requires every other message closed and moves the claim to
RFF(orREXOUT) or back toRFCP(claims/w_setstatusfromaudit;clmshare/n_cst_claimscase 151). - Funding (RFF → PAID). Handled by the Funding module; this module enforces read-only behavior once funding data exists (
clmshare/n_cst_claim_control,of_getfundingstatus).
Adjudication engine flow (per claim line)
(All nodes: clmsproc/n_claim_adjudication.)
Business rules (requirements)
Claim identity, locking and access
- CLM-1 The system shall generate claim identifiers as origin code + 3-character user tag + Julian date (YYYYDDD) + 6-digit sequence number (
clmshare/n_cst_claims,of_getnewclaimid). - CLM-2 The system shall set every newly created claim to Corrections status (
RFCP) (clmshare/n_cst_claims,of_setnewclaim). - CLM-3 The system shall place a logical lock (
lock_seq_nodrawn from sequencelogical_lock_seq) on a claim before it may be edited, and shall open a claim locked by another user in read-only mode after warning the user who holds the lock (clmshare/n_cst_claim_control,of_setclaimlockid,of_getlockstatus). - CLM-4 Batch processing shall refuse to pre-adjudicate or adjudicate claims that are not locked (
clmsproc/n_claim_adjudication,of_processclaimdef,of_adjudicateclaims). - CLM-5 The system shall permit a user to open a claim only when (a) the claim's group is in the user's security groups, or (b) the claim has no group and was created by the user, or (c) the claim is in
DELETE/RETURN/UNIDENTstatus and the user belongs to theReturned Claimsordevelopsecurity group (clmshare/n_cst_claim_control,of_checksecurityaccess). - CLM-6 A claim searched by an external claim id shall be resolved to its internal claim id before locking (
clmshare/n_cst_claim_control,of_getlockstatus). - CLM-7 A claim in
PAIDstatus or later shall always open read-only ("Read Only - Paid") (clmshare/n_cst_claim_control,of_getfundingstatus). - CLM-8 A claim at Funding status (
RFF) or later with no actual funding activity shall open read-only but remain returnable to corrections; a claim with actual payment activity (a fund-register row that is not backed out, whose payment type is not EXPECTED/PREPAID/FICA/MATCH FICA/FITW/SITW/LITW/UNEMPLOY/MISC, and that has a non-zero non-worksheet paid amount or a paid date) shall open read-only and shall not be returnable (clmshare/n_cst_claim_control,of_getfundingstatus).
Status management
- CLM-9 Claim status ordering and screen groupings shall be data-driven from the claim-status-order table so screens can validate that a claim is still in the status family they service (
clmshare/n_claims_status;clmshare/d_claim_status_order). - CLM-10 From the claim editor a user shall be able to Void, Return, Mark-for-Deletion, Reactivate (to
RFCP), or Hold a claim, each action requiring confirmation and writing an informational claim message (Void=88, Return=87, Reactivate=89, Delete=144, Hold=86) (claims/w_claim_editorwf_setstatus;claims/w_setclaimsstatus). - CLM-11 Returning a claim shall currently mark it for deletion instead ("All claims sent to 'Return' status are now automatically being Marked for Deletion") (
claims/w_setclaimsstatus, open event). - CLM-12 Placing a claim on hold shall append
HOLDto its current status; removing hold shall strip the suffix and close message 86, which cannot be closed manually (clmshare/n_cst_claims,of_setclaimsstatus,of_closemessagecase 86). - CLM-13 The Void action shall be disabled for any claim that has ever reached
PAIDstatus (checked against claim status history) (claims/w_claim_editor,ue_setscreenstatusandwf_setstatus). - CLM-14 When a claim above
RFCPHOLDis edited in a way that requires reprocessing, or its status is manually set belowRFCP, the system shall reset the claim: status toRFCP; every line's status, duplicate flag and reject reason cleared and code-review flag set; fund-register rows backed out (backout_ind='Y', register status cleared, backout date stamped when not yet on a register); claim line rules and accumulators deleted with member accumulators decremented; internal-CM service usage decremented and claim/service links removed; messages closed except control codeDONOTCLOSEand deleted forDELONRESET; system-generated (SFPIBACK) pricing rules deleted; outstanding claim letters archived when moving to a sub-status (clmshare/n_cst_return_claim_to_corrections,of_returntocorrections;clmshare/n_cst_claims,of_resetclaim). - CLM-15 After a pipeline stage completes with no open messages the system shall advance the claim status: to
RFDC(unless the claim isVOID/RETURN), and fromRFAtoRFAL(clmsproc/n_claim_adjudication,of_update_claim_status,of_update_adjudication_status).
Entry & validation
- CLM-16 Each claim shall be captured on the entry form matching its claim form type; the supported types are HCFA1500, HCFA_REPRICE, UB92, UB92_REPRICE_IN, UB92_REPRICE_OUT, GENERIC_REPRICE, GENERIC_MEDICAL, GENERIC_DENTAL, DED_SUPPLEMENT, SFPI_DENTAL, SFPI_VISION_EXAM, SFPI_VISION, SFPI_HCR, SFPI_DEPENDENT, SFPI_WDI, SFPI_INELIGIBLE, DRUG, SSO (
clmshare/n_cst_claimform,of_getclaimsobject). - CLM-17 Saving a claim shall persist header, entry, diagnosis, line, pricing-rule, form-specific (UB92/HCFA/dental/vision/reimbursement/WDI/SSO/reprice), adjudication, message and fund-register data in a single transaction in referential order, rolling back everything on any failure (
clmshare/n_cst_claims,of_save). - CLM-18 Deleting a claim line shall return the claim to
RFCPand delete the claim's line diagnosis codes so the background process can rebuild them (clmshare/n_cst_claims,of_save). - CLM-19 The system shall validate required fields at save and record a claim message per missing field; a claim shall not be advanced to Funding while any error message is open (
clmshare/n_cst_claims,of_save/of_checkrequiredfields). - CLM-20 For anesthesia procedure codes the entry screen shall capture start/end time and compute total units from base units + time units + modifier units with a unit conversion factor (
clmentry/w_anesthesia_popup;clmentry/d_anesthesia_popupcolumns of tableclaims_anesthesia).
Pre-adjudication / benefit definition assignment
- CLM-21 Pre-adjudication shall skip definition assignment for lines already rejected or on claims messaged "no coverage", assigning the system reject definition (key −1) (
clmsproc/n_claim_adjudication,of_processclaimdef). - CLM-22 Dependent-care (DEPCARE) claims shall always receive the system dependent-care benefit definition; lines with procedure code
CM2000shall receive the system case-management-fees definition; MEDREIM, WDI and INELIGIBLE claims shall always have their benefit definition assigned manually (clmsproc/n_claim_adjudication,of_processclaimdef). - CLM-23 Definition assignment shall require the claim line's benefit plan to be in
COMPLETEstatus and a benefit package to be assigned, otherwise messages 139 / 121 are raised (clmsproc/n_claim_adjudication,of_processclaimdef). - CLM-24 The system shall assign the first benefit definition, in package priority order, whose criteria all pass against the claim line: inpatient/outpatient indicator, procedure-group or procedure criterion, diagnosis-group or diagnosis criterion, procedure modifiers (modifier 1, then modifier 2), place of service, revenue code, and provider specialty; if all other criteria pass but the definition requires a specialty and the provider has none, message 164 "expected specialty" is raised (
clmsproc/n_claim_adjudication,of_assigndef). - CLM-25 For UB92 inpatient room & board lines the system shall set the line through-date to from-date + units and raise an error when the resulting range falls outside the UB92 statement dates (message 156); for UB92 outpatient lines with 1 unit the through-date is set equal to the from-date (
clmsproc/n_claim_adjudication,of_processclaimdef). - CLM-26 Room & board shall be identified by revenue code categories 10–17, 20 and 21 (first two digits) (
clmsproc/n_claim_adjudication,of_isroomandboard).
Whole-claim (per-diem) pricing
- CLM-27 A claim shall qualify for whole-claim pricing only when its repricing method is
WHOLE, it is a UB92 repricing form, the member is on file, the provider is in network, code review did not change the claim, at least one line is inpatient room & board, not all lines are rejected, and all line networks (HCN) match the claim's network (clmsproc/n_claim_adjudication,of_iswholeclaimpriced). - CLM-28 Whole-claim pricing shall distribute per-diem amounts from the claim's reprice detail across each covered day, excluding the discharge day ("we do not pay discharge day"), and shall raise errors when units and room & board dates disagree, when multiple per-diem amounts exist for a day, or when a day has no per-diem amount (
clmsproc/n_claim_adjudication,of_wholeclaimprice). - CLM-29 When the system determines a repricing sheet should not be a repricing claim (wrong network, unknown member, out-of-network provider, or code-review change), closing message 104 shall convert the claim to the equivalent standard form type (
clmshare/n_cst_claims,of_closemessagecase 104;claims/w_convert_to_reprice_form).
Accident processing
- CLM-30 During pre-adjudication the system shall attach the claim to an existing accident record when the claim's diagnoses match the accident's diagnoses within 90 days of the accident; matches beyond 90 days, or accident-group diagnoses (
ACC\INCdiagnosis group) without a matching record, shall raise the "potential accident" message 191 (unless previously dismissed by a user) (clmsproc/n_claim_adjudication,of_accidentchecking,of_processclaimdef). - CLM-31 During adjudication, a claim attached to an accident record shall follow the record's action code:
DENYraises message 193 for manual rejection,HOLDraises message 192, andPROCESS(or no record) closes both messages; user-closed accident messages are honored (clmsproc/n_claim_adjudication,of_adjudicateclaims; action codes HOLD/DENY/PROCESS inclaims/d_accident_edit).
Adjudication core
- CLM-32 Adjudication shall reject processing when the subscriber/patient pair does not exist in the family enrollment table (message 209) (
clmsproc/n_claim_adjudication,of_adjudicateclaims). - CLM-33 Before applying rules, adjudication shall delete and rebuild all claim-line rules and claim-line accumulators for the locked claims, backing amounts out of member accumulators (
clmsproc/n_claim_adjudication,of_adjudicateclaims,of_deletelineaccums). - CLM-34 Lines that are rejected, flagged as duplicates, or on a no-coverage claim shall have all computed amounts set to zero; duplicates receive system reason −2 and no-coverage lines system reason −1; any other rejected line must carry an examiner-supplied reject reason (message 180 otherwise) (
clmsproc/n_claim_adjudication,of_adjudicateclaims). - CLM-35 End-stage renal disease claims shall require a Medicare COB record; ESRD claims without one raise message 210 (
clmsproc/n_claim_adjudication,of_adjudicateclaims, DataWindowd_adjd_esrd_without_cob). - CLM-36 The system shall warn when a member approaches the plan's lifetime maximum, raising one-time member-level messages at 50% (201), 75% (202), 95% (203) and at/over 100% (204) of
LIFETIME_MAX_AMT, computed from lifetime paid amounts plus lifetime credits (clmsproc/n_claim_adjudication,of_adjudicateclaims). - CLM-37 Rules shall be applied in package rule order, adjusted by each rule's "Applies After" dependency; an unresolvable (circular) ordering raises message 231 and stops adjudication of the line (
clmsproc/n_claim_adjudication,of_applypackage,of_reorderrules). - CLM-38 Paid-limit (
PAID) rules shall additionally be pre-tested before all other rules (PAID$TESTcopies) so a limit already satisfied before this claim rejects the line up front (clmsproc/n_claim_adjudication,of_insertpaidtestrules,of_applyrulecasePAID$TEST). - CLM-39 A rule shall be skipped unless the claimant's relationship matches the rule's subscriber/spouse/dependent flags; the patient's relationship is taken from the most recent
RELATIONSmember category value, withSpouse,Common LawandEx-Spousetreated as spouse (clmsproc/n_claim_adjudication,of_applypackage). - CLM-40 A rule shall be skipped when its PCP, authorization, pre-certification, pre/post-admission, or referral indicator contradicts the claim's utilization-management case data (
um_casesper claim line, plus pre-cert/referral stub tables) (clmsproc/n_claim_adjudication,of_applypackage). - CLM-41 A rule shall be skipped when the patient's age at date of service is outside the rule's minimum/maximum age (period types YEAR/MONTH/WEEK/DAY; age computed from birthdate minus one day), or when the current payable amount is outside the rule's min/max consider amounts, or when the rule's accident indicator contradicts the claim's accident linkage, or when the claim line's benefit definition is not in the rule's definition list, or when the rule's contingency-definition requirement is not met within the contingency period (
clmsproc/n_claim_adjudication,of_applypackage). - CLM-42 Rule quantities shall be derived per the rule's quantity type:
DATES/DAYS= days in the line's service period (inclusive);RBDAYS= days excluding the last (discharge) day; otherwise the line's units — optionally divided by the rule's quantity ratio; when the per-unit flag isNand the rule is not per-day, quantity is treated as 1 (clmsproc/n_claim_adjudication,of_applyrule). - CLM-43 The amount a rule may still retain shall be limited by the lesser of the individual and family maxima remaining on the member's accumulators for the rule's accumulator and period (accumulate by RETAINED, CONSIDERED−RETAINED, or QTY per the rule's accumulator type), and by a maximum count of family members who have individually satisfied the rule; for coinsurance (
COI) rules the maximum is scaled by the retain percentage so COI behaves like out-of-pocket (clmsproc/n_claim_adjudication,of_lefttosatisfy,of_rulemax,of_satisfiedcount). - CLM-44 Rule-type computations shall be:
EXCL— retain the entire payable amount and stop processing rules;100PCT— retain nothing, record the amount/quantity as "considered at 100%" so later DED/COI/OOP rules exclude it;COPAY— retainMin(consider_amt, Min(retain_value × qty, left_to_satisfy))(per-quantity when quantity-accumulated);DED— retainMax(Min(left_to_satisfy, consider_amt), 0)after removing 100%-considered amounts;COI/OOP— retainMin(left_to_satisfy, consider_amt × retain% / 100)(retain% capped at 100), optionally feeding the remainder into the 100%-considered bucket when the rule'spct100_consider_ind = 'Y';CLAIMED/PAID— retain the amount (or quantity, prorated) exceeding the remaining limit; when already satisfied retain the entire considered amount;HOLD— set the line to HOLD, retain the full payable, and raise message 124 carrying the rule and reason; a user responseACCEPTreleases the amount,DENYretains it with the chosen reason (clmsproc/n_claim_adjudication,of_applyrule).
- CLM-45 The
HOLD\MULTSRG(multiple-surgery) hold rule shall be applied only when the claim has more than one line (clmsproc/n_claim_adjudication,of_applyrule). - CLM-46 Per-day rules (
PERDAY/PERDAYDR, except copays) shall not re-apply to days already counted for the member; when every day was already applied the line pays normally if the accumulator is unmet and is fully retained if it is met (clmsproc/n_claim_adjudication,of_applyrule,of_perday). - CLM-47 Rules with minimum/maximum unit bounds shall prorate the considered amount to the units inside the bounds and shall still accumulate even when nothing is considered (
clmsproc/n_claim_adjudication,of_applyrule). - CLM-48 After rules are applied the system shall compute the claim-line waterfall: considered = allowed − exclusions − claimed-limit; then successively subtract copay (→ allowed-after-copay), deductible (→ allowed-after-deductible), coinsurance/OOP (→ allowed-after-coinsurance) and paid-limit retention (→ benefit amount) (
clmsproc/n_claim_adjudication,of_claimlinesubtotals). - CLM-49 Every rule application with a non-null retained amount shall be recorded as a claim-line-rule row (rule, rule type, reason, retained amount/quantity) and shall update the member accumulator for the rule's accumulator key and computed period, creating the accumulator row if absent, adding considered amount/quantity only once per claim line per accumulator, and maintaining separate carryover buckets when the claim date falls in the rule's carryover window (carryover percentage clamped to 0–100%) (
clmsproc/n_claim_adjudication,of_claimlinerule,of_updateaccumulators). - CLM-50 Rules with accident period types shall accumulate from the accident date, and lifetime accumulators are stored with a from-date of 1950-01-01 and open through-date (
clmsproc/n_claim_adjudication,of_updateaccumulators).
Coordination of benefits
- CLM-51 COB shall be evaluated once per claim line — immediately before the first paid-limit rule, or after all rules — and only when the line's plan has a COB method (
clmsproc/n_claim_adjudication,of_applypackage,of_applycob). - CLM-52 When primary-carrier EOB detail is attached to the line and the member has an active COB record for the claim's coverage type, the payable amount shall be adjusted by COB method:
NORMAL:payable = Min(payable, Max(claimed − (cob_paid + Max(cob_writeoff, claimed − allowed)), 0));CARVEOUT:payable = payable − cob_paid(floor 0);REDUCECLM: no further processing (claimed already reduced);PAYBALANCE:payable = payable − cob_paid; and any COB reduction shall be recorded as a claim-line rule under the system COB rule (clmsproc/n_claim_adjudication,of_applycob).
- CLM-53 EOB detail shall reconcile with the claim line: submitted amount must equal the line's claimed amount (message 185) and a non-zero allowed amount must equal submitted − write-off (message 186) (
clmsproc/n_claim_adjudication,of_applycob). - CLM-54 The system shall message mismatches between EOB and enrollment COB data: EOB attached but no COB record (141); COB record without EOB when another internally administered plan is primary (143) or an external plan is primary (142) — except Medicare-primary drug claims, which process without an EOB (
clmsproc/n_claim_adjudication,of_applycob).
Internal case-management services
- CLM-55 For benefit definitions designated as CM-service definitions (therapy/DME), adjudication shall match the line to the member's open internal case-management service (by benefit definition, timeframe, and where needed procedure/diagnosis codes), raising message 225 when multiple services match, 226 when none match but similar services exist, and 227 when the claim would exceed the service's authorized units or dollars; matched usage updates the UM rule's units-used (unit-based) or soft-savings (dollar-based) (
clmsproc/n_claim_adjudication,of_adjudicateclaims). - CLM-56 A user closing a CM-service message with response
DENYshall cause the payable amount to be retained under the internal-CM rule (rule key 18443) with the user's chosen reason; responseNOTSERVICEbypasses CM processing; responseACCEPTallows normal payment (clmsproc/n_claim_adjudication,of_adjudicateclaims).
Duplicates, audit, letters, EOB
- CLM-57 Closing the duplicate message (102) shall present the candidate duplicate claims for side-by-side review; the examiner may mark the line "Not A Duplicate" (clearing the duplicate list) or retain an updated list (
clmshare/n_cst_claims,of_closemessagecase 102;claims/w_claim_message_duplicate;claims/u_duplicate_claim). - CLM-58 Audit selection shall be configurable by examiner (audit percentage, dollar limit, assigned weekday), by group (dollar limit, coverage type, all-claims flag), by member, by provider, by procedure code and by diagnosis code, each with effective date ranges (
claims/w_audit_examiners_selection,w_audit_groups_selection,w_audit_members_selection,w_audit_providers_selection,w_audit_procedure_codes,w_audit_diag_codes_selection; tablesaudit_*). - CLM-59 Releasing a claim from audit (closing message 151/171) shall require every other error message closed, then either advance the claim to Funding (
RFF, orREXOUTwhen the claim is electronically paid) with an immediate save/commit/unlock, or return it to Corrections (claims/w_setstatusfromaudit;clmshare/n_cst_claims,of_closemessagecase 151). - CLM-60 Claim letters shall be issued from the claim (message 212/157 per letter), may be attached to or detached from related claims, and shall be archived when their message is closed or the claim moves to a sub-status (
claims/w_claims_letterspfc_update;clmshare/n_cst_claimsof_closemessagecases 157/212;clmshare/n_cst_return_claim_to_corrections). - CLM-61 The system shall print an EOB for a claim on demand (
clmprint/w_claim_print_eobwithn_check_copy), and shall allow unattached primary-carrier EOBs for a member (by SSN) to be attached to a claim (claims/w_eob_attach,w_eob_selection,w_eob_edit,w_eob_edit_claim_lines).
Outbound EDI & external adjustments
- CLM-62 A user shall be able to mark a claim for outbound EDI to a chosen trading partner exactly once; the claim is inserted into the outbound EDI transactions table and message 223 records the selection (
claims/w_claim_editorue_outbound_edi;claims/w_claims_partners_select). - CLM-63 The outbound EDI processor shall stage claim, subscriber, patient, provider, line and form-specific data into the
outbound_edi_*staging tables, write one fixed-width file per network/claim-form-type per day to the configured output directory (codesAPPPATHS/OUTEDI), and purge staging rows once the file is created (clmutils/u_edi_outbound_edi;clmutils/w_edi_outbound_edi_processor). - CLM-64 External adjustment requests shall be tracked with statuses NEW / IN PROCESS / COMPLETED, with reports of outstanding adjustments and outstanding refunds (
claims/w_ext_adjustment,claims/d_ext_adjustments;clmrpt/w_clmrpt_outstanding_adjustments,w_clmrpt_outstanding_refunds).
Manual adjudication support
- CLM-65 The Adjudication tab shall show, per selected claim line, the benefit rules applied (with retained amounts, editable exclude flag), the manually entered pricing rules, adjudicated amounts, and rule totals; manually added claim-line rules receive new system keys at save (
clmentry/u_adjudication; DataWindowsclmshare/d_claim_line_rules_master,d_claim_line_pricing_rules_master). - CLM-66 Enrollment-confirmation gate: the annual-enrollment message (146) shall not be closable until enrollment records a
CONFIRMEDmember category value covering the claim's earliest service date, or every claim line is rejected (clmshare/n_cst_claims,of_closemessagecase 146). - CLM-67 Vision procedures on a medical form (message 211) shall require the examiner to choose processing under medical coverage (recorded as
Response:MEDICAL) or to void and re-enter the claim on a vision form (clmshare/n_cst_claims,of_closemessagecase 211).
Key formulas quoted from source
Copay / deductible / coinsurance retention (clmsproc/n_claim_adjudication, of_applyrule):
case 'COPAY'
ld_retain_amt = Min(ld_consider_amt, Min( ld_rule_retain * ld_qty, ld_left_to_satisfy))
case 'DED'
ld_retain_amt = Max(Min(ld_left_to_satisfy, ld_consider_amt), 0)
case 'COI' / 'OOP' // ld_rule_retain capped at 100
ld_retain_amt = Min(ld_left_to_satisfy, ld_consider_amt * (ld_rule_retain / 100))
case 'CLAIMED' / 'PAID'
if ld_consider_amt > ld_left_to_satisfy then
ld_retain_amt = ld_consider_amt - ld_left_to_satisfy
Claim-line subtotal waterfall (clmsproc/n_claim_adjudication, of_claimlinesubtotals):
ld_subtotal_amt = Dec(ads_clm_line.Object.allowed_amt[1])
ld_subtotal_amt = ld_subtotal_amt - ld_excl_total
ld_subtotal_amt = ld_subtotal_amt - ld_clmd_limit_total
ads_clm_line.Object.considered_amt[1] = ld_subtotal_amt
ld_subtotal_amt = ld_subtotal_amt - ld_copay_total
ads_clm_line.Object.allowed_after_copay_amt[1] = ld_subtotal_amt
ld_subtotal_amt = ld_subtotal_amt - ld_ded_total
ads_clm_line.Object.allowed_after_ded_amt[1] = ld_subtotal_amt
ld_subtotal_amt = ld_subtotal_amt - ld_coi_total
ads_clm_line.Object.allowed_after_coi_amt[1] = ld_subtotal_amt
ld_subtotal_amt = ld_subtotal_amt - ld_paid_limit_total
ads_clm_line.Object.benefit_amt[1] = ld_subtotal_amt
COB NORMAL method (clmsproc/n_claim_adjudication, of_applycob):
ld_payable_amt = Min(ld_payable_amt, Max((ld_claimed_amt - (ld_cob_amt
+ Max(ld_cob_write_off_amt,
(Dec(ads_clm_line.Object.claimed_amt[1]) - Dec(ads_clm_line.Object.allowed_amt[1]))))), 0))
Status advance on clean claims (clmsproc/n_claim_adjudication):
// of_update_claim_status: no open messages, not VOID/RETURN
adw_claims.Object.claim_status_cd[ll_cur_claim] = "RFDC"
// of_update_adjudication_status: no open messages and status = RFA
adw_claims.Object.claim_status_cd[ll_cur_claim] = "RFAL"
Data touched (main tables)
CRUD summarized from _re/analysis/schema.json for the eight claims libraries.
| Area | Tables (CRUD) |
|---|---|
| Claim core | claims (CRUD), claim_entries (CRUD), claim_lines (CRUD), claim_entry_diag_codes (CRUD), claim_line_diag_codes (R; deleted via embedded SQL on line delete), claims_xref (R) |
| Form-specific detail | claims_hcfa_info, claims_ub92_info, claim_ub92_conditions/occurrences/procedures/values, claims_ub92_itemized, claims_dental_info, claim_missing_teeth, claims_vision_info, claims_reimb_info, claims_wdi_info, claim_wdi_lines, claims_sso_info/diagnosis/procedure, claims_anesthesia, claim_other_ins_infos (all CRUD) |
| Adjudication results | claim_line_rules (CRUD), claim_line_accums (CRUD), claim_line_pricing_rules (CRUD), claim_line_payments (CRUD), member_accums (CRUD), member_accum_credits (CRUD) |
| Benefit configuration (read) | benefit_plans, benefit_pkgs, pkg_rules, benefit_rules (CRUD via rule utils), benefit_defs, benefit_def_diags/procs, rule_defs, rule_contingency_defs, pkg_rule_dependencies/fulfillments/requirements, level_scheds, carryover_rules, rounding_rules, group_periods (CRUD) |
| Messages & status | claim_messages (CRUD), global_messages (R), claim_statuses (R), claim_statuses_history (R), claim_status_order (R) |
| COB / EOB | coord_of_bens (CRUD), claim_eob_infos (CDU), claim_eob_info_details (CRUD) |
| Accidents | accidents, accident_members, accident_diagnoses, accident_claims (all CRUD) |
| Audit config | audit_examiners, audit_groups, audit_members, audit_providers, audit_procedure_codes, audit_diagnosis_codes (all create/update/delete, most read) |
| Repricing / networks | claims_reprice_info (CRUD), claims_reprice_detail (CRUD), edi_in_repricing (CRU), health_care_networks (R), moon_negotiations (R) |
| Payment / funding handoff | fund_register (CRUD), fundtrans (R), bank_acct_info (R), ext_adjust (CRUD), ext_output_transactions (R) |
| Letters | claim_letters_hist (CRUD), claim_letters_hist_claims (CRUD), claim_letters_data (D), letter_headers (R), report_archive (R) |
| Outbound EDI | outbound_edi_transactions (CRUD), outbound_edi_trading_partners (R), 11 outbound_edi_*_table staging tables (CRUD) |
| UM / internal CM | um_cases, um_services, um_rules (CRUD), um_case_mgt_claims (CRUD), um_cm_serv_excl_proc_cd (R), claim_precert_stub / claim_referral_stub (CRUD; labeled temporary) |
| Enrollment/provider (read) | members, family, member_cat_val, member_eligibilities, member_pcps, groups, providers, provider_addresses, provider_tins, vendors, specialties, procedure_codes/groups, diagnosis_codes/groups |
| Legacy conversion | wang_claims, wang_claim_lines, wang_claim_line_rules, wang_acm, wang_rej_map, wang_rule_map, wang_group_rule_map (CRUD; see Migration notes) |
Reports produced (clmrpt)
| Report window | Business purpose |
|---|---|
w_clmrpt_accum_rpt (Member Accumulator Listing) | Accumulators for a group's members, incl. medical/dental deductible variants and pending (non-paid) claims affecting accums (d_clmrpt_accum_rpt*, d_clmrpt_accum_pending) |
w_clmrpt_member_accum_search | Member/family accumulator search — claims affecting accumulators (d_clmrpt_member_accum_search_results) |
w_rpt_group_selected_accums | Accumulators by member for selected accumulators/reasons |
w_rpt_member_accum_rulemax | Member accumulators by benefit rule with maxima (d_rpt_member_accum_byrule) |
w_rpt_group_claim_bendefs | Detailed claims listing by benefit definition |
w_rpt_group_claim_benrules | Detailed claims listing by benefit rule type |
w_clmrpt_status_count | Claims count per pipeline status (d_clmrpt_status_count) |
w_clm_message_status_summary | Message/status summary per group |
w_clmrpt_open_messages | All claims with open messages |
w_clmrpt_claims_older_than_90_days | Claims older than 90 days for a group / parent group |
w_clm_claimed_amt_morethan | Claims with claimed amount above a threshold |
w_claimrpt_large_claim_report | Large-claim report |
w_clmrpt_no_sub_or_pat | Claims lacking subscriber and/or patient assignment |
w_no_group_id_fix | Claims with no group id assigned |
w_clmrpt_outbound_aging_tv, w_clmrpt_outbound_edi_older_than_10_days | Outbound-EDI aging; claims sent to partners not returned within 10 days |
w_clmrpt_outstanding_adjustments, w_clmrpt_outstanding_refunds | Outstanding external adjustments / refunds |
w_cigna_p4p | Cigna pay-for-performance extract (d_clmrpt_cigna_p4p_out, cigna_report_groups) |
w_ppaca_letters | PPACA letters |
w_nobs_group_rpt | Group report (NOBS) |
| Lifetime/credits datastores | d_clmrpt_lifetime_rpt (lifetime amounts per member), d_clmrpt_credits_rpt |
clmprint additionally provides print/reprint layouts for every claim form (d_claim_print_*), EOB printing (w_claim_print_eob, n_claim_print, n_check_copy) and check-payment views (d_check_payments, d_check_payments_backed_out, d_checkrun_claim_lines).
Integration points
- Outbound EDI staging —
outbound_edi_transactionsplus 11outbound_edi_*staging tables flattened to fixed-width files per trading partner/HCN and claim-form type; directory fromcodes(APPPATHS/OUTEDI) (clmutils/u_edi_outbound_edi). Claims marked from the editor (claims/w_claim_editorue_outbound_edi); returns monitored by aging reports. - HCN repricing — repricing claim forms carry
hcn_sys_key(network chosen viaclaims/w_claims_hcn_list), reprice header/detail inclaims_reprice_info/claims_reprice_detail, inbound repriced data inedi_in_repricing; whole-claim per-diem pricing consumes reprice detail (CLM-27/28). - Aetna electronic claims — claims with id prefix
EAETshow the transmit date fromext_output_transactions; electronically paid claims leave audit asREXOUT(clmentry/u_payment;clmshare/n_cst_claimscase 151). - Funding module —
fund_registerrows (worksheet/expected/paid amounts, register status, backout) written at save and consumed by check runs; funding-status rules gate editing (CLM-8, CLM-14). - Utilization management / internal CM —
um_cases,um_services,um_rules,um_case_mgt_claims; adjudication decrements/increments service authorizations (CLM-55/56); claims can be attached to internal CM cases (claims/w_add_claim_to_internal_cm). - Moon negotiations — negotiation checking moved out of adjudication to the Moon background process (comment in
clmsproc/n_claim_adjudication,of_adjudicateclaims). - Caremark (pharmacy) — non-claim record file creation (
clmutils/w_caremark_non_claim_record,caremark_edi_table). - Letters/print archive — letters archived through the reprint subsystem (
n_cst_reprint_print_reports.of_ArchiveItem('CLMLETTERS', …)).
Migration notes
- Data-driven pipeline: status order, display names and screen families live in
claim_status_order; do not hard-code the pipeline — except the nine background stages listed inclmutils/w_bkgd_monitor, which a migrated orchestrator must reproduce. - The adjudication engine is the crown jewel:
clmsproc/n_claim_adjudicationimplements definition assignment, rule ordering/filters, nine rule types, accumulator maintenance with carryover, COB and CM-service integration. The formulas in CLM-42..CLM-54 should be treated as the executable specification and covered by regression tests before migration. - Message-driven workflow: every edit/exception is a
claim_messagesrow with message number,field_name(oftenRow:n;DBName:col),system_commentkey-value text (e.g.DupClaims:,RuleKey:,Response:), and control codes (DELONRESET,DONOTCLOSE,SC;= system-closable only). Closing a message can trigger status transitions and saves (cases 151/167). A migration must preserve these semantics or redesign the exception workflow wholesale. - User-closed message memory: adjudication honors messages previously closed by a human (close user id not
sfpiback) — e.g. no-coverage, accident deny/hold, potential accident. Idempotent re-adjudication depends on this. - Known technical debt flagged in source: precertification and referral use "temporary stub tables" (
claim_precert_stub,claim_referral_stub); accumulate-by-tooth is a workaround via pseudo benefit definition −110; COI is "kind of a mess" (treated as OOP); severalTBC!markers (days-of-week rule check unimplemented, possible rounding error in COI 100%-consider back-computation). - Magic keys: system rule/definition keys are negative or hard-coded — COB rule −100, DEPCARE definition −101, write-off rule −102, case-management fees −111, whole-claim reason −201, reject definition −1, no-coverage reason −1, duplicate reason −2, internal-CM retain rule 18443. These must be carried or remapped.
- Wang legacy conversion:
of_wang_*functions andwang_*tables are one-time claim-history conversion from a prior (Wang) system; likely dead code for a future migration but the converted history feeds accumulators. - Return-to-corrections is the transactional heart of edit-after-the-fact behavior (CLM-14); any migrated design needs an equivalent compensating-transaction routine.
- Oracle-specific SQL throughout (sequences
logical_lock_seq,claim_seq,all_purpose_seq;(+)outer joins;DECODE,NVL,FROM dual).
Open questions
- Where do stage transitions RFCP→RFCR→RFPA and RFDC→RFPR→RFA run? The batch driver that invokes
of_processclaimdef/of_adjudicateclaims(and performs code review, duplicate detection and pricing) is not in the eight claims libraries; only the engine and monitors are. TheSFPIBACKuser andn_batch_schedulerreferences imply a separate background application (possibly built from these PBDs). - Duplicate-detection algorithm: lines arrive at adjudication already flagged (
duplicate_claim_line_ind) and message 102 already carriesDupClaims:; the matching criteria are implemented elsewhere (RFDC stage of the background process) and could not be extracted from this domain. - Message catalog: message numbers (42, 86–89, 102–105, 109, 119–231…) reference
global_messages(read-only here). A full catalog of message text/severity/control codes needs to be pulled from that table or the system-admin domain. - Message 167 dual use: the adjudication engine defines 167 as "whole claim error" while the corrections screen treats closing 167 as the pre-adjudication release popup (
w_setstatusfrompreadj→RFDC/RFCP). They are consistent if the whole-claim-pricing error is the designated pre-adjudication hold, but this should be confirmed againstglobal_messages. RETURNvsDELETE: the "temporary" 04/2000 change routing Return to Delete (CLM-11) was never reverted; a migration must decide whether Return remains a distinct state.REXOUTlifecycle: set when releasing electronically-paid claims from audit; downstream handling (presumably in Funding/EDI-out) is outside this domain.- Accumulator error correction:
of_getaccumerrors/of_correctaccumerrors/of_reaccum(clmsproc/n_claim_adjudication, surfaced byclmutils/w_acm_accum_errors) imply known accumulator drift; the operational procedure around them is undocumented. - Pre-cert/referral stubs: whether real UM data superseded the stub tables (
um_casesis retrieved and the stubs are still checked inof_applypackage) needs business confirmation.