diff --git a/.turbo/preferences/tui.json b/.turbo/preferences/tui.json index f46ddd7d..efb36255 100644 --- a/.turbo/preferences/tui.json +++ b/.turbo/preferences/tui.json @@ -1,4 +1,4 @@ { "is_task_list_visible": true, - "active_task": "backend#dev" + "active_task": "frontend#dev" } \ No newline at end of file diff --git a/apps/Backend/src/ai/internal-chat-graph.ts b/apps/Backend/src/ai/internal-chat-graph.ts index 8fbd17e3..3afcc7fc 100644 --- a/apps/Backend/src/ai/internal-chat-graph.ts +++ b/apps/Backend/src/ai/internal-chat-graph.ts @@ -79,6 +79,9 @@ Intents: Insurance abbreviations are: mh, masshealth, bcbs, cca, dentaquest — anything else is a patient name - eligibility_by_id : user provides a SINGLE member ID and date of birth (no patient name) e.g. "check masshealth for 100xxxx, 10/10/1988" + e.g. "100xxxx 10/10/1988" or "100xxxx, 10/10/1988" — a bare member ID + DOB with + NO verb and NO insurance keyword is STILL eligibility_by_id (default to MassHealth, + omit insuranceHint). Do NOT classify this as "general". ALSO use this when user wants to check eligibility AND schedule/add an appointment on a date e.g. "check mh for 100xxxx, 10/10/1988 and schedule on 4/10/2026" e.g. "check mh for 100xxxx, 10/10/1988 and make appointment on 5/1/2026" @@ -219,6 +222,20 @@ Rules: // ─── Classifier ─────────────────────────────────────────────────────────────── +// Deterministic fast-path for a bare "memberId DOB" (or "DOB memberId") message with +// nothing else in it — e.g. "100232102531 4/27/1999" or "100232102531, 4/27/1999". +// Bypasses the LLM entirely so this always resolves to eligibility_by_id, since some +// providers hedge/refuse structured output on a bare digit string that looks like an SSN. +function parseBareIdDob(message: string): { memberId: string; dob: string } | null { + const text = message.trim(); + const dobPattern = /(\d{1,2}[\/\-]\d{1,2}[\/\-]\d{4})/; + const idThenDob = text.match(new RegExp(`^([A-Za-z0-9]{3,})[\\s,]+${dobPattern.source}$`)); + if (idThenDob) return { memberId: idThenDob[1]!, dob: idThenDob[2]!.replace(/-/g, "/") }; + const dobThenId = text.match(new RegExp(`^${dobPattern.source}[\\s,]+([A-Za-z0-9]{3,})$`)); + if (dobThenId) return { memberId: dobThenId[2]!, dob: dobThenId[1]!.replace(/-/g, "/") }; + return null; +} + export async function classifyInternalChat( message: string, apiKey: string, @@ -234,6 +251,16 @@ export async function classifyInternalChat( "I can search for a patient, check eligibility, run check & claim, schedule appointments, or navigate to claims or appointments.", }; + const bare = parseBareIdDob(message); + if (bare) { + return { + intent: "eligibility_by_id", + memberId: bare.memberId, + dob: bare.dob, + fallbackReply: `Checking eligibility for Member ID ${bare.memberId}...`, + }; + } + if (!apiKey) return fallback; // Prefer the client's local date (avoids UTC midnight rollover for US timezones) diff --git a/apps/Backend/src/ai/internal-chat-workflow.ts b/apps/Backend/src/ai/internal-chat-workflow.ts index 334511cd..13ea8cfa 100644 --- a/apps/Backend/src/ai/internal-chat-workflow.ts +++ b/apps/Backend/src/ai/internal-chat-workflow.ts @@ -113,6 +113,7 @@ interface StorageLike { }): Promise; getPatientByInsuranceId(id: string): Promise; getPatientByInsuranceIdAndDob(id: string, dob: Date): Promise; + getPatientByInsuranceIdNoDob(id: string): Promise; createAppointment(appointment: any): Promise; getAppointmentsByDateForUser(dateStr: string, userId: number): Promise; getOfficeHours(userId: number): Promise; @@ -172,7 +173,11 @@ async function findPatientByMemberId( if (dobDate && !isNaN(dobDate.getTime())) { const byCombo = await storage.getPatientByInsuranceIdAndDob(memberId, dobDate); if (byCombo) return byCombo; - // DOB provided but no record with that combo → this is a new family member not yet in DB + // No exact DOB match — check for an existing patient with this memberId but no DOB on + // file (e.g. imported from a PDF extraction that didn't capture birthdates) before + // concluding this is a brand-new family member not yet in DB. + const byIdNoDob = await storage.getPatientByInsuranceIdNoDob(memberId); + if (byIdNoDob) return byIdNoDob; return null; } return storage.getPatientByInsuranceId(memberId); @@ -428,28 +433,12 @@ async function handleEligibilityById( }; } - // Determine siteKey + // Determine siteKey (defaults to MassHealth when no payer is specified) const siteKey = resolveSiteKey( patient?.insuranceProvider ?? null, c.insuranceHint ?? null ); - if (!siteKey) { - const name = patient - ? `${patient.firstName ?? ""} ${patient.lastName ?? ""}`.trim() - : `Member ID ${memberId}`; - return { - reply: `Found ${name} but couldn't determine the insurance type. Which insurance should I use?`, - action: "need_insurance_clarification", - actionData: { - memberId, - dob: resolvedDob, - patient, - options: ["MassHealth", "BCBS MA", "CCA", "Tufts SCO", "Delta Dental MA", "United SCO / Dental Hub"], - }, - }; - } - const label = patient ? `${patient.firstName ?? ""} ${patient.lastName ?? ""}`.trim() : `Member ID ${memberId}`; @@ -985,29 +974,12 @@ async function handleCheckAndClaim( }; } - // 2. Determine siteKey + // 2. Determine siteKey (defaults to MassHealth when no payer is specified) const siteKey = resolveSiteKey( patient?.insuranceProvider ?? null, c.insuranceHint ?? null ); - if (!siteKey) { - const label = patient - ? `${patient.firstName ?? ""} ${patient.lastName ?? ""}`.trim() - : `Member ID ${memberId}`; - return { - reply: `Found ${label} but couldn't determine the insurance type. Which insurance should I use?`, - action: "need_insurance_clarification", - actionData: { - memberId, - dob, - patient, - procedureNames: c.procedureNames ?? [], - options: ["MassHealth", "BCBS MA", "CCA", "Tufts SCO", "Delta Dental MA", "United SCO / Dental Hub"], - }, - }; - } - // 3. Map procedure names → CDT codes (custom aliases take priority) const procedureNames = stripAttachmentRefs(c.procedureNames ?? []); const cdtResults: CdtResult[] = procedureNames.length > 0 @@ -1456,13 +1428,13 @@ export async function createAppointmentToday( * Determine siteKey from: * 1. Patient's stored insuranceProvider (most authoritative) * 2. Insurance hint from the chat message - * 3. null → caller must ask for clarification + * 3. No payer specified → default to MassHealth ("MH") */ function resolveSiteKey( storedProvider: string | null, hint: string | null -): string | null { +): string { if (storedProvider) return deriveSiteKey(storedProvider); if (hint) return deriveSiteKey(hint); - return null; + return "MH"; } diff --git a/apps/Backend/src/storage/patients-storage.ts b/apps/Backend/src/storage/patients-storage.ts index 82a49aa4..eb67ba8d 100755 --- a/apps/Backend/src/storage/patients-storage.ts +++ b/apps/Backend/src/storage/patients-storage.ts @@ -11,6 +11,7 @@ export interface IStorage { getPatient(id: number): Promise; getPatientByInsuranceId(insuranceId: string): Promise; getPatientByInsuranceIdAndDob(insuranceId: string, dob: Date): Promise; + getPatientByInsuranceIdNoDob(insuranceId: string): Promise; getAllPatients(): Promise; getRecentPatients(limit: number, offset: number): Promise; getPatientsByIds(ids: number[]): Promise; @@ -74,6 +75,12 @@ export const patientsStorage: IStorage = { }); }, + async getPatientByInsuranceIdNoDob(insuranceId: string): Promise { + return db.patient.findFirst({ + where: { insuranceId, dateOfBirth: null }, + }); + }, + async getRecentPatients(limit: number, offset: number): Promise { return db.patient.findMany({ skip: offset, diff --git a/apps/Frontend/tsconfig.tsbuildinfo b/apps/Frontend/tsconfig.tsbuildinfo index 87965c32..5a57db59 100755 --- a/apps/Frontend/tsconfig.tsbuildinfo +++ b/apps/Frontend/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"root":["./tailwind.config.ts","./vite.config.ts","./src/theme-init.ts","./src/vite-env.d.ts","./src/hooks/use-extractPdfData.ts","./src/hooks/use-job-status.ts","./src/hooks/use-license.ts","./src/hooks/use-toast.ts","./src/lib/chatbotFileStore.ts","./src/lib/queryClient.ts","./src/lib/socket.ts","./src/lib/utils.ts","./src/lib/api/documents.ts","./src/redux/hooks.ts","./src/redux/store.ts","./src/redux/slices/seleniumTaskSlice.ts","./src/utils/appointmentTypeUtils.ts","./src/utils/dateUtils.ts","./src/utils/pageNumberGenerator.ts","./src/utils/procedureCombos.ts","./src/utils/procedureCombosMapping.ts","./src/App.tsx","./src/main.tsx","./src/components/analytics/appointments-by-day.tsx","./src/components/analytics/new-patients.tsx","./src/components/appointment-procedures/appointment-procedures-dialog.tsx","./src/components/appointments/add-appointment-modal.tsx","./src/components/appointments/appointment-form.tsx","./src/components/appointments/patient-status-badge.tsx","./src/components/chart/lab-management-tab.tsx","./src/components/chart/prescription-tab.tsx","./src/components/chart/teeth-chart.tsx","./src/components/chart/treatment-plan-tab.tsx","./src/components/claims/claim-document-upload-modal.tsx","./src/components/claims/claim-edit-modal.tsx","./src/components/claims/claim-form.tsx","./src/components/claims/claim-view-modal.tsx","./src/components/claims/claims-of-patient-table.tsx","./src/components/claims/claims-recent-table.tsx","./src/components/claims/claims-ui.tsx","./src/components/claims/tooth-ui.tsx","./src/components/cloud-storage/bread-crumb.tsx","./src/components/cloud-storage/file-preview-modal.tsx","./src/components/cloud-storage/files-section.tsx","./src/components/cloud-storage/folder-panel.tsx","./src/components/cloud-storage/folder-section.tsx","./src/components/cloud-storage/new-folder-modal.tsx","./src/components/cloud-storage/recent-top-level-folder-modal.tsx","./src/components/cloud-storage/search-bar.tsx","./src/components/database-management/backup-destination-manager.tsx","./src/components/database-management/folder-browser-modal.tsx","./src/components/database-management/import-database-section.tsx","./src/components/database-management/network-backup-manager.tsx","./src/components/documents/file-preview-modal.tsx","./src/components/file-upload/file-upload-zone.tsx","./src/components/file-upload/multiple-file-upload-zone.tsx","./src/components/insurance/credentials-modal.tsx","./src/components/insurance-status/bcbs-ma-button-modal.tsx","./src/components/insurance-status/cca-button-modal.tsx","./src/components/insurance-status/ddma-buton-modal.tsx","./src/components/insurance-status/deltains-button-modal.tsx","./src/components/insurance-status/dual-pdf-preview-modal.tsx","./src/components/insurance-status/pdf-preview-modal.tsx","./src/components/insurance-status/tufts-sco-button-modal.tsx","./src/components/insurance-status/united-sco-button-modal.tsx","./src/components/layout/app-layout.tsx","./src/components/layout/chatbot.tsx","./src/components/layout/notification-bell.tsx","./src/components/layout/sidebar.tsx","./src/components/layout/top-app-bar.tsx","./src/components/patient-connection/dial-pad.tsx","./src/components/patient-connection/message-thread.tsx","./src/components/patient-connection/sms-template-diaog.tsx","./src/components/patients/add-patient-modal.tsx","./src/components/patients/patient-financial-modal.tsx","./src/components/patients/patient-form.tsx","./src/components/patients/patient-search.tsx","./src/components/patients/patient-table.tsx","./src/components/payments/payment-edit-modal.tsx","./src/components/payments/payment-ocr-block.tsx","./src/components/payments/payment-upload-documents-block.tsx","./src/components/payments/payments-of-patient-table.tsx","./src/components/payments/payments-recent-table.tsx","./src/components/procedure/procedure-combo-buttons.tsx","./src/components/reports/collections-by-doctor-report.tsx","./src/components/reports/commission-section.tsx","./src/components/reports/export-button.tsx","./src/components/reports/pagination-controls.tsx","./src/components/reports/patients-balances-list.tsx","./src/components/reports/patients-with-balance-report.tsx","./src/components/reports/report-config.tsx","./src/components/reports/summary-cards.tsx","./src/components/settings/InsuranceCredForm.tsx","./src/components/settings/ai-chat-settings-card.tsx","./src/components/settings/ai-chat-templates-card.tsx","./src/components/settings/ai-settings-card.tsx","./src/components/settings/insurance-contact-card.tsx","./src/components/settings/insuranceCredTable.tsx","./src/components/settings/npiProviderForm.tsx","./src/components/settings/npiProviderTable.tsx","./src/components/settings/office-contact-card.tsx","./src/components/settings/office-hours-card.tsx","./src/components/settings/procedure-timeslot-card.tsx","./src/components/settings/program-bridge-table.tsx","./src/components/settings/twilio-settings-card.tsx","./src/components/staffs/staff-form.tsx","./src/components/staffs/staff-table.tsx","./src/components/ui/LoadingScreen.tsx","./src/components/ui/accordion.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/alert.tsx","./src/components/ui/aspect-ratio.tsx","./src/components/ui/avatar.tsx","./src/components/ui/badge.tsx","./src/components/ui/breadcrumb.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.tsx","./src/components/ui/card.tsx","./src/components/ui/carousel.tsx","./src/components/ui/chart.tsx","./src/components/ui/checkbox.tsx","./src/components/ui/collapsible.tsx","./src/components/ui/command.tsx","./src/components/ui/confirmationDialog.tsx","./src/components/ui/context-menu.tsx","./src/components/ui/data-table.tsx","./src/components/ui/dateInput.tsx","./src/components/ui/dateInputField.tsx","./src/components/ui/deleteDialog.tsx","./src/components/ui/dialog.tsx","./src/components/ui/drawer.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/form.tsx","./src/components/ui/hover-card.tsx","./src/components/ui/input-otp.tsx","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/menubar.tsx","./src/components/ui/navigation-menu.tsx","./src/components/ui/pagination.tsx","./src/components/ui/popover.tsx","./src/components/ui/progress.tsx","./src/components/ui/radio-group.tsx","./src/components/ui/resizable.tsx","./src/components/ui/scroll-area.tsx","./src/components/ui/select.tsx","./src/components/ui/selenium-task-banner.tsx","./src/components/ui/separator.tsx","./src/components/ui/sheet.tsx","./src/components/ui/sidebar.tsx","./src/components/ui/skeleton.tsx","./src/components/ui/slider.tsx","./src/components/ui/stat-card.tsx","./src/components/ui/switch.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/components/ui/textarea.tsx","./src/components/ui/toast.tsx","./src/components/ui/toaster.tsx","./src/components/ui/toggle-group.tsx","./src/components/ui/toggle.tsx","./src/components/ui/tooltip.tsx","./src/hooks/use-auth.tsx","./src/hooks/use-mobile.tsx","./src/lib/protected-route.tsx","./src/pages/activation-page.tsx","./src/pages/ai-input-agent-page.tsx","./src/pages/appointments-page.tsx","./src/pages/auth-page.tsx","./src/pages/chart-page.tsx","./src/pages/claims-page.tsx","./src/pages/cloud-storage-page.tsx","./src/pages/dashboard.tsx","./src/pages/database-management-page.tsx","./src/pages/dental-shopping-login-info-page.tsx","./src/pages/dental-shopping-search-tag-page.tsx","./src/pages/documents-page.tsx","./src/pages/insurance-status-page.tsx","./src/pages/job-monitor-page.tsx","./src/pages/not-found.tsx","./src/pages/patient-connection-page.tsx","./src/pages/patients-page.tsx","./src/pages/payments-page.tsx","./src/pages/reports-page.tsx","./src/pages/settings-page.tsx"],"errors":true,"version":"5.8.3"} \ No newline at end of file +{"root":["./tailwind.config.ts","./vite.config.ts","./src/theme-init.ts","./src/vite-env.d.ts","./src/config/lab-rx-templates.ts","./src/hooks/use-extractPdfData.ts","./src/hooks/use-job-status.ts","./src/hooks/use-license.ts","./src/hooks/use-screen-capture.ts","./src/hooks/use-toast.ts","./src/lib/chatbotFileStore.ts","./src/lib/queryClient.ts","./src/lib/socket.ts","./src/lib/utils.ts","./src/lib/api/documents.ts","./src/pages/ai-input-agent-page.d.ts","./src/redux/hooks.ts","./src/redux/store.ts","./src/redux/slices/seleniumTaskSlice.ts","./src/utils/appointmentTypeUtils.ts","./src/utils/dateUtils.ts","./src/utils/pageNumberGenerator.ts","./src/utils/procedureCombos.ts","./src/utils/procedureCombosMapping.ts","./src/App.tsx","./src/main.tsx","./src/components/analytics/appointments-by-day.tsx","./src/components/analytics/new-patients.tsx","./src/components/appointment-procedures/appointment-procedures-dialog.tsx","./src/components/appointments/add-appointment-modal.tsx","./src/components/appointments/appointment-attachments.tsx","./src/components/appointments/appointment-form.tsx","./src/components/appointments/patient-status-badge.tsx","./src/components/chart/barcode-modal.tsx","./src/components/chart/lab-management-tab.tsx","./src/components/chart/lab-rx-modal.tsx","./src/components/chart/prescription-tab.tsx","./src/components/chart/teeth-chart.tsx","./src/components/chart/treatment-plan-tab.tsx","./src/components/claims/claim-document-upload-modal.tsx","./src/components/claims/claim-edit-modal.tsx","./src/components/claims/claim-form.tsx","./src/components/claims/claim-view-modal.tsx","./src/components/claims/claims-of-patient-table.tsx","./src/components/claims/claims-recent-table.tsx","./src/components/claims/claims-ui.tsx","./src/components/claims/tooth-ui.tsx","./src/components/cloud-storage/bread-crumb.tsx","./src/components/cloud-storage/file-preview-modal.tsx","./src/components/cloud-storage/files-section.tsx","./src/components/cloud-storage/folder-panel.tsx","./src/components/cloud-storage/folder-section.tsx","./src/components/cloud-storage/new-folder-modal.tsx","./src/components/cloud-storage/recent-top-level-folder-modal.tsx","./src/components/cloud-storage/search-bar.tsx","./src/components/database-management/backup-destination-manager.tsx","./src/components/database-management/folder-browser-modal.tsx","./src/components/database-management/import-database-section.tsx","./src/components/database-management/network-backup-manager.tsx","./src/components/documents/file-preview-modal.tsx","./src/components/file-upload/file-upload-zone.tsx","./src/components/file-upload/multiple-file-upload-zone.tsx","./src/components/file-upload/server-attachments-picker-modal.tsx","./src/components/insurance/credentials-modal.tsx","./src/components/insurance-status/bcbs-ma-button-modal.tsx","./src/components/insurance-status/cca-button-modal.tsx","./src/components/insurance-status/ddma-buton-modal.tsx","./src/components/insurance-status/deltains-button-modal.tsx","./src/components/insurance-status/dual-pdf-preview-modal.tsx","./src/components/insurance-status/pdf-preview-modal.tsx","./src/components/insurance-status/tufts-sco-button-modal.tsx","./src/components/insurance-status/united-sco-button-modal.tsx","./src/components/layout/app-layout.tsx","./src/components/layout/chatbot.tsx","./src/components/layout/notification-bell.tsx","./src/components/layout/sidebar.tsx","./src/components/layout/top-app-bar.tsx","./src/components/patient-connection/dial-pad.tsx","./src/components/patient-connection/message-thread.tsx","./src/components/patient-connection/sms-template-diaog.tsx","./src/components/patients/add-patient-modal.tsx","./src/components/patients/patient-financial-modal.tsx","./src/components/patients/patient-form.tsx","./src/components/patients/patient-search.tsx","./src/components/patients/patient-table.tsx","./src/components/payments/payment-edit-modal.tsx","./src/components/payments/payment-ocr-block.tsx","./src/components/payments/payment-upload-documents-block.tsx","./src/components/payments/payments-of-patient-table.tsx","./src/components/payments/payments-recent-table.tsx","./src/components/procedure/procedure-combo-buttons.tsx","./src/components/reports/collections-by-doctor-report.tsx","./src/components/reports/commission-section.tsx","./src/components/reports/export-button.tsx","./src/components/reports/pagination-controls.tsx","./src/components/reports/patients-balances-list.tsx","./src/components/reports/patients-no-balance-report.tsx","./src/components/reports/patients-with-balance-report.tsx","./src/components/reports/report-config.tsx","./src/components/reports/summary-cards.tsx","./src/components/settings/InsuranceCredForm.tsx","./src/components/settings/ai-chat-settings-card.tsx","./src/components/settings/ai-chat-templates-card.tsx","./src/components/settings/ai-settings-card.tsx","./src/components/settings/insurance-contact-card.tsx","./src/components/settings/insuranceCredTable.tsx","./src/components/settings/npiProviderForm.tsx","./src/components/settings/npiProviderTable.tsx","./src/components/settings/office-contact-card.tsx","./src/components/settings/office-hours-card.tsx","./src/components/settings/procedure-timeslot-card.tsx","./src/components/settings/program-bridge-table.tsx","./src/components/settings/selenium-settings-card.tsx","./src/components/settings/twilio-settings-card.tsx","./src/components/staffs/staff-form.tsx","./src/components/staffs/staff-table.tsx","./src/components/ui/LoadingScreen.tsx","./src/components/ui/accordion.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/alert.tsx","./src/components/ui/aspect-ratio.tsx","./src/components/ui/avatar.tsx","./src/components/ui/badge.tsx","./src/components/ui/breadcrumb.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.tsx","./src/components/ui/card.tsx","./src/components/ui/carousel.tsx","./src/components/ui/chart.tsx","./src/components/ui/checkbox.tsx","./src/components/ui/collapsible.tsx","./src/components/ui/command.tsx","./src/components/ui/confirmationDialog.tsx","./src/components/ui/context-menu.tsx","./src/components/ui/data-table.tsx","./src/components/ui/dateInput.tsx","./src/components/ui/dateInputField.tsx","./src/components/ui/deleteDialog.tsx","./src/components/ui/dialog.tsx","./src/components/ui/drawer.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/form.tsx","./src/components/ui/hover-card.tsx","./src/components/ui/input-otp.tsx","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/menubar.tsx","./src/components/ui/navigation-menu.tsx","./src/components/ui/pagination.tsx","./src/components/ui/popover.tsx","./src/components/ui/progress.tsx","./src/components/ui/radio-group.tsx","./src/components/ui/resizable.tsx","./src/components/ui/scroll-area.tsx","./src/components/ui/select.tsx","./src/components/ui/selenium-task-banner.tsx","./src/components/ui/separator.tsx","./src/components/ui/sheet.tsx","./src/components/ui/sidebar.tsx","./src/components/ui/skeleton.tsx","./src/components/ui/slider.tsx","./src/components/ui/stat-card.tsx","./src/components/ui/switch.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/components/ui/textarea.tsx","./src/components/ui/toast.tsx","./src/components/ui/toaster.tsx","./src/components/ui/toggle-group.tsx","./src/components/ui/toggle.tsx","./src/components/ui/tooltip.tsx","./src/hooks/use-auth.tsx","./src/hooks/use-mobile.tsx","./src/lib/protected-route.tsx","./src/pages/activation-page.tsx","./src/pages/ai-agent-settings-page.tsx","./src/pages/ai-copy-agent-page.tsx","./src/pages/ai-type-agent-page.tsx","./src/pages/appointments-page.tsx","./src/pages/auth-page.tsx","./src/pages/chart-page.tsx","./src/pages/claims-page.tsx","./src/pages/cloud-storage-page.tsx","./src/pages/dashboard.tsx","./src/pages/database-management-page.tsx","./src/pages/dental-education-page.tsx","./src/pages/dental-shopping-login-info-page.tsx","./src/pages/dental-shopping-search-tag-page.tsx","./src/pages/documents-page.tsx","./src/pages/insurance-status-page.tsx","./src/pages/job-monitor-page.tsx","./src/pages/not-found.tsx","./src/pages/patient-connection-page.tsx","./src/pages/patients-page.tsx","./src/pages/payments-page.tsx","./src/pages/reports-page.tsx","./src/pages/settings-page.tsx"],"errors":true,"version":"5.8.3"} \ No newline at end of file