# Domain Heuristics — /sketch

> **Purpose:** Accelerate entity/property inference for common business domains.
> This table is an **accelerator**, not a limiter. If the user's domain is not listed,
> the LLM infers entities and properties from general knowledge.

---

## HR / Ressources Humaines

- **Employee** (FirstName:string, LastName:string, Email:string, HireDate:DateTime, DepartmentId:Guid→Department)
  labels: { fr: "Employé", en: "Employee", it: "Dipendente", de: "Mitarbeiter" }
- **Department** (Name:string, Code:string, ParentDepartmentId:Guid?→Department)
  labels: { fr: "Département", en: "Department", it: "Dipartimento", de: "Abteilung" }

## Absences / Congés

- **Absence** (StartDate:DateTime, EndDate:DateTime, Type:string, Status:string, EmployeeId:Guid→Employee)
  labels: { fr: "Absence", en: "Absence", it: "Assenza", de: "Abwesenheit" }
- **AbsenceType** (Name:string, Code:string, MaxDays:int, IsPaid:bool)
  labels: { fr: "Type d'absence", en: "Absence Type", it: "Tipo di assenza", de: "Abwesenheitstyp" }

## CRM / Clients

- **Customer** (FirstName:string, LastName:string, Email:string, Phone:string, CompanyName:string?)
  labels: { fr: "Client", en: "Customer", it: "Cliente", de: "Kunde" }
- **Contact** (FirstName:string, LastName:string, Email:string, Phone:string, CustomerId:Guid→Customer)
  labels: { fr: "Contact", en: "Contact", it: "Contatto", de: "Kontakt" }

## Commandes / Orders

- **Order** (OrderDate:DateTime, TotalAmount:decimal, Status:string, CustomerId:Guid→Customer)
  labels: { fr: "Commande", en: "Order", it: "Ordine", de: "Bestellung" }
- **OrderLine** (Quantity:int, UnitPrice:decimal, TotalPrice:decimal, ProductId:Guid→Product, OrderId:Guid→Order)
  labels: { fr: "Ligne de commande", en: "Order Line", it: "Riga d'ordine", de: "Bestellposition" }

## Facturation / Invoicing

- **Invoice** (InvoiceDate:DateTime, DueDate:DateTime, TotalAmount:decimal, Status:string, CustomerId:Guid→Customer)
  labels: { fr: "Facture", en: "Invoice", it: "Fattura", de: "Rechnung" }
- **InvoiceLine** (Description:string, Quantity:int, UnitPrice:decimal, TotalPrice:decimal, InvoiceId:Guid→Invoice)
  labels: { fr: "Ligne de facture", en: "Invoice Line", it: "Riga di fattura", de: "Rechnungsposition" }

## Projets / Projects

- **Project** (Name:string, Code:string, StartDate:DateTime, EndDate:DateTime?, Status:string, ManagerId:Guid?→Employee)
  labels: { fr: "Projet", en: "Project", it: "Progetto", de: "Projekt" }
- **Task** (Title:string, Description:string?, DueDate:DateTime?, Status:string, Priority:string, ProjectId:Guid→Project, AssigneeId:Guid?→Employee)
  labels: { fr: "Tâche", en: "Task", it: "Attività", de: "Aufgabe" }
- **Milestone** (Name:string, DueDate:DateTime, Status:string, ProjectId:Guid→Project)
  labels: { fr: "Jalon", en: "Milestone", it: "Traguardo", de: "Meilenstein" }

## Stock / Inventaire

- **Product** (Name:string, Code:string, Description:string?, UnitPrice:decimal, CategoryId:Guid?→Category)
  labels: { fr: "Produit", en: "Product", it: "Prodotto", de: "Produkt" }
- **Category** (Name:string, Code:string, ParentCategoryId:Guid?→Category)
  labels: { fr: "Catégorie", en: "Category", it: "Categoria", de: "Kategorie" }
- **StockMovement** (Quantity:int, Type:string, Date:DateTime, ProductId:Guid→Product, WarehouseId:Guid?→Warehouse)
  labels: { fr: "Mouvement de stock", en: "Stock Movement", it: "Movimento di stock", de: "Lagerbewegung" }

