fix: UnitedDH pre-auth number extraction, service lines saved, RCT combo buttons

- Pre-auth step9: scan all table cells alphanumeric-first (A0260616190876 format),
  URL extraction, body scan fallback with debug logging
- Pre-auth route: save service lines (totalBilled) when creating PREAUTH claim record
  so claim page shows correct billed amount after selecting patient
- Pre-auth processor: read pdf_path fallback alongside pdf_url from Selenium result
- UnitedDH/SCO workers: billing entity selection via direct paymentGroupId click,
  Summit Dental Care first with fallback, Escape to close dropdown
- Pre-auth form: remove Other Insurance step (not present on pre-auth page),
  file upload direct to hidden input without button click
- Pre-auth step8: JS click + Submit Authorization in XPath, Continue via [last()] + JS click
- RCT combo buttons added (pre-auth form only): RCT Ant/Post/Crown, PreM/Post/Crown,
  Mol/Post/Crown; claim form excludes these three combos

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
ff
2026-06-16 17:34:45 -04:00
parent a04176538e
commit 43340ab39d
8 changed files with 207 additions and 112 deletions

View File

@@ -2342,6 +2342,7 @@ export function ClaimForm({
</Button>
<RegularComboButtons
excludeIds={["rctAnteriorPostCrown", "rctPremolarPostCrown", "rctMolarPostCrown"]}
onRegularCombo={(comboKey) => {
setForm((prev) => {
const next = applyComboToForm(

View File

@@ -226,16 +226,31 @@ export const PROCEDURE_COMBOS = {
label: "RCT Anterior",
codes: ["D3310"],
},
rctAnteriorPostCrown: {
id: "rctAnteriorPostCrown",
label: "RCT Ant/Post/Crown",
codes: ["D3310", "D2954", "D2740"],
},
rctPremolar: {
id: "rctPremolar",
label: "RCT PreM",
codes: ["D3320"],
},
rctPremolarPostCrown: {
id: "rctPremolarPostCrown",
label: "RCT PreM/Post/Crown",
codes: ["D3320", "D2954", "D2740"],
},
rctMolar: {
id: "rctMolar",
label: "RCT Molar",
codes: ["D3330"],
},
rctMolarPostCrown: {
id: "rctMolarPostCrown",
label: "RCT Mol/Post/Crown",
codes: ["D3330", "D2954", "D2740"],
},
postCore: {
id: "postCore",
label: "Post/Core",
@@ -338,7 +353,7 @@ export const COMBO_CATEGORIES = {
"plResin",
"plCast",
],
Endodontics: ["rctAnterior", "rctPremolar", "rctMolar", "postCore", "coreBU"],
Endodontics: ["rctAnterior", "rctAnteriorPostCrown", "rctPremolar", "rctPremolarPostCrown", "rctMolar", "rctMolarPostCrown", "postCore", "coreBU"],
Prosthodontics: ["crown"],
Periodontics: ["deepCleaning"],
Extractions: [

View File

@@ -261,16 +261,31 @@ export const PROCEDURE_COMBOS: Record<
label: "RCT Anterior",
codes: ["D3310"],
},
rctAnteriorPostCrown: {
id: "rctAnteriorPostCrown",
label: "RCT Ant/Post/Crown",
codes: ["D3310", "D2954", "D2740"],
},
rctPremolar: {
id: "rctPremolar",
label: "RCT PreM",
codes: ["D3320"],
},
rctPremolarPostCrown: {
id: "rctPremolarPostCrown",
label: "RCT PreM/Post/Crown",
codes: ["D3320", "D2954", "D2740"],
},
rctMolar: {
id: "rctMolar",
label: "RCT Molar",
codes: ["D3330"],
},
rctMolarPostCrown: {
id: "rctMolarPostCrown",
label: "RCT Mol/Post/Crown",
codes: ["D3330", "D2954", "D2740"],
},
postCore: {
id: "postCore",
label: "Post/Core",
@@ -380,7 +395,7 @@ export const COMBO_CATEGORIES: Record<
"plCast",
],
Implants: ["implantFull", "implantFixture", "implantAbutment", "implantCrown"],
Endodontics: ["rctAnterior", "rctPremolar", "rctMolar", "postCore", "coreBU"],
Endodontics: ["rctAnterior", "rctAnteriorPostCrown", "rctPremolar", "rctPremolarPostCrown", "rctMolar", "rctMolarPostCrown", "postCore", "coreBU"],
Prosthodontics: ["crown"],
Periodontics: ["deepCleaning"],
Extractions: [