eligibility check - checkpoint1

This commit is contained in:
2025-07-14 18:12:21 +05:30
parent de94e4cbb6
commit bbd7a0089f
15 changed files with 637 additions and 160 deletions

View File

@@ -4,7 +4,7 @@ import { storage } from "../storage";
import { z } from "zod";
import { ClaimUncheckedCreateInputObjectSchema } from "@repo/db/usedSchemas";
import multer from "multer";
import { forwardToSeleniumAgent } from "../services/seleniumClaimClient";
import { forwardToSeleniumClaimAgent } from "../services/seleniumClaimClient";
import path from "path";
import axios from "axios";
import fs from "fs";
@@ -101,7 +101,7 @@ router.post(
massdhpPassword: credentials.password,
};
const result = await forwardToSeleniumAgent(enrichedData, [
const result = await forwardToSeleniumClaimAgent(enrichedData, [
...pdfs,
...images,
]);

View File

@@ -7,6 +7,7 @@ import pdfExtractionRoutes from './pdfExtraction';
import claimsRoutes from './claims';
import insuranceCredsRoutes from './insuranceCreds';
import documentRoutes from './documents';
import insuranceEligibilityRoutes from './insuranceEligibility'
const router = Router();
@@ -18,5 +19,7 @@ router.use('/pdfExtraction', pdfExtractionRoutes);
router.use('/claims', claimsRoutes);
router.use('/insuranceCreds', insuranceCredsRoutes);
router.use('/documents', documentRoutes);
router.use('/insuranceEligibility', insuranceEligibilityRoutes);
export default router;

View File

@@ -1,46 +1,17 @@
import { Router } from "express";
import { Request, Response } from "express";
import { storage } from "../storage";
import { z } from "zod";
import multer from "multer";
import { forwardToSeleniumAgent } from "../services/seleniumClaimClient";
import { forwardToSeleniumInsuranceEligibilityAgent } from "../services/seleniumInsuranceEligibilityClient";
const router = Router();
// Routes
const multerStorage = multer.memoryStorage(); // NO DISK
const upload = multer({
storage: multerStorage,
limits: { fileSize: 5 * 1024 * 1024 }, // 5MB limit per file
fileFilter: (req, file, cb) => {
const allowed = [
"application/pdf",
"image/jpeg",
"image/png",
"image/webp",
];
if (allowed.includes(file.mimetype)) {
cb(null, true);
} else {
cb(new Error("Unsupported file type"));
}
},
});
router.post(
"/selenium",
upload.fields([
{ name: "pdfs", maxCount: 10 },
{ name: "images", maxCount: 10 },
]),
"/check",
async (req: Request, res: Response): Promise<any> => {
if (!req.files || !req.body.data) {
if (!req.body.data) {
return res
.status(400)
.json({ error: "Missing files or claim data for selenium" });
.json({ error: "Missing Insurance Eligibility data for selenium" });
}
if (!req.user || !req.user.id) {
@@ -48,37 +19,29 @@ router.post(
}
try {
const claimData = JSON.parse(req.body.data);
const pdfs =
(req.files as Record<string, Express.Multer.File[]>).pdfs ?? [];
const images =
(req.files as Record<string, Express.Multer.File[]>).images ?? [];
const insuranceEligibilityData = JSON.parse(req.body.data);
const credentials = await storage.getInsuranceCredentialByUserAndSiteKey(
req.user.id,
claimData.insuranceSiteKey
insuranceEligibilityData.insuranceSiteKey
);
if (!credentials) {
return res
.status(404)
.json({ error: "No insurance credentials found for this provider." });
return res.status(404).json({
error:
"No insurance credentials found for this provider, Kindly Update this at Settings Page.",
});
}
const enrichedData = {
...claimData,
...insuranceEligibilityData,
massdhpUsername: credentials.username,
massdhpPassword: credentials.password,
};
const result = await forwardToSeleniumAgent(enrichedData, [
...pdfs,
...images,
]);
const result =
await forwardToSeleniumInsuranceEligibilityAgent(enrichedData);
res.json({
...result,
claimId: claimData.claimId,
});
res.json(result);
} catch (err: any) {
console.error(err);
return res.status(500).json({
@@ -88,5 +51,4 @@ router.post(
}
);
export default router;
export default router;

View File

@@ -12,7 +12,7 @@ export interface SeleniumPayload {
}[];
}
export async function forwardToSeleniumAgent(
export async function forwardToSeleniumClaimAgent(
claimData: any,
files: Express.Multer.File[]
): Promise<any> {
@@ -37,7 +37,7 @@ export async function forwardToSeleniumAgent(
};
const result = await axios.post(
"http://localhost:5002/start-workflow",
"http://localhost:5002/claimsubmit",
payload
);
if (result.data.status === "error") {

View File

@@ -1,52 +0,0 @@
import axios from "axios";
export interface SeleniumPayload {
claim: any;
pdfs: {
originalname: string;
bufferBase64: string;
}[];
images: {
originalname: string;
bufferBase64: string;
}[];
}
export async function forwardToSeleniumAgent(
claimData: any,
files: Express.Multer.File[]
): Promise<any> {
const pdfs = files
.filter((file) => file.mimetype === "application/pdf")
.map((file) => ({
originalname: file.originalname,
bufferBase64: file.buffer.toString("base64"),
}));
const images = files
.filter((file) => file.mimetype.startsWith("image/"))
.map((file) => ({
originalname: file.originalname,
bufferBase64: file.buffer.toString("base64"),
}));
const payload: SeleniumPayload = {
claim: claimData,
pdfs,
images,
};
const result = await axios.post(
"http://localhost:5002/eligibiliy-check",
payload
);
if (result.data.status === "error") {
const errorMsg =
typeof result.data.message === "string"
? result.data.message
: result.data.message?.msg || "Selenium agent error";
throw new Error(errorMsg);
}
return result.data;
}

View File

@@ -0,0 +1,27 @@
import axios from "axios";
export interface SeleniumPayload {
data: any;
}
export async function forwardToSeleniumInsuranceEligibilityAgent(
insuranceEligibilityData: any
): Promise<any> {
const payload: SeleniumPayload = {
data: insuranceEligibilityData,
};
const result = await axios.post(
"http://localhost:5002/eligibility-check",
payload
);
if (result.data.status === "error") {
const errorMsg =
typeof result.data.message === "string"
? result.data.message
: result.data.message?.msg || "Selenium agent error";
throw new Error(errorMsg);
}
return result.data;
}