feat: United Ucard name+DOB eligibility search via chat, duplicate-record handling, Product ID as member ID

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-20 22:30:01 -04:00
co-authored by Claude Sonnet 5
parent ce25cdd2a2
commit 7ec82902d9
7 changed files with 366 additions and 64 deletions
@@ -115,6 +115,8 @@ export default function InsuranceStatusPage() {
const [firstName, setFirstName] = useState("");
const [lastName, setLastName] = useState("");
const isFormIncomplete = !memberId || !dateOfBirth;
// United Ucard can also search by first name + last name + DOB when there's no member ID.
const isUcardFormIncomplete = !dateOfBirth || (!memberId && !(firstName && lastName));
const [isCheckingEligibilityStatus, setIsCheckingEligibilityStatus] =
useState(false);
const [isCheckingEligibilityAppointment, setIsCheckingEligibilityAppointment] =
@@ -186,8 +188,10 @@ export default function InsuranceStatusPage() {
const raw = sessionStorage.getItem("chatbot_eligibility");
if (!raw) return;
try {
const { memberId: id, dob, autoCheck: ac } = JSON.parse(raw);
const { memberId: id, dob, autoCheck: ac, firstName: fn, lastName: ln } = JSON.parse(raw);
if (id) setMemberId(id);
if (fn) setFirstName(fn);
if (ln) setLastName(ln);
if (dob) {
// dob may arrive as MM/DD/YYYY or YYYY-MM-DD — normalize to YYYY-MM-DD.
// A malformed date (e.g. hand-edited in the chatbot) must not abort the rest of
@@ -749,7 +753,8 @@ export default function InsuranceStatusPage() {
// Auto-trigger after prefill (from chatbot or schedule page "Check Eligibility")
useEffect(() => {
if (!pendingAutoCheck.current || !memberId || !dateOfBirth) return;
if (!pendingAutoCheck.current || !dateOfBirth) return;
if (!memberId && !(pendingAutoCheck.current === "united-ucard" && firstName && lastName)) return;
const check = pendingAutoCheck.current;
pendingAutoCheck.current = null;
if (check === "mh" || check === "mh-history") {
@@ -1209,7 +1214,7 @@ export default function InsuranceStatusPage() {
dateOfBirth={dateOfBirth}
firstName={firstName}
lastName={lastName}
isFormIncomplete={isFormIncomplete}
isFormIncomplete={isUcardFormIncomplete}
autoTrigger={triggerTarget === "united-ucard"}
onAutoTriggered={() => setTriggerTarget(null)}
onPdfReady={async (pdfId, fallbackFilename) => {