Files
demat-facturation/server/llmFieldsConfig.test.ts
Manus d32359fc10 Checkpoint: Ajout de la configuration des champs obligatoires pour le score LLM
Nouvelle fonctionnalité permettant de configurer quels champs sont obligatoires ou optionnels pour atteindre un score de reconnaissance de 100%.

Modifications:
- Nouvelle table llmFieldsConfig dans la base de données
- Routes tRPC pour gérer la configuration (getAll, updateField)
- Interface utilisateur dans la page Paramètres avec tableau et cases à cocher
- Modification du code d'extraction pour générer dynamiquement l'instruction de score
- Initialisation automatique des champs par défaut (supplierName, invoiceNumber, invoiceDate, totalAmount obligatoires)
- Tests unitaires pour valider la fonctionnalité

L'utilisateur peut maintenant personnaliser quels champs doivent être détectés pour qu'une facture atteigne 100% de score.
2026-02-13 03:39:41 -05:00

79 lines
2.6 KiB
TypeScript

import { describe, it, expect, beforeAll } from "vitest";
import {
getLlmFieldsConfigByUser,
upsertLlmFieldConfig,
initializeDefaultLlmFields
} from "./db";
describe("LLM Fields Configuration", () => {
const testUserId = 99999; // Use a high ID to avoid conflicts
beforeAll(async () => {
// Initialize default fields for test user
await initializeDefaultLlmFields(testUserId);
});
it("should initialize default fields for a new user", async () => {
const fields = await getLlmFieldsConfigByUser(testUserId);
expect(fields).toBeDefined();
expect(fields.length).toBeGreaterThan(0);
// Check that default required fields exist
const supplierName = fields.find(f => f.fieldName === "supplierName");
const invoiceNumber = fields.find(f => f.fieldName === "invoiceNumber");
const invoiceDate = fields.find(f => f.fieldName === "invoiceDate");
const totalAmount = fields.find(f => f.fieldName === "totalAmount");
expect(supplierName).toBeDefined();
expect(supplierName?.isRequired).toBe(1);
expect(invoiceNumber).toBeDefined();
expect(invoiceNumber?.isRequired).toBe(1);
expect(invoiceDate).toBeDefined();
expect(invoiceDate?.isRequired).toBe(1);
expect(totalAmount).toBeDefined();
expect(totalAmount?.isRequired).toBe(1);
});
it("should update field configuration", async () => {
// Make deliveryNoteNumber required
await upsertLlmFieldConfig({
userId: testUserId,
fieldName: "deliveryNoteNumber",
displayName: "Numéro de bon de livraison",
isRequired: 1,
displayOrder: 5,
});
const fields = await getLlmFieldsConfigByUser(testUserId);
const deliveryNote = fields.find(f => f.fieldName === "deliveryNoteNumber");
expect(deliveryNote).toBeDefined();
expect(deliveryNote?.isRequired).toBe(1);
// Make it optional again
await upsertLlmFieldConfig({
userId: testUserId,
fieldName: "deliveryNoteNumber",
displayName: "Numéro de bon de livraison",
isRequired: 0,
displayOrder: 5,
});
const fieldsAfter = await getLlmFieldsConfigByUser(testUserId);
const deliveryNoteAfter = fieldsAfter.find(f => f.fieldName === "deliveryNoteNumber");
expect(deliveryNoteAfter).toBeDefined();
expect(deliveryNoteAfter?.isRequired).toBe(0);
});
it("should return fields in correct display order", async () => {
const fields = await getLlmFieldsConfigByUser(testUserId);
// Check that fields are sorted by displayOrder
for (let i = 1; i < fields.length; i++) {
expect(fields[i].displayOrder).toBeGreaterThanOrEqual(fields[i - 1].displayOrder);
}
});
});