import type { WeighbridgeMode } from '~/modules/logistique/composables/useWeighbridge' import type { CounterpartyType, WeighingTicketStatus } from '~/modules/logistique/composables/useWeighingTicketForm' /** * Détail d'un ticket de pesée (`GET /api/weighing_tickets/{id}`, spec-back * § 4.0.bis). Champs null OMIS du JSON (`skip_null_values`) → tous optionnels, * lus avec un défaut côté hydratation du formulaire. */ export interface WeighingTicketDetail { id: number /** Cycle de vie (DRAFT/VALIDATED, ERP-193). */ status?: WeighingTicketStatus /** Numéro `{siteCode}-TP-{NNNN}` — null tant que brouillon, immuable ensuite (RG-5.09). */ number?: string | null /** Site rattaché (embarqué) — immuable (RG-5.09). */ site?: { id: number, name: string, code: string } | null counterpartyType?: CounterpartyType | null client?: { '@id': string, companyName: string } | null supplier?: { '@id': string, companyName: string } | null otherLabel?: string | null immatriculation?: string | null plateFreeFormat?: boolean // Pesée à vide emptyDate?: string | null emptyWeight?: number | null emptyDsd?: number | null emptyMode?: WeighbridgeMode | null // Pesée à plein fullDate?: string | null fullWeight?: number | null fullDsd?: number | null fullMode?: WeighbridgeMode | null netWeight?: number | null } /** * Charge le détail d'un ticket de pesée pour l'écran de modification (M5, * ERP-190). `Accept: application/ld+json` impose l'enveloppe Hydra (relations * embarquées : client/supplier/site). Appel via `useApi()` (jamais `$fetch`). */ export function useWeighingTicket() { const api = useApi() async function fetchTicket(id: number | string): Promise { return await api.get( `/weighing_tickets/${id}`, {}, { headers: { Accept: 'application/ld+json' }, toast: false }, ) } return { fetchTicket } }