From 3e899376c314e6d8dba423930ce4d448531b1b75 Mon Sep 17 00:00:00 2001 From: Gitead Date: Mon, 27 Apr 2026 00:25:24 -0400 Subject: [PATCH] feat: Select Procedures flow, batch-column NPI provider fix, auto PDF save - Add 'Select Procedures' right-click option on appointment page (separate from Claims/PreAuth) - Select Procedures form saves CDT codes + NPI provider to AppointmentProcedure storage - Remove Save button from insurance claim form; Claims/PreAuth opens for insurance submission only - Claims/PreAuth auto-prefills from saved procedures including NPI provider - Batch-column: procedures npiProviderId takes priority over stale claim npiProviderId - Batch-column: auto-save PDF to patient Documents after successful submission (no socket needed) - Add npiProviderId column to AppointmentProcedure table (prisma db push) - Fix 'invalid db creation invocation': guard staffId, npiProviderId, procedureDate as Date object, totalBilled NaN guard - Add full error logging to batch-column catch block Co-Authored-By: Claude Sonnet 4.6 --- apps/Backend/src/queue/jobRunner.ts | 1 + .../queue/processors/claimSubmitProcessor.ts | 48 +- .../src/queue/workers/seleniumWorker.ts | 2 + .../src/routes/appointments-procedures.ts | 65 + apps/Backend/src/routes/claims.ts | 448 ++- .../storage/appointment-procedures-storage.ts | 33 + .../src/storage/appointments-storage.ts | 18 + .../appointment-procedures-dialog.tsx | 495 +-- .../src/components/claims/claim-form.tsx | 435 ++- apps/Frontend/src/pages/appointments-page.tsx | 338 +- apps/Frontend/src/pages/claims-page.tsx | 25 +- packages/db/generated/prisma/edge.js | 16 +- packages/db/generated/prisma/index-browser.js | 8 +- packages/db/generated/prisma/index.d.ts | 1013 +++++- packages/db/generated/prisma/index.js | 16 +- packages/db/generated/prisma/package.json | 2 +- packages/db/generated/prisma/schema.prisma | 26 +- packages/db/prisma/schema.prisma | 24 +- .../.prisma-zod-generator-manifest.json | 67 +- .../schemas/aggregateCronJobLog.schema.d.ts | 38 + .../aggregateCronJobLog.schema.d.ts.map | 1 + .../schemas/aggregateCronJobLog.schema.js | 47 + .../schemas/countCronJobLog.schema.d.ts | 26 + .../schemas/countCronJobLog.schema.d.ts.map | 1 + .../shared/schemas/countCronJobLog.schema.js | 43 + .../createManyAndReturnCronJobLog.schema.d.ts | 17 + ...ateManyAndReturnCronJobLog.schema.d.ts.map | 1 + .../createManyAndReturnCronJobLog.schema.js | 41 + .../schemas/createManyCronJobLog.schema.d.ts | 14 + .../createManyCronJobLog.schema.d.ts.map | 1 + .../schemas/createManyCronJobLog.schema.js | 40 + .../schemas/createOneCronJobLog.schema.d.ts | 14 + .../createOneCronJobLog.schema.d.ts.map | 1 + .../schemas/createOneCronJobLog.schema.js | 42 + .../schemas/deleteManyCronJobLog.schema.d.ts | 11 + .../deleteManyCronJobLog.schema.d.ts.map | 1 + .../schemas/deleteManyCronJobLog.schema.js | 40 + .../schemas/deleteOneCronJobLog.schema.d.ts | 14 + .../deleteOneCronJobLog.schema.d.ts.map | 1 + .../schemas/deleteOneCronJobLog.schema.js | 41 + ...ointmentProcedureScalarFieldEnum.schema.ts | 2 +- .../enums/ClaimFileScalarFieldEnum.schema.ts | 2 +- .../enums/ClaimScalarFieldEnum.schema.ts | 2 +- .../enums/CloudFileScalarFieldEnum.schema.ts | 2 +- .../CronJobLogScalarFieldEnum.schema.d.ts | 4 + .../CronJobLogScalarFieldEnum.schema.d.ts.map | 1 + .../enums/CronJobLogScalarFieldEnum.schema.js | 38 + .../findFirstAppointmentProcedure.schema.ts | 8 +- .../shared/schemas/findFirstClaim.schema.ts | 4 + .../schemas/findFirstClaimFile.schema.ts | 2 + .../schemas/findFirstCloudFile.schema.ts | 2 + .../schemas/findFirstCronJobLog.schema.d.ts | 55 + .../findFirstCronJobLog.schema.d.ts.map | 1 + .../schemas/findFirstCronJobLog.schema.js | 63 + .../schemas/findFirstNpiProvider.schema.ts | 10 +- ...FirstOrThrowAppointmentProcedure.schema.ts | 8 +- .../schemas/findFirstOrThrowClaim.schema.ts | 4 + .../findFirstOrThrowClaimFile.schema.ts | 2 + .../findFirstOrThrowCloudFile.schema.ts | 2 + .../findFirstOrThrowCronJobLog.schema.d.ts | 55 + ...findFirstOrThrowCronJobLog.schema.d.ts.map | 1 + .../findFirstOrThrowCronJobLog.schema.js | 63 + .../findFirstOrThrowNpiProvider.schema.ts | 10 +- .../findManyAppointmentProcedure.schema.ts | 8 +- .../db/shared/schemas/findManyClaim.schema.ts | 4 + .../schemas/findManyClaimFile.schema.ts | 2 + .../schemas/findManyCloudFile.schema.ts | 2 + .../schemas/findManyCronJobLog.schema.d.ts | 55 + .../findManyCronJobLog.schema.d.ts.map | 1 + .../schemas/findManyCronJobLog.schema.js | 63 + .../schemas/findManyNpiProvider.schema.ts | 10 +- .../schemas/findUniqueCronJobLog.schema.d.ts | 14 + .../findUniqueCronJobLog.schema.d.ts.map | 1 + .../schemas/findUniqueCronJobLog.schema.js | 41 + .../findUniqueOrThrowCronJobLog.schema.d.ts | 14 + ...indUniqueOrThrowCronJobLog.schema.d.ts.map | 1 + .../findUniqueOrThrowCronJobLog.schema.js | 41 + .../schemas/groupByCronJobLog.schema.d.ts | 41 + .../schemas/groupByCronJobLog.schema.d.ts.map | 1 + .../schemas/groupByCronJobLog.schema.js | 48 + packages/db/shared/schemas/index.d.ts | 807 ++++ packages/db/shared/schemas/index.d.ts.map | 1 + packages/db/shared/schemas/index.js | 822 +++++ .../AppointmentProcedureArgs.schema.d.ts | 23 + .../AppointmentProcedureArgs.schema.d.ts.map | 1 + .../AppointmentProcedureArgs.schema.js | 45 + ...ntmentProcedureAvgAggregateInput.schema.ts | 1 + ...rocedureAvgOrderByAggregateInput.schema.ts | 1 + ...mentProcedureCountAggregateInput.schema.ts | 1 + ...cedureCountOrderByAggregateInput.schema.ts | 1 + .../AppointmentProcedureCreateInput.schema.ts | 6 +- ...cedureCreateManyAppointmentInput.schema.ts | 1 + ...ointmentProcedureCreateManyInput.schema.ts | 1 + ...cedureCreateManyNpiProviderInput.schema.ts | 31 + ...eateManyNpiProviderInputEnvelope.schema.ts | 10 + ...tProcedureCreateManyPatientInput.schema.ts | 1 + ...estedManyWithoutNpiProviderInput.schema.ts | 16 + ...OrConnectWithoutNpiProviderInput.schema.ts | 12 + ...ureCreateWithoutAppointmentInput.schema.ts | 6 +- ...ureCreateWithoutNpiProviderInput.schema.ts | 32 + ...ocedureCreateWithoutPatientInput.schema.ts | 6 +- .../AppointmentProcedureInclude.schema.ts | 6 +- ...ntmentProcedureMaxAggregateInput.schema.ts | 1 + ...rocedureMaxOrderByAggregateInput.schema.ts | 1 + ...ntmentProcedureMinAggregateInput.schema.ts | 1 + ...rocedureMinOrderByAggregateInput.schema.ts | 1 + ...edureOrderByWithAggregationInput.schema.ts | 1 + ...rocedureOrderByWithRelationInput.schema.ts | 7 +- ...intmentProcedureScalarWhereInput.schema.ts | 2 + ...reScalarWhereWithAggregatesInput.schema.ts | 2 + .../AppointmentProcedureSelect.schema.ts | 7 +- ...ntmentProcedureSumAggregateInput.schema.ts | 1 + ...rocedureSumOrderByAggregateInput.schema.ts | 1 + ...entProcedureUncheckedCreateInput.schema.ts | 1 + ...estedManyWithoutNpiProviderInput.schema.ts | 16 + ...kedCreateWithoutAppointmentInput.schema.ts | 1 + ...kedCreateWithoutNpiProviderInput.schema.ts | 31 + ...checkedCreateWithoutPatientInput.schema.ts | 1 + ...entProcedureUncheckedUpdateInput.schema.ts | 2 + ...cedureUncheckedUpdateManyInput.schema.d.ts | 48 + ...reUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...rocedureUncheckedUpdateManyInput.schema.js | 75 + ...rocedureUncheckedUpdateManyInput.schema.ts | 2 + ...pdateManyWithoutAppointmentInput.schema.ts | 2 + ...pdateManyWithoutNpiProviderInput.schema.ts | 37 + ...anyWithoutNpiProviderNestedInput.schema.ts | 27 + ...kedUpdateManyWithoutPatientInput.schema.ts | 2 + ...kedUpdateWithoutAppointmentInput.schema.ts | 2 + ...kedUpdateWithoutNpiProviderInput.schema.ts | 37 + ...checkedUpdateWithoutPatientInput.schema.ts | 2 + .../AppointmentProcedureUpdateInput.schema.ts | 6 +- ...WithWhereWithoutNpiProviderInput.schema.ts | 12 + ...anyWithoutNpiProviderNestedInput.schema.ts | 27 + ...ereUniqueWithoutNpiProviderInput.schema.ts | 12 + ...ureUpdateWithoutAppointmentInput.schema.ts | 6 +- ...ureUpdateWithoutNpiProviderInput.schema.ts | 37 + ...ocedureUpdateWithoutPatientInput.schema.ts | 6 +- ...ereUniqueWithoutNpiProviderInput.schema.ts | 15 + .../AppointmentProcedureWhereInput.schema.ts | 9 +- ...ntmentUncheckedUpdateManyInput.schema.d.ts | 50 + ...ntUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...ointmentUncheckedUpdateManyInput.schema.js | 61 + .../objects/BackupDestinationArgs.schema.d.ts | 23 + .../BackupDestinationArgs.schema.d.ts.map | 1 + .../objects/BackupDestinationArgs.schema.js | 45 + ...nationUncheckedUpdateManyInput.schema.d.ts | 23 + ...onUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...tinationUncheckedUpdateManyInput.schema.js | 50 + .../objects/ClaimAvgAggregateInput.schema.ts | 3 +- .../ClaimAvgOrderByAggregateInput.schema.ts | 3 +- .../ClaimCountAggregateInput.schema.ts | 1 + .../ClaimCountOrderByAggregateInput.schema.ts | 3 +- .../objects/ClaimCreateInput.schema.ts | 2 + .../ClaimCreateManyAppointmentInput.schema.ts | 3 +- .../objects/ClaimCreateManyInput.schema.ts | 3 +- .../ClaimCreateManyNpiProviderInput.schema.ts | 29 + ...eateManyNpiProviderInputEnvelope.schema.ts | 10 + .../ClaimCreateManyPatientInput.schema.ts | 3 +- .../ClaimCreateManyStaffInput.schema.ts | 3 +- .../ClaimCreateManyUserInput.schema.ts | 3 +- ...estedManyWithoutNpiProviderInput.schema.ts | 16 + ...OrConnectWithoutNpiProviderInput.schema.ts | 12 + ...aimCreateWithoutAppointmentInput.schema.ts | 2 + ...laimCreateWithoutClaimFilesInput.schema.ts | 2 + ...aimCreateWithoutNpiProviderInput.schema.ts | 38 + .../ClaimCreateWithoutPatientInput.schema.ts | 2 + .../ClaimCreateWithoutPaymentInput.schema.ts | 2 + ...imCreateWithoutServiceLinesInput.schema.ts | 2 + .../ClaimCreateWithoutStaffInput.schema.ts | 2 + .../ClaimCreateWithoutUserInput.schema.ts | 2 + .../schemas/objects/ClaimFileArgs.schema.d.ts | 23 + .../objects/ClaimFileArgs.schema.d.ts.map | 1 + .../schemas/objects/ClaimFileArgs.schema.js | 45 + .../ClaimFileCountAggregateInput.schema.ts | 1 + ...imFileCountOrderByAggregateInput.schema.ts | 3 +- .../objects/ClaimFileCreateInput.schema.ts | 1 + .../ClaimFileCreateManyClaimInput.schema.ts | 3 +- .../ClaimFileCreateManyInput.schema.ts | 3 +- ...ClaimFileCreateWithoutClaimInput.schema.ts | 3 +- .../ClaimFileMaxAggregateInput.schema.ts | 3 +- ...laimFileMaxOrderByAggregateInput.schema.ts | 3 +- .../ClaimFileMinAggregateInput.schema.ts | 3 +- ...laimFileMinOrderByAggregateInput.schema.ts | 3 +- ...mFileOrderByWithAggregationInput.schema.ts | 2 + ...laimFileOrderByWithRelationInput.schema.ts | 2 + .../ClaimFileScalarWhereInput.schema.ts | 6 +- ...leScalarWhereWithAggregatesInput.schema.ts | 6 +- .../schemas/objects/ClaimFileSelect.schema.ts | 1 + .../ClaimFileUncheckedCreateInput.schema.ts | 3 +- ...UncheckedCreateWithoutClaimInput.schema.ts | 3 +- .../ClaimFileUncheckedUpdateInput.schema.ts | 6 +- ...imFileUncheckedUpdateManyInput.schema.d.ts | 20 + ...leUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...laimFileUncheckedUpdateManyInput.schema.js | 47 + ...laimFileUncheckedUpdateManyInput.schema.ts | 6 +- ...eckedUpdateManyWithoutClaimInput.schema.ts | 6 +- ...UncheckedUpdateWithoutClaimInput.schema.ts | 6 +- .../objects/ClaimFileUpdateInput.schema.ts | 2 + ...ClaimFileUpdateManyMutationInput.schema.ts | 6 +- ...ClaimFileUpdateWithoutClaimInput.schema.ts | 6 +- .../objects/ClaimFileWhereInput.schema.ts | 2 + .../schemas/objects/ClaimInclude.schema.ts | 2 + .../objects/ClaimMaxAggregateInput.schema.ts | 3 +- .../ClaimMaxOrderByAggregateInput.schema.ts | 3 +- .../objects/ClaimMinAggregateInput.schema.ts | 3 +- .../ClaimMinOrderByAggregateInput.schema.ts | 3 +- ...ClaimOrderByWithAggregationInput.schema.ts | 1 + .../ClaimOrderByWithRelationInput.schema.ts | 3 + .../objects/ClaimScalarWhereInput.schema.ts | 6 +- ...imScalarWhereWithAggregatesInput.schema.ts | 6 +- .../schemas/objects/ClaimSelect.schema.ts | 3 + .../objects/ClaimSumAggregateInput.schema.ts | 3 +- .../ClaimSumOrderByAggregateInput.schema.ts | 3 +- .../ClaimUncheckedCreateInput.schema.ts | 1 + ...estedManyWithoutNpiProviderInput.schema.ts | 16 + ...kedCreateWithoutAppointmentInput.schema.ts | 1 + ...ckedCreateWithoutClaimFilesInput.schema.ts | 1 + ...kedCreateWithoutNpiProviderInput.schema.ts | 35 + ...checkedCreateWithoutPatientInput.schema.ts | 1 + ...checkedCreateWithoutPaymentInput.schema.ts | 1 + ...edCreateWithoutServiceLinesInput.schema.ts | 1 + ...UncheckedCreateWithoutStaffInput.schema.ts | 1 + ...mUncheckedCreateWithoutUserInput.schema.ts | 1 + .../ClaimUncheckedUpdateInput.schema.ts | 2 + .../ClaimUncheckedUpdateManyInput.schema.d.ts | 59 + ...imUncheckedUpdateManyInput.schema.d.ts.map | 1 + .../ClaimUncheckedUpdateManyInput.schema.js | 68 + .../ClaimUncheckedUpdateManyInput.schema.ts | 6 +- ...pdateManyWithoutAppointmentInput.schema.ts | 6 +- ...pdateManyWithoutNpiProviderInput.schema.ts | 35 + ...anyWithoutNpiProviderNestedInput.schema.ts | 27 + ...kedUpdateManyWithoutPatientInput.schema.ts | 6 +- ...eckedUpdateManyWithoutStaffInput.schema.ts | 6 +- ...heckedUpdateManyWithoutUserInput.schema.ts | 6 +- ...kedUpdateWithoutAppointmentInput.schema.ts | 2 + ...ckedUpdateWithoutClaimFilesInput.schema.ts | 2 + ...kedUpdateWithoutNpiProviderInput.schema.ts | 41 + ...checkedUpdateWithoutPatientInput.schema.ts | 2 + ...checkedUpdateWithoutPaymentInput.schema.ts | 2 + ...edUpdateWithoutServiceLinesInput.schema.ts | 2 + ...UncheckedUpdateWithoutStaffInput.schema.ts | 2 + ...mUncheckedUpdateWithoutUserInput.schema.ts | 2 + .../objects/ClaimUpdateInput.schema.ts | 2 + ...WithWhereWithoutNpiProviderInput.schema.ts | 12 + ...anyWithoutNpiProviderNestedInput.schema.ts | 27 + ...ereUniqueWithoutNpiProviderInput.schema.ts | 12 + ...aimUpdateWithoutAppointmentInput.schema.ts | 2 + ...laimUpdateWithoutClaimFilesInput.schema.ts | 2 + ...aimUpdateWithoutNpiProviderInput.schema.ts | 43 + .../ClaimUpdateWithoutPatientInput.schema.ts | 2 + .../ClaimUpdateWithoutPaymentInput.schema.ts | 2 + ...imUpdateWithoutServiceLinesInput.schema.ts | 2 + .../ClaimUpdateWithoutStaffInput.schema.ts | 2 + .../ClaimUpdateWithoutUserInput.schema.ts | 2 + ...ereUniqueWithoutNpiProviderInput.schema.ts | 15 + .../schemas/objects/ClaimWhereInput.schema.ts | 5 + .../objects/CloudFileChunkArgs.schema.d.ts | 23 + .../CloudFileChunkArgs.schema.d.ts.map | 1 + .../objects/CloudFileChunkArgs.schema.js | 45 + ...eChunkUncheckedUpdateManyInput.schema.d.ts | 23 + ...nkUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...ileChunkUncheckedUpdateManyInput.schema.js | 49 + .../CloudFileCountAggregateInput.schema.ts | 1 + ...udFileCountOrderByAggregateInput.schema.ts | 1 + .../objects/CloudFileCreateInput.schema.ts | 1 + .../CloudFileCreateManyFolderInput.schema.ts | 1 + .../CloudFileCreateManyInput.schema.ts | 1 + .../CloudFileCreateManyUserInput.schema.ts | 1 + ...loudFileCreateWithoutChunksInput.schema.ts | 1 + ...loudFileCreateWithoutFolderInput.schema.ts | 1 + .../CloudFileCreateWithoutUserInput.schema.ts | 1 + .../CloudFileMaxAggregateInput.schema.ts | 1 + ...loudFileMaxOrderByAggregateInput.schema.ts | 1 + .../CloudFileMinAggregateInput.schema.ts | 1 + ...loudFileMinOrderByAggregateInput.schema.ts | 1 + ...dFileOrderByWithAggregationInput.schema.ts | 1 + ...loudFileOrderByWithRelationInput.schema.ts | 1 + .../CloudFileScalarWhereInput.schema.ts | 1 + ...leScalarWhereWithAggregatesInput.schema.ts | 1 + .../schemas/objects/CloudFileSelect.schema.ts | 1 + .../CloudFileUncheckedCreateInput.schema.ts | 1 + ...ncheckedCreateWithoutChunksInput.schema.ts | 1 + ...ncheckedCreateWithoutFolderInput.schema.ts | 1 + ...eUncheckedCreateWithoutUserInput.schema.ts | 1 + .../CloudFileUncheckedUpdateInput.schema.ts | 1 + ...udFileUncheckedUpdateManyInput.schema.d.ts | 38 + ...leUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...loudFileUncheckedUpdateManyInput.schema.js | 58 + ...loudFileUncheckedUpdateManyInput.schema.ts | 1 + ...ckedUpdateManyWithoutFolderInput.schema.ts | 1 + ...heckedUpdateManyWithoutUserInput.schema.ts | 1 + ...ncheckedUpdateWithoutChunksInput.schema.ts | 1 + ...ncheckedUpdateWithoutFolderInput.schema.ts | 1 + ...eUncheckedUpdateWithoutUserInput.schema.ts | 1 + .../objects/CloudFileUpdateInput.schema.ts | 1 + ...CloudFileUpdateManyMutationInput.schema.ts | 1 + ...loudFileUpdateWithoutChunksInput.schema.ts | 1 + ...loudFileUpdateWithoutFolderInput.schema.ts | 1 + .../CloudFileUpdateWithoutUserInput.schema.ts | 1 + .../objects/CloudFileWhereInput.schema.ts | 1 + ...FolderUncheckedUpdateManyInput.schema.d.ts | 26 + ...erUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...udFolderUncheckedUpdateManyInput.schema.js | 51 + .../objects/CommunicationArgs.schema.d.ts | 23 + .../objects/CommunicationArgs.schema.d.ts.map | 1 + .../objects/CommunicationArgs.schema.js | 45 + ...cationUncheckedUpdateManyInput.schema.d.ts | 38 + ...onUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...nicationUncheckedUpdateManyInput.schema.js | 61 + .../objects/CronJobLogArgs.schema.d.ts | 17 + .../objects/CronJobLogArgs.schema.d.ts.map | 1 + .../schemas/objects/CronJobLogArgs.schema.js | 43 + .../CronJobLogAvgAggregateInput.schema.d.ts | 14 + ...ronJobLogAvgAggregateInput.schema.d.ts.map | 1 + .../CronJobLogAvgAggregateInput.schema.js | 43 + ...JobLogAvgOrderByAggregateInput.schema.d.ts | 14 + ...ogAvgOrderByAggregateInput.schema.d.ts.map | 1 + ...onJobLogAvgOrderByAggregateInput.schema.js | 44 + .../CronJobLogCountAggregateInput.schema.d.ts | 32 + ...nJobLogCountAggregateInput.schema.d.ts.map | 1 + .../CronJobLogCountAggregateInput.schema.js | 49 + ...bLogCountOrderByAggregateInput.schema.d.ts | 29 + ...CountOrderByAggregateInput.schema.d.ts.map | 1 + ...JobLogCountOrderByAggregateInput.schema.js | 49 + .../objects/CronJobLogCreateInput.schema.d.ts | 26 + .../CronJobLogCreateInput.schema.d.ts.map | 1 + .../objects/CronJobLogCreateInput.schema.js | 47 + .../CronJobLogCreateManyInput.schema.d.ts | 29 + .../CronJobLogCreateManyInput.schema.d.ts.map | 1 + .../CronJobLogCreateManyInput.schema.js | 48 + .../CronJobLogMaxAggregateInput.schema.d.ts | 29 + ...ronJobLogMaxAggregateInput.schema.d.ts.map | 1 + .../CronJobLogMaxAggregateInput.schema.js | 48 + ...JobLogMaxOrderByAggregateInput.schema.d.ts | 29 + ...ogMaxOrderByAggregateInput.schema.d.ts.map | 1 + ...onJobLogMaxOrderByAggregateInput.schema.js | 49 + .../CronJobLogMinAggregateInput.schema.d.ts | 29 + ...ronJobLogMinAggregateInput.schema.d.ts.map | 1 + .../CronJobLogMinAggregateInput.schema.js | 48 + ...JobLogMinOrderByAggregateInput.schema.d.ts | 29 + ...ogMinOrderByAggregateInput.schema.d.ts.map | 1 + ...onJobLogMinOrderByAggregateInput.schema.js | 49 + ...LogOrderByWithAggregationInput.schema.d.ts | 44 + ...rderByWithAggregationInput.schema.d.ts.map | 1 + ...obLogOrderByWithAggregationInput.schema.js | 60 + ...JobLogOrderByWithRelationInput.schema.d.ts | 29 + ...ogOrderByWithRelationInput.schema.d.ts.map | 1 + ...onJobLogOrderByWithRelationInput.schema.js | 50 + ...ScalarWhereWithAggregatesInput.schema.d.ts | 38 + ...arWhereWithAggregatesInput.schema.d.ts.map | 1 + ...ogScalarWhereWithAggregatesInput.schema.js | 57 + .../objects/CronJobLogSelect.schema.d.ts | 29 + .../objects/CronJobLogSelect.schema.d.ts.map | 1 + .../objects/CronJobLogSelect.schema.js | 48 + .../CronJobLogSumAggregateInput.schema.d.ts | 14 + ...ronJobLogSumAggregateInput.schema.d.ts.map | 1 + .../CronJobLogSumAggregateInput.schema.js | 43 + ...JobLogSumOrderByAggregateInput.schema.d.ts | 14 + ...ogSumOrderByAggregateInput.schema.d.ts.map | 1 + ...onJobLogSumOrderByAggregateInput.schema.js | 44 + ...CronJobLogUncheckedCreateInput.schema.d.ts | 29 + ...JobLogUncheckedCreateInput.schema.d.ts.map | 1 + .../CronJobLogUncheckedCreateInput.schema.js | 48 + ...CronJobLogUncheckedUpdateInput.schema.d.ts | 29 + ...JobLogUncheckedUpdateInput.schema.d.ts.map | 1 + .../CronJobLogUncheckedUpdateInput.schema.js | 54 + ...JobLogUncheckedUpdateManyInput.schema.d.ts | 29 + ...ogUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...onJobLogUncheckedUpdateManyInput.schema.js | 54 + .../objects/CronJobLogUpdateInput.schema.d.ts | 26 + .../CronJobLogUpdateInput.schema.d.ts.map | 1 + .../objects/CronJobLogUpdateInput.schema.js | 52 + ...nJobLogUpdateManyMutationInput.schema.d.ts | 26 + ...LogUpdateManyMutationInput.schema.d.ts.map | 1 + ...ronJobLogUpdateManyMutationInput.schema.js | 52 + .../objects/CronJobLogWhereInput.schema.d.ts | 38 + .../CronJobLogWhereInput.schema.d.ts.map | 1 + .../objects/CronJobLogWhereInput.schema.js | 57 + .../CronJobLogWhereUniqueInput.schema.d.ts | 11 + ...CronJobLogWhereUniqueInput.schema.d.ts.map | 1 + .../CronJobLogWhereUniqueInput.schema.js | 42 + .../objects/DatabaseBackupArgs.schema.d.ts | 23 + .../DatabaseBackupArgs.schema.d.ts.map | 1 + .../objects/DatabaseBackupArgs.schema.js | 45 + ...BackupUncheckedUpdateManyInput.schema.d.ts | 17 + ...upUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...seBackupUncheckedUpdateManyInput.schema.js | 46 + .../DateTimeNullableFilter.schema.d.ts | 32 + .../DateTimeNullableFilter.schema.d.ts.map | 1 + .../objects/DateTimeNullableFilter.schema.js | 50 + ...meNullableWithAggregatesFilter.schema.d.ts | 41 + ...llableWithAggregatesFilter.schema.d.ts.map | 1 + ...TimeNullableWithAggregatesFilter.schema.js | 55 + .../InsuranceCredentialArgs.schema.d.ts | 23 + .../InsuranceCredentialArgs.schema.d.ts.map | 1 + .../objects/InsuranceCredentialArgs.schema.js | 45 + ...entialUncheckedUpdateManyInput.schema.d.ts | 23 + ...alUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...edentialUncheckedUpdateManyInput.schema.js | 48 + .../NestedDateTimeNullableFilter.schema.d.ts | 32 + ...stedDateTimeNullableFilter.schema.d.ts.map | 1 + .../NestedDateTimeNullableFilter.schema.js | 49 + ...meNullableWithAggregatesFilter.schema.d.ts | 41 + ...llableWithAggregatesFilter.schema.d.ts.map | 1 + ...TimeNullableWithAggregatesFilter.schema.js | 54 + .../objects/NotificationArgs.schema.d.ts | 23 + .../objects/NotificationArgs.schema.d.ts.map | 1 + .../objects/NotificationArgs.schema.js | 45 + ...cationUncheckedUpdateManyInput.schema.d.ts | 26 + ...onUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...ficationUncheckedUpdateManyInput.schema.js | 53 + .../objects/NpiProviderArgs.schema.d.ts | 23 + .../objects/NpiProviderArgs.schema.d.ts.map | 1 + .../schemas/objects/NpiProviderArgs.schema.js | 45 + .../NpiProviderCountOutputTypeArgs.schema.ts | 9 + ...peCountAppointmentProceduresArgs.schema.ts | 9 + ...erCountOutputTypeCountClaimsArgs.schema.ts | 9 + ...NpiProviderCountOutputTypeSelect.schema.ts | 11 + .../objects/NpiProviderCreateInput.schema.ts | 8 +- ...ithoutAppointmentProceduresInput.schema.ts | 14 + ...reateNestedOneWithoutClaimsInput.schema.ts | 14 + ...ithoutAppointmentProceduresInput.schema.ts | 12 + ...reateOrConnectWithoutClaimsInput.schema.ts | 12 + ...ithoutAppointmentProceduresInput.schema.ts | 14 + ...ProviderCreateWithoutClaimsInput.schema.ts | 14 + ...piProviderCreateWithoutUserInput.schema.ts | 7 +- .../objects/NpiProviderInclude.schema.ts | 10 +- ...iderNullableScalarRelationFilter.schema.ts | 10 + ...ProviderOrderByWithRelationInput.schema.ts | 8 +- .../objects/NpiProviderSelect.schema.ts | 10 +- .../NpiProviderUncheckedCreateInput.schema.ts | 7 +- ...ithoutAppointmentProceduresInput.schema.ts | 14 + ...ncheckedCreateWithoutClaimsInput.schema.ts | 14 + ...rUncheckedCreateWithoutUserInput.schema.ts | 7 +- .../NpiProviderUncheckedUpdateInput.schema.ts | 8 +- ...oviderUncheckedUpdateManyInput.schema.d.ts | 23 + ...erUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...ProviderUncheckedUpdateManyInput.schema.js | 49 + ...ithoutAppointmentProceduresInput.schema.ts | 17 + ...ncheckedUpdateWithoutClaimsInput.schema.ts | 17 + ...rUncheckedUpdateWithoutUserInput.schema.ts | 8 +- .../objects/NpiProviderUpdateInput.schema.ts | 8 +- ...AppointmentProceduresNestedInput.schema.ts | 23 + ...pdateOneWithoutClaimsNestedInput.schema.ts | 23 + ...ithoutAppointmentProceduresInput.schema.ts | 12 + ...ToOneWithWhereWithoutClaimsInput.schema.ts | 12 + ...ithoutAppointmentProceduresInput.schema.ts | 16 + ...ProviderUpdateWithoutClaimsInput.schema.ts | 16 + ...piProviderUpdateWithoutUserInput.schema.ts | 8 +- ...ithoutAppointmentProceduresInput.schema.ts | 15 + ...ProviderUpsertWithoutClaimsInput.schema.ts | 15 + .../objects/NpiProviderWhereInput.schema.ts | 8 +- ...TimeFieldUpdateOperationsInput.schema.d.ts | 11 + ...FieldUpdateOperationsInput.schema.d.ts.map | 1 + ...teTimeFieldUpdateOperationsInput.schema.js | 42 + .../objects/PatientDocumentArgs.schema.d.ts | 23 + .../PatientDocumentArgs.schema.d.ts.map | 1 + .../objects/PatientDocumentArgs.schema.js | 45 + ...cumentUncheckedUpdateManyInput.schema.d.ts | 35 + ...ntUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...DocumentUncheckedUpdateManyInput.schema.js | 54 + ...atientUncheckedUpdateManyInput.schema.d.ts | 65 + ...ntUncheckedUpdateManyInput.schema.d.ts.map | 1 + .../PatientUncheckedUpdateManyInput.schema.js | 67 + ...aymentUncheckedUpdateManyInput.schema.d.ts | 51 + ...ntUncheckedUpdateManyInput.schema.d.ts.map | 1 + .../PaymentUncheckedUpdateManyInput.schema.js | 100 + .../schemas/objects/PdfFileArgs.schema.d.ts | 23 + .../objects/PdfFileArgs.schema.d.ts.map | 1 + .../schemas/objects/PdfFileArgs.schema.js | 45 + ...dfFileUncheckedUpdateManyInput.schema.d.ts | 23 + ...leUncheckedUpdateManyInput.schema.d.ts.map | 1 + .../PdfFileUncheckedUpdateManyInput.schema.js | 50 + ...fGroupUncheckedUpdateManyInput.schema.d.ts | 23 + ...upUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...PdfGroupUncheckedUpdateManyInput.schema.js | 51 + .../ServiceLineTransactionArgs.schema.d.ts | 23 + ...ServiceLineTransactionArgs.schema.d.ts.map | 1 + .../ServiceLineTransactionArgs.schema.js | 45 + ...actionUncheckedUpdateManyInput.schema.d.ts | 42 + ...onUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...nsactionUncheckedUpdateManyInput.schema.js | 80 + ...ceLineUncheckedUpdateManyInput.schema.d.ts | 51 + ...neUncheckedUpdateManyInput.schema.d.ts.map | 1 + ...viceLineUncheckedUpdateManyInput.schema.js | 101 + .../StaffUncheckedUpdateManyInput.schema.d.ts | 29 + ...ffUncheckedUpdateManyInput.schema.d.ts.map | 1 + .../StaffUncheckedUpdateManyInput.schema.js | 52 + .../UserUncheckedUpdateManyInput.schema.d.ts | 23 + ...erUncheckedUpdateManyInput.schema.d.ts.map | 1 + .../UserUncheckedUpdateManyInput.schema.js | 49 + packages/db/shared/schemas/objects/index.d.ts | 3222 ++++++++++++++++ .../db/shared/schemas/objects/index.d.ts.map | 1 + packages/db/shared/schemas/objects/index.js | 3237 +++++++++++++++++ packages/db/shared/schemas/objects/index.ts | 117 + ...ointmentProcedureAggregateResult.schema.ts | 8 +- ...AppointmentProcedureCreateResult.schema.ts | 4 +- ...AppointmentProcedureDeleteResult.schema.ts | 4 +- ...ointmentProcedureFindFirstResult.schema.ts | 4 +- ...pointmentProcedureFindManyResult.schema.ts | 4 +- ...intmentProcedureFindUniqueResult.schema.ts | 4 +- ...ppointmentProcedureGroupByResult.schema.ts | 9 +- ...AppointmentProcedureUpdateResult.schema.ts | 4 +- ...AppointmentProcedureUpsertResult.schema.ts | 4 +- .../results/ClaimAggregateResult.schema.ts | 14 +- .../results/ClaimCreateResult.schema.ts | 2 + .../results/ClaimDeleteResult.schema.ts | 2 + .../ClaimFileAggregateResult.schema.ts | 7 +- .../results/ClaimFileCreateResult.schema.ts | 1 + .../results/ClaimFileDeleteResult.schema.ts | 1 + .../ClaimFileFindFirstResult.schema.ts | 1 + .../results/ClaimFileFindManyResult.schema.ts | 1 + .../ClaimFileFindUniqueResult.schema.ts | 1 + .../results/ClaimFileGroupByResult.schema.ts | 8 +- .../results/ClaimFileUpdateResult.schema.ts | 1 + .../results/ClaimFileUpsertResult.schema.ts | 1 + .../results/ClaimFindFirstResult.schema.ts | 2 + .../results/ClaimFindManyResult.schema.ts | 2 + .../results/ClaimFindUniqueResult.schema.ts | 2 + .../results/ClaimGroupByResult.schema.ts | 15 +- .../results/ClaimUpdateResult.schema.ts | 2 + .../results/ClaimUpsertResult.schema.ts | 2 + .../CloudFileAggregateResult.schema.ts | 3 + .../results/CloudFileCreateResult.schema.ts | 1 + .../results/CloudFileDeleteResult.schema.ts | 1 + .../CloudFileFindFirstResult.schema.ts | 1 + .../results/CloudFileFindManyResult.schema.ts | 1 + .../CloudFileFindUniqueResult.schema.ts | 1 + .../results/CloudFileGroupByResult.schema.ts | 4 + .../results/CloudFileUpdateResult.schema.ts | 1 + .../results/CloudFileUpsertResult.schema.ts | 1 + .../CronJobLogAggregateResult.schema.d.ts | 171 + .../CronJobLogAggregateResult.schema.d.ts.map | 1 + .../CronJobLogAggregateResult.schema.js | 72 + .../results/CronJobLogCountResult.schema.d.ts | 3 + .../CronJobLogCountResult.schema.d.ts.map | 1 + .../results/CronJobLogCountResult.schema.js | 38 + .../CronJobLogCreateManyResult.schema.d.ts | 9 + ...CronJobLogCreateManyResult.schema.d.ts.map | 1 + .../CronJobLogCreateManyResult.schema.js | 40 + .../CronJobLogCreateResult.schema.d.ts | 27 + .../CronJobLogCreateResult.schema.d.ts.map | 1 + .../results/CronJobLogCreateResult.schema.js | 46 + .../CronJobLogDeleteManyResult.schema.d.ts | 9 + ...CronJobLogDeleteManyResult.schema.d.ts.map | 1 + .../CronJobLogDeleteManyResult.schema.js | 40 + .../CronJobLogDeleteResult.schema.d.ts | 27 + .../CronJobLogDeleteResult.schema.d.ts.map | 1 + .../results/CronJobLogDeleteResult.schema.js | 46 + .../CronJobLogFindFirstResult.schema.d.ts | 27 + .../CronJobLogFindFirstResult.schema.d.ts.map | 1 + .../CronJobLogFindFirstResult.schema.js | 46 + .../CronJobLogFindManyResult.schema.d.ts | 87 + .../CronJobLogFindManyResult.schema.d.ts.map | 1 + .../CronJobLogFindManyResult.schema.js | 56 + .../CronJobLogFindUniqueResult.schema.d.ts | 27 + ...CronJobLogFindUniqueResult.schema.d.ts.map | 1 + .../CronJobLogFindUniqueResult.schema.js | 46 + .../CronJobLogGroupByResult.schema.d.ts | 192 + .../CronJobLogGroupByResult.schema.d.ts.map | 1 + .../results/CronJobLogGroupByResult.schema.js | 81 + .../CronJobLogUpdateManyResult.schema.d.ts | 9 + ...CronJobLogUpdateManyResult.schema.d.ts.map | 1 + .../CronJobLogUpdateManyResult.schema.js | 40 + .../CronJobLogUpdateResult.schema.d.ts | 27 + .../CronJobLogUpdateResult.schema.d.ts.map | 1 + .../results/CronJobLogUpdateResult.schema.js | 46 + .../CronJobLogUpsertResult.schema.d.ts | 27 + .../CronJobLogUpsertResult.schema.d.ts.map | 1 + .../results/CronJobLogUpsertResult.schema.js | 46 + .../NpiProviderAggregateResult.schema.ts | 4 +- .../results/NpiProviderCreateResult.schema.ts | 4 +- .../results/NpiProviderDeleteResult.schema.ts | 4 +- .../NpiProviderFindFirstResult.schema.ts | 4 +- .../NpiProviderFindManyResult.schema.ts | 4 +- .../NpiProviderFindUniqueResult.schema.ts | 4 +- .../NpiProviderGroupByResult.schema.ts | 4 +- .../results/NpiProviderUpdateResult.schema.ts | 4 +- .../results/NpiProviderUpsertResult.schema.ts | 4 +- ...PatientDocumentAggregateResult.schema.d.ts | 216 ++ ...entDocumentAggregateResult.schema.d.ts.map | 1 + .../PatientDocumentAggregateResult.schema.js | 81 + .../PatientDocumentCountResult.schema.d.ts | 3 + ...PatientDocumentCountResult.schema.d.ts.map | 1 + .../PatientDocumentCountResult.schema.js | 38 + ...atientDocumentDeleteManyResult.schema.d.ts | 9 + .../PatientDocumentGroupByResult.schema.d.ts | 243 ++ ...tientDocumentGroupByResult.schema.d.ts.map | 1 + .../PatientDocumentGroupByResult.schema.js | 92 + packages/db/shared/schemas/results/index.d.ts | 300 ++ .../db/shared/schemas/results/index.d.ts.map | 1 + packages/db/shared/schemas/results/index.js | 606 +++ .../updateManyAndReturnCronJobLog.schema.d.ts | 17 + ...ateManyAndReturnCronJobLog.schema.d.ts.map | 1 + .../updateManyAndReturnCronJobLog.schema.js | 42 + .../schemas/updateManyCronJobLog.schema.d.ts | 14 + .../updateManyCronJobLog.schema.d.ts.map | 1 + .../schemas/updateManyCronJobLog.schema.js | 41 + .../schemas/updateOneCronJobLog.schema.d.ts | 17 + .../updateOneCronJobLog.schema.d.ts.map | 1 + .../schemas/updateOneCronJobLog.schema.js | 43 + .../schemas/upsertOneCronJobLog.schema.d.ts | 20 + .../upsertOneCronJobLog.schema.d.ts.map | 1 + .../schemas/upsertOneCronJobLog.schema.js | 45 + .../db/shared/schemas/variants/index.d.ts | 8 + .../db/shared/schemas/variants/index.d.ts.map | 1 + packages/db/shared/schemas/variants/index.js | 23 + .../variants/input/Appointment.input.d.ts | 64 + .../variants/input/Appointment.input.d.ts.map | 1 + .../variants/input/Appointment.input.js | 60 + .../input/AppointmentProcedure.input.d.ts | 52 + .../input/AppointmentProcedure.input.d.ts.map | 1 + .../input/AppointmentProcedure.input.js | 56 + .../input/AppointmentProcedure.input.ts | 4 +- .../input/BackupDestination.input.d.ts | 25 + .../input/BackupDestination.input.d.ts.map | 1 + .../variants/input/BackupDestination.input.js | 46 + .../schemas/variants/input/Claim.input.d.ts | 79 + .../variants/input/Claim.input.d.ts.map | 1 + .../schemas/variants/input/Claim.input.js | 66 + .../schemas/variants/input/Claim.input.ts | 2 + .../variants/input/ClaimFile.input.d.ts | 22 + .../variants/input/ClaimFile.input.d.ts.map | 1 + .../schemas/variants/input/ClaimFile.input.js | 45 + .../schemas/variants/input/ClaimFile.input.ts | 1 + .../variants/input/CloudFile.input.d.ts | 46 + .../variants/input/CloudFile.input.d.ts.map | 1 + .../schemas/variants/input/CloudFile.input.js | 53 + .../schemas/variants/input/CloudFile.input.ts | 1 + .../variants/input/CloudFileChunk.input.d.ts | 25 + .../input/CloudFileChunk.input.d.ts.map | 1 + .../variants/input/CloudFileChunk.input.js | 46 + .../variants/input/CloudFolder.input.d.ts | 37 + .../variants/input/CloudFolder.input.d.ts.map | 1 + .../variants/input/CloudFolder.input.js | 50 + .../variants/input/Communication.input.d.ts | 43 + .../input/Communication.input.d.ts.map | 1 + .../variants/input/Communication.input.js | 55 + .../variants/input/CronJobLog.input.d.ts | 28 + .../variants/input/CronJobLog.input.d.ts.map | 1 + .../variants/input/CronJobLog.input.js | 47 + .../variants/input/DatabaseBackup.input.d.ts | 19 + .../input/DatabaseBackup.input.d.ts.map | 1 + .../variants/input/DatabaseBackup.input.js | 44 + .../input/InsuranceCredential.input.d.ts | 25 + .../input/InsuranceCredential.input.d.ts.map | 1 + .../input/InsuranceCredential.input.js | 46 + .../variants/input/Notification.input.d.ts | 28 + .../input/Notification.input.d.ts.map | 1 + .../variants/input/Notification.input.js | 48 + .../variants/input/NpiProvider.input.d.ts | 25 + .../variants/input/NpiProvider.input.d.ts.map | 1 + .../variants/input/NpiProvider.input.js | 46 + .../variants/input/NpiProvider.input.ts | 4 +- .../schemas/variants/input/Patient.input.d.ts | 88 + .../variants/input/Patient.input.d.ts.map | 1 + .../schemas/variants/input/Patient.input.js | 68 + .../variants/input/PatientDocument.input.d.ts | 37 + .../input/PatientDocument.input.d.ts.map | 1 + .../variants/input/PatientDocument.input.js | 50 + .../schemas/variants/input/Payment.input.d.ts | 64 + .../variants/input/Payment.input.d.ts.map | 1 + .../schemas/variants/input/Payment.input.js | 60 + .../schemas/variants/input/PdfFile.input.d.ts | 25 + .../variants/input/PdfFile.input.d.ts.map | 1 + .../schemas/variants/input/PdfFile.input.js | 46 + .../variants/input/PdfGroup.input.d.ts | 28 + .../variants/input/PdfGroup.input.d.ts.map | 1 + .../schemas/variants/input/PdfGroup.input.js | 48 + .../variants/input/ServiceLine.input.d.ts | 58 + .../variants/input/ServiceLine.input.d.ts.map | 1 + .../variants/input/ServiceLine.input.js | 58 + .../input/ServiceLineTransaction.input.d.ts | 46 + .../ServiceLineTransaction.input.d.ts.map | 1 + .../input/ServiceLineTransaction.input.js | 54 + .../schemas/variants/input/Staff.input.d.ts | 37 + .../variants/input/Staff.input.d.ts.map | 1 + .../schemas/variants/input/Staff.input.js | 50 + .../schemas/variants/input/User.input.d.ts | 61 + .../variants/input/User.input.d.ts.map | 1 + .../schemas/variants/input/User.input.js | 58 + .../shared/schemas/variants/input/index.d.ts | 28 + .../schemas/variants/input/index.d.ts.map | 1 + .../db/shared/schemas/variants/input/index.js | 53 + .../variants/pure/Appointment.pure.d.ts | 64 + .../variants/pure/Appointment.pure.d.ts.map | 1 + .../schemas/variants/pure/Appointment.pure.js | 60 + .../pure/AppointmentProcedure.pure.d.ts | 52 + .../pure/AppointmentProcedure.pure.d.ts.map | 1 + .../pure/AppointmentProcedure.pure.js | 56 + .../pure/AppointmentProcedure.pure.ts | 4 +- .../variants/pure/BackupDestination.pure.d.ts | 25 + .../pure/BackupDestination.pure.d.ts.map | 1 + .../variants/pure/BackupDestination.pure.js | 46 + .../schemas/variants/pure/Claim.pure.d.ts | 79 + .../schemas/variants/pure/Claim.pure.d.ts.map | 1 + .../schemas/variants/pure/Claim.pure.js | 66 + .../schemas/variants/pure/Claim.pure.ts | 2 + .../schemas/variants/pure/ClaimFile.pure.d.ts | 22 + .../variants/pure/ClaimFile.pure.d.ts.map | 1 + .../schemas/variants/pure/ClaimFile.pure.js | 45 + .../schemas/variants/pure/ClaimFile.pure.ts | 1 + .../schemas/variants/pure/CloudFile.pure.d.ts | 46 + .../variants/pure/CloudFile.pure.d.ts.map | 1 + .../schemas/variants/pure/CloudFile.pure.js | 53 + .../schemas/variants/pure/CloudFile.pure.ts | 1 + .../variants/pure/CloudFileChunk.pure.d.ts | 25 + .../pure/CloudFileChunk.pure.d.ts.map | 1 + .../variants/pure/CloudFileChunk.pure.js | 46 + .../variants/pure/CloudFolder.pure.d.ts | 37 + .../variants/pure/CloudFolder.pure.d.ts.map | 1 + .../schemas/variants/pure/CloudFolder.pure.js | 50 + .../variants/pure/Communication.pure.d.ts | 43 + .../variants/pure/Communication.pure.d.ts.map | 1 + .../variants/pure/Communication.pure.js | 55 + .../variants/pure/CronJobLog.pure.d.ts | 28 + .../variants/pure/CronJobLog.pure.d.ts.map | 1 + .../schemas/variants/pure/CronJobLog.pure.js | 47 + .../variants/pure/DatabaseBackup.pure.d.ts | 19 + .../pure/DatabaseBackup.pure.d.ts.map | 1 + .../variants/pure/DatabaseBackup.pure.js | 44 + .../pure/InsuranceCredential.pure.d.ts | 25 + .../pure/InsuranceCredential.pure.d.ts.map | 1 + .../variants/pure/InsuranceCredential.pure.js | 46 + .../variants/pure/Notification.pure.d.ts | 28 + .../variants/pure/Notification.pure.d.ts.map | 1 + .../variants/pure/Notification.pure.js | 48 + .../variants/pure/NpiProvider.pure.d.ts | 25 + .../variants/pure/NpiProvider.pure.d.ts.map | 1 + .../schemas/variants/pure/NpiProvider.pure.js | 46 + .../schemas/variants/pure/NpiProvider.pure.ts | 4 +- .../schemas/variants/pure/Patient.pure.d.ts | 88 + .../variants/pure/Patient.pure.d.ts.map | 1 + .../schemas/variants/pure/Patient.pure.js | 68 + .../variants/pure/PatientDocument.pure.d.ts | 37 + .../pure/PatientDocument.pure.d.ts.map | 1 + .../variants/pure/PatientDocument.pure.js | 50 + .../schemas/variants/pure/Payment.pure.d.ts | 64 + .../variants/pure/Payment.pure.d.ts.map | 1 + .../schemas/variants/pure/Payment.pure.js | 60 + .../schemas/variants/pure/PdfFile.pure.d.ts | 25 + .../variants/pure/PdfFile.pure.d.ts.map | 1 + .../schemas/variants/pure/PdfFile.pure.js | 46 + .../schemas/variants/pure/PdfGroup.pure.d.ts | 28 + .../variants/pure/PdfGroup.pure.d.ts.map | 1 + .../schemas/variants/pure/PdfGroup.pure.js | 48 + .../variants/pure/ServiceLine.pure.d.ts | 58 + .../variants/pure/ServiceLine.pure.d.ts.map | 1 + .../schemas/variants/pure/ServiceLine.pure.js | 58 + .../pure/ServiceLineTransaction.pure.d.ts | 46 + .../pure/ServiceLineTransaction.pure.d.ts.map | 1 + .../pure/ServiceLineTransaction.pure.js | 54 + .../schemas/variants/pure/Staff.pure.d.ts | 37 + .../schemas/variants/pure/Staff.pure.d.ts.map | 1 + .../schemas/variants/pure/Staff.pure.js | 50 + .../schemas/variants/pure/User.pure.d.ts | 61 + .../schemas/variants/pure/User.pure.d.ts.map | 1 + .../shared/schemas/variants/pure/User.pure.js | 58 + .../shared/schemas/variants/pure/index.d.ts | 28 + .../schemas/variants/pure/index.d.ts.map | 1 + .../db/shared/schemas/variants/pure/index.js | 53 + .../variants/result/Appointment.result.d.ts | 64 + .../result/Appointment.result.d.ts.map | 1 + .../variants/result/Appointment.result.js | 60 + .../result/AppointmentProcedure.result.d.ts | 52 + .../AppointmentProcedure.result.d.ts.map | 1 + .../result/AppointmentProcedure.result.js | 56 + .../result/AppointmentProcedure.result.ts | 4 +- .../result/BackupDestination.result.d.ts | 25 + .../result/BackupDestination.result.d.ts.map | 1 + .../result/BackupDestination.result.js | 46 + .../schemas/variants/result/Claim.result.d.ts | 79 + .../variants/result/Claim.result.d.ts.map | 1 + .../schemas/variants/result/Claim.result.js | 66 + .../schemas/variants/result/Claim.result.ts | 2 + .../variants/result/ClaimFile.result.d.ts | 22 + .../variants/result/ClaimFile.result.d.ts.map | 1 + .../variants/result/ClaimFile.result.js | 45 + .../variants/result/ClaimFile.result.ts | 1 + .../variants/result/CloudFile.result.d.ts | 46 + .../variants/result/CloudFile.result.d.ts.map | 1 + .../variants/result/CloudFile.result.js | 53 + .../variants/result/CloudFile.result.ts | 1 + .../result/CloudFileChunk.result.d.ts | 25 + .../result/CloudFileChunk.result.d.ts.map | 1 + .../variants/result/CloudFileChunk.result.js | 46 + .../variants/result/CloudFolder.result.d.ts | 37 + .../result/CloudFolder.result.d.ts.map | 1 + .../variants/result/CloudFolder.result.js | 50 + .../variants/result/Communication.result.d.ts | 43 + .../result/Communication.result.d.ts.map | 1 + .../variants/result/Communication.result.js | 55 + .../variants/result/CronJobLog.result.d.ts | 28 + .../result/CronJobLog.result.d.ts.map | 1 + .../variants/result/CronJobLog.result.js | 47 + .../result/DatabaseBackup.result.d.ts | 19 + .../result/DatabaseBackup.result.d.ts.map | 1 + .../variants/result/DatabaseBackup.result.js | 44 + .../result/InsuranceCredential.result.d.ts | 25 + .../InsuranceCredential.result.d.ts.map | 1 + .../result/InsuranceCredential.result.js | 46 + .../variants/result/Notification.result.d.ts | 28 + .../result/Notification.result.d.ts.map | 1 + .../variants/result/Notification.result.js | 48 + .../variants/result/NpiProvider.result.d.ts | 25 + .../result/NpiProvider.result.d.ts.map | 1 + .../variants/result/NpiProvider.result.js | 46 + .../variants/result/NpiProvider.result.ts | 4 +- .../variants/result/Patient.result.d.ts | 88 + .../variants/result/Patient.result.d.ts.map | 1 + .../schemas/variants/result/Patient.result.js | 68 + .../result/PatientDocument.result.d.ts | 37 + .../result/PatientDocument.result.d.ts.map | 1 + .../variants/result/PatientDocument.result.js | 50 + .../variants/result/Payment.result.d.ts | 64 + .../variants/result/Payment.result.d.ts.map | 1 + .../schemas/variants/result/Payment.result.js | 60 + .../variants/result/PdfFile.result.d.ts | 25 + .../variants/result/PdfFile.result.d.ts.map | 1 + .../schemas/variants/result/PdfFile.result.js | 46 + .../variants/result/PdfGroup.result.d.ts | 28 + .../variants/result/PdfGroup.result.d.ts.map | 1 + .../variants/result/PdfGroup.result.js | 48 + .../variants/result/ServiceLine.result.d.ts | 58 + .../result/ServiceLine.result.d.ts.map | 1 + .../variants/result/ServiceLine.result.js | 58 + .../result/ServiceLineTransaction.result.d.ts | 46 + .../ServiceLineTransaction.result.d.ts.map | 1 + .../result/ServiceLineTransaction.result.js | 54 + .../schemas/variants/result/Staff.result.d.ts | 37 + .../variants/result/Staff.result.d.ts.map | 1 + .../schemas/variants/result/Staff.result.js | 50 + .../schemas/variants/result/User.result.d.ts | 61 + .../variants/result/User.result.d.ts.map | 1 + .../schemas/variants/result/User.result.js | 58 + .../shared/schemas/variants/result/index.d.ts | 28 + .../schemas/variants/result/index.d.ts.map | 1 + .../shared/schemas/variants/result/index.js | 53 + 838 files changed, 28488 insertions(+), 773 deletions(-) create mode 100644 packages/db/shared/schemas/aggregateCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/aggregateCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/aggregateCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/countCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/countCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/countCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/createManyAndReturnCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/createManyAndReturnCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/createManyAndReturnCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/createManyCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/createManyCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/createManyCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/createOneCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/createOneCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/createOneCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/deleteManyCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/deleteManyCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/deleteManyCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/deleteOneCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/deleteOneCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/deleteOneCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/enums/CronJobLogScalarFieldEnum.schema.d.ts create mode 100644 packages/db/shared/schemas/enums/CronJobLogScalarFieldEnum.schema.d.ts.map create mode 100644 packages/db/shared/schemas/enums/CronJobLogScalarFieldEnum.schema.js create mode 100644 packages/db/shared/schemas/findFirstCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/findFirstCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/findFirstCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/findFirstOrThrowCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/findFirstOrThrowCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/findFirstOrThrowCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/findManyCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/findManyCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/findManyCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/findUniqueCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/findUniqueCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/findUniqueCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/findUniqueOrThrowCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/findUniqueOrThrowCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/findUniqueOrThrowCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/groupByCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/groupByCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/groupByCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/index.d.ts create mode 100644 packages/db/shared/schemas/index.d.ts.map create mode 100644 packages/db/shared/schemas/index.js create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureArgs.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureArgs.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureArgs.schema.js create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureCreateManyNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureCreateManyNpiProviderInputEnvelope.schema.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureCreateNestedManyWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureCreateOrConnectWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureCreateWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureUncheckedCreateNestedManyWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureUncheckedCreateWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureUncheckedUpdateManyWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureUncheckedUpdateManyWithoutNpiProviderNestedInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureUncheckedUpdateWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureUpdateManyWithWhereWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureUpdateManyWithoutNpiProviderNestedInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureUpdateWithWhereUniqueWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureUpdateWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentProcedureUpsertWithWhereUniqueWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/AppointmentUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/AppointmentUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/BackupDestinationArgs.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/BackupDestinationArgs.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/BackupDestinationArgs.schema.js create mode 100644 packages/db/shared/schemas/objects/BackupDestinationUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/BackupDestinationUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/BackupDestinationUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/ClaimCreateManyNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/ClaimCreateManyNpiProviderInputEnvelope.schema.ts create mode 100644 packages/db/shared/schemas/objects/ClaimCreateNestedManyWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/ClaimCreateOrConnectWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/ClaimCreateWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/ClaimFileArgs.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/ClaimFileArgs.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/ClaimFileArgs.schema.js create mode 100644 packages/db/shared/schemas/objects/ClaimFileUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/ClaimFileUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/ClaimFileUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/ClaimUncheckedCreateNestedManyWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/ClaimUncheckedCreateWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/ClaimUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/ClaimUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/ClaimUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/ClaimUncheckedUpdateManyWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/ClaimUncheckedUpdateManyWithoutNpiProviderNestedInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/ClaimUncheckedUpdateWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/ClaimUpdateManyWithWhereWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/ClaimUpdateManyWithoutNpiProviderNestedInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/ClaimUpdateWithWhereUniqueWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/ClaimUpdateWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/ClaimUpsertWithWhereUniqueWithoutNpiProviderInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/CloudFileChunkArgs.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CloudFileChunkArgs.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CloudFileChunkArgs.schema.js create mode 100644 packages/db/shared/schemas/objects/CloudFileChunkUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CloudFileChunkUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CloudFileChunkUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CloudFileUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CloudFileUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CloudFileUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CloudFolderUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CloudFolderUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CloudFolderUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CommunicationArgs.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CommunicationArgs.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CommunicationArgs.schema.js create mode 100644 packages/db/shared/schemas/objects/CommunicationUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CommunicationUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CommunicationUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogArgs.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogArgs.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogArgs.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogAvgAggregateInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogAvgAggregateInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogAvgAggregateInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogAvgOrderByAggregateInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogAvgOrderByAggregateInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogAvgOrderByAggregateInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogCountAggregateInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogCountAggregateInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogCountAggregateInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogCountOrderByAggregateInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogCountOrderByAggregateInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogCountOrderByAggregateInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogCreateInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogCreateInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogCreateInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogCreateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogCreateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogCreateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogMaxAggregateInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogMaxAggregateInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogMaxAggregateInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogMaxOrderByAggregateInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogMaxOrderByAggregateInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogMaxOrderByAggregateInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogMinAggregateInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogMinAggregateInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogMinAggregateInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogMinOrderByAggregateInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogMinOrderByAggregateInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogMinOrderByAggregateInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogOrderByWithAggregationInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogOrderByWithAggregationInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogOrderByWithAggregationInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogOrderByWithRelationInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogOrderByWithRelationInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogOrderByWithRelationInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogScalarWhereWithAggregatesInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogScalarWhereWithAggregatesInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogScalarWhereWithAggregatesInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogSelect.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogSelect.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogSelect.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogSumAggregateInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogSumAggregateInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogSumAggregateInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogSumOrderByAggregateInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogSumOrderByAggregateInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogSumOrderByAggregateInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogUncheckedCreateInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogUncheckedCreateInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogUncheckedCreateInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogUncheckedUpdateInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogUncheckedUpdateInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogUncheckedUpdateInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogUpdateInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogUpdateInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogUpdateInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogUpdateManyMutationInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogUpdateManyMutationInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogUpdateManyMutationInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogWhereInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogWhereInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogWhereInput.schema.js create mode 100644 packages/db/shared/schemas/objects/CronJobLogWhereUniqueInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/CronJobLogWhereUniqueInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/CronJobLogWhereUniqueInput.schema.js create mode 100644 packages/db/shared/schemas/objects/DatabaseBackupArgs.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/DatabaseBackupArgs.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/DatabaseBackupArgs.schema.js create mode 100644 packages/db/shared/schemas/objects/DatabaseBackupUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/DatabaseBackupUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/DatabaseBackupUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/DateTimeNullableFilter.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/DateTimeNullableFilter.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/DateTimeNullableFilter.schema.js create mode 100644 packages/db/shared/schemas/objects/DateTimeNullableWithAggregatesFilter.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/DateTimeNullableWithAggregatesFilter.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/DateTimeNullableWithAggregatesFilter.schema.js create mode 100644 packages/db/shared/schemas/objects/InsuranceCredentialArgs.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/InsuranceCredentialArgs.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/InsuranceCredentialArgs.schema.js create mode 100644 packages/db/shared/schemas/objects/InsuranceCredentialUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/InsuranceCredentialUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/InsuranceCredentialUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/NestedDateTimeNullableFilter.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/NestedDateTimeNullableFilter.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/NestedDateTimeNullableFilter.schema.js create mode 100644 packages/db/shared/schemas/objects/NestedDateTimeNullableWithAggregatesFilter.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/NestedDateTimeNullableWithAggregatesFilter.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/NestedDateTimeNullableWithAggregatesFilter.schema.js create mode 100644 packages/db/shared/schemas/objects/NotificationArgs.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/NotificationArgs.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/NotificationArgs.schema.js create mode 100644 packages/db/shared/schemas/objects/NotificationUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/NotificationUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/NotificationUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/NpiProviderArgs.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderArgs.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/NpiProviderArgs.schema.js create mode 100644 packages/db/shared/schemas/objects/NpiProviderCountOutputTypeArgs.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderCountOutputTypeCountAppointmentProceduresArgs.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderCountOutputTypeCountClaimsArgs.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderCountOutputTypeSelect.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderCreateNestedOneWithoutAppointmentProceduresInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderCreateNestedOneWithoutClaimsInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderCreateOrConnectWithoutAppointmentProceduresInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderCreateOrConnectWithoutClaimsInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderCreateWithoutAppointmentProceduresInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderCreateWithoutClaimsInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderNullableScalarRelationFilter.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderUncheckedCreateWithoutAppointmentProceduresInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderUncheckedCreateWithoutClaimsInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/NpiProviderUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/NpiProviderUncheckedUpdateWithoutAppointmentProceduresInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderUncheckedUpdateWithoutClaimsInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderUpdateOneWithoutAppointmentProceduresNestedInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderUpdateOneWithoutClaimsNestedInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderUpdateToOneWithWhereWithoutAppointmentProceduresInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderUpdateToOneWithWhereWithoutClaimsInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderUpdateWithoutAppointmentProceduresInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderUpdateWithoutClaimsInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderUpsertWithoutAppointmentProceduresInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NpiProviderUpsertWithoutClaimsInput.schema.ts create mode 100644 packages/db/shared/schemas/objects/NullableDateTimeFieldUpdateOperationsInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/NullableDateTimeFieldUpdateOperationsInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/NullableDateTimeFieldUpdateOperationsInput.schema.js create mode 100644 packages/db/shared/schemas/objects/PatientDocumentArgs.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/PatientDocumentArgs.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/PatientDocumentArgs.schema.js create mode 100644 packages/db/shared/schemas/objects/PatientDocumentUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/PatientDocumentUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/PatientDocumentUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/PatientUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/PatientUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/PatientUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/PaymentUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/PaymentUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/PaymentUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/PdfFileArgs.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/PdfFileArgs.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/PdfFileArgs.schema.js create mode 100644 packages/db/shared/schemas/objects/PdfFileUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/PdfFileUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/PdfFileUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/PdfGroupUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/PdfGroupUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/PdfGroupUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/ServiceLineTransactionArgs.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/ServiceLineTransactionArgs.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/ServiceLineTransactionArgs.schema.js create mode 100644 packages/db/shared/schemas/objects/ServiceLineTransactionUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/ServiceLineTransactionUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/ServiceLineTransactionUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/ServiceLineUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/ServiceLineUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/ServiceLineUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/StaffUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/StaffUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/StaffUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/UserUncheckedUpdateManyInput.schema.d.ts create mode 100644 packages/db/shared/schemas/objects/UserUncheckedUpdateManyInput.schema.d.ts.map create mode 100644 packages/db/shared/schemas/objects/UserUncheckedUpdateManyInput.schema.js create mode 100644 packages/db/shared/schemas/objects/index.d.ts create mode 100644 packages/db/shared/schemas/objects/index.d.ts.map create mode 100644 packages/db/shared/schemas/objects/index.js create mode 100644 packages/db/shared/schemas/results/CronJobLogAggregateResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/CronJobLogAggregateResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/CronJobLogAggregateResult.schema.js create mode 100644 packages/db/shared/schemas/results/CronJobLogCountResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/CronJobLogCountResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/CronJobLogCountResult.schema.js create mode 100644 packages/db/shared/schemas/results/CronJobLogCreateManyResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/CronJobLogCreateManyResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/CronJobLogCreateManyResult.schema.js create mode 100644 packages/db/shared/schemas/results/CronJobLogCreateResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/CronJobLogCreateResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/CronJobLogCreateResult.schema.js create mode 100644 packages/db/shared/schemas/results/CronJobLogDeleteManyResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/CronJobLogDeleteManyResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/CronJobLogDeleteManyResult.schema.js create mode 100644 packages/db/shared/schemas/results/CronJobLogDeleteResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/CronJobLogDeleteResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/CronJobLogDeleteResult.schema.js create mode 100644 packages/db/shared/schemas/results/CronJobLogFindFirstResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/CronJobLogFindFirstResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/CronJobLogFindFirstResult.schema.js create mode 100644 packages/db/shared/schemas/results/CronJobLogFindManyResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/CronJobLogFindManyResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/CronJobLogFindManyResult.schema.js create mode 100644 packages/db/shared/schemas/results/CronJobLogFindUniqueResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/CronJobLogFindUniqueResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/CronJobLogFindUniqueResult.schema.js create mode 100644 packages/db/shared/schemas/results/CronJobLogGroupByResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/CronJobLogGroupByResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/CronJobLogGroupByResult.schema.js create mode 100644 packages/db/shared/schemas/results/CronJobLogUpdateManyResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/CronJobLogUpdateManyResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/CronJobLogUpdateManyResult.schema.js create mode 100644 packages/db/shared/schemas/results/CronJobLogUpdateResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/CronJobLogUpdateResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/CronJobLogUpdateResult.schema.js create mode 100644 packages/db/shared/schemas/results/CronJobLogUpsertResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/CronJobLogUpsertResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/CronJobLogUpsertResult.schema.js create mode 100644 packages/db/shared/schemas/results/PatientDocumentAggregateResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/PatientDocumentAggregateResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/PatientDocumentAggregateResult.schema.js create mode 100644 packages/db/shared/schemas/results/PatientDocumentCountResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/PatientDocumentCountResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/PatientDocumentCountResult.schema.js create mode 100644 packages/db/shared/schemas/results/PatientDocumentDeleteManyResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/PatientDocumentGroupByResult.schema.d.ts create mode 100644 packages/db/shared/schemas/results/PatientDocumentGroupByResult.schema.d.ts.map create mode 100644 packages/db/shared/schemas/results/PatientDocumentGroupByResult.schema.js create mode 100644 packages/db/shared/schemas/results/index.d.ts create mode 100644 packages/db/shared/schemas/results/index.d.ts.map create mode 100644 packages/db/shared/schemas/results/index.js create mode 100644 packages/db/shared/schemas/updateManyAndReturnCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/updateManyAndReturnCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/updateManyAndReturnCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/updateManyCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/updateManyCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/updateManyCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/updateOneCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/updateOneCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/updateOneCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/upsertOneCronJobLog.schema.d.ts create mode 100644 packages/db/shared/schemas/upsertOneCronJobLog.schema.d.ts.map create mode 100644 packages/db/shared/schemas/upsertOneCronJobLog.schema.js create mode 100644 packages/db/shared/schemas/variants/index.d.ts create mode 100644 packages/db/shared/schemas/variants/index.d.ts.map create mode 100644 packages/db/shared/schemas/variants/index.js create mode 100644 packages/db/shared/schemas/variants/input/Appointment.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/Appointment.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/Appointment.input.js create mode 100644 packages/db/shared/schemas/variants/input/AppointmentProcedure.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/AppointmentProcedure.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/AppointmentProcedure.input.js create mode 100644 packages/db/shared/schemas/variants/input/BackupDestination.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/BackupDestination.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/BackupDestination.input.js create mode 100644 packages/db/shared/schemas/variants/input/Claim.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/Claim.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/Claim.input.js create mode 100644 packages/db/shared/schemas/variants/input/ClaimFile.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/ClaimFile.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/ClaimFile.input.js create mode 100644 packages/db/shared/schemas/variants/input/CloudFile.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/CloudFile.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/CloudFile.input.js create mode 100644 packages/db/shared/schemas/variants/input/CloudFileChunk.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/CloudFileChunk.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/CloudFileChunk.input.js create mode 100644 packages/db/shared/schemas/variants/input/CloudFolder.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/CloudFolder.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/CloudFolder.input.js create mode 100644 packages/db/shared/schemas/variants/input/Communication.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/Communication.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/Communication.input.js create mode 100644 packages/db/shared/schemas/variants/input/CronJobLog.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/CronJobLog.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/CronJobLog.input.js create mode 100644 packages/db/shared/schemas/variants/input/DatabaseBackup.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/DatabaseBackup.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/DatabaseBackup.input.js create mode 100644 packages/db/shared/schemas/variants/input/InsuranceCredential.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/InsuranceCredential.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/InsuranceCredential.input.js create mode 100644 packages/db/shared/schemas/variants/input/Notification.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/Notification.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/Notification.input.js create mode 100644 packages/db/shared/schemas/variants/input/NpiProvider.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/NpiProvider.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/NpiProvider.input.js create mode 100644 packages/db/shared/schemas/variants/input/Patient.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/Patient.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/Patient.input.js create mode 100644 packages/db/shared/schemas/variants/input/PatientDocument.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/PatientDocument.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/PatientDocument.input.js create mode 100644 packages/db/shared/schemas/variants/input/Payment.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/Payment.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/Payment.input.js create mode 100644 packages/db/shared/schemas/variants/input/PdfFile.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/PdfFile.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/PdfFile.input.js create mode 100644 packages/db/shared/schemas/variants/input/PdfGroup.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/PdfGroup.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/PdfGroup.input.js create mode 100644 packages/db/shared/schemas/variants/input/ServiceLine.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/ServiceLine.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/ServiceLine.input.js create mode 100644 packages/db/shared/schemas/variants/input/ServiceLineTransaction.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/ServiceLineTransaction.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/ServiceLineTransaction.input.js create mode 100644 packages/db/shared/schemas/variants/input/Staff.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/Staff.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/Staff.input.js create mode 100644 packages/db/shared/schemas/variants/input/User.input.d.ts create mode 100644 packages/db/shared/schemas/variants/input/User.input.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/User.input.js create mode 100644 packages/db/shared/schemas/variants/input/index.d.ts create mode 100644 packages/db/shared/schemas/variants/input/index.d.ts.map create mode 100644 packages/db/shared/schemas/variants/input/index.js create mode 100644 packages/db/shared/schemas/variants/pure/Appointment.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/Appointment.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/Appointment.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/AppointmentProcedure.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/AppointmentProcedure.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/AppointmentProcedure.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/BackupDestination.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/BackupDestination.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/BackupDestination.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/Claim.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/Claim.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/Claim.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/ClaimFile.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/ClaimFile.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/ClaimFile.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/CloudFile.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/CloudFile.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/CloudFile.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/CloudFileChunk.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/CloudFileChunk.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/CloudFileChunk.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/CloudFolder.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/CloudFolder.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/CloudFolder.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/Communication.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/Communication.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/Communication.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/CronJobLog.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/CronJobLog.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/CronJobLog.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/DatabaseBackup.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/DatabaseBackup.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/DatabaseBackup.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/InsuranceCredential.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/InsuranceCredential.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/InsuranceCredential.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/Notification.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/Notification.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/Notification.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/NpiProvider.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/NpiProvider.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/NpiProvider.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/Patient.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/Patient.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/Patient.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/PatientDocument.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/PatientDocument.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/PatientDocument.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/Payment.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/Payment.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/Payment.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/PdfFile.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/PdfFile.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/PdfFile.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/PdfGroup.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/PdfGroup.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/PdfGroup.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/ServiceLine.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/ServiceLine.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/ServiceLine.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/ServiceLineTransaction.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/ServiceLineTransaction.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/ServiceLineTransaction.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/Staff.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/Staff.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/Staff.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/User.pure.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/User.pure.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/User.pure.js create mode 100644 packages/db/shared/schemas/variants/pure/index.d.ts create mode 100644 packages/db/shared/schemas/variants/pure/index.d.ts.map create mode 100644 packages/db/shared/schemas/variants/pure/index.js create mode 100644 packages/db/shared/schemas/variants/result/Appointment.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/Appointment.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/Appointment.result.js create mode 100644 packages/db/shared/schemas/variants/result/AppointmentProcedure.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/AppointmentProcedure.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/AppointmentProcedure.result.js create mode 100644 packages/db/shared/schemas/variants/result/BackupDestination.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/BackupDestination.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/BackupDestination.result.js create mode 100644 packages/db/shared/schemas/variants/result/Claim.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/Claim.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/Claim.result.js create mode 100644 packages/db/shared/schemas/variants/result/ClaimFile.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/ClaimFile.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/ClaimFile.result.js create mode 100644 packages/db/shared/schemas/variants/result/CloudFile.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/CloudFile.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/CloudFile.result.js create mode 100644 packages/db/shared/schemas/variants/result/CloudFileChunk.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/CloudFileChunk.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/CloudFileChunk.result.js create mode 100644 packages/db/shared/schemas/variants/result/CloudFolder.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/CloudFolder.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/CloudFolder.result.js create mode 100644 packages/db/shared/schemas/variants/result/Communication.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/Communication.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/Communication.result.js create mode 100644 packages/db/shared/schemas/variants/result/CronJobLog.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/CronJobLog.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/CronJobLog.result.js create mode 100644 packages/db/shared/schemas/variants/result/DatabaseBackup.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/DatabaseBackup.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/DatabaseBackup.result.js create mode 100644 packages/db/shared/schemas/variants/result/InsuranceCredential.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/InsuranceCredential.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/InsuranceCredential.result.js create mode 100644 packages/db/shared/schemas/variants/result/Notification.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/Notification.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/Notification.result.js create mode 100644 packages/db/shared/schemas/variants/result/NpiProvider.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/NpiProvider.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/NpiProvider.result.js create mode 100644 packages/db/shared/schemas/variants/result/Patient.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/Patient.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/Patient.result.js create mode 100644 packages/db/shared/schemas/variants/result/PatientDocument.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/PatientDocument.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/PatientDocument.result.js create mode 100644 packages/db/shared/schemas/variants/result/Payment.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/Payment.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/Payment.result.js create mode 100644 packages/db/shared/schemas/variants/result/PdfFile.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/PdfFile.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/PdfFile.result.js create mode 100644 packages/db/shared/schemas/variants/result/PdfGroup.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/PdfGroup.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/PdfGroup.result.js create mode 100644 packages/db/shared/schemas/variants/result/ServiceLine.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/ServiceLine.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/ServiceLine.result.js create mode 100644 packages/db/shared/schemas/variants/result/ServiceLineTransaction.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/ServiceLineTransaction.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/ServiceLineTransaction.result.js create mode 100644 packages/db/shared/schemas/variants/result/Staff.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/Staff.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/Staff.result.js create mode 100644 packages/db/shared/schemas/variants/result/User.result.d.ts create mode 100644 packages/db/shared/schemas/variants/result/User.result.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/User.result.js create mode 100644 packages/db/shared/schemas/variants/result/index.d.ts create mode 100644 packages/db/shared/schemas/variants/result/index.d.ts.map create mode 100644 packages/db/shared/schemas/variants/result/index.js diff --git a/apps/Backend/src/queue/jobRunner.ts b/apps/Backend/src/queue/jobRunner.ts index 68e4f7f..e523070 100644 --- a/apps/Backend/src/queue/jobRunner.ts +++ b/apps/Backend/src/queue/jobRunner.ts @@ -71,6 +71,7 @@ export function enqueueSeleniumJob(data: SeleniumJobData): string { files: data.files ?? [], claimId: data.claimId, variant: jobType === "claim-pre-auth" ? "claim-pre-auth" : "claimsubmit", + socketId: data.socketId, }); } if (jobType === "ddma-eligibility-check") { diff --git a/apps/Backend/src/queue/processors/claimSubmitProcessor.ts b/apps/Backend/src/queue/processors/claimSubmitProcessor.ts index 7c81860..8f1105b 100644 --- a/apps/Backend/src/queue/processors/claimSubmitProcessor.ts +++ b/apps/Backend/src/queue/processors/claimSubmitProcessor.ts @@ -2,6 +2,8 @@ * Processors for "claim-submit" and "claim-pre-auth" jobs. * Mirrors routes/claims.ts /selenium-claim and /selenium-claim-pre-auth */ +import path from "path"; +import axios from "axios"; import { storage } from "../../storage"; import { callPythonSync } from "./_shared"; @@ -11,6 +13,8 @@ export interface ClaimSubmitProcessorInput { claimId?: number; /** "claimsubmit" (default) or "claim-pre-auth" */ variant?: "claimsubmit" | "claim-pre-auth"; + /** When set, the frontend socket listener will handle the PDF download — skip auto-save */ + socketId?: string; } export interface ClaimSubmitProcessorResult { @@ -20,10 +24,40 @@ export interface ClaimSubmitProcessorResult { [key: string]: any; } +/** Fetch the PDF from the selenium service and save it to cloud storage. */ +async function savePdfFromSelenium( + pdf_url: string, + patientId: number, + variant: "claimsubmit" | "claim-pre-auth" +) { + try { + const filename = path.basename(new URL(pdf_url).pathname); + const seleniumPort = process.env.SELENIUM_PORT || "5002"; + const localUrl = `http://localhost:${seleniumPort}/downloads/${filename}`; + + const resp = await axios.get(localUrl, { responseType: "arraybuffer", timeout: 30000 }); + + const groupTitleKey = variant === "claim-pre-auth" ? "INSURANCE_CLAIM_PREAUTH" : "INSURANCE_CLAIM"; + const groupTitle = variant === "claim-pre-auth" ? "Claims Preauth" : "Claims"; + + let group = await storage.findPdfGroupByPatientTitleKey(patientId, groupTitleKey); + if (!group) { + group = await storage.createPdfGroup(patientId, groupTitle, groupTitleKey); + } + + await storage.createPdfFile(group.id!, filename, resp.data); + console.log(`[claimSubmitProcessor] PDF saved for patient ${patientId}: ${filename}`); + } catch (err: any) { + // Non-fatal — claim was submitted; just log the PDF failure + console.error("[claimSubmitProcessor] failed to save PDF:", err?.message ?? err); + } +} + export async function runClaimSubmitProcessor( input: ClaimSubmitProcessorInput ): Promise { const { enrichedPayload, files, claimId } = input; + const variant = input.variant ?? "claimsubmit"; // Build the same payload shape the Python /claimsubmit endpoint expects const pdfs = files @@ -36,13 +70,12 @@ export async function runClaimSubmitProcessor( const payload = { claim: enrichedPayload, pdfs, images }; - const endpoint = - input.variant === "claim-pre-auth" ? "/claim-pre-auth" : "/claimsubmit"; + const endpoint = variant === "claim-pre-auth" ? "/claim-pre-auth" : "/claimsubmit"; // 1) Call the Python service synchronously (BullMQ worker handles async) const result = await callPythonSync(endpoint, payload, 10 * 60 * 1000); - // 2) Persist claimNumber and update status to REVIEW after successful submission + // 2) Persist claimNumber and update status to REVIEW if (claimId) { try { const updates: Record = { status: "REVIEW" }; @@ -53,5 +86,14 @@ export async function runClaimSubmitProcessor( } } + // 3) Auto-save PDF for batch jobs (no socketId = no frontend listener to call fetchpdf) + if (result?.pdf_url && enrichedPayload?.patientId && !input.socketId) { + await savePdfFromSelenium( + result.pdf_url, + Number(enrichedPayload.patientId), + variant + ); + } + return { ...result, claimId }; } diff --git a/apps/Backend/src/queue/workers/seleniumWorker.ts b/apps/Backend/src/queue/workers/seleniumWorker.ts index f2184a1..7a9bc84 100644 --- a/apps/Backend/src/queue/workers/seleniumWorker.ts +++ b/apps/Backend/src/queue/workers/seleniumWorker.ts @@ -57,6 +57,7 @@ async function processSeleniumJob(job: Job) { files: job.data.files ?? [], claimId: job.data.claimId, variant: "claimsubmit", + socketId, }); } else if (jobType === "claim-pre-auth") { result = await runClaimSubmitProcessor({ @@ -64,6 +65,7 @@ async function processSeleniumJob(job: Job) { files: job.data.files ?? [], claimId: job.data.claimId, variant: "claim-pre-auth", + socketId, }); } else { throw new Error(`Unknown selenium jobType: ${jobType}`); diff --git a/apps/Backend/src/routes/appointments-procedures.ts b/apps/Backend/src/routes/appointments-procedures.ts index 7e980ef..4b329f0 100755 --- a/apps/Backend/src/routes/appointments-procedures.ts +++ b/apps/Backend/src/routes/appointments-procedures.ts @@ -54,6 +54,71 @@ router.get( } ); +/** + * PUT /api/appointment-procedures/set-npi-provider/:appointmentId + * Set the npiProviderId on all procedures for an appointment (lightweight update). + */ +router.put("/set-npi-provider/:appointmentId", async (req: Request, res: Response) => { + try { + const appointmentId = Number(req.params.appointmentId); + if (isNaN(appointmentId)) return res.status(400).json({ message: "Invalid appointmentId" }); + + const npiProviderId = req.body.npiProviderId != null ? Number(req.body.npiProviderId) : null; + + await prisma.appointmentProcedure.updateMany({ + where: { appointmentId }, + data: { npiProviderId: npiProviderId ?? null }, + }); + + return res.json({ success: true }); + } catch (err: any) { + console.error("set-npi-provider error", err); + return res.status(500).json({ message: err.message ?? "Server error" }); + } +}); + +/** + * POST /api/appointment-procedures/save-for-appointment + * Replace all procedures for an appointment (clear + insert). + * Body: { appointmentId, patientId, npiProviderId?, procedures: [{procedureCode, fee?, toothNumber?, toothSurface?}] } + */ +router.post("/save-for-appointment", async (req: Request, res: Response) => { + try { + const { appointmentId, patientId, npiProviderId, procedures } = req.body; + + if (!appointmentId || isNaN(Number(appointmentId))) { + return res.status(400).json({ message: "Invalid appointmentId" }); + } + if (!patientId || isNaN(Number(patientId))) { + return res.status(400).json({ message: "Invalid patientId" }); + } + if (!Array.isArray(procedures)) { + return res.status(400).json({ message: "procedures must be an array" }); + } + + const filtered = (procedures as any[]).filter( + (p) => String(p.procedureCode ?? "").trim() !== "" + ); + + const count = await storage.saveForAppointment({ + appointmentId: Number(appointmentId), + patientId: Number(patientId), + npiProviderId: npiProviderId ? Number(npiProviderId) : null, + procedures: filtered.map((p) => ({ + procedureCode: String(p.procedureCode).trim(), + fee: p.fee != null ? Number(p.fee) : null, + toothNumber: p.toothNumber || null, + toothSurface: p.toothSurface || null, + })), + }); + + return res.json({ success: true, count }); + } catch (err: any) { + console.error("save-for-appointment error", err); + return res.status(500).json({ message: err.message ?? "Server error" }); + } +}); + /** * POST /api/appointment-procedures * Add single manual procedure diff --git a/apps/Backend/src/routes/claims.ts b/apps/Backend/src/routes/claims.ts index eaf770b..d58b8ea 100755 --- a/apps/Backend/src/routes/claims.ts +++ b/apps/Backend/src/routes/claims.ts @@ -5,6 +5,7 @@ import { z } from "zod"; import multer from "multer"; import { forwardToSeleniumClaimAgent } from "../services/seleniumClaimClient"; import path from "path"; +import fs from "fs"; import axios from "axios"; import { seleniumQueue } from "../queue/queues"; import { Prisma } from "@repo/db/generated/prisma"; @@ -15,6 +16,7 @@ import { updateClaimSchema, } from "@repo/db/types"; import { forwardToSeleniumClaimPreAuthAgent } from "../services/seleniumInsuranceClaimPreAuthClient"; +import { formatDobForAgent } from "../utils/dateUtils"; const router = Router(); @@ -38,6 +40,48 @@ const upload = multer({ }, }); +// Disk-storage uploader for claim attachments saved under uploads/patients// +const attachmentDiskStorage = multer.diskStorage({ + destination: (req, _file, cb) => { + const patientName = String(req.body.patientName || "unknown").replace(/[/\\?%*:|"<>]/g, "-").trim(); + const dir = path.join(process.cwd(), "uploads", "patients", patientName); + fs.mkdirSync(dir, { recursive: true }); + cb(null, dir); + }, + filename: (_req, file, cb) => { + const ext = path.extname(file.originalname); + const base = path.basename(file.originalname, ext).replace(/\s+/g, "_"); + cb(null, `${Date.now()}_${base}${ext}`); + }, +}); +const attachmentUpload = multer({ + storage: attachmentDiskStorage, + limits: { fileSize: 20 * 1024 * 1024 }, + fileFilter: (_req, file, cb) => { + const allowed = ["application/pdf", "image/jpeg", "image/png", "image/webp"]; + cb(null, allowed.includes(file.mimetype)); + }, +}); + +// POST /api/claims/upload-attachments +// Saves files to uploads/patients// and returns their paths. +router.post( + "/upload-attachments", + attachmentUpload.array("files", 10), + (req: Request, res: Response): any => { + const files = req.files as Express.Multer.File[]; + if (!files?.length) return res.status(400).json({ error: true, message: "No files uploaded" }); + + const result = files.map((f) => ({ + filename: f.originalname, + mimeType: f.mimetype, + filePath: `/uploads/patients/${path.basename(path.dirname(f.path))}/${path.basename(f.path)}`, + })); + + return res.json({ error: false, data: result }); + } +); + router.post( "/mh-provider-login", async (req: Request, res: Response): Promise => { @@ -341,6 +385,298 @@ router.post( } ); +// POST /api/claims/batch-column +// Query params: date=YYYY-MM-DD (required), staffIds=1,2 (required) +// For each appointment in the selected staff columns: +// - skip if no saved AppointmentProcedure records +// - otherwise create a Claim + Payment, enqueue selenium claim-submit job +router.post( + "/batch-column", + async (req: Request, res: Response): Promise => { + const date = String(req.query.date ?? "").trim(); + const staffIdsRaw = String(req.query.staffIds ?? "").trim(); + + if (!date) return res.status(400).json({ error: "Missing date query param" }); + if (!staffIdsRaw) return res.status(400).json({ error: "Missing staffIds query param" }); + if (!req.user?.id) return res.status(401).json({ error: "Unauthorized" }); + + const staffIdFilter = new Set( + staffIdsRaw.split(",").map(Number).filter((n) => Number.isFinite(n) && n > 0) + ); + + try { + const allAppointments = await storage.getAppointmentsByDateForUser(date, req.user.id); + const appointments = allAppointments.filter((a) => staffIdFilter.has(Number(a.staffId))); + + const results: Array = []; + + for (const apt of appointments) { + const resultItem: any = { + appointmentId: apt.id, + patientId: apt.patientId ?? null, + processed: false, + skipped: false, + error: null, + jobId: null, + claimId: null, + }; + + try { + // Fetch active claim for this appointment (includes service lines from draft saves) + const activeClaim = await storage.getActiveClaimByAppointmentId(Number(apt.id)); + + // "Already claimed" = has a real claim number OR status is REVIEW/APPROVED + // A PENDING claim with no claimNumber is just a draft save — not yet submitted + const alreadyClaimed = + activeClaim && + ((activeClaim.claimNumber != null && + String(activeClaim.claimNumber).trim() !== "") || + activeClaim.status === "REVIEW" || + activeClaim.status === "APPROVED"); + + if (alreadyClaimed) { + resultItem.skipped = true; + resultItem.error = "Already claimed"; + results.push(resultItem); + continue; + } + + // Build service lines: prefer draft claim's saved lines, fall back to AppointmentProcedure + const serviceDate = formatDobForAgent( + apt.date instanceof Date ? apt.date : new Date(apt.date as any) + ) ?? date; + + let serviceLines: Array<{ + procedureCode: string; + procedureDate: string | Date; + toothNumber?: string; + toothSurface?: string; + totalBilled: number; + totalAdjusted: number; + totalPaid: number; + totalDue: number; + }>; + + // Fetch AppointmentProcedure records once (used for service lines fallback + npiProviderId) + const apptProcedures = await storage.getByAppointmentId(Number(apt.id)); + + const safeProcedureDate = new Date(serviceDate); + + if (activeClaim?.serviceLines?.length) { + // Use saved service lines from the draft claim + serviceLines = activeClaim.serviceLines + .filter((sl) => sl.procedureCode) + .map((sl) => ({ + procedureCode: sl.procedureCode, + procedureDate: safeProcedureDate, + toothNumber: sl.toothNumber ?? undefined, + toothSurface: sl.toothSurface ?? undefined, + totalBilled: Math.max(0, Number(sl.totalBilled ?? 0) || 0), + totalAdjusted: 0, + totalPaid: 0, + totalDue: Math.max(0, Number(sl.totalBilled ?? 0) || 0), + })); + } else { + // Fall back to AppointmentProcedure records (saved via Select Procedures) + serviceLines = apptProcedures.map((proc) => ({ + procedureCode: proc.procedureCode, + procedureDate: safeProcedureDate, + toothNumber: proc.toothNumber ?? undefined, + toothSurface: proc.toothSurface ?? undefined, + totalBilled: Math.max(0, Number(proc.fee ?? 0) || 0), + totalAdjusted: 0, + totalPaid: 0, + totalDue: Math.max(0, Number(proc.fee ?? 0) || 0), + })); + } + + if (!serviceLines.length) { + resultItem.skipped = true; + results.push(resultItem); + continue; + } + + // Patient + const patient = apt.patientId ? await storage.getPatient(apt.patientId) : null; + if (!patient) { + resultItem.error = "Patient not found"; + results.push(resultItem); + continue; + } + + const memberId = String(patient.insuranceId ?? "").trim(); + if (!memberId) { + resultItem.error = "Missing insurance ID"; + results.push(resultItem); + continue; + } + + const dobStr = formatDobForAgent(patient.dateOfBirth); + if (!dobStr) { + resultItem.error = "Missing or invalid date of birth"; + results.push(resultItem); + continue; + } + + // MassHealth credentials + const credentials = await storage.getInsuranceCredentialByUserAndSiteKey(req.user.id, "MH"); + if (!credentials) { + resultItem.error = "No MassHealth credentials found — check Settings"; + results.push(resultItem); + continue; + } + + const npiProviders = await storage.getNpiProvidersByUser(req.user.id); + const npiProvider = npiProviders[0] ?? null; + + // procNpiProviderId = user's explicit choice saved via "Select Procedures" form + // This ALWAYS wins over any previously stored claim npiProviderId + const procNpiProviderId = (apptProcedures as any[]).find((p) => p.npiProviderId)?.npiProviderId ?? null; + + // Priority: Select Procedures choice > existing claim > first provider + const claimNpiProviderId = procNpiProviderId ?? activeClaim?.npiProviderId ?? npiProvider?.id ?? null; + + console.log(`[batch-column] apt=${apt.id} procNpiId=${procNpiProviderId} claimNpiId=${activeClaim?.npiProviderId} resolved=${claimNpiProviderId}`); + + const patientName = `${patient.firstName ?? ""} ${patient.lastName ?? ""}`.trim(); + + // Reuse the existing draft claim, or create a new one + let claimId: number; + if (activeClaim?.id) { + claimId = activeClaim.id; + // Update claim's npiProviderId if the user chose a different provider via Select Procedures + if (procNpiProviderId && activeClaim.npiProviderId !== procNpiProviderId) { + await storage.updateClaim(claimId, { npiProviderId: procNpiProviderId }); + } + } else { + // Validate required integer fields before sending to Prisma + const safeStaffId = apt.staffId ? Number(apt.staffId) : null; + if (!safeStaffId || !Number.isFinite(safeStaffId)) { + resultItem.error = "Appointment has no valid staff column (staffId missing)"; + results.push(resultItem); + continue; + } + + const safeNpiId = claimNpiProviderId && Number.isFinite(Number(claimNpiProviderId)) + ? Number(claimNpiProviderId) + : null; + + console.log(`[batch-column] creating claim: patientId=${patient.id} aptId=${apt.id} staffId=${safeStaffId} npiProviderId=${safeNpiId} serviceDate=${serviceDate} dobStr=${dobStr} lines=${serviceLines.length}`); + + const newClaim = await storage.createClaim({ + patientId: Number(patient.id), + appointmentId: Number(apt.id), + userId: req.user.id, + staffId: safeStaffId, + patientName, + memberId, + dateOfBirth: new Date(dobStr), + serviceDate: new Date(serviceDate), + insuranceProvider: "MassHealth", + remarks: "", + missingTeethStatus: "No_missing", + missingTeeth: {}, + status: "PENDING", + serviceLines: { create: serviceLines }, + ...(safeNpiId ? { npiProviderId: safeNpiId } : {}), + } as any); + claimId = newClaim.id; + } + resultItem.claimId = claimId; + + // Create Payment only if one doesn't already exist (prevents duplicates on retry) + const existingPayment = await storage.getPaymentsByClaimId(claimId); + if (!existingPayment) { + const totalBilled = serviceLines.reduce((sum, l) => sum + Number(l.totalBilled), 0); + await storage.createPayment({ + claimId, + patientId: Number(patient.id), + userId: req.user.id, + totalBilled: new Decimal(totalBilled), + totalPaid: new Decimal(0), + totalDue: new Decimal(totalBilled), + status: "PENDING", + notes: "", + } as any); + } + + // Resolve NPI provider object for selenium payload + let resolvedNpiProvider = npiProvider; + if (claimNpiProviderId) { + const saved = npiProviders.find((p) => p.id === Number(claimNpiProviderId)); + if (saved) resolvedNpiProvider = saved; + } + + // Build enriched payload for selenium + const enrichedPayload: any = { + patientId: Number(patient.id), + appointmentId: Number(apt.id), + userId: req.user.id, + staffId: Number(apt.staffId), + patientName, + memberId, + dateOfBirth: dobStr, + serviceDate, + insuranceProvider: "MassHealth", + insuranceSiteKey: "MH", + missingTeethStatus: activeClaim?.missingTeethStatus ?? "No_missing", + missingTeeth: activeClaim?.missingTeeth ?? {}, + remarks: activeClaim?.remarks ?? "", + serviceLines, + claimId, + massdhpUsername: credentials.username, + massdhpPassword: credentials.password, + }; + if (resolvedNpiProvider) { + enrichedPayload.npiProvider = { + npiNumber: resolvedNpiProvider.npiNumber, + providerName: resolvedNpiProvider.providerName, + }; + } + + // Enqueue selenium claim-submit job + const job = await seleniumQueue.add("claim-submit", { + jobType: "claim-submit", + userId: req.user.id, + enrichedPayload, + files: [], + claimId, + }); + + resultItem.processed = true; + resultItem.jobId = String(job.id); + + } catch (aptErr: any) { + console.error("[batch-column] apt error:", aptErr); + resultItem.error = aptErr?.message ?? String(aptErr); + } + + results.push(resultItem); + } + + return res.json({ results }); + + } catch (err: any) { + console.error("[batch-column claims] error", err); + return res.status(500).json({ error: err?.message ?? "Batch claim failed" }); + } + } +); + +// GET /api/claims/by-appointment/:appointmentId +// Returns the most recent active (non-cancelled/void) claim with service lines and files +router.get( + "/by-appointment/:appointmentId", + async (req: Request, res: Response): Promise => { + const aptId = parseInt(req.params.appointmentId, 10); + if (isNaN(aptId)) return res.status(400).json({ error: "Invalid appointmentId" }); + + const claim = await storage.getActiveClaimByAppointmentId(aptId); + if (!claim) return res.status(404).json({ message: "No active claim found" }); + return res.json(claim); + } +); + // GET /api/claims/recent router.get("/recent", async (req: Request, res: Response) => { try { @@ -435,6 +771,7 @@ router.post("/", async (req: Request, res: Response): Promise => { create: req.body.claimFiles.map((f: any) => ({ filename: String(f.filename), mimeType: String(f.mimeType || f.mime || ""), + ...(f.filePath ? { filePath: String(f.filePath) } : {}), })), }; } @@ -452,7 +789,12 @@ router.post("/", async (req: Request, res: Response): Promise => { if (Array.isArray(req.body.serviceLines)) { req.body.serviceLines = req.body.serviceLines.map( (line: InputServiceLine) => ({ - ...line, + procedureCode: String(line.procedureCode ?? ""), + procedureDate: line.procedureDate, + quad: line.quad ?? null, + arch: line.arch ?? null, + toothNumber: line.toothNumber ?? null, + toothSurface: line.toothSurface ?? null, totalBilled: Number(line.totalBilled), totalAdjusted: 0, totalPaid: 0, @@ -462,8 +804,23 @@ router.post("/", async (req: Request, res: Response): Promise => { req.body.serviceLines = { create: req.body.serviceLines }; } - const parsedClaim = ExtendedClaimSchema.parse({ - ...req.body, + // Strip unknown keys so strict() doesn't reject any extra properties the frontend may send + const parsedClaim = (ExtendedClaimSchema as unknown as z.ZodObject).strip().parse({ + patientId: req.body.patientId, + appointmentId: req.body.appointmentId, + staffId: req.body.staffId, + patientName: req.body.patientName, + memberId: req.body.memberId, + dateOfBirth: req.body.dateOfBirth, + remarks: req.body.remarks ?? "", + missingTeethStatus: req.body.missingTeethStatus, + missingTeeth: req.body.missingTeeth, + serviceDate: req.body.serviceDate, + insuranceProvider: req.body.insuranceProvider, + status: req.body.status, + serviceLines: req.body.serviceLines, + claimFiles: req.body.claimFiles, + ...(req.body.npiProviderId ? { npiProviderId: Number(req.body.npiProviderId) } : {}), userId: req.user!.id, }); @@ -484,28 +841,35 @@ router.post("/", async (req: Request, res: Response): Promise => { // Step 2: Create claim (with service lines) const claim = await storage.createClaim(parsedClaim); - // Step 3: Create empty payment - await storage.createPayment({ - claimId: claim.id, - patientId: claim.patientId, - userId: req.user!.id, - totalBilled: new Decimal(totalBilled), - totalPaid: new Decimal(0), - totalDue: new Decimal(totalBilled), - status: "PENDING", - notes: "", - }); + // Step 3: Create payment only for real submissions (not draft saves) + const isDraft = req.query.draft === "true"; + if (!isDraft) { + await storage.createPayment({ + claimId: claim.id, + patientId: claim.patientId, + userId: req.user!.id, + totalBilled: new Decimal(totalBilled), + totalPaid: new Decimal(0), + totalDue: new Decimal(totalBilled), + status: "PENDING", + notes: "", + }); + } res.status(201).json(claim); } catch (error) { if (error instanceof z.ZodError) { + const firstIssue = error.issues[0]; + const fieldPath = firstIssue?.path?.join(".") ?? "unknown"; + const fieldMsg = firstIssue?.message ?? "invalid"; + console.error("❌ Claim validation error:", error.issues); return res.status(400).json({ - message: "Validation error", + message: `Validation error on field "${fieldPath}": ${fieldMsg}`, errors: error.format(), }); } - console.error("❌ Failed to create claim:", error); // logs full error to server + console.error("❌ Failed to create claim:", error); // Send more detailed info to the client (for dev only) return res.status(500).json({ @@ -533,16 +897,64 @@ router.put("/:id", async (req: Request, res: Response): Promise => { return res.status(404).json({ message: "Claim not found" }); } - const claimData = updateClaimSchema.parse(req.body); + // If service lines are provided, replace them (delete old, create new) + if (Array.isArray(req.body.serviceLines) && req.body.serviceLines.length > 0) { + const { prisma: db } = await import("@repo/db/client"); + await db.serviceLine.deleteMany({ where: { claimId } }); + await db.serviceLine.createMany({ + data: req.body.serviceLines.map((line: InputServiceLine) => ({ + claimId, + procedureCode: String(line.procedureCode ?? ""), + procedureDate: new Date(line.procedureDate), + quad: line.quad || null, + arch: line.arch || null, + toothNumber: line.toothNumber || null, + toothSurface: line.toothSurface || null, + totalBilled: Number(line.totalBilled), + totalAdjusted: 0, + totalPaid: 0, + totalDue: Number(line.totalBilled), + })), + }); + } + + // Explicitly pick only scalar fields — skip serviceLines (handled above) + // and claimFiles (plain array from frontend is not Prisma nested format) + // Use req.user!.id for userId (always trust the authenticated session, not the client body) + // Skip null/empty-string values for optional fields to avoid coerce.date() failures + const toOptionalNum = (v: any) => (v != null && !Number.isNaN(Number(v)) ? Number(v) : undefined); + const toOptionalDate = (v: any) => (v != null && String(v).trim() !== "" ? v : undefined); + + const claimData = (updateClaimSchema as unknown as z.ZodObject).strip().parse({ + patientId: toOptionalNum(req.body.patientId), + appointmentId: toOptionalNum(req.body.appointmentId), + userId: req.user!.id, + staffId: toOptionalNum(req.body.staffId), + patientName: req.body.patientName, + memberId: req.body.memberId, + dateOfBirth: toOptionalDate(req.body.dateOfBirth), + remarks: req.body.remarks ?? "", + missingTeethStatus: req.body.missingTeethStatus, + missingTeeth: req.body.missingTeeth, + serviceDate: toOptionalDate(req.body.serviceDate), + insuranceProvider: req.body.insuranceProvider, + status: req.body.status, + ...(req.body.npiProviderId ? { npiProviderId: Number(req.body.npiProviderId) } : {}), + }); const updatedClaim = await storage.updateClaim(claimId, claimData); res.json(updatedClaim); } catch (error) { if (error instanceof z.ZodError) { + const firstIssue = error.issues[0]; + const fieldPath = firstIssue?.path?.join(".") ?? "unknown"; + const fieldMsg = firstIssue?.message ?? "invalid"; + console.error("❌ Claim update validation error:", error.issues); return res.status(400).json({ - message: "Validation error", + message: `Validation error on field "${fieldPath}": ${fieldMsg}`, errors: error.format(), }); } + console.error("❌ Failed to update claim:", error); res.status(500).json({ message: "Failed to update claim" }); } }); diff --git a/apps/Backend/src/storage/appointment-procedures-storage.ts b/apps/Backend/src/storage/appointment-procedures-storage.ts index b243743..62c75ef 100755 --- a/apps/Backend/src/storage/appointment-procedures-storage.ts +++ b/apps/Backend/src/storage/appointment-procedures-storage.ts @@ -13,7 +13,19 @@ export interface IAppointmentProceduresStorage { appointment: Appointment; patient: Patient; procedures: AppointmentProcedure[]; + npiProviderId: number | null; } | null>; + saveForAppointment(params: { + appointmentId: number; + patientId: number; + npiProviderId: number | null; + procedures: Array<{ + procedureCode: string; + fee?: number | null; + toothNumber?: string | null; + toothSurface?: string | null; + }>; + }): Promise; createProcedure( data: InsertAppointmentProcedure @@ -52,13 +64,34 @@ export const appointmentProceduresStorage: IAppointmentProceduresStorage = { return null; } + const npiProviderId = appointment.procedures[0]?.npiProviderId ?? null; + return { appointment, patient: appointment.patient, procedures: appointment.procedures, + npiProviderId, }; }, + async saveForAppointment({ appointmentId, patientId, npiProviderId, procedures }) { + await db.appointmentProcedure.deleteMany({ where: { appointmentId } }); + if (!procedures.length) return 0; + const result = await db.appointmentProcedure.createMany({ + data: procedures.map((p) => ({ + appointmentId, + patientId, + npiProviderId: npiProviderId ?? null, + procedureCode: p.procedureCode, + fee: p.fee != null ? p.fee : null, + toothNumber: p.toothNumber || null, + toothSurface: p.toothSurface || null, + source: "MANUAL" as const, + })), + }); + return result.count; + }, + async createProcedure( data: InsertAppointmentProcedure ): Promise { diff --git a/apps/Backend/src/storage/appointments-storage.ts b/apps/Backend/src/storage/appointments-storage.ts index aad4fbc..1b95e33 100755 --- a/apps/Backend/src/storage/appointments-storage.ts +++ b/apps/Backend/src/storage/appointments-storage.ts @@ -22,6 +22,11 @@ export interface IStorage { appointment: UpdateAppointment ): Promise; deleteAppointment(id: number): Promise; + getPatientAppointmentByDateAndStaff( + patientId: number, + date: Date, + staffId: number + ): Promise; getPatientAppointmentByDateTime( patientId: number, date: Date, @@ -127,6 +132,19 @@ export const appointmentsStorage: IStorage = { } }, + async getPatientAppointmentByDateAndStaff( + patientId: number, + date: Date, + staffId: number + ): Promise { + return ( + (await db.appointment.findFirst({ + where: { patientId, date, staffId }, + orderBy: { createdAt: "desc" }, + })) ?? undefined + ); + }, + async getPatientAppointmentByDateTime( patientId: number, date: Date, diff --git a/apps/Frontend/src/components/appointment-procedures/appointment-procedures-dialog.tsx b/apps/Frontend/src/components/appointment-procedures/appointment-procedures-dialog.tsx index c5196c7..d708067 100755 --- a/apps/Frontend/src/components/appointment-procedures/appointment-procedures-dialog.tsx +++ b/apps/Frontend/src/components/appointment-procedures/appointment-procedures-dialog.tsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState, useEffect } from "react"; import { useQuery, useMutation } from "@tanstack/react-query"; import { Dialog, @@ -9,6 +9,13 @@ import { import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select"; import { Trash2, Plus, Save, X } from "lucide-react"; import { apiRequest, queryClient } from "@/lib/queryClient"; import { useToast } from "@/hooks/use-toast"; @@ -17,7 +24,7 @@ import { CODE_MAP, getPriceForCodeWithAgeFromMap, } from "@/utils/procedureCombosMapping"; -import { Patient, AppointmentProcedure } from "@repo/db/types"; +import { Patient, AppointmentProcedure, NpiProvider } from "@repo/db/types"; import { useLocation } from "wouter"; import { DeleteConfirmationDialog } from "../ui/deleteDialog"; import { @@ -31,6 +38,7 @@ interface Props { appointmentId: number; patientId: number; patient: Patient; + serviceDate?: string; } export function AppointmentProceduresDialog({ @@ -39,54 +47,88 @@ export function AppointmentProceduresDialog({ appointmentId, patientId, patient, + serviceDate, }: Props) { const { toast } = useToast(); + const [, setLocation] = useLocation(); - // ----------------------------- - // state for manual add - // ----------------------------- + // NPI provider state — stored per-appointment on the procedure rows + const [selectedNpiProviderId, setSelectedNpiProviderId] = useState(null); + + // manual add row state const [manualCode, setManualCode] = useState(""); const [manualLabel, setManualLabel] = useState(""); const [manualFee, setManualFee] = useState(""); const [manualTooth, setManualTooth] = useState(""); const [manualSurface, setManualSurface] = useState(""); - // ----------------------------- - // state for inline edit - // ----------------------------- + // inline edit state const [editingId, setEditingId] = useState(null); const [editRow, setEditRow] = useState>({}); const [clearAllOpen, setClearAllOpen] = useState(false); - // for redirection to claim submission - const [, setLocation] = useLocation(); - - // ----------------------------- - // fetch procedures - // ----------------------------- - const { data: procedures = [], isLoading } = useQuery( - { - queryKey: ["appointment-procedures", appointmentId], - queryFn: async () => { - const res = await apiRequest( - "GET", - `/api/appointment-procedures/${appointmentId}`, - ); - if (!res.ok) throw new Error("Failed to load procedures"); - return res.json(); - }, - enabled: open && !!appointmentId, + // ── NPI Providers ────────────────────────────────────────────── + const { data: npiProviders = [] } = useQuery({ + queryKey: ["/api/npiProviders/"], + queryFn: async () => { + const res = await apiRequest("GET", "/api/npiProviders/"); + if (!res.ok) throw new Error("Failed to fetch NPI providers"); + return res.json(); }, - ); + enabled: open, + }); + + // ── Procedures ───────────────────────────────────────────────── + const { data: procedures = [], isLoading } = useQuery({ + queryKey: ["appointment-procedures", appointmentId], + queryFn: async () => { + const res = await apiRequest("GET", `/api/appointment-procedures/${appointmentId}`); + if (!res.ok) throw new Error("Failed to load procedures"); + return res.json(); + }, + enabled: open && !!appointmentId, + }); + + // Sync NPI provider from saved procedures when they load + useEffect(() => { + if (!procedures.length) return; + const saved = (procedures[0] as any)?.npiProviderId ?? null; + if (saved != null) setSelectedNpiProviderId(Number(saved)); + }, [procedures]); + + // Default NPI provider to Mary Scannell / first when none saved yet + useEffect(() => { + if (selectedNpiProviderId != null || !npiProviders.length) return; + const mary = npiProviders.find((p) => p.providerName.toLowerCase() === "mary scannell"); + setSelectedNpiProviderId((mary ?? npiProviders[0])?.id ?? null); + }, [npiProviders, selectedNpiProviderId]); + + // ── Mutations ────────────────────────────────────────────────── + + const setNpiMutation = useMutation({ + mutationFn: async (npiProviderId: number | null) => { + const res = await apiRequest( + "PUT", + `/api/appointment-procedures/set-npi-provider/${appointmentId}`, + { npiProviderId }, + ); + if (!res.ok) throw new Error("Failed to update provider"); + }, + onSuccess: () => { + toast({ title: "Rendering provider saved" }); + queryClient.invalidateQueries({ queryKey: ["appointment-procedures", appointmentId] }); + }, + onError: (err: any) => { + toast({ title: "Error", description: err.message, variant: "destructive" }); + }, + }); - // ----------------------------- - // mutations - // ----------------------------- const addManualMutation = useMutation({ mutationFn: async () => { const payload = { appointmentId, patientId, + npiProviderId: selectedNpiProviderId ?? null, procedureCode: manualCode, procedureLabel: manualLabel || null, fee: manualFee ? Number(manualFee) : null, @@ -94,101 +136,63 @@ export function AppointmentProceduresDialog({ toothSurface: manualSurface || null, source: "MANUAL", }; - - const res = await apiRequest( - "POST", - "/api/appointment-procedures", - payload, - ); + const res = await apiRequest("POST", "/api/appointment-procedures", payload); if (!res.ok) throw new Error("Failed to add procedure"); return res.json(); }, onSuccess: () => { toast({ title: "Procedure added" }); - setManualCode(""); - setManualLabel(""); - setManualFee(""); - setManualTooth(""); - setManualSurface(""); - queryClient.invalidateQueries({ - queryKey: ["appointment-procedures", appointmentId], - }); + setManualCode(""); setManualLabel(""); setManualFee(""); + setManualTooth(""); setManualSurface(""); + queryClient.invalidateQueries({ queryKey: ["appointment-procedures", appointmentId] }); }, onError: (err: any) => { - toast({ - title: "Error", - description: err.message ?? "Failed to add procedure", - variant: "destructive", - }); + toast({ title: "Error", description: err.message ?? "Failed to add procedure", variant: "destructive" }); }, }); const bulkAddMutation = useMutation({ mutationFn: async (rows: any[]) => { - const res = await apiRequest( - "POST", - "/api/appointment-procedures/bulk", - rows, - ); + const res = await apiRequest("POST", "/api/appointment-procedures/bulk", rows); if (!res.ok) throw new Error("Failed to add combo procedures"); return res.json(); }, onSuccess: () => { toast({ title: "Combo added" }); - queryClient.invalidateQueries({ - queryKey: ["appointment-procedures", appointmentId], - }); + queryClient.invalidateQueries({ queryKey: ["appointment-procedures", appointmentId] }); }, }); const deleteMutation = useMutation({ mutationFn: async (id: number) => { - const res = await apiRequest( - "DELETE", - `/api/appointment-procedures/${id}`, - ); + const res = await apiRequest("DELETE", `/api/appointment-procedures/${id}`); if (!res.ok) throw new Error("Failed to delete"); }, onSuccess: () => { toast({ title: "Deleted" }); - queryClient.invalidateQueries({ - queryKey: ["appointment-procedures", appointmentId], - }); + queryClient.invalidateQueries({ queryKey: ["appointment-procedures", appointmentId] }); }, }); const clearAllMutation = useMutation({ mutationFn: async () => { - const res = await apiRequest( - "DELETE", - `/api/appointment-procedures/clear/${appointmentId}`, - ); + const res = await apiRequest("DELETE", `/api/appointment-procedures/clear/${appointmentId}`); if (!res.ok) throw new Error("Failed to clear procedures"); }, onSuccess: () => { toast({ title: "All procedures cleared" }); - queryClient.invalidateQueries({ - queryKey: ["appointment-procedures", appointmentId], - }); + queryClient.invalidateQueries({ queryKey: ["appointment-procedures", appointmentId] }); setClearAllOpen(false); }, onError: (err: any) => { - toast({ - title: "Error", - description: err.message ?? "Failed to clear procedures", - variant: "destructive", - }); + toast({ title: "Error", description: err.message ?? "Failed to clear procedures", variant: "destructive" }); }, }); const updateMutation = useMutation({ mutationFn: async () => { if (!editingId) return; - const res = await apiRequest( - "PUT", - `/api/appointment-procedures/${editingId}`, - editRow, - ); + const res = await apiRequest("PUT", `/api/appointment-procedures/${editingId}`, editRow); if (!res.ok) throw new Error("Failed to update"); return res.json(); }, @@ -196,55 +200,42 @@ export function AppointmentProceduresDialog({ toast({ title: "Updated" }); setEditingId(null); setEditRow({}); - queryClient.invalidateQueries({ - queryKey: ["appointment-procedures", appointmentId], - }); + queryClient.invalidateQueries({ queryKey: ["appointment-procedures", appointmentId] }); }, }); - // ----------------------------- - // handlers - // ----------------------------- + // ── Handlers ─────────────────────────────────────────────────── + const handleAddCombo = (comboKey: string) => { const combo = PROCEDURE_COMBOS[comboKey]; if (!combo || !patient?.dateOfBirth) return; - const serviceDate = new Date(); const dob = patient.dateOfBirth; + const ref = new Date(); + const birth = new Date(dob as any); + let age = ref.getFullYear() - birth.getFullYear(); + const hadBirthday = + ref.getMonth() > birth.getMonth() || + (ref.getMonth() === birth.getMonth() && ref.getDate() >= birth.getDate()); + if (!hadBirthday) age -= 1; - const age = (() => { - const birth = new Date(dob); - const ref = new Date(serviceDate); - let a = ref.getFullYear() - birth.getFullYear(); - const hadBirthday = - ref.getMonth() > birth.getMonth() || - (ref.getMonth() === birth.getMonth() && - ref.getDate() >= birth.getDate()); - if (!hadBirthday) a -= 1; - return a; - })(); - - const rows = combo.codes.map((code: string, idx: number) => { - const priceDecimal = getPriceForCodeWithAgeFromMap(CODE_MAP, code, age); - - return { - appointmentId, - patientId, - procedureCode: code, - procedureLabel: combo.label, - fee: priceDecimal.toNumber(), - source: "COMBO", - comboKey: comboKey, - toothNumber: combo.toothNumbers?.[idx] ?? null, - }; - }); + const rows = combo.codes.map((code: string, idx: number) => ({ + appointmentId, + patientId, + npiProviderId: selectedNpiProviderId ?? null, + procedureCode: code, + procedureLabel: combo.label, + fee: getPriceForCodeWithAgeFromMap(CODE_MAP, code, age).toNumber(), + source: "COMBO", + comboKey, + toothNumber: combo.toothNumbers?.[idx] ?? null, + })); bulkAddMutation.mutate(rows); }; const startEdit = (row: AppointmentProcedure) => { if (!row.id) return; - setEditingId(row.id); setEditRow({ procedureCode: row.procedureCode, @@ -255,10 +246,7 @@ export function AppointmentProceduresDialog({ }); }; - const cancelEdit = () => { - setEditingId(null); - setEditRow({}); - }; + const cancelEdit = () => { setEditingId(null); setEditRow({}); }; const handleDirectClaim = () => { setLocation(`/claims?appointmentId=${appointmentId}&mode=direct`); @@ -270,256 +258,146 @@ export function AppointmentProceduresDialog({ onOpenChange(false); }; - // ----------------------------- - // UI - // ----------------------------- + const selectedProvider = npiProviders.find((p) => p.id === selectedNpiProviderId); + + // ── UI ───────────────────────────────────────────────────────── return ( { - if (clearAllOpen) { - e.preventDefault(); // block only when delete dialog is open - } - }} - onInteractOutside={(e) => { - if (clearAllOpen) { - e.preventDefault(); // block only when delete dialog is open - } - }} + onPointerDownOutside={(e) => { if (clearAllOpen) e.preventDefault(); }} + onInteractOutside={(e) => { if (clearAllOpen) e.preventDefault(); }} > Appointment Procedures + {serviceDate && {serviceDate}} - {/* ================= COMBOS ================= */} -
- { - handleAddCombo(comboKey); - }} - /> - - { - handleAddCombo(comboKey); - }} - /> + {/* ── Rendering Provider ─────────────────────────────── */} +
+
+ + +
+ + {selectedProvider && ( + + ✓ {selectedProvider.providerName} + + )}
- {/* ================= MANUAL ADD ================= */} + {/* ── Combos ─────────────────────────────────────────── */} +
+ + +
+ + {/* ── Manual Add ─────────────────────────────────────── */}
Add Manual Procedure
-
- setManualCode(e.target.value)} - placeholder="D0120" - /> + setManualCode(e.target.value)} placeholder="D0120" />
-
- setManualLabel(e.target.value)} - placeholder="Exam" - /> + setManualLabel(e.target.value)} placeholder="Exam" />
-
- setManualFee(e.target.value)} - placeholder="100" - type="number" - /> + setManualFee(e.target.value)} placeholder="100" type="number" />
-
- setManualTooth(e.target.value)} - placeholder="14" - /> + setManualTooth(e.target.value)} placeholder="14" />
-
- setManualSurface(e.target.value)} - placeholder="MO" - /> + setManualSurface(e.target.value)} placeholder="MO" />
-
-
- {/* ================= LIST ================= */} + {/* ── Procedures List ─────────────────────────────────── */}
-
Selected Procedures
- -
- {/* ===== TABLE HEADER ===== */}
-
Code
-
Label
-
Fee
-
Tooth
-
Surface
-
Edit
-
Delete
+
Code
Label
Fee
Tooth
Surface
+
Edit
Delete
- {isLoading && ( -
- Loading... -
- )} - + {isLoading &&
Loading...
} {!isLoading && procedures.length === 0 && ( -
- No procedures added -
+
No procedures added yet
)} {procedures.map((p) => ( -
+
{editingId === p.id ? ( <> - - setEditRow({ - ...editRow, - procedureCode: e.target.value, - }) - } - /> - - setEditRow({ - ...editRow, - procedureLabel: e.target.value, - }) - } - /> - - setEditRow({ ...editRow, fee: Number(e.target.value) }) - } - /> - - - setEditRow({ - ...editRow, - toothNumber: e.target.value, - }) - } - /> - - setEditRow({ - ...editRow, - toothSurface: e.target.value, - }) - } - /> + setEditRow({ ...editRow, procedureCode: e.target.value })} /> + setEditRow({ ...editRow, procedureLabel: e.target.value })} /> + setEditRow({ ...editRow, fee: Number(e.target.value) })} /> + setEditRow({ ...editRow, toothNumber: e.target.value })} /> + setEditRow({ ...editRow, toothSurface: e.target.value })} />
- +
-
- +
) : ( <> -
- {p.procedureCode} -
-
- {p.procedureLabel} -
-
- {p.fee !== null && p.fee !== undefined - ? String(p.fee) - : ""} -
- +
{p.procedureCode}
+
{p.procedureLabel}
+
{p.fee !== null && p.fee !== undefined ? String(p.fee) : ""}
{p.toothNumber}
{p.toothSurface}
-
- +
-
-
@@ -530,7 +408,7 @@ export function AppointmentProceduresDialog({
- {/* ================= FOOTER ================= */} + {/* ── Footer ─────────────────────────────────────────── */}
-
- - +
@@ -561,10 +435,7 @@ export function AppointmentProceduresDialog({ isOpen={clearAllOpen} entityName="all procedures for this appointment" onCancel={() => setClearAllOpen(false)} - onConfirm={() => { - setClearAllOpen(false); - clearAllMutation.mutate(); - }} + onConfirm={() => { setClearAllOpen(false); clearAllMutation.mutate(); }} />
); diff --git a/apps/Frontend/src/components/claims/claim-form.tsx b/apps/Frontend/src/components/claims/claim-form.tsx index 0d7732d..a21d139 100755 --- a/apps/Frontend/src/components/claims/claim-form.tsx +++ b/apps/Frontend/src/components/claims/claim-form.tsx @@ -59,11 +59,14 @@ import { DirectComboButtons, RegularComboButtons, } from "@/components/procedure/procedure-combo-buttons"; +import { Switch } from "@/components/ui/switch"; interface ClaimFormProps { patientId: number; appointmentId?: number; autoSubmit?: boolean; + /** When true: form saves to AppointmentProcedure (Select Procedures flow), shows only Save button */ + proceduresOnly?: boolean; onSubmit: (data: ClaimFormData) => Promise; onHandleAppointmentSubmit: ( appointmentData: InsertAppointment | UpdateAppointment, @@ -78,6 +81,7 @@ export function ClaimForm({ patientId, appointmentId, autoSubmit, + proceduresOnly = false, onHandleAppointmentSubmit, onHandleUpdatePatient, onHandleForMHSeleniumClaim, @@ -90,8 +94,16 @@ export function ClaimForm({ const [prefillDone, setPrefillDone] = useState(false); const autoSubmittedRef = useRef(false); + // When an existing claim is loaded for the appointment, store its ID so + // the form submits an update instead of creating a new claim. + const [existingClaimId, setExistingClaimId] = useState(null); + const [directSubmitEnabled, setDirectSubmitEnabled] = useState(false); const [patient, setPatient] = useState(null); + // staffId from the appointment column — used for claim creation, not shown in UI + const [appointmentStaffId, setAppointmentStaffId] = useState(null); + // npiProviderId loaded from AppointmentProcedure (2b) — restored to form when npiProviders load + const [savedProcNpiId, setSavedProcNpiId] = useState(null); // Query patient based on given patient id const { @@ -211,6 +223,12 @@ export function ClaimForm({ } const appointment = await res.json(); + + // Capture the column staffId from the appointment + if (!cancelled && appointment?.staffId) { + setAppointmentStaffId(Number(appointment.staffId)); + } + // appointment.date is expected to be either "YYYY-MM-DD" or an ISO string. const rawDate = appointment?.date ?? appointment?.day ?? ""; if (!rawDate) return; @@ -256,9 +274,104 @@ export function ClaimForm({ // - // 2. effect - prefill proceduresCodes (if exists for appointment) into serviceLines + // 2a. Load existing saved claim for this appointment (if any). + // Skipped in proceduresOnly mode — that mode always reads from AppointmentProcedure. useEffect(() => { if (!appointmentId) return; + if (proceduresOnly) return; + let cancelled = false; + + (async () => { + try { + const res = await apiRequest( + "GET", + `/api/claims/by-appointment/${appointmentId}`, + ); + if (!res.ok) return; // 404 = no existing claim, that's fine + + const claim = await res.json(); + if (cancelled || !claim?.id) return; + + setExistingClaimId(claim.id); + + // Restore service date + const rawDate = claim.serviceDate ?? ""; + const claimDate = rawDate + ? String(rawDate).split("T")[0] ?? "" + : ""; + if (claimDate) { + try { + setServiceDateValue(parseLocalDate(claimDate)); + setServiceDate(claimDate); + } catch {} + } + + // Restore service lines + const mappedLines = (claim.serviceLines ?? []).map((sl: any) => ({ + procedureCode: sl.procedureCode ?? "", + procedureDate: sl.procedureDate + ? String(sl.procedureDate).split("T")[0] + : claimDate, + quad: sl.quad ?? "", + arch: sl.arch ?? "", + toothNumber: sl.toothNumber ?? "", + toothSurface: sl.toothSurface ?? "", + totalBilled: new Decimal(Number(sl.totalBilled ?? 0)), + totalAdjusted: new Decimal(Number(sl.totalAdjusted ?? 0)), + totalPaid: new Decimal(Number(sl.totalPaid ?? 0)), + })); + + setForm((prev) => ({ + ...prev, + claimId: claim.id, + serviceDate: claimDate || prev.serviceDate, + serviceLines: mappedLines.length > 0 ? mappedLines : prev.serviceLines, + remarks: claim.remarks ?? "", + missingTeethStatus: (claim.missingTeethStatus as MissingTeethStatus) ?? "No_missing", + missingTeeth: (claim.missingTeeth as Record) ?? {}, + insuranceProvider: claim.insuranceProvider ?? "", + ...(claim.staffId ? { staffId: claim.staffId } : {}), + claimFiles: claim.claimFiles ?? [], + })); + + // Restore staff selection + if (claim.staffId && staffMembersRaw.length > 0) { + const matchedStaff = staffMembersRaw.find( + (s) => Number(s.id) === Number(claim.staffId), + ); + if (matchedStaff) setStaff(matchedStaff); + } + + // Restore NPI provider selection + if ((claim as any).npiProviderId && npiProviders.length > 0) { + const matchedNpi = npiProviders.find( + (p) => Number(p.id) === Number((claim as any).npiProviderId), + ); + if (matchedNpi) { + setForm((prev) => ({ + ...prev, + npiProvider: { + npiNumber: matchedNpi.npiNumber, + providerName: matchedNpi.providerName, + }, + })); + } + } + + setPrefillDone(true); + } catch (err) { + // no existing claim — silently continue + } + })(); + + return () => { cancelled = true; }; + }, [appointmentId]); + + // 2b. Prefill procedures from AppointmentProcedure records. + // Skipped when an existing claim was already loaded above. + useEffect(() => { + if (!appointmentId) return; + if (existingClaimId) return; // existing claim takes priority let cancelled = false; @@ -291,6 +404,20 @@ export function ClaimForm({ serviceLines: mappedLines, })); + // Restore NPI provider from saved procedures + if (data.npiProviderId) { + const npiId = Number(data.npiProviderId); + setSavedProcNpiId(npiId); + // Apply immediately if providers are already loaded + const matched = npiProviders.find((p) => p.id === npiId); + if (matched) { + setForm((prev) => ({ + ...prev, + npiProvider: { npiNumber: matched.npiNumber, providerName: matched.providerName }, + })); + } + } + setPrefillDone(true); } catch (err) { console.error("Failed to prefill procedures:", err); @@ -300,7 +427,20 @@ export function ClaimForm({ return () => { cancelled = true; }; - }, [appointmentId, serviceDate]); + }, [appointmentId, serviceDate, existingClaimId]); + + // Restore NPI provider from saved procedures when npiProviders list loads after 2b + useEffect(() => { + if (!savedProcNpiId || !npiProviders.length) return; + if (form.npiProvider?.npiNumber) return; // already set + const matched = npiProviders.find((p) => p.id === savedProcNpiId); + if (matched) { + setForm((prev) => ({ + ...prev, + npiProvider: { npiNumber: matched.npiNumber, providerName: matched.providerName }, + })); + } + }, [savedProcNpiId, npiProviders]); // Update service date when calendar date changes const onServiceDateChange = (date: Date | undefined) => { @@ -421,7 +561,7 @@ export function ClaimForm({ patientId: patientId || 0, appointmentId: 0, userId: Number(user?.id), - staffId: Number(staff?.id), + staffId: appointmentStaffId ?? Number(staff?.id), patientName: `${patient?.firstName} ${patient?.lastName}`.trim(), memberId: patient?.insuranceId ?? "", dateOfBirth: normalizeToIsoDateString(patient?.dateOfBirth), @@ -602,7 +742,7 @@ export function ClaimForm({ const appointmentData = { patientId: patientId, date: serviceDate, - staffId: staff?.id, + staffId: appointmentStaffId ?? staff?.id, }; const created = await onHandleAppointmentSubmit(appointmentData); @@ -648,7 +788,7 @@ export function ClaimForm({ const createdClaim = await onSubmit({ ...formToCreateClaim, serviceLines: filteredServiceLines, - staffId: Number(staff?.id), + staffId: appointmentStaffId ?? Number(staff?.id), patientId: patientId, insuranceProvider: "MassHealth", appointmentId: appointmentIdToUse!, @@ -660,7 +800,7 @@ export function ClaimForm({ ...f, dateOfBirth: toMMDDYYYY(f.dateOfBirth), serviceLines: filteredServiceLines, - staffId: Number(staff?.id), + staffId: appointmentStaffId ?? Number(staff?.id), npiProvider: f.npiProvider, patientId: patientId, insuranceProvider: "Mass Health", @@ -741,7 +881,7 @@ export function ClaimForm({ ...f, dateOfBirth: toMMDDYYYY(f.dateOfBirth), serviceLines: filteredServiceLines, - staffId: Number(staff?.id), + staffId: appointmentStaffId ?? Number(staff?.id), npiProvider: f.npiProvider, patientId: patientId, insuranceProvider: "Mass Health", @@ -791,7 +931,7 @@ export function ClaimForm({ const appointmentData = { patientId: patientId, date: serviceDate, - staffId: staff?.id, + staffId: appointmentStaffId ?? staff?.id, }; const created = await onHandleAppointmentSubmit(appointmentData); @@ -821,7 +961,7 @@ export function ClaimForm({ // 3. Create Claim(if not) // Filter out empty service lines (empty procedureCode) - const { uploadedFiles, insuranceSiteKey, ...formToCreateClaim } = form; + const { uploadedFiles, insuranceSiteKey, npiProvider: _npi, ...formToCreateClaim } = form; // build claimFiles metadata from uploadedFiles (only filename + mimeType) const claimFilesMeta: ClaimFileMeta[] = (uploadedFiles || []).map((f) => ({ @@ -832,7 +972,7 @@ export function ClaimForm({ const createdClaim = await onSubmit({ ...formToCreateClaim, serviceLines: filteredServiceLines, - staffId: Number(staff?.id), + staffId: appointmentStaffId ?? Number(staff?.id), patientId: patientId, insuranceProvider: "MassHealth", appointmentId: appointmentIdToUse!, @@ -843,6 +983,137 @@ export function ClaimForm({ onClose(); }; + const uploadAttachmentsToLocalFolder = async (files: File[]): Promise => { + if (!files.length) return []; + + const patientName = patient?.firstName && patient?.lastName + ? `${patient.firstName} ${patient.lastName}` + : patient?.firstName ?? `patient-${patientId}`; + + const formData = new FormData(); + formData.append("patientName", patientName); + files.forEach((f) => formData.append("files", f)); + + const res = await apiRequest("POST", "/api/claims/upload-attachments", formData); + const data = await res.json(); + return (data.data ?? []) as ClaimFileMeta[]; + }; + + const handleSave = async () => { + const filteredServiceLines = form.serviceLines.filter( + (line) => (line.procedureCode ?? "").trim() !== "", + ); + + if (filteredServiceLines.length === 0) { + toast({ + title: "No procedure codes", + description: "Please add at least one procedure code before saving.", + variant: "destructive", + }); + return; + } + + const missingFields: string[] = []; + if (!form.memberId?.trim()) missingFields.push("Member ID"); + if (!form.dateOfBirth?.trim()) missingFields.push("Date of Birth"); + if (missingFields.length > 0) { + toast({ + title: "Missing Required Fields", + description: `Please fill out: ${missingFields.join(", ")}`, + variant: "destructive", + }); + return; + } + + let appointmentIdToUse = appointmentId; + + if (appointmentIdToUse == null) { + const appointmentData = { + patientId: patientId, + date: serviceDate, + staffId: appointmentStaffId ?? staff?.id, + }; + const created = await onHandleAppointmentSubmit(appointmentData); + if (typeof created === "number" && created > 0) { + appointmentIdToUse = created; + } else if (created && typeof (created as any).id === "number") { + appointmentIdToUse = (created as any).id; + } + } + + const { uploadedFiles, insuranceSiteKey, npiProvider, ...formToSave } = form; + + const claimFilesMeta: ClaimFileMeta[] = uploadedFiles?.length + ? await uploadAttachmentsToLocalFolder(uploadedFiles) + : []; + + // Find the npiProviderId matching the currently selected NPI provider + const selectedNpiProviderId = npiProvider?.npiNumber + ? npiProviders.find((p) => p.npiNumber === npiProvider.npiNumber)?.id ?? null + : null; + + try { + await onSubmit({ + ...formToSave, + serviceLines: filteredServiceLines, + staffId: appointmentStaffId ?? Number(staff?.id), + patientId: patientId, + insuranceProvider: "MassHealth", + appointmentId: appointmentIdToUse!, + claimFiles: claimFilesMeta, + ...(selectedNpiProviderId ? { npiProviderId: selectedNpiProviderId } : {}), + isDraft: true, + }); + toast({ title: "Saved", description: "Claim saved successfully." }); + } catch (err: any) { + toast({ + title: "Save failed", + description: err?.message ?? "Failed to save claim.", + variant: "destructive", + }); + } + }; + + // Saves CDT codes + NPI provider to AppointmentProcedure (proceduresOnly mode) + const handleProceduresSave = async () => { + if (!appointmentId || !patientId) { + toast({ title: "Missing appointment", description: "Cannot save without an appointment.", variant: "destructive" }); + return; + } + + const filteredServiceLines = form.serviceLines.filter( + (line) => (line.procedureCode ?? "").trim() !== "", + ); + if (filteredServiceLines.length === 0) { + toast({ title: "No procedure codes", description: "Please add at least one procedure code.", variant: "destructive" }); + return; + } + + const selectedNpiProviderId = form.npiProvider?.npiNumber + ? (npiProviders.find((p) => p.npiNumber === form.npiProvider!.npiNumber)?.id ?? null) + : null; + + try { + const res = await apiRequest("POST", "/api/appointment-procedures/save-for-appointment", { + appointmentId, + patientId, + npiProviderId: selectedNpiProviderId, + procedures: filteredServiceLines.map((l) => ({ + procedureCode: l.procedureCode, + fee: Number(l.totalBilled) || null, + toothNumber: l.toothNumber || null, + toothSurface: l.toothSurface || null, + })), + }); + const data = await res.json(); + if (!data.success) throw new Error("Failed to save procedures"); + toast({ title: "Procedures saved", description: `${data.count} procedure(s) saved.` }); + onClose(); + } catch (err: any) { + toast({ title: "Save failed", description: err?.message ?? "Failed to save procedures.", variant: "destructive" }); + } + }; + // for direct combo button. const applyComboAndThenMH = async ( comboId: keyof typeof PROCEDURE_COMBOS, @@ -1020,47 +1291,6 @@ export function ClaimForm({ /> - {/* Treating doctor */} - - - {/* Rendering Npi Provider */}