feat: BCBS AI column claim fills ADA form, saves to Documents; form fixes
- Claim for column with AI: BCBS patients auto-generate the 2024 ADA form (no tab) and save it to the patient's Documents > Claims folder; the manual BCBS button saves there too (new POST /api/claims/:id/ada-form) - Saved BCBS form sets the claim to REVIEW; appointments with a claim number or REVIEW/APPROVED status show as claimed (dark gray) - CDT lookup: "comp on #18 O, 20 O, 21 O" applies composite to every tooth - BCBS fee schedule (procedureCodesBCBS.json, copied from DDMA prices) - Office Contact: Legal Name field; "Dental Office Name (DBA)" label - ADA form: 48 = legal name, DBA, address; 56 = address only; 53 date = claim date; 23 and 26 left blank; 43 = No unless appointment notes say a prosthesis is replaced (then Yes, with 44 prior date when given) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -5,6 +5,7 @@ import type { Prisma } from '../../../generated/prisma';
|
||||
const makeSchema = () => z.object({
|
||||
id: z.literal(true).optional(),
|
||||
userId: z.literal(true).optional(),
|
||||
legalName: z.literal(true).optional(),
|
||||
officeName: z.literal(true).optional(),
|
||||
receptionistName: z.literal(true).optional(),
|
||||
dentistName: z.literal(true).optional(),
|
||||
|
||||
@@ -5,6 +5,7 @@ import { SortOrderSchema } from '../enums/SortOrder.schema'
|
||||
const makeSchema = () => z.object({
|
||||
id: SortOrderSchema.optional(),
|
||||
userId: SortOrderSchema.optional(),
|
||||
legalName: SortOrderSchema.optional(),
|
||||
officeName: SortOrderSchema.optional(),
|
||||
receptionistName: SortOrderSchema.optional(),
|
||||
dentistName: SortOrderSchema.optional(),
|
||||
|
||||
@@ -3,6 +3,7 @@ import type { Prisma } from '../../../generated/prisma';
|
||||
import { UserCreateNestedOneWithoutOfficeContactInputObjectSchema as UserCreateNestedOneWithoutOfficeContactInputObjectSchema } from './UserCreateNestedOneWithoutOfficeContactInput.schema'
|
||||
|
||||
const makeSchema = () => z.object({
|
||||
legalName: z.string().optional().nullable(),
|
||||
officeName: z.string().optional().nullable(),
|
||||
receptionistName: z.string().optional().nullable(),
|
||||
dentistName: z.string().optional().nullable(),
|
||||
|
||||
@@ -5,6 +5,7 @@ import type { Prisma } from '../../../generated/prisma';
|
||||
const makeSchema = () => z.object({
|
||||
id: z.number().int().optional(),
|
||||
userId: z.number().int(),
|
||||
legalName: z.string().optional().nullable(),
|
||||
officeName: z.string().optional().nullable(),
|
||||
receptionistName: z.string().optional().nullable(),
|
||||
dentistName: z.string().optional().nullable(),
|
||||
|
||||
@@ -3,6 +3,7 @@ import type { Prisma } from '../../../generated/prisma';
|
||||
|
||||
|
||||
const makeSchema = () => z.object({
|
||||
legalName: z.string().optional().nullable(),
|
||||
officeName: z.string().optional().nullable(),
|
||||
receptionistName: z.string().optional().nullable(),
|
||||
dentistName: z.string().optional().nullable(),
|
||||
|
||||
@@ -5,6 +5,7 @@ import type { Prisma } from '../../../generated/prisma';
|
||||
const makeSchema = () => z.object({
|
||||
id: z.literal(true).optional(),
|
||||
userId: z.literal(true).optional(),
|
||||
legalName: z.literal(true).optional(),
|
||||
officeName: z.literal(true).optional(),
|
||||
receptionistName: z.literal(true).optional(),
|
||||
dentistName: z.literal(true).optional(),
|
||||
|
||||
@@ -5,6 +5,7 @@ import { SortOrderSchema } from '../enums/SortOrder.schema'
|
||||
const makeSchema = () => z.object({
|
||||
id: SortOrderSchema.optional(),
|
||||
userId: SortOrderSchema.optional(),
|
||||
legalName: SortOrderSchema.optional(),
|
||||
officeName: SortOrderSchema.optional(),
|
||||
receptionistName: SortOrderSchema.optional(),
|
||||
dentistName: SortOrderSchema.optional(),
|
||||
|
||||
@@ -5,6 +5,7 @@ import type { Prisma } from '../../../generated/prisma';
|
||||
const makeSchema = () => z.object({
|
||||
id: z.literal(true).optional(),
|
||||
userId: z.literal(true).optional(),
|
||||
legalName: z.literal(true).optional(),
|
||||
officeName: z.literal(true).optional(),
|
||||
receptionistName: z.literal(true).optional(),
|
||||
dentistName: z.literal(true).optional(),
|
||||
|
||||
@@ -5,6 +5,7 @@ import { SortOrderSchema } from '../enums/SortOrder.schema'
|
||||
const makeSchema = () => z.object({
|
||||
id: SortOrderSchema.optional(),
|
||||
userId: SortOrderSchema.optional(),
|
||||
legalName: SortOrderSchema.optional(),
|
||||
officeName: SortOrderSchema.optional(),
|
||||
receptionistName: SortOrderSchema.optional(),
|
||||
dentistName: SortOrderSchema.optional(),
|
||||
|
||||
@@ -11,6 +11,7 @@ import { OfficeContactSumOrderByAggregateInputObjectSchema as OfficeContactSumOr
|
||||
const makeSchema = () => z.object({
|
||||
id: SortOrderSchema.optional(),
|
||||
userId: SortOrderSchema.optional(),
|
||||
legalName: z.union([SortOrderSchema, z.lazy(() => SortOrderInputObjectSchema)]).optional(),
|
||||
officeName: z.union([SortOrderSchema, z.lazy(() => SortOrderInputObjectSchema)]).optional(),
|
||||
receptionistName: z.union([SortOrderSchema, z.lazy(() => SortOrderInputObjectSchema)]).optional(),
|
||||
dentistName: z.union([SortOrderSchema, z.lazy(() => SortOrderInputObjectSchema)]).optional(),
|
||||
|
||||
@@ -7,6 +7,7 @@ import { UserOrderByWithRelationInputObjectSchema as UserOrderByWithRelationInpu
|
||||
const makeSchema = () => z.object({
|
||||
id: SortOrderSchema.optional(),
|
||||
userId: SortOrderSchema.optional(),
|
||||
legalName: z.union([SortOrderSchema, z.lazy(() => SortOrderInputObjectSchema)]).optional(),
|
||||
officeName: z.union([SortOrderSchema, z.lazy(() => SortOrderInputObjectSchema)]).optional(),
|
||||
receptionistName: z.union([SortOrderSchema, z.lazy(() => SortOrderInputObjectSchema)]).optional(),
|
||||
dentistName: z.union([SortOrderSchema, z.lazy(() => SortOrderInputObjectSchema)]).optional(),
|
||||
|
||||
+1
@@ -9,6 +9,7 @@ const officecontactscalarwherewithaggregatesinputSchema = z.object({
|
||||
NOT: z.union([z.lazy(() => OfficeContactScalarWhereWithAggregatesInputObjectSchema), z.lazy(() => OfficeContactScalarWhereWithAggregatesInputObjectSchema).array()]).optional(),
|
||||
id: z.union([z.lazy(() => IntWithAggregatesFilterObjectSchema), z.number().int()]).optional(),
|
||||
userId: z.union([z.lazy(() => IntWithAggregatesFilterObjectSchema), z.number().int()]).optional(),
|
||||
legalName: z.union([z.lazy(() => StringNullableWithAggregatesFilterObjectSchema), z.string()]).optional().nullable(),
|
||||
officeName: z.union([z.lazy(() => StringNullableWithAggregatesFilterObjectSchema), z.string()]).optional().nullable(),
|
||||
receptionistName: z.union([z.lazy(() => StringNullableWithAggregatesFilterObjectSchema), z.string()]).optional().nullable(),
|
||||
dentistName: z.union([z.lazy(() => StringNullableWithAggregatesFilterObjectSchema), z.string()]).optional().nullable(),
|
||||
|
||||
@@ -5,6 +5,7 @@ import { UserArgsObjectSchema as UserArgsObjectSchema } from './UserArgs.schema'
|
||||
const makeSchema = () => z.object({
|
||||
id: z.boolean().optional(),
|
||||
userId: z.boolean().optional(),
|
||||
legalName: z.boolean().optional(),
|
||||
officeName: z.boolean().optional(),
|
||||
receptionistName: z.boolean().optional(),
|
||||
dentistName: z.boolean().optional(),
|
||||
|
||||
@@ -5,6 +5,7 @@ import type { Prisma } from '../../../generated/prisma';
|
||||
const makeSchema = () => z.object({
|
||||
id: z.number().int().optional(),
|
||||
userId: z.number().int(),
|
||||
legalName: z.string().optional().nullable(),
|
||||
officeName: z.string().optional().nullable(),
|
||||
receptionistName: z.string().optional().nullable(),
|
||||
dentistName: z.string().optional().nullable(),
|
||||
|
||||
+1
@@ -4,6 +4,7 @@ import type { Prisma } from '../../../generated/prisma';
|
||||
|
||||
const makeSchema = () => z.object({
|
||||
id: z.number().int().optional(),
|
||||
legalName: z.string().optional().nullable(),
|
||||
officeName: z.string().optional().nullable(),
|
||||
receptionistName: z.string().optional().nullable(),
|
||||
dentistName: z.string().optional().nullable(),
|
||||
|
||||
@@ -6,6 +6,7 @@ import { NullableStringFieldUpdateOperationsInputObjectSchema as NullableStringF
|
||||
const makeSchema = () => z.object({
|
||||
id: z.union([z.number().int(), z.lazy(() => IntFieldUpdateOperationsInputObjectSchema)]).optional(),
|
||||
userId: z.union([z.number().int(), z.lazy(() => IntFieldUpdateOperationsInputObjectSchema)]).optional(),
|
||||
legalName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
officeName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
receptionistName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
dentistName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
|
||||
@@ -6,6 +6,7 @@ import { NullableStringFieldUpdateOperationsInputObjectSchema as NullableStringF
|
||||
const makeSchema = () => z.object({
|
||||
id: z.union([z.number().int(), z.lazy(() => IntFieldUpdateOperationsInputObjectSchema)]).optional(),
|
||||
userId: z.union([z.number().int(), z.lazy(() => IntFieldUpdateOperationsInputObjectSchema)]).optional(),
|
||||
legalName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
officeName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
receptionistName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
dentistName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
|
||||
+1
@@ -5,6 +5,7 @@ import { NullableStringFieldUpdateOperationsInputObjectSchema as NullableStringF
|
||||
|
||||
const makeSchema = () => z.object({
|
||||
id: z.union([z.number().int(), z.lazy(() => IntFieldUpdateOperationsInputObjectSchema)]).optional(),
|
||||
legalName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
officeName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
receptionistName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
dentistName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
|
||||
@@ -4,6 +4,7 @@ import { NullableStringFieldUpdateOperationsInputObjectSchema as NullableStringF
|
||||
import { UserUpdateOneRequiredWithoutOfficeContactNestedInputObjectSchema as UserUpdateOneRequiredWithoutOfficeContactNestedInputObjectSchema } from './UserUpdateOneRequiredWithoutOfficeContactNestedInput.schema'
|
||||
|
||||
const makeSchema = () => z.object({
|
||||
legalName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
officeName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
receptionistName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
dentistName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
|
||||
@@ -3,6 +3,7 @@ import type { Prisma } from '../../../generated/prisma';
|
||||
import { NullableStringFieldUpdateOperationsInputObjectSchema as NullableStringFieldUpdateOperationsInputObjectSchema } from './NullableStringFieldUpdateOperationsInput.schema'
|
||||
|
||||
const makeSchema = () => z.object({
|
||||
legalName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
officeName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
receptionistName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
dentistName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
|
||||
@@ -3,6 +3,7 @@ import type { Prisma } from '../../../generated/prisma';
|
||||
import { NullableStringFieldUpdateOperationsInputObjectSchema as NullableStringFieldUpdateOperationsInputObjectSchema } from './NullableStringFieldUpdateOperationsInput.schema'
|
||||
|
||||
const makeSchema = () => z.object({
|
||||
legalName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
officeName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
receptionistName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
dentistName: z.union([z.string(), z.lazy(() => NullableStringFieldUpdateOperationsInputObjectSchema)]).optional().nullable(),
|
||||
|
||||
@@ -11,6 +11,7 @@ const officecontactwhereinputSchema = z.object({
|
||||
NOT: z.union([z.lazy(() => OfficeContactWhereInputObjectSchema), z.lazy(() => OfficeContactWhereInputObjectSchema).array()]).optional(),
|
||||
id: z.union([z.lazy(() => IntFilterObjectSchema), z.number().int()]).optional(),
|
||||
userId: z.union([z.lazy(() => IntFilterObjectSchema), z.number().int()]).optional(),
|
||||
legalName: z.union([z.lazy(() => StringNullableFilterObjectSchema), z.string()]).optional().nullable(),
|
||||
officeName: z.union([z.lazy(() => StringNullableFilterObjectSchema), z.string()]).optional().nullable(),
|
||||
receptionistName: z.union([z.lazy(() => StringNullableFilterObjectSchema), z.string()]).optional().nullable(),
|
||||
dentistName: z.union([z.lazy(() => StringNullableFilterObjectSchema), z.string()]).optional().nullable(),
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user