feat: persist AI conversation state in DB and fix LangGraph flow bugs

- Replace in-memory Maps in aiHandoffStore with DB-backed async functions
  using new patient_conversation table (stage + aiHandoff per patient)
- Add afterHoursEnabled to ai_settings table (persists across restarts)
- Fix runtime crash in reschedule-graph: mon/tue/wed variables were out
  of scope in the next-week fallback branch (ReferenceError)
- Wire rescheduleGreeting and generalFallback chat templates through to
  LangGraph nodes so user-configured messages take effect
- Add otherNode to reminder-graph to handle unclassified patient replies
  (e.g. "I want another appointment") and route to booking flow
- Fetch chatTemplates once per webhook request instead of per stage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Gitead
2026-05-09 15:23:55 -04:00
parent e9296c68f9
commit 112529155c
321 changed files with 5096 additions and 446 deletions

View File

@@ -2183,6 +2183,61 @@ export * from './PatientAvgAggregateInput.schema.d';
export * from './PatientAvgAggregateInput.schema';
export * from './PatientAvgOrderByAggregateInput.schema.d';
export * from './PatientAvgOrderByAggregateInput.schema';
export * from './PatientConversationArgs.schema';
export * from './PatientConversationAvgAggregateInput.schema';
export * from './PatientConversationAvgOrderByAggregateInput.schema';
export * from './PatientConversationCountAggregateInput.schema';
export * from './PatientConversationCountOrderByAggregateInput.schema';
export * from './PatientConversationCreateInput.schema';
export * from './PatientConversationCreateManyInput.schema';
export * from './PatientConversationCreateManyUserInput.schema';
export * from './PatientConversationCreateManyUserInputEnvelope.schema';
export * from './PatientConversationCreateNestedManyWithoutUserInput.schema';
export * from './PatientConversationCreateNestedOneWithoutPatientInput.schema';
export * from './PatientConversationCreateOrConnectWithoutPatientInput.schema';
export * from './PatientConversationCreateOrConnectWithoutUserInput.schema';
export * from './PatientConversationCreateWithoutPatientInput.schema';
export * from './PatientConversationCreateWithoutUserInput.schema';
export * from './PatientConversationInclude.schema';
export * from './PatientConversationListRelationFilter.schema';
export * from './PatientConversationMaxAggregateInput.schema';
export * from './PatientConversationMaxOrderByAggregateInput.schema';
export * from './PatientConversationMinAggregateInput.schema';
export * from './PatientConversationMinOrderByAggregateInput.schema';
export * from './PatientConversationNullableScalarRelationFilter.schema';
export * from './PatientConversationOrderByRelationAggregateInput.schema';
export * from './PatientConversationOrderByWithAggregationInput.schema';
export * from './PatientConversationOrderByWithRelationInput.schema';
export * from './PatientConversationScalarWhereInput.schema';
export * from './PatientConversationScalarWhereWithAggregatesInput.schema';
export * from './PatientConversationSelect.schema';
export * from './PatientConversationSumAggregateInput.schema';
export * from './PatientConversationSumOrderByAggregateInput.schema';
export * from './PatientConversationUncheckedCreateInput.schema';
export * from './PatientConversationUncheckedCreateNestedManyWithoutUserInput.schema';
export * from './PatientConversationUncheckedCreateNestedOneWithoutPatientInput.schema';
export * from './PatientConversationUncheckedCreateWithoutPatientInput.schema';
export * from './PatientConversationUncheckedCreateWithoutUserInput.schema';
export * from './PatientConversationUncheckedUpdateInput.schema';
export * from './PatientConversationUncheckedUpdateManyInput.schema';
export * from './PatientConversationUncheckedUpdateManyWithoutUserInput.schema';
export * from './PatientConversationUncheckedUpdateManyWithoutUserNestedInput.schema';
export * from './PatientConversationUncheckedUpdateOneWithoutPatientNestedInput.schema';
export * from './PatientConversationUncheckedUpdateWithoutPatientInput.schema';
export * from './PatientConversationUncheckedUpdateWithoutUserInput.schema';
export * from './PatientConversationUpdateInput.schema';
export * from './PatientConversationUpdateManyMutationInput.schema';
export * from './PatientConversationUpdateManyWithWhereWithoutUserInput.schema';
export * from './PatientConversationUpdateManyWithoutUserNestedInput.schema';
export * from './PatientConversationUpdateOneWithoutPatientNestedInput.schema';
export * from './PatientConversationUpdateToOneWithWhereWithoutPatientInput.schema';
export * from './PatientConversationUpdateWithWhereUniqueWithoutUserInput.schema';
export * from './PatientConversationUpdateWithoutPatientInput.schema';
export * from './PatientConversationUpdateWithoutUserInput.schema';
export * from './PatientConversationUpsertWithWhereUniqueWithoutUserInput.schema';
export * from './PatientConversationUpsertWithoutPatientInput.schema';
export * from './PatientConversationWhereInput.schema';
export * from './PatientConversationWhereUniqueInput.schema';
export * from './PatientCountAggregateInput.schema.d';
export * from './PatientCountAggregateInput.schema';
export * from './PatientCountOrderByAggregateInput.schema.d';
@@ -2221,6 +2276,7 @@ export * from './PatientCreateNestedOneWithoutClaimsInput.schema.d';
export * from './PatientCreateNestedOneWithoutClaimsInput.schema';
export * from './PatientCreateNestedOneWithoutCommunicationsInput.schema.d';
export * from './PatientCreateNestedOneWithoutCommunicationsInput.schema';
export * from './PatientCreateNestedOneWithoutConversationInput.schema';
export * from './PatientCreateNestedOneWithoutDocumentsInput.schema.d';
export * from './PatientCreateNestedOneWithoutDocumentsInput.schema';
export * from './PatientCreateNestedOneWithoutGroupsInput.schema.d';
@@ -2235,6 +2291,7 @@ export * from './PatientCreateOrConnectWithoutClaimsInput.schema.d';
export * from './PatientCreateOrConnectWithoutClaimsInput.schema';
export * from './PatientCreateOrConnectWithoutCommunicationsInput.schema.d';
export * from './PatientCreateOrConnectWithoutCommunicationsInput.schema';
export * from './PatientCreateOrConnectWithoutConversationInput.schema';
export * from './PatientCreateOrConnectWithoutDocumentsInput.schema.d';
export * from './PatientCreateOrConnectWithoutDocumentsInput.schema';
export * from './PatientCreateOrConnectWithoutGroupsInput.schema.d';
@@ -2251,6 +2308,7 @@ export * from './PatientCreateWithoutClaimsInput.schema.d';
export * from './PatientCreateWithoutClaimsInput.schema';
export * from './PatientCreateWithoutCommunicationsInput.schema.d';
export * from './PatientCreateWithoutCommunicationsInput.schema';
export * from './PatientCreateWithoutConversationInput.schema';
export * from './PatientCreateWithoutDocumentsInput.schema.d';
export * from './PatientCreateWithoutDocumentsInput.schema';
export * from './PatientCreateWithoutGroupsInput.schema.d';
@@ -2387,6 +2445,7 @@ export * from './PatientUncheckedCreateWithoutClaimsInput.schema.d';
export * from './PatientUncheckedCreateWithoutClaimsInput.schema';
export * from './PatientUncheckedCreateWithoutCommunicationsInput.schema.d';
export * from './PatientUncheckedCreateWithoutCommunicationsInput.schema';
export * from './PatientUncheckedCreateWithoutConversationInput.schema';
export * from './PatientUncheckedCreateWithoutDocumentsInput.schema.d';
export * from './PatientUncheckedCreateWithoutDocumentsInput.schema';
export * from './PatientUncheckedCreateWithoutGroupsInput.schema.d';
@@ -2411,6 +2470,7 @@ export * from './PatientUncheckedUpdateWithoutClaimsInput.schema.d';
export * from './PatientUncheckedUpdateWithoutClaimsInput.schema';
export * from './PatientUncheckedUpdateWithoutCommunicationsInput.schema.d';
export * from './PatientUncheckedUpdateWithoutCommunicationsInput.schema';
export * from './PatientUncheckedUpdateWithoutConversationInput.schema';
export * from './PatientUncheckedUpdateWithoutDocumentsInput.schema.d';
export * from './PatientUncheckedUpdateWithoutDocumentsInput.schema';
export * from './PatientUncheckedUpdateWithoutGroupsInput.schema.d';
@@ -2435,6 +2495,7 @@ export * from './PatientUpdateOneRequiredWithoutClaimsNestedInput.schema.d';
export * from './PatientUpdateOneRequiredWithoutClaimsNestedInput.schema';
export * from './PatientUpdateOneRequiredWithoutCommunicationsNestedInput.schema.d';
export * from './PatientUpdateOneRequiredWithoutCommunicationsNestedInput.schema';
export * from './PatientUpdateOneRequiredWithoutConversationNestedInput.schema';
export * from './PatientUpdateOneRequiredWithoutDocumentsNestedInput.schema.d';
export * from './PatientUpdateOneRequiredWithoutDocumentsNestedInput.schema';
export * from './PatientUpdateOneRequiredWithoutGroupsNestedInput.schema.d';
@@ -2449,6 +2510,7 @@ export * from './PatientUpdateToOneWithWhereWithoutClaimsInput.schema.d';
export * from './PatientUpdateToOneWithWhereWithoutClaimsInput.schema';
export * from './PatientUpdateToOneWithWhereWithoutCommunicationsInput.schema.d';
export * from './PatientUpdateToOneWithWhereWithoutCommunicationsInput.schema';
export * from './PatientUpdateToOneWithWhereWithoutConversationInput.schema';
export * from './PatientUpdateToOneWithWhereWithoutDocumentsInput.schema.d';
export * from './PatientUpdateToOneWithWhereWithoutDocumentsInput.schema';
export * from './PatientUpdateToOneWithWhereWithoutGroupsInput.schema.d';
@@ -2465,6 +2527,7 @@ export * from './PatientUpdateWithoutClaimsInput.schema.d';
export * from './PatientUpdateWithoutClaimsInput.schema';
export * from './PatientUpdateWithoutCommunicationsInput.schema.d';
export * from './PatientUpdateWithoutCommunicationsInput.schema';
export * from './PatientUpdateWithoutConversationInput.schema';
export * from './PatientUpdateWithoutDocumentsInput.schema.d';
export * from './PatientUpdateWithoutDocumentsInput.schema';
export * from './PatientUpdateWithoutGroupsInput.schema.d';
@@ -2483,6 +2546,7 @@ export * from './PatientUpsertWithoutClaimsInput.schema.d';
export * from './PatientUpsertWithoutClaimsInput.schema';
export * from './PatientUpsertWithoutCommunicationsInput.schema.d';
export * from './PatientUpsertWithoutCommunicationsInput.schema';
export * from './PatientUpsertWithoutConversationInput.schema';
export * from './PatientUpsertWithoutDocumentsInput.schema.d';
export * from './PatientUpsertWithoutDocumentsInput.schema';
export * from './PatientUpsertWithoutGroupsInput.schema.d';
@@ -3388,6 +3452,7 @@ export * from './UserCountOutputTypeCountNotificationsArgs.schema.d';
export * from './UserCountOutputTypeCountNotificationsArgs.schema';
export * from './UserCountOutputTypeCountNpiProvidersArgs.schema.d';
export * from './UserCountOutputTypeCountNpiProvidersArgs.schema';
export * from './UserCountOutputTypeCountPatientConversationsArgs.schema';
export * from './UserCountOutputTypeCountPatientsArgs.schema.d';
export * from './UserCountOutputTypeCountPatientsArgs.schema';
export * from './UserCountOutputTypeCountStaffArgs.schema.d';
@@ -3424,6 +3489,7 @@ export * from './UserCreateNestedOneWithoutNpiProvidersInput.schema.d';
export * from './UserCreateNestedOneWithoutNpiProvidersInput.schema';
export * from './UserCreateNestedOneWithoutOfficeContactInput.schema';
export * from './UserCreateNestedOneWithoutOfficeHoursInput.schema';
export * from './UserCreateNestedOneWithoutPatientConversationsInput.schema';
export * from './UserCreateNestedOneWithoutPatientsInput.schema.d';
export * from './UserCreateNestedOneWithoutPatientsInput.schema';
export * from './UserCreateNestedOneWithoutProcedureTimeslotInput.schema';
@@ -3456,6 +3522,7 @@ export * from './UserCreateOrConnectWithoutNpiProvidersInput.schema.d';
export * from './UserCreateOrConnectWithoutNpiProvidersInput.schema';
export * from './UserCreateOrConnectWithoutOfficeContactInput.schema';
export * from './UserCreateOrConnectWithoutOfficeHoursInput.schema';
export * from './UserCreateOrConnectWithoutPatientConversationsInput.schema';
export * from './UserCreateOrConnectWithoutPatientsInput.schema.d';
export * from './UserCreateOrConnectWithoutPatientsInput.schema';
export * from './UserCreateOrConnectWithoutProcedureTimeslotInput.schema';
@@ -3488,6 +3555,7 @@ export * from './UserCreateWithoutNpiProvidersInput.schema.d';
export * from './UserCreateWithoutNpiProvidersInput.schema';
export * from './UserCreateWithoutOfficeContactInput.schema';
export * from './UserCreateWithoutOfficeHoursInput.schema';
export * from './UserCreateWithoutPatientConversationsInput.schema';
export * from './UserCreateWithoutPatientsInput.schema.d';
export * from './UserCreateWithoutPatientsInput.schema';
export * from './UserCreateWithoutProcedureTimeslotInput.schema';
@@ -3548,6 +3616,7 @@ export * from './UserUncheckedCreateWithoutNpiProvidersInput.schema.d';
export * from './UserUncheckedCreateWithoutNpiProvidersInput.schema';
export * from './UserUncheckedCreateWithoutOfficeContactInput.schema';
export * from './UserUncheckedCreateWithoutOfficeHoursInput.schema';
export * from './UserUncheckedCreateWithoutPatientConversationsInput.schema';
export * from './UserUncheckedCreateWithoutPatientsInput.schema.d';
export * from './UserUncheckedCreateWithoutPatientsInput.schema';
export * from './UserUncheckedCreateWithoutProcedureTimeslotInput.schema';
@@ -3584,6 +3653,7 @@ export * from './UserUncheckedUpdateWithoutNpiProvidersInput.schema.d';
export * from './UserUncheckedUpdateWithoutNpiProvidersInput.schema';
export * from './UserUncheckedUpdateWithoutOfficeContactInput.schema';
export * from './UserUncheckedUpdateWithoutOfficeHoursInput.schema';
export * from './UserUncheckedUpdateWithoutPatientConversationsInput.schema';
export * from './UserUncheckedUpdateWithoutPatientsInput.schema.d';
export * from './UserUncheckedUpdateWithoutPatientsInput.schema';
export * from './UserUncheckedUpdateWithoutProcedureTimeslotInput.schema';
@@ -3616,6 +3686,7 @@ export * from './UserUpdateOneRequiredWithoutNpiProvidersNestedInput.schema.d';
export * from './UserUpdateOneRequiredWithoutNpiProvidersNestedInput.schema';
export * from './UserUpdateOneRequiredWithoutOfficeContactNestedInput.schema';
export * from './UserUpdateOneRequiredWithoutOfficeHoursNestedInput.schema';
export * from './UserUpdateOneRequiredWithoutPatientConversationsNestedInput.schema';
export * from './UserUpdateOneRequiredWithoutPatientsNestedInput.schema.d';
export * from './UserUpdateOneRequiredWithoutPatientsNestedInput.schema';
export * from './UserUpdateOneRequiredWithoutProcedureTimeslotNestedInput.schema';
@@ -3652,6 +3723,7 @@ export * from './UserUpdateToOneWithWhereWithoutNpiProvidersInput.schema.d';
export * from './UserUpdateToOneWithWhereWithoutNpiProvidersInput.schema';
export * from './UserUpdateToOneWithWhereWithoutOfficeContactInput.schema';
export * from './UserUpdateToOneWithWhereWithoutOfficeHoursInput.schema';
export * from './UserUpdateToOneWithWhereWithoutPatientConversationsInput.schema';
export * from './UserUpdateToOneWithWhereWithoutPatientsInput.schema.d';
export * from './UserUpdateToOneWithWhereWithoutPatientsInput.schema';
export * from './UserUpdateToOneWithWhereWithoutProcedureTimeslotInput.schema';
@@ -3684,6 +3756,7 @@ export * from './UserUpdateWithoutNpiProvidersInput.schema.d';
export * from './UserUpdateWithoutNpiProvidersInput.schema';
export * from './UserUpdateWithoutOfficeContactInput.schema';
export * from './UserUpdateWithoutOfficeHoursInput.schema';
export * from './UserUpdateWithoutPatientConversationsInput.schema';
export * from './UserUpdateWithoutPatientsInput.schema.d';
export * from './UserUpdateWithoutPatientsInput.schema';
export * from './UserUpdateWithoutProcedureTimeslotInput.schema';
@@ -3716,6 +3789,7 @@ export * from './UserUpsertWithoutNpiProvidersInput.schema.d';
export * from './UserUpsertWithoutNpiProvidersInput.schema';
export * from './UserUpsertWithoutOfficeContactInput.schema';
export * from './UserUpsertWithoutOfficeHoursInput.schema';
export * from './UserUpsertWithoutPatientConversationsInput.schema';
export * from './UserUpsertWithoutPatientsInput.schema.d';
export * from './UserUpsertWithoutPatientsInput.schema';
export * from './UserUpsertWithoutProcedureTimeslotInput.schema';