fix: Tufts SCO + UnitedDH pre-auth file upload, tooth fill, PDF and pre-auth number

- Frontend: upload attachments to disk before sending pre-auth payload (same pattern as claims)
- cloud-storage: finalizeFileUpload returns diskPath so Python workers get real file paths
- upload-to-cloud route: return diskPath instead of API URL
- TuftsSCO preAuth worker: skip 'Add a file' button click; send_keys directly to hidden react-aria-Input
- TuftsSCO preAuth worker: JS focus() on tooth field to bypass warning-banner overlay
- TuftsSCO preAuth worker: 1.5s wait after procedure code for layout shift to settle
- TuftsSCO preAuth worker: step8 waits for 'thank' in page_source then extracts via 'submitted pre-authorization' regex
- helpers_tuftssco_preauth: convert pdf_path → pdf_url (http://localhost:5002/downloads/...)
- tuftsSCOPreAuthProcessor: use pdf_url (not pdf_path), save preAuthNumber to preAuthNumber field
- unitedDHPreAuthProcessor: save preAuthNumber to preAuthNumber field (not claimNumber)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
ff
2026-06-15 23:54:05 -04:00
co-authored by Claude Sonnet 4.6
parent beb6a6a8e8
commit dc039741ca
9 changed files with 107 additions and 105 deletions
+2 -2
View File
@@ -136,12 +136,12 @@ router.post(
(folder as any).id
);
await storage.appendFileChunk((cloudFile as any).id, 0, file.buffer);
await storage.finalizeFileUpload((cloudFile as any).id);
const finalized = await storage.finalizeFileUpload((cloudFile as any).id);
result.push({
filename: file.originalname,
mimeType: file.mimetype,
filePath: `/api/cloud-storage/files/${(cloudFile as any).id}/content`,
filePath: finalized.diskPath,
});
}
@@ -10,13 +10,12 @@ const router = Router();
* POST /tuftssco-preauth
*
* Enqueues a Tufts SCO (DentaQuest) pre-authorization submission job.
* Uses persistent session + OTP handling, same pattern as UnitedDH preauth.
*
* Body fields (JSON):
* data — preauth payload (memberId, dateOfBirth, serviceDate, serviceLines, patientName, etc.)
* socketId — socket.io client id
* claimId — existing claim DB id (optional)
*
* Response: { status: "queued", jobId: "…" }
*/
router.post("/tuftssco-preauth", async (req: Request, res: Response): Promise<any> => {
if (!req.user?.id) {