## Contrats / Contracts

- **Contract** (Title:string, StartDate:DateTime, EndDate:DateTime?, Status:string, Amount:decimal?, CustomerId:Guid→Customer)
  labels: { fr: "Contrat", en: "Contract", it: "Contratto", de: "Vertrag" }
- **ContractAmendment** (Description:string, Date:DateTime, Amount:decimal?, ContractId:Guid→Contract)
  labels: { fr: "Avenant", en: "Amendment", it: "Emendamento", de: "Nachtrag" }

## Tickets / Support

- **Ticket** (Title:string, Description:string, Priority:string, Status:string, Category:string, CustomerId:Guid?→Customer, AssigneeId:Guid?→Employee)
  labels: { fr: "Ticket", en: "Ticket", it: "Ticket", de: "Ticket" }
- **TicketComment** (Content:string, IsInternal:bool, TicketId:Guid→Ticket)
  labels: { fr: "Commentaire", en: "Comment", it: "Commento", de: "Kommentar" }

## Fournisseurs / Suppliers

- **Supplier** (Name:string, Email:string, Phone:string, Address:string?, VatNumber:string?)
  labels: { fr: "Fournisseur", en: "Supplier", it: "Fornitore", de: "Lieferant" }
- **PurchaseOrder** (OrderDate:DateTime, Status:string, TotalAmount:decimal, SupplierId:Guid→Supplier)
  labels: { fr: "Bon de commande", en: "Purchase Order", it: "Ordine d'acquisto", de: "Bestellung" }

## Documents / GED

- **Document** (Title:string, FileName:string, FileSize:long, MimeType:string, FolderId:Guid?→Folder)
  labels: { fr: "Document", en: "Document", it: "Documento", de: "Dokument" }
- **Folder** (Name:string, ParentFolderId:Guid?→Folder)
  labels: { fr: "Dossier", en: "Folder", it: "Cartella", de: "Ordner" }

## Réservations / Bookings

- **Booking** (StartDate:DateTime, EndDate:DateTime, Status:string, ResourceId:Guid→Resource, ContactId:Guid?→Contact)
  labels: { fr: "Réservation", en: "Booking", it: "Prenotazione", de: "Buchung" }
- **Resource** (Name:string, Type:string, Capacity:int?, Location:string?)
  labels: { fr: "Ressource", en: "Resource", it: "Risorsa", de: "Ressource" }

## Événements / Events

- **Event** (Title:string, Description:string?, StartDate:DateTime, EndDate:DateTime, Location:string?, MaxAttendees:int?)
  labels: { fr: "Événement", en: "Event", it: "Evento", de: "Veranstaltung" }
- **Registration** (Status:string, RegisteredAt:DateTime, EventId:Guid→Event, ContactId:Guid?→Contact)
  labels: { fr: "Inscription", en: "Registration", it: "Iscrizione", de: "Anmeldung" }

## Formation / Training

- **Training** (Title:string, Description:string?, StartDate:DateTime, EndDate:DateTime, MaxParticipants:int?, TrainerId:Guid?→Employee)
  labels: { fr: "Formation", en: "Training", it: "Formazione", de: "Schulung" }
- **Enrollment** (Status:string, EnrolledAt:DateTime, TrainingId:Guid→Training, EmployeeId:Guid→Employee)
  labels: { fr: "Inscription", en: "Enrollment", it: "Iscrizione", de: "Anmeldung" }

## Maintenance / Equipment

- **Equipment** (Name:string, SerialNumber:string?, Status:string, Location:string?, CategoryId:Guid?→Category)
  labels: { fr: "Équipement", en: "Equipment", it: "Attrezzatura", de: "Ausrüstung" }
- **MaintenanceRequest** (Title:string, Description:string, Priority:string, Status:string, EquipmentId:Guid→Equipment, RequestedById:Guid?→Employee)
  labels: { fr: "Demande de maintenance", en: "Maintenance Request", it: "Richiesta di manutenzione", de: "Wartungsanfrage" }
