Adds an optional Provider (NPI) select to the Edit Appointment form, sourced from Settings > NPI Providers. The AI "Claim for Column" batch flow now prefers the appointment's own provider when resolving which provider Selenium should select on the insurance site (e.g. MassHealth rendering provider dropdown), falling back to the existing per-procedure selection, active claim, or first configured provider. Also resyncs packages/db's committed compiled schema/client artifacts with their .ts sources — they had drifted out of sync (some untouched since July), which was silently stripping the new npiProviderId field via stale .strict() zod schemas. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
41 lines
1.4 KiB
TypeScript
Executable File
41 lines
1.4 KiB
TypeScript
Executable File
import * as z from 'zod';
|
|
|
|
import type { Prisma } from '../../generated/prisma';
|
|
|
|
import Decimal from "decimal.js";
|
|
|
|
// DECIMAL HELPERS
|
|
//------------------------------------------------------
|
|
|
|
export const DecimalJSLikeSchema: z.ZodType<Prisma.DecimalJsLike> = z.object({
|
|
d: z.array(z.number()),
|
|
e: z.number(),
|
|
s: z.number(),
|
|
// Zod v3/v4 compatible callable check
|
|
toFixed: z.custom<Prisma.DecimalJsLike['toFixed']>((v) => typeof v === 'function'),
|
|
});
|
|
|
|
// Accept canonical decimal strings (+/-, optional fraction, optional exponent), or Infinity/NaN.
|
|
export const DECIMAL_STRING_REGEX = /^(?:[+-]?(?:[0-9]+(?:.[0-9]+)?(?:[eE][+-]?[0-9]+)?|Infinity)|NaN)$/;
|
|
|
|
export const isValidDecimalInput = (
|
|
v?: null | string | number | Prisma.DecimalJsLike,
|
|
): v is string | number | Prisma.DecimalJsLike => {
|
|
if (v === undefined || v === null) return false;
|
|
return (
|
|
// Explicit instance checks first
|
|
v instanceof Decimal ||
|
|
// If Decimal.js is present and imported by the generator, this symbol exists at runtime
|
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
// @ts-ignore - Decimal may be undefined when not installed; codegen controls the import
|
|
(typeof Decimal !== 'undefined' && v instanceof Decimal) ||
|
|
(typeof v === 'object' &&
|
|
'd' in v &&
|
|
'e' in v &&
|
|
's' in v &&
|
|
'toFixed' in v) ||
|
|
(typeof v === 'string' && DECIMAL_STRING_REGEX.test(v)) ||
|
|
typeof v === 'number'
|
|
);
|
|
};
|