feat: chatbot rendering provider override and NPI provider ordering

- AI chat extracts 'with provider <name>' and routes claim to that provider
- Claim form reads provider from sessionStorage before any async effects run,
  preventing saved claim/procedure data from overriding the chatbot selection
- NPI provider settings table shows Provider #1 / #2 labels with up/down
  reorder buttons; Provider #1 is always the default for claims
- Default provider now uses sortOrder instead of hardcoded 'Mary Scannell'
- Added sortOrder column to NpiProvider schema with migration

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Gitead
2026-06-11 13:17:05 -04:00
parent d4b9c1b889
commit 75c49ab1df
77 changed files with 385 additions and 105 deletions

View File

@@ -10,6 +10,7 @@ export interface INpiProviderStorage {
updates: Partial<NpiProvider>,
): Promise<NpiProvider | null>;
deleteNpiProvider(userId: number, id: number): Promise<boolean>;
reorderNpiProviders(userId: number, orderedIds: number[]): Promise<void>;
}
export const npiProviderStorage: INpiProviderStorage = {
@@ -20,7 +21,7 @@ export const npiProviderStorage: INpiProviderStorage = {
async getNpiProvidersByUser(userId: number) {
return db.npiProvider.findMany({
where: { userId },
orderBy: { createdAt: "desc" },
orderBy: [{ sortOrder: "asc" }, { id: "asc" }],
});
},
@@ -47,4 +48,15 @@ export const npiProviderStorage: INpiProviderStorage = {
return false;
}
},
async reorderNpiProviders(userId: number, orderedIds: number[]) {
await Promise.all(
orderedIds.map((id, index) =>
db.npiProvider.update({
where: { id, userId },
data: { sortOrder: index + 1 },
})
)
);
},
};