import { Router, Request, Response } from "express"; import { storage } from "../storage"; import { enqueueSeleniumJob } from "../queue/jobRunner"; import multer from "multer"; const router = Router(); const upload = multer({ storage: multer.memoryStorage() }); /** * POST /cca-claim * * Enqueues a CCA claim submission job. * Accepts multipart/form-data with optional pdfs/images attachments. * * Body fields: * data — JSON string with claim payload (memberId, dateOfBirth, serviceDate, * serviceLines, patientName, etc.) * socketId — socket.io client id * claimId — existing claim DB id (optional) * * Response: { status: "queued", jobId: "…" } */ router.post( "/cca-claim", upload.fields([ { name: "pdfs", maxCount: 10 }, { name: "images", maxCount: 10 }, ]), async (req: Request, res: Response): Promise => { if (!req.user?.id) { return res.status(401).json({ error: "Unauthorized: user info missing" }); } try { const claimData = typeof req.body.data === "string" ? JSON.parse(req.body.data) : req.body.data ?? {}; const pdfs = (req.files as Record)?.pdfs ?? []; const images = (req.files as Record)?.images ?? []; // Fetch CCA credentials const credentials = await storage.getInsuranceCredentialByUserAndSiteKey( req.user.id, "CCA" ); if (!credentials) { return res.status(404).json({ error: "No CCA credentials found. Please add them on the Settings page.", }); } const filesForQueue = [...pdfs, ...images].map((f) => ({ originalname: f.originalname, bufferBase64: f.buffer.toString("base64"), mimetype: f.mimetype, })); const enrichedPayload = { claim: { ...claimData, cca_username: credentials.username, cca_password: credentials.password, }, files: filesForQueue, }; const socketId: string | undefined = req.body.socketId; const claimId: number | undefined = claimData.claimId ? Number(claimData.claimId) : undefined; const jobId = enqueueSeleniumJob({ jobType: "cca-claim-submit", userId: req.user.id, socketId, enrichedPayload, claimId, }); return res.json({ status: "queued", jobId }); } catch (err: any) { console.error("[cca-claim route] error:", err); return res.status(500).json({ error: err.message || "Failed to enqueue CCA claim job", }); } } ); export default router;