Providers, PPO Networks & Repricing
Libraries covered: provider (provider/vendor/HCN/panel/contract maintenance, 1099 printing, PPO census exports, EDI partner setup, client segments), pricing (pricing plans, methods, rules, fee/DRG/per-diem/unit/conversion schedules, UCR lookup, RBRVS multipliers), moon (claim negotiations — moon_negotiations — OON products, and review of inbound EDI repricing responses). Claim-side consumption of this domain lives in clmentry, clmshare, clmsproc, claims and clmutils and is cited where relevant.
Purpose
This domain maintains who renders and bills care (providers), who gets paid (vendors), which PPO/HMO networks they belong to (HCNs, panels, contracts), and how claimed charges are turned into allowed amounts (pricing plans, fee schedules, discounts, per diems, negotiations). It is the reference-data backbone for claim repricing:
- Provider master with TINs, NPIs, Medicaid IDs, specialties, addresses and payable vendors (
provider/w_provider_maintenance). - Vendor (payee) master with 1099 flag, payment rule and holds (
provider/w_provider_vendor_maintenance), plus annual 1099 form printing (provider/w_1099_print). - Health Care Network (HCN) master and network-level pricing/withholds (
provider/w_provider_hcn_maintenance); panels within an HCN (provider/w_provider_panel_maintenance); per-provider network contracts (provider/w_provider_contract_maintenance). - Pricing plans made of dated methods and ordered rules, referencing fee schedules, DRG weights, tiered per-diem schedules and unit/conversion (RBRVS-style) schedules (
pricing/w_pricing_plan_maintenance,pricing/w_pricing_fee_schedule,pricing/w_pricing_drg_schedule,pricing/w_pricing_per_diem_schedule,pricing/w_pricing_unit_schedule,pricing/w_pricing_conversion_schedule,pricing/w_pricing_rbrvs). - Out-of-network claim negotiation queue ("MOON") and OON negotiation products purchased by groups (
moon/w_moon_claims,moon/w_moon_oon_product_maintenance). - Outbound EDI of claims to repricing trading partners and review of their responses (
clmutils/u_edi_outbound_edi,moon/w_moon_in_repricing). - PPO eligibility census exports to networks ("HCN Enrollment Dump",
provider/w_hcn_enrollment_dump).
Actors
Grounded in department checks and window code (no explicit role model beyond department groups):
- Provider department user — full create/edit/delete rights in provider maintenance; window mode
PROVIDERis set whengnv_app.inv_DeptGroups.of_IsDeptUser('PROVIDER')(provider/w_provider_maintenancepfc_postopen). - UM (utilization management) nurse — may create and edit only providers in
Potentialstatus; window modeUM(provider/w_provider_maintenancepfc_postopen, wf_set_address_menu). UM users also submit MOON negotiations asNURSE(moon/w_moon_claimsdw_moon_negs pfc_addrow). - Claims examiner — read-only in provider maintenance (
OTHERmode) unless the user's claims security group is "SFPI Examiner", which grantsPROVIDERmode (provider/w_provider_maintenancepfc_postopen). Examiners submit MOON rows asEXAMINER(moon/w_moon_claims). - MIS / background processing — MOON rows submitted as
BACKGROUND; only UM and MIS users may edit negotiator, bill status, negotiated/discount amounts on MOON rows (moon/w_moon_claimsdw_moon_negs constructor). - Client segment as tenancy boundary — every provider window validates the user's current client segment against
client_segment_usersbefore opening and appends the segment name to the window title (provider/u_provider_sql.of_validate_client_segment,provider/w_provider_maintenancepfc_postopen). Segment membership is administered inprovider/w_provider_segment_user_maintenance("Client Segment User Maintenance") and switched viaprovider/w_provider_change_segment.
Key workflows
Provider setup and search
provider/w_provider_maintenance ("Provider Maintenance") is a tabbed sheet: Provider (demographics + TINs + Medicaid IDs + NPIs + specialties), Addresses (addresses + address vendors + contacts), Panels (HCNs + panels), Holds, Group Holds. Search criteria are TIN (EIN or SSN radio), name (with optional Oracle SOUNDEX "Sounds Like" matching, on last/company name or lookup name), provider type, specialty, city/state, and status checkboxes Active/Inactive/Potential (provider/w_provider_maintenance cb_search clicked; SQL built in provider/u_provider_sql.of_count_providers_urcm). Zero matches with Active included and PROVIDER mode flows directly into new-provider creation; more than one match opens the pick list provider/w_provider_select_urcm (a warning is shown above 200 matches).
Saving is one transaction across all tabs: each tab validates (ue_validate events), addresses are standardized (duplicate addresses block the save), then provider → contacts → addresses → address vendors → TINs → NPIs → Medicaid IDs → specialties → panels → holds → group holds are updated and committed; any failure rolls everything back (provider/w_provider_maintenance pfc_save).
Default vendor auto-creation: when the user first moves to the Addresses tab of a provider with no default vendor, the window creates a vendor from the provider name and TIN (prompting via provider/w_provider_tin_enter if no TIN, or provider/w_provider_tin_select if several), inserts it into vendors with irs_1099_flg='Y' and status_cd='Active', and links it as providers.default_vendor_sys_key (provider/w_provider_maintenance dw_provider ue_create_default_vendor, tab_dw selectionchanging). On save, if the default vendor has no address, the provider's first address is copied to vendor_addresses (provider/w_provider_maintenance pfc_save).
Automatic provider matching during claim intake
Claim processing resolves the claim's service provider with a cascade (clmshare/n_provider_maintenance.of_find_provider):
- Resolve the claim's group to its master group and client segment (
CONNECT BYupgroups, thenclient_segment_groups). - Fetch all providers holding the claim's billing TIN + TIN type in that segment (
d_claims_processing_prov_tin). - Filter by performing-provider name; failing that (and when no degree was given) by billing-provider person name; failing that by billing facility vs
company_name; failing that try aliases (of_find_provider_alias). - Candidates are then disambiguated by billing address (
d_claims_processing_prov_addr).
If no provider is found, of_create_provider can auto-create one from claim data — but for repricing sheets only when the claim's HCN has add_providers_flg='Y' (clmshare/n_provider_maintenance.of_create_provider, d_claims_processing_hcn_contracts_flag). Vendors are similarly matched on TIN + name + full address before being created (clmshare/n_provider_maintenance.of_find_vendor). Unresolved providers surface as "cannot find provider" claim messages reviewed in provider/w_provider_open_cant_find_provider_msgs ("Open Provider Messages"). TINs known to be un-matchable are held in unsearchable_tins, maintained in provider/w_unsearchable_tins.
PPO network assignment
Three levels attach a provider to networks and pricing:
- HCN membership via panels — on the Panels tab the user searches HCNs by name (
provider/u_provider_sql.of_count_hcns, pick listprovider/w_provider_hcn_select), then adds dated panel rows (provider_panels: panel, eff/exp date, exp reason) under the selected HCN (provider/w_provider_maintenancepanels tab). Panels themselves belong to an HCN and carry pricing-plan and withhold assignments (provider/w_provider_panel_maintenance, tablespanels,panel_pricing,panel_withholds). - Contracts —
provider/w_provider_contract_maintenancecreates per-provider contracts (contracts) against an HCN with contract type (Payable/Capitated/Staff/Fund), remittance-advice format (EOB,EOB/EOB,EOB/RA,EDI,Custom,None), PCP flag, new-patients flag, withholds-allowed flag, network provider ID, enrollment limit, DRG hospital multiplier and DRG cap rate, capitation vendor, and dated pricing plans / withholds / holds per contract (provider/d_contracts,contract_pricing,contract_withholds,contract_holds). - HCN-level pricing — the HCN itself carries dated pricing-plan assignments and withholds (
hcn_pricing,hcn_withholds;provider/w_provider_hcn_maintenance).
HCN master data (health_care_networks) includes ID, name, type (HMO/HMO/PPO/PPO), EOB description (a reason_codes reference), eligibility-file (census) format, code-review flag, automatic contract insertion flag (add_contracts_flg), automatic provider insertion flag (add_providers_flg), reject-non-reprice-sheets flag, and electronically-paid flag (provider/d_hcn).
Group benefit plans point at an HCN through plan_pkgs.hcn_sys_key with a pricing_logic_cd; the report provider/w_provider_rpt_hcn_pricing_methods (d_provider_rpt_hcn_pricing_methods) joins group_coverages → plan_pkgs → health_care_networks to show which groups price through which network as of a date.
Claim repricing flow
- Repricing sheets: claim forms
UB92_REPRICE_IN,UB92_REPRICE_OUT, HCFA-reprice and generic-reprice capture network paper repricing (clmentry/u_claims_tab_ub92_reprice_inue_getclaimformtype; DataWindowsclmentry/d_claims_reprice_info_ub92_reprice_in,d_claims_reprice_info_hcfa,d_claims_reprice_info_generic). The entry defaultsreceived_fromtoHCN(clmentry/u_claims_tab_ub92_reprice_inue_new). Header-level results are stored inclaims_reprice_info(HCN key, dates entered/printed/received, discount %, max discount %, per-diem breakdown, totals allowed/discounted, patient/payer owes, provider-out-of-network and member-not-on-file indicators) and day-level per-diem detail inclaims_reprice_detail(clmshare/d_claims_reprice_info_master, schema.json). A non-reprice claim can be converted to a reprice form viaclaims/w_convert_to_reprice_form. - Line pricing:
claim_entriescarrieshcn_sys_key,repricing_method,repriced_amtanddiscount_pctat claim level (clmentry/d_claim_entries_common); each priced line writes aclaim_line_pricing_rulesrow linking the line to the pricing rule applied, the savings type and the savings amount (clmshare/d_claim_line_pricing_rules_master). Examiners can manually record a line's pricing rule/savings viaclaims/w_claim_line_pricing_rules("Enter Pricing Information": savings type, savings, reason). - Discount application order: in adjudication, a claim-level PPO discount takes precedence — repriced amount = claimed − discount (detail-line discount used when the claim has detail lines); only when there is no PPO discount is the UCR value used as the repriced amount, and if UCR is zero the claimed amount stands. The allowed amount is then the lesser of claimed and repriced (
clmsproc/n_claim_adjudicationrepriced-amount computation, ~lines 4761–4880). - Whole-claim pricing: a claim is treated as whole-claim priced only when
repricing_method = 'WHOLE'and it is a repricing sheet (clmsproc/n_claim_adjudication~line 6573). Per-diem totals are recomputed fromclaims_reprice_detailday rows, with error returns for missing or duplicate per-diem amounts per day (clmsproc/n_claim_adjudicationper-diem summation, ~lines 7917+, DataWindowclmsproc/d_adjd_reprice_detail).
Outbound EDI repricing round trip
Claims destined for an external repricing partner are decomposed into staging tables outbound_edi_claim_table, outbound_edi_line_table, outbound_edi_provider_table (billing/attending/referring/performing provider name, degree, address, phone, TIN and the resolved bill_provider_sys_key), outbound_edi_patient_table, outbound_edi_subscriber_table, outbound_edi_ub92_table, plus conditions/occurrences/procedures/values/dental tables (clmutils/u_edi_outbound_edi constructor, of_load_claim, of_load_provider_info). Files are cut per HCN/trading partner from transactions with processed_dt set and no file_created (clmutils/d_edi_outbound_claims_to_file, clmutils/w_edi_outbound_edi_processor). Trading partners and clearinghouses are maintained in provider/w_edi_partners and provider/w_edi_clearinghouse (tables outbound_edi_trading_partners — id, name, type, clearinghouse, routing number, allowance/pay-by/retention days, no-reply action, status — and outbound_edi_clearinghouses, with contacts). Partner responses land in edi_in_repricing (claim id/line, claimed amt, line pricing amt, whole-claim pricing amt, reject code, processed indicator) and are reviewed/edited in moon/w_moon_in_repricing ("Review responses to outbound EDI requests for repricing"), filterable by claim, partner, active (processed_ind='N') vs complete, and processed date; the screen warns when one claim has lines in both active and complete statuses.
Negotiation flow (MOON)
moon/w_moon_claims ("MOON Claims") manages moon_negotiations, one row per claim under negotiation:
- A claim is added by claim ID (a claim may appear only once — checked against the table and unsaved rows). The window auto-fills examiner, original claimed amount, group, provider name/specialty/phone from
claims,providers,provider_addresses/pm_contactsandclaim_entries.bill_provider_phone(moon/w_moon_claimsdw_moon_negs ue_afteritemchanged). submitted_byis stamped from the user's department:BACKGROUND(MIS),EXAMINER(Claims),NURSE(UM);bill_status_cddefaults toPENDINGandbill_dtto today (moon/w_moon_claimsdw_moon_negs pfc_addrow).- Negotiators record status, negotiated amount, discount amount, notes (
information), the involved PPOs (ppo_field) and a resulting bill claim id (bill_claim_id); these fields are editable only for UM/MIS users (moon/d_moon_negs, dw_moon_negs constructor). Assigning an examiner stampssent_to_examiner_dt. - The work queue filters by bill status codes from code table
MOONSTATUS(moon/d_moon_keys) with per-user saved filter preferences; the row list can be printed via reportmoon/d_moon_negs_rpt, and double-clicking a claim locks it and opens the claim editor (moon/w_moon_claimsdoubleclicked). A distinct provider/phone list of negotiated providers is available inmoon/w_moon_provider_list(d_moon_neg_providers).
OON products (moon/w_moon_oon_product_maintenance, "OON Products") define negotiation products a group can purchase: product id/description/comments (oon_products), dated group subscriptions (oon_product_groups), dated HCN exclusions (oon_product_hcn_exclusions), and per-claim-type parameters — minimum claimed amount, threshold claimed amount, allowance/pay-by/retention days, and override flags for case management, CM negotiated rates and manual price (oon_product_claim_types, moon/d_moon_product_claim_types). Date ranges per group and per HCN must not overlap (window validations).
PPO census (eligibility) exports
provider/w_hcn_enrollment_dump ("Health Care Network Enrollment Dump") extracts group and member eligibility into network-specific fixed-format files selected by the HCN's census_format; per-format writers exist for generic, Cigna, Emerald, HFN, HS, MMO and VSP (provider/n_hcn_dump_generic, n_hcn_dump_cigna, n_hcn_dump_emerald, n_hcn_dump_hfn, n_hcn_dump_hs, n_hcn_dump_mmo, n_hcn_dump_vsp; staging DataWindows d_ppo_census, d_ppo_group_selected, d_ppo_enrollment_selected). Related PBM flag-file transfers (Caremark, Optum) and HMS reporting also live in this library (provider/w_provider_caremark_flag_transfer, provider/w_provider_optum_flag_transfer, provider/w_hms_reporting).
1099 production
Claim payments accumulate per group + vendor + tax year into print_1099s (group and vendor name/address/TIN, tax_amt_box_6, tax_amt_box_7, printed indicator, original/last print dates, reprint reason). provider/w_1099_print ("Print 1099 Forms") filters by group, tax year, vendor TIN, print dates and not-yet-printed; printing selected rows renders d_1099_form (or d_1099nec_form for one hard-coded group, 501-069Z), then marks rows printed with dates; reprints require a reason captured in provider/w_1099_reason (provider/w_1099_print pfc_print).
Vendor consolidation (dedup)
provider/w_provider_consolidate_vendors merges duplicate vendors sharing a TIN: the survivor is chosen as "main vendor"; each duplicate is archived to consolidated_vendors, its withholds (hcn_withholds, panel_withholds, contract_withholds), addresses, contacts and holds are deleted, contracts.vendor_sys_key, provider_address_vendors.vendor_sys_key, fund_register.payee_sys_key (payee type VENDOR) and providers.default_vendor_sys_key are repointed to the survivor, and the duplicate vendors row is deleted (provider/w_provider_consolidate_vendors ue_consolidate).
Business rules
Provider master
- PRV-1 — A provider must have a company name, or both a first and last name (
provider/w_provider_maintenancedw_provider ue_validate). - PRV-2 — A provider must have a lookup name (
provider/w_provider_maintenancedw_provider ue_validate). - PRV-3 — A provider must have at least one TIN, and no TIN row may be blank/zero (
provider/w_provider_maintenancedw_tin ue_validate). - PRV-4 — Provider status is one of Active / Inactive / Potential (search checkboxes and status IN-list in
provider/u_provider_sql.of_count_providers_urcm; code tablePROVSTATUS,provider/dddw_provider_status_cd). New providers default to Active; providers created by UM users are forced to Potential with the status protected (provider/w_provider_maintenancedw_provider pfc_new). - PRV-5 — Medicaid IDs require a state and a non-blank ID; NPIs and specialties cannot be blank (
provider/w_provider_maintenancedw_mcaid/dw_npi/dw_specialty ue_validate). - PRV-6 — Every provider address must have at least one vendor associated; the current (first) vendor row must have an effective date and no expiration date; every prior vendor row must have expiration date and expiration reason; expiration must follow effective date (
provider/w_provider_maintenancedw_vendors ue_validate). Address-vendor expiration reasons come from code tableVNDRADDRXR(provider/dddw_provider_vendor_address_exp_codes). - PRV-7 — Provider addresses are standardized on save; duplicate addresses for one provider block the save (
provider/w_provider_maintenancepfc_save ue_standardize_address handling). - PRV-8 — Provider records are partitioned by client segment; a user may only open maintenance in a segment listed for them in
client_segment_users(provider/u_provider_sql.of_validate_client_segment). - PRV-9 — Deleting a provider is a hard delete that first removes TINs, Medicaid IDs, NPIs, specialties, address vendors, addresses and contacts, after an explicit confirmation (
provider/w_provider_maintenancedw_provider pfc_deleterow). - PRV-10 — Provider holds require a start date and a hold reason (code table
PRVDHOLD); an end date requires an end-date type (code tablePRVDHOLDDT); end date must follow start date (provider/w_provider_maintenancedw_holds ue_validate). Group-specific holds additionally require a group id and reason (code tablePROVGRPHLD) (provider/w_provider_maintenancedw_group_holds ue_validate).
Vendors and 1099
- PRV-11 — A vendor must have a name, a lookup name and a TIN (
provider/w_provider_vendor_maintenancevalidations), a TIN type of EIN or SSN, a payment rule of Claimed / Incurred / Received with rule date, and a Produce-1099 flag (provider/d_provider_vendor). - PRV-12 — A vendor must have at least one address; addresses need an effective date, expiration after effective, and an expiration reason when expired (
provider/w_provider_vendor_maintenanceaddress validations). Vendor holds follow the same start/reason/end-type rules as provider holds (code tableVNDRHOLD;provider/w_provider_vendor_maintenancehold validations). - PRV-13 — Every provider gets a default vendor (auto-created from name + TIN with
irs_1099_flg='Y', status Active) used as payee default; if that vendor has no address, the provider's first address is used (provider/w_provider_maintenanceue_create_default_vendor, pfc_save). - PRV-14 — 1099 reprints require a reason; first prints stamp printed indicator and original print date, every print stamps last print date; box 6 and box 7 amounts come from accumulated
print_1099s(provider/w_1099_printpfc_print). One specific group (501-069Z) prints on the 1099-NEC layout (provider/w_1099_printpfc_print — see Open questions).
HCNs, panels, contracts
- PRV-15 — An HCN requires ID, name, type code (HMO / HMO-PPO / PPO), code-review flag and an EOB description reason; new HCNs default to type PPO, code review N, and the first
HCNreason code (provider/w_provider_hcn_maintenancedw_hcn ue_validate, pfc_new). - PRV-16 — HCN flags drive claim intake behavior:
add_providers_flggates auto-creation of providers from repricing sheets (clmshare/n_provider_maintenance.of_create_provider);add_contracts_flg,reject_non_reprice_flgandelectronically_paid_flgare configuration on the HCN record (provider/d_hcn— consumption of the latter two not located in extracted source; see Open questions). - PRV-17 — Deleting an HCN removes its withholds, pricing and contacts first; deletion is refused when other records still reference the HCN (Oracle FK error 2292 is translated to a user message) (
provider/w_provider_hcn_maintenancepfc_deleterow). - PRV-18 — Withholds (at HCN, panel and contract level) require a vendor, a percentage (0–100), a type of Allowed or Paid, and an effective date; expiration must follow effective and requires an expiration reason (code table
WTHLDXRSN) (provider/w_provider_hcn_maintenancedw_withholds ue_validate;provider/d_hcn_withholdvalues; same rules inprovider/w_provider_panel_maintenanceandprovider/w_provider_contract_maintenance). Panel withhold dates must additionally lie within the panel's own date range (provider/w_provider_panel_maintenancewithhold validations). - PRV-19 — Pricing-plan assignments (HCN, panel, contract) require a plan and an effective date; expiration must not precede effective (
provider/w_provider_hcn_maintenancedw_pricing ue_validate; parallel validations in panel and contract windows). Plans are chosen/edited throughpricing/w_pricing_plan_maintenance_single. - PRV-20 — A panel requires ID, name and effective date; expiration must follow effective and requires a reason (code table
PANELXRSN) (provider/w_provider_panel_maintenancevalidations;provider/d_panels). - PRV-21 — A provider-panel membership requires panel, effective date; expiration requires a reason and must follow effective; the same HCN cannot be added twice to one provider (
provider/w_provider_maintenancedw_panels ue_validate, dw_hcns pfc_new "Duplicate HCN"). - PRV-22 — A contract requires an HCN, a remittance-advice format and an effective date; expiration must follow effective and requires an expiration reason (code table
CNTRCTXRSN); new contracts default PCP=N, withholds allowed=Y, new patients=N (provider/w_provider_contract_maintenancedw_contract ue_validate, pfc_new). Contract holds use reason code tableCNTRCTHOLD(provider/dddw_provider_contract_hold_reason_codes). - PRV-23 — Contract types are Payable, Capitated, Staff, Fund; RA formats are EOB, EOB/EOB, EOB/RA, EDI, Custom, None; a capitation vendor can be attached via vendor search (
provider/d_contracts,provider/w_provider_contract_maintenancebuttonclicked).
Provider matching / dedup
- PRV-24 — Claim provider matching proceeds TIN-first, then performing-provider name, then billing person name, then billing facility name against company name, then aliases, with final disambiguation by billing address; only providers of the claim's client segment are considered (
clmshare/n_provider_maintenance.of_find_provider). - PRV-25 — Vendor matching for payment requires TIN + name match plus an exact address match (addr1, addr2, city, state, zip) before an existing vendor is reused; otherwise a vendor is created (
clmshare/n_provider_maintenance.of_find_vendor). - PRV-26 — Interactive duplicate checking is soundex-capable: name searches may use
SOUNDEXon last/company name or lookup name, combined with TIN and TIN type (provider/u_provider_sql.of_count_providers,of_get_provider; vendor equivalentsof_count_vendors,of_get_vendor). - PRV-27 — TINs that cannot be used for matching are maintained as an exclusion list (
unsearchable_tins;provider/w_unsearchable_tins).
Pricing plans and rules
- PRV-28 — A pricing plan is a named set of dated, ordered methods (
pricing_plans,pricing_methods: method, from/thru dates, sequence, detail indicator, rollover indicator, EOB reason, savings type, default DRG multiplier/cap rate) each holding ordered rules (pricing_rules) (pricing/w_pricing_plan_maintenance,pricing/d_pricing_plan_methods). - PRV-29 — Valid methods come from
valid_methods(method + pricing type WHOLE or DETAIL) (pricing/dddw_pricing_plan_methods). Observed methods:PER DIEM,CASE RATE,PCT BILL(no schedule allowed) andFEE,DRG,TIERED PD,UNIT(require a schedule) (pricing/w_pricing_plan_maintenancedw_rule_edit buttonclicked;pricing/f_pricing_schedule_name). - PRV-30 — Method validation: effective date required; thru date must be after from date; EOB description (reason) required; savings type required. WHOLE-type PER DIEM rules must have per-diem amount > 0 (
pricing/w_pricing_plan_maintenancewf_check_row). Changing a method's type deletes all its rules after confirmation (pricing/w_pricing_plan_maintenance"Method Change" prompt). - PRV-31 — Rule match criteria are stored as SQL-like criterion strings built by a guided editor over procedure codes/groups, diagnosis codes/groups, DRG numbers, revenue codes, length of stay, specialties and place-of-service codes, with IN / BETWEEN / EQUAL TO / NOT operators; per-code-type procedure and diagnosis criteria live in child tables
pricing_rule_procs/pricing_rule_diags, the rest onpricing_rulescolumns (*_criterion) (pricing/w_pricing_plan_maintenancewf_encode/wf_decode;pricing/d_pricing_plan_rule_edit). - PRV-32 — Rule pricing parameters include allow %, apply-allow-% code, allow additional amount, case rate amount, per-diem amount and type (Day/Case), day-from/day-thru bands, rule type (Base/Inlier/Outlier), inpatient/outpatient indicator, anesthesia indicator, replace-with-claimed ("Force Repriced Amt") indicator, benefit definition link and schedule reference (
pricing/d_pricing_plan_rule_edit, schema.jsonpricing_rules). - PRV-33 —
pricing_rules.schedule_sys_keyresolves per method: FEE →fee_schedules, DRG →drg_weights, TIERED PD →tiered_per_diem_schedules, UNIT →conversion_factors(pricing/f_pricing_schedule_name). - PRV-34 — Rules and methods are re-orderable by drag & drop (sequence numbers
seq_no) (pricing/w_pricing_plan_maintenanceue_drag_start handling); deleting a rule cascades its proc/diag criteria rows (pricing/w_pricing_plan_maintenancepfc_update).
Schedules
- PRV-35 — Fee schedule detail rows require effective date, fee amount and a procedure code that exists in
procedure_codesfor the code type; expiration must follow effective; rows can vary by modifier, specialty, state and zip (pricing/w_pricing_fee_schedulevalidation;pricing/d_pricing_fee_schedule). - PRV-36 — Conversion (RBRVS-style) schedules hold procedure-code-range rows with base/time/work/practice/malpractice multipliers, optional zip, dated; start and end procedure codes must be valid (
pricing/w_pricing_conversion_schedule;pricing/d_pricing_conversion_schedule). Unit schedules hold per-procedure base/time/work/practice/malpractice units with optional modifier/zip (pricing/d_pricing_unit_schedule). DRG weight schedules hold dated DRG-code weights and reject invalid DRG codes (pricing/w_pricing_drg_schedule). Tiered per-diem schedules hold day-band rows (days from/thru, per-diem amount and type) with date validation (pricing/w_pricing_per_diem_schedule). - PRV-37 — UCR unit price = requested units × Σ(multiplierᵢ × unitᵢ) over base/time(anesthesia)/work/practice/malpractice, where the anesthesia time unit is 1 + ⌊minutes / 15⌋; when the unit schedule's unit type is
RBRVS, a dated master multiplier fromrbrvs_master_multipliersmust exist (pricing/w_pricing_lookup_ucrue_retrieve). Modifier matching prefers an exact modifier row and falls back to the no-modifier row (pricing/w_pricing_lookup_ucrue_retrieve). RBRVS master multipliers are maintained per unit type and date range inpricing/w_pricing_rbrvs(master_multipliers).
Repricing consumption
- PRV-38 — On reprice-in entry, repriced amount and discount percent are required unless the provider is flagged out-of-network or the member is not on file (
clmentry/u_claims_tab_ub92_reprice_inof_resetrequiredfields, ue_postretrieve). - PRV-39 — Adjudication applies a PPO discount in preference to UCR: repriced = claimed − discount when a discount exists (line-level discount for detailed claims); otherwise repriced = UCR value (claimed when UCR is zero); allowed = min(claimed, repriced) (
clmsproc/n_claim_adjudication~4761–4880). - PRV-40 — Whole-claim per-diem repricing sums
claims_reprice_detailday rows; days with no per-diem row or with conflicting amounts are errors (clmsproc/n_claim_adjudicationper-diem summation ~7917+). - PRV-41 — Each priced claim line records its pricing rule, savings type and savings amount in
claim_line_pricing_rules; new rows receive keys at save time and are persisted with the claim (clmshare/n_cst_claimsupdate sequence ~lines 405–416).
Negotiations and OON products
- PRV-42 — A claim may be in MOON negotiations only once (
moon/w_moon_claimsdw_moon_negs ue_afteritemchanged duplicate checks) and must exist inclaims. - PRV-43 — MOON rows default to bill status
PENDING, bill date today, and a submitter derived from department (MIS→BACKGROUND, Claims→EXAMINER, UM→NURSE); negotiation outcome fields are restricted to UM/MIS users (moon/w_moon_claimsdw_moon_negs pfc_addrow, constructor). Bill statuses come from code tableMOONSTATUS(moon/d_moon_keys). - PRV-44 — An OON product requires product ID and description; its group and HCN-exclusion date ranges must not overlap per group/HCN; claim-type rows require claim type, valid minimum claimed and threshold amounts, and override CM / override rates settings (
moon/w_moon_oon_product_maintenancevalidations).
Pricing model — structure and consumption
- A plan (
pricing_plans) is assigned, with date ranges, at HCN, panel and contract level (hcn_pricing,panel_pricing,contract_pricing; maintained inprovider/w_provider_hcn_maintenance,provider/w_provider_panel_maintenance,provider/w_provider_contract_maintenance). The precedence among the three levels at claim time is not visible in the extracted client source (see Open questions). - A plan's methods carry
pricing_typeWHOLE or DETAIL fromvalid_methods— whole-claim vs line-level pricing (pricing/d_pricing_plan_methods;clmsproc/n_claim_adjudicationtreatsrepricing_method='WHOLE'as whole-claim priced). - Rules select claim lines via criterion strings (procedure/diagnosis/DRG/revenue/LOS/specialty/POS, see PRV-31) and price them via percent-of-billed (
allow_pct+apply_allow_pct_cd), case rate, per diem (amount, Day/Case type, day bands), or a schedule lookup per PRV-33.replace_with_claimed_indrenders as "Force Repriced Amt" (pricing/d_pricing_plan_rule_edit). - Fee schedules price per procedure code (+type, modifier, specialty, state, zip, date range) with a flat
fee_amt(fee_schedule_details). - Conversion schedules (UCR/RBRVS) pair a unit schedule (
unit_schedules→unit_schedule_detailsunits per procedure) withconversion_factor_detailsmultipliers per procedure-code range; price = units × Σ(multiplier × unit) with anrbrvs_master_multipliersgate for RBRVS unit types (pricing/w_pricing_lookup_ucr). - DRG pricing uses
drg_weight_detailsweights per DRG code plus contract-leveldrg_base_multiplier/drg_cap_rateand method-level defaults (contracts,pricing_methods.default_drg_multiplier/default_drg_cap_rate). - Applied results are recorded per line in
claim_line_pricing_rules(rule, savings type from code listdddw_pricing_plan_savings_types, savings amount) and per claim inclaims_reprice_info/claims_reprice_detail.
Provider data model
providers(30 cols): names (plus upper-case shadow columns for search), lookup name, status, type (provider_types), primary specialty, educational degree, UPIN, Medicare number, clearinghouse number, birth date, languages 1–3, after-hours info, covering provider (self-reference), default vendor, client segment (schema.json; labels inprovider/d_provider).- Addresses and contacts are shared infrastructure:
provider_addresseslinks a provider topm_addressesrows (withstd_addr_flgstandardization flag) and optionalpm_contacts(name, phone, fax, email, position, comments) (provider/d_provider_address). vendors(payees): name, lookup name, TIN + type, client segment,irs_1099_flg, payment rule (+date), status; addresses/contacts/holds as child tables (schema.json;provider/d_provider_vendor).- 1099 linkage: the default vendor created per provider carries
irs_1099_flg='Y'; payment accumulation lands inprint_1099skeyed by group, vendor TIN and tax year (schema.json;provider/w_1099_print). (The accumulation writer is in the funding/check-run domain, not this library.) specialtiescarries an anesthesia indicator per specialty (anes_ind, schema.json) used by anesthesia-aware pricing;provider_add_logrecords providers auto-added from claims (claim id, provider, secondary id, type) (schema.json).
Data & CRUD
From _re/analysis/schema.json (crud section):
| Library | Creates/updates (CRUD or CUD) | Reads only |
|---|---|---|
provider | providers, provider_tins, provider_npis, provider_medicaid_ids, provider_specialties, provider_addresses, provider_address_vendors, provider_panels, provider_holds, provider_group_holds, panels, panel_pricing, panel_withholds, contracts, contract_pricing, contract_withholds, contract_holds, health_care_networks, hcn_contacts, hcn_pricing, hcn_withholds, vendors, vendor_addresses, vendor_contacts, vendor_holds, consolidated_vendors, unsearchable_tins, print_1099s, provider_types, specialties, client_segments, client_segment_users, security_users, pm_addresses, pm_contacts, outbound_edi_clearinghouses, outbound_edi_trading_partners, outb_edi_clearhouse_contacts, outb_edi_tradingpart_contacts, ppo_census_ids, ppo_enrollment_work, ppo_group_work, mmo_enrollment_work, caremark_report_audit, codes | claims, claim_messages, members, member_eligibilities, groups, group_coverages, plan_pkgs, reason_codes, fund_register, security tables |
pricing | pricing_plans, pricing_methods, pricing_rules, pricing_rule_procs, pricing_rule_diags, fee_schedules, fee_schedule_details, drg_weights, drg_weight_details, drg_codes, tiered_per_diem_schedules, tiered_per_diem_details, unit_schedules, unit_schedule_details, conversion_factors, conversion_factor_details, valid_methods, master_multipliers, procedure_codes, diagnosis_codes, specialties, reason_codes, benefit_defs, codes | rbrvs_master_multipliers, place_of_service_codes, procedure_groups, diagnosis_groups |
moon | moon_negotiations, oon_products, oon_product_groups, oon_product_claim_types, oon_product_hcn_exclusions, edi_in_repricing | claims, claim_entries, providers, provider_addresses, pm_contacts, groups, health_care_networks, outbound_edi_trading_partners, codes |
Key sequences observed: provider_sys_key.nextval, vendor_sys_key.nextval, hcn_sys_key.nextval, contract_sys_key.nextval, pm_contacts_seq.nextval, all_purpose_seq.nextval (pricing plans) (provider/w_provider_maintenance, provider/w_provider_hcn_maintenance, provider/w_provider_contract_maintenance, pricing/w_pricing_plan_maintenance).
Code tables (table codes, by code_key): PROVSTATUS, PRVDHOLD, PRVDHOLDDT, PROVGRPHLD, CNTRCTHOLD, CNTRCTXRSN, PANELXRSN, WTHLDXRSN, VNDRHOLD, VNDRADDRXR, EDIPARTNER, EDIACTION, MOONSTATUS (provider/moon dddw_* DataWindows). HCN EOB descriptions and pricing EOB reasons come from reason_codes (provider/dddw_hcn_reason_codes, pricing crud on reason_codes).
EDI
- Outbound claim EDI for repricing: claims are staged into eleven
outbound_edi_*tables and cut to files per HCN/trading partner (clmutils/u_edi_outbound_ediconstructoris_tables[],clmutils/d_edi_outbound_claims_to_file, driven byclmutils/w_edi_outbound_edi_processor).outbound_edi_provider_tabledenormalizes billing / attending / referring / performing provider identity, address, phone and TIN per claim, keyed byclaim_id, and carries the resolvedbill_provider_sys_key(schema.json; populated byclmutils/u_edi_outbound_edi.of_load_provider_infofromd_edi_provider_info). - Trading partner / clearinghouse setup:
outbound_edi_trading_partners(id, name, partner typeEDIPARTNER, clearinghouse, routing number, allowance/pay-by/retention day counts, no-reply actionEDIACTION, status) andoutbound_edi_clearinghouses, each with contact children, maintained inprovider/w_edi_partnersandprovider/w_edi_clearinghouse(segment-validated like other provider windows). - Inbound repricing responses:
edi_in_repricingrows per claim line (claimed amount, line pricing amount, whole-claim pricing amount, reject code, trading partner, processed indicator/date) reviewed inmoon/w_moon_in_repricing.
Migration notes
- Criterion strings are a mini-language.
pricing_rulescriteria (proc_group_criterion,diag_group_criterion,drg_code_criterion,revenue_criterion,los_criterion,specialty_criterion,pos_code_criterion,inpat_outpat_criterionpluspricing_rule_procs/pricing_rule_diags) hold SQL-like text (IN (...),BETWEEN,NOT,<>) generated by the editor (pricing/w_pricing_plan_maintenancewf_encode). A migration must parse these into a structured rule model rather than carry opaque strings; the editor's decode function (wf_decode) documents the exact grammar actually produced. - The batch pricing engine is not in the client. The UI maintains rules and records results, and adjudication comments say "Writeoff now done in pricing process" (
clmsproc/n_claim_adjudication~5967), but no extracted object evaluates rule criteria against claim lines. Expect the rule-evaluation engine in database procedures or a background executable; it must be located and reverse-engineered separately. - Effective-dating everywhere. Plans-to-network assignments, withholds, panels, contracts, addresses, schedules and OON products are all dated ranges with expiration reasons. Overlap is validated only in some windows (OON products, addresses); several assignment tables (e.g.
hcn_pricing) have no overlap check in the UI — data cleanup should expect overlapping rows. - Client segment is a hard multi-tenancy key on providers, vendors, HCNs, panels, addresses (
client_segmentcolumns;of_validate_client_segmentgate). Auto-creation paths connect as a service account (sfpiback) (clmshare/n_provider_maintenance.of_create_provider). - Hard deletes with manual cascades. Provider, HCN and vendor deletes issue explicit child DELETEs and rely on FK error 2292 to block referenced rows (
provider/w_provider_maintenancepfc_deleterow,provider/w_provider_hcn_maintenancepfc_deleterow). Vendor consolidation deletes duplicate history (withholds, addresses, contacts, holds) irrecoverably except for a snapshot inconsolidated_vendors(provider/w_provider_consolidate_vendors). - Dynamic SQL with string concatenation builds provider search (
u_provider_sql.of_count_providers_urcm), 1099 filters (provider/w_1099_printue_retrieve) and MOON queue filters (moon/w_moon_claimspfc_retrieve) — inputs are not parameterized; re-implementations should use parameterized queries. - Per-format census writers are code, not config. Each network census format (Cigna, MMO, VSP, HS, HFN, Emerald, generic) is a hand-written fixed-width serializer (
provider/n_hcn_dump_*); several Cigna DataWindow variants are date-stamped forks (provider/d_hcn_cigna_pre12222025,d_hcn_cigna_pre_mh_auth_to_change_to_01012026) implying active, dated format changes through 2025–2026. - Hard-coded values to externalize: group
501-069Zselects the 1099-NEC form (provider/w_1099_print); anesthesia minutes-per-unit is fixed at 15 (pricing/w_pricing_lookup_ucr); MOON queue placeholder filter('Ohio')when nothing selected (moon/w_moon_claimspfc_retrieve); user "SFPI Examiner" group grants provider-edit rights (provider/w_provider_maintenancepfc_postopen); segment literal'SFPI'in the HCN pricing-methods report (provider/d_provider_rpt_hcn_pricing_methods). - 1099 printing mutates state per printed page (printed_ind/orig_print_dt/last_print_dt row by row, then one update+commit) — reprint governance (reason capture) must be preserved (
provider/w_1099_printpfc_print). - MOON is claim-editor-coupled: double-click locks the claim through the claim-control service before opening the editor (
moon/w_moon_claimsdoubleclicked) — the negotiation queue is not standalone.
Open questions
- Pricing plan resolution precedence — contract_pricing vs panel_pricing vs hcn_pricing: which wins when several dated assignments cover one claim? No extracted client code performs this resolution (only maintenance windows touch these tables); presumed to live in the non-extracted pricing/adjudication batch (see Migration note 2).
health_care_networks.reject_non_reprice_flgandelectronically_paid_flgconsumption — flags are maintained onprovider/d_hcnbut no consuming logic was found in extracted source.valid_methodsfull contents — only the seven method literals visible in window code are documented (PRV-29); the table itself may hold more methods and display data.MOONSTATUScode values — bill statuses beyond thePENDINGdefault are data incodesand not enumerable from source; negotiation "letters" (if any) were not found in themoonlibrary — the only outputs located are the queue reportmoon/d_moon_negs_rptand provider listmoon/d_moon_neg_providers.- Where
claim_entries.repriced_amt/discount_pctbecomeclaims_reprice_infototals — form entry DataWindows write both areas, but the recomputation/rollup path (e.g.grand_total_allow_amt) is inside claim-entry form objects not fully traced here. print_1099saccumulation source — which process writes box 6/7 amounts per tax year (presumed check-run/funding domain).- Withhold settlement — withhold percentages (Allowed/Paid) are captured at HCN/panel/contract level, but the payment-time withholding and later release/settlement process is outside these libraries (fund register touched only via vendor consolidation).
oon_product_claim_types.pay_by_days/allowance_days/retention_dayssemantics — mirrored on trading partners; the enforcement point (claim aging/auto-release) was not located.w_hms_reporting/w_hms2(HMS) — large ad-hoc reporting screens over HCN enrollment data; business owner and continued relevance unknown.moon_negotiationshas no negotiation-fee/invoice link other thanbill_claim_id; how negotiation fees are billed (the "MOON Claim" column suggests a separate claim is created) needs confirmation with the business.- RBRVS multiplier table pair — the maintenance window writes
master_multipliers(pricing/d_pricing_rbrvs) while the UCR lookup readsrbrvs_master_multipliers(pricing/w_pricing_lookup_ucr); whether these are synonyms/views of one table must be confirmed against the database.