feat: add Deltains claim submission flow
Adds a full "Deltains Claim" button next to Delta MA Claim, mirroring the DDMA claim flow across frontend, backend queue/routes, and a new Selenium worker. Reuses the existing Deltains eligibility login/OTP code and was iteratively wired against the live portal (patient roster search, per-service-line fields, tooth number/surface selects, review and submit). Also fixes chatbot/insurance-alias carrier recognition so "deltains" resolves correctly instead of falling back to MassHealth.
This commit is contained in:
@@ -23,6 +23,7 @@ import helpers_cca_eligibility as hcca
|
||||
import helpers_cca_claim as hcca_claim
|
||||
import helpers_cca_preauth as hcca_preauth
|
||||
import helpers_ddma_claim as hddma_claim
|
||||
import helpers_deltains_claim as hdeltains_claim
|
||||
import helpers_uniteddh_claim as huniteddh_claim
|
||||
import helpers_uniteddh_preauth as huniteddh_preauth
|
||||
import helpers_tuftssco_claim as htuftssco_claim
|
||||
@@ -749,6 +750,48 @@ async def ddma_claim(request: Request):
|
||||
return {"status": "started", "session_id": sid}
|
||||
|
||||
|
||||
async def _deltains_claim_worker_wrapper(sid: str, data: dict, url: str):
|
||||
"""Background worker for Deltains claim submission."""
|
||||
global active_jobs, waiting_jobs
|
||||
async with semaphore:
|
||||
async with lock:
|
||||
waiting_jobs -= 1
|
||||
active_jobs += 1
|
||||
try:
|
||||
await hdeltains_claim.start_deltains_claim_run(sid, data, url)
|
||||
finally:
|
||||
async with lock:
|
||||
active_jobs -= 1
|
||||
|
||||
|
||||
@app.post("/deltains-claim")
|
||||
async def deltains_claim(request: Request):
|
||||
"""
|
||||
Starts a Deltains claim submission session in the background.
|
||||
Logs in, searches patient, opens the member's eligibility/benefits page,
|
||||
finds the claim-submission entry point, fills service lines, and submits.
|
||||
Body: { "claim": { "deltainsUsername": "...", "deltainsPassword": "...", ... } }
|
||||
Returns: { status: "started", session_id: "<uuid>" }
|
||||
"""
|
||||
global waiting_jobs
|
||||
|
||||
body = await request.json()
|
||||
|
||||
sid = hdeltains_claim.make_session_entry()
|
||||
hdeltains_claim.sessions[sid]["type"] = "deltains_claim"
|
||||
hdeltains_claim.sessions[sid]["last_activity"] = time.time()
|
||||
|
||||
async with lock:
|
||||
waiting_jobs += 1
|
||||
|
||||
asyncio.create_task(_deltains_claim_worker_wrapper(
|
||||
sid, body,
|
||||
url="https://www.deltadentalins.com/ciam/login?TARGET=%2Fprovider-tools%2Fv2"
|
||||
))
|
||||
|
||||
return {"status": "started", "session_id": sid}
|
||||
|
||||
|
||||
async def _uniteddh_claim_worker_wrapper(sid: str, data: dict, url: str):
|
||||
"""Background worker for United/DentalHub claim submission."""
|
||||
global active_jobs, waiting_jobs
|
||||
@@ -1025,6 +1068,8 @@ async def submit_otp(request: Request):
|
||||
res = hdentaquest.submit_otp(sid, otp)
|
||||
elif sid in hddma_claim.sessions:
|
||||
res = hddma_claim.submit_otp(sid, otp)
|
||||
elif sid in hdeltains_claim.sessions:
|
||||
res = hdeltains_claim.submit_otp(sid, otp)
|
||||
elif sid in huniteddh_claim.sessions:
|
||||
res = huniteddh_claim.submit_otp(sid, otp)
|
||||
elif sid in huniteddh_preauth.sessions:
|
||||
@@ -1066,6 +1111,8 @@ async def session_status(sid: str):
|
||||
s = hcca_preauth.get_session_status(sid)
|
||||
elif sid in hddma_claim.sessions:
|
||||
s = hddma_claim.get_session_status(sid)
|
||||
elif sid in hdeltains_claim.sessions:
|
||||
s = hdeltains_claim.get_session_status(sid)
|
||||
elif sid in huniteddh_claim.sessions:
|
||||
s = huniteddh_claim.get_session_status(sid)
|
||||
elif sid in huniteddh_preauth.sessions:
|
||||
|
||||
Reference in New Issue
Block a user