feat: add member details PDF step to MH history and CMSP flows

After clicking the member ID link, print the member details page via CDP
before navigating to service history. Adds member details as a panel in
the side-by-side PDF viewer: MH History shows 3 panels (eligibility,
member details, service history); CMSP shows 4 panels (eligibility,
member details, service history, accumulator).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Gitead
2026-05-14 11:33:02 -04:00
parent 06526cd1bc
commit 0628f9f7fc
5 changed files with 102 additions and 14 deletions

View File

@@ -98,13 +98,17 @@ export default function InsuranceStatusPage() {
const [dualPreviewOpen, setDualPreviewOpen] = useState(false);
const [dualEligibilityPdfId, setDualEligibilityPdfId] = useState<number | null>(null);
const [dualEligibilityFilename, setDualEligibilityFilename] = useState<string | null>(null);
const [dualMemberDetailsPdfId, setDualMemberDetailsPdfId] = useState<number | null>(null);
const [dualMemberDetailsFilename, setDualMemberDetailsFilename] = useState<string | null>(null);
const [dualHistoryPdfId, setDualHistoryPdfId] = useState<number | null>(null);
const [dualHistoryFilename, setDualHistoryFilename] = useState<string | null>(null);
// Triple PDF modal state (used by CMSP Eligibility & History & Remaining)
// CMSP PDF modal state (used by CMSP Eligibility & History & Remaining)
const [cmspPreviewOpen, setCmspPreviewOpen] = useState(false);
const [cmspEligibilityPdfId, setCmspEligibilityPdfId] = useState<number | null>(null);
const [cmspEligibilityFilename, setCmspEligibilityFilename] = useState<string | null>(null);
const [cmspMemberDetailsPdfId, setCmspMemberDetailsPdfId] = useState<number | null>(null);
const [cmspMemberDetailsFilename, setCmspMemberDetailsFilename] = useState<string | null>(null);
const [cmspHistoryPdfId, setCmspHistoryPdfId] = useState<number | null>(null);
const [cmspHistoryFilename, setCmspHistoryFilename] = useState<string | null>(null);
const [cmspAccumulatorPdfId, setCmspAccumulatorPdfId] = useState<number | null>(null);
@@ -469,10 +473,12 @@ export default function InsuranceStatusPage() {
setSelectedPatient(null);
await queryClient.invalidateQueries({ queryKey: QK_PATIENTS_BASE });
// Open both PDFs side by side in the dual modal
if (jobResult.pdfFileId || jobResult.historyPdfFileId) {
// Open all PDFs side by side in the modal
if (jobResult.pdfFileId || jobResult.memberDetailsPdfFileId || jobResult.historyPdfFileId) {
setDualEligibilityPdfId(jobResult.pdfFileId ? Number(jobResult.pdfFileId) : null);
setDualEligibilityFilename(jobResult.pdfFilename ?? `eligibility_${memberId}.pdf`);
setDualMemberDetailsPdfId(jobResult.memberDetailsPdfFileId ? Number(jobResult.memberDetailsPdfFileId) : null);
setDualMemberDetailsFilename(jobResult.memberDetailsPdfFilename ?? `eligibility_member_details_${memberId}.pdf`);
setDualHistoryPdfId(jobResult.historyPdfFileId ? Number(jobResult.historyPdfFileId) : null);
setDualHistoryFilename(jobResult.historyPdfFilename ?? `eligibility_history_${memberId}.pdf`);
setDualPreviewOpen(true);
@@ -548,10 +554,12 @@ export default function InsuranceStatusPage() {
setSelectedPatient(null);
await queryClient.invalidateQueries({ queryKey: QK_PATIENTS_BASE });
// Open 3-panel modal
if (jobResult.pdfFileId || jobResult.historyPdfFileId || jobResult.accumulatorPdfFileId) {
// Open 4-panel modal
if (jobResult.pdfFileId || jobResult.memberDetailsPdfFileId || jobResult.historyPdfFileId || jobResult.accumulatorPdfFileId) {
setCmspEligibilityPdfId(jobResult.pdfFileId ? Number(jobResult.pdfFileId) : null);
setCmspEligibilityFilename(jobResult.pdfFilename ?? `cmsp_eligibility_${memberId}.pdf`);
setCmspMemberDetailsPdfId(jobResult.memberDetailsPdfFileId ? Number(jobResult.memberDetailsPdfFileId) : null);
setCmspMemberDetailsFilename(jobResult.memberDetailsPdfFilename ?? `cmsp_member_details_${memberId}.pdf`);
setCmspHistoryPdfId(jobResult.historyPdfFileId ? Number(jobResult.historyPdfFileId) : null);
setCmspHistoryFilename(jobResult.historyPdfFilename ?? `cmsp_history_${memberId}.pdf`);
setCmspAccumulatorPdfId(jobResult.accumulatorPdfFileId ? Number(jobResult.accumulatorPdfFileId) : null);
@@ -1159,13 +1167,15 @@ export default function InsuranceStatusPage() {
autoDownload
/>
{/* Triple PDF modal for CMSP — eligibility, history, accumulator side by side */}
{/* 4-panel modal for CMSP — eligibility, member details, history, accumulator */}
<DualPdfPreviewModal
open={cmspPreviewOpen}
onClose={() => {
setCmspPreviewOpen(false);
setCmspEligibilityPdfId(null);
setCmspEligibilityFilename(null);
setCmspMemberDetailsPdfId(null);
setCmspMemberDetailsFilename(null);
setCmspHistoryPdfId(null);
setCmspHistoryFilename(null);
setCmspAccumulatorPdfId(null);
@@ -1179,6 +1189,11 @@ export default function InsuranceStatusPage() {
label: "Eligibility",
autoDownload: true,
},
{
pdfId: cmspMemberDetailsPdfId,
fallbackFilename: cmspMemberDetailsFilename,
label: "Member Details",
},
{
pdfId: cmspHistoryPdfId,
fallbackFilename: cmspHistoryFilename,
@@ -1192,13 +1207,15 @@ export default function InsuranceStatusPage() {
]}
/>
{/* Dual PDF modal for MH Eligibility & History — both PDFs side by side */}
{/* 3-panel modal for MH Eligibility & History */}
<DualPdfPreviewModal
open={dualPreviewOpen}
onClose={() => {
setDualPreviewOpen(false);
setDualEligibilityPdfId(null);
setDualEligibilityFilename(null);
setDualMemberDetailsPdfId(null);
setDualMemberDetailsFilename(null);
setDualHistoryPdfId(null);
setDualHistoryFilename(null);
}}
@@ -1210,6 +1227,11 @@ export default function InsuranceStatusPage() {
label: "Eligibility",
autoDownload: true,
},
{
pdfId: dualMemberDetailsPdfId,
fallbackFilename: dualMemberDetailsFilename,
label: "Member Details",
},
{
pdfId: dualHistoryPdfId,
fallbackFilename: dualHistoryFilename,