import { usePaginatedList } from '~/shared/composables/usePaginatedList' /** * Vue MINIMALE du referentiel QUALIMAT embarque (groupe `qualimat:read`) dans la * LISTE des transporteurs. Seuls les champs consommes par le Repertoire sont * types : `validityDate` alimente la colonne « Date de validité » (fond rouge si * perimee — RG-4.04). L'id QUALIMAT est une chaine (colonne BIGINT cote back). */ export interface CarrierQualimat { id: string name: string | null /** Date ISO de validite de l'agrement QUALIMAT (date_immutable) — RG-4.04. */ validityDate: string | null status: string | null } /** * Vue MINIMALE d'un transporteur pour le Repertoire (datatable). Volontairement * partielle : seuls les champs des colonnes + l'id (navigation) sont types ici. * Le detail complet (onglets Adresses / Contacts / Prix) est hors perimetre de * cet ecran (ERP-164, ticket #9). * * `certificationType` : QUALIMAT | GMP_PLUS | OVOCOM | COMPTE_PROPRE | AUTRE, ou * `null` dans le cas LIOT (compte-propre interne sans certification — RG-4.01). * Le libelle affiche est resolu cote front (cle i18n `transport.carriers.certification.*`). */ export interface Carrier { id: number name: string | null certificationType: string | null /** Lien editable vers le referentiel QUALIMAT (null si transporteur non QUALIMAT). */ qualimatCarrier: CarrierQualimat | null /** Date ISO de derniere modification (default:read) — colonne « Dernière activité ». */ updatedAt: string | null isArchived: boolean } /** * Filtres du Repertoire transporteurs, branches sur les query params de * `GET /api/carriers` (spec-back § 4.1). Pilotes par la page via `setFilters` : * - `search` : recherche fuzzy sur le nom ; * - `certificationType[]` : multi-valeurs (OR cote back) ; * - `includeArchived` : reintegre les archives (masquees par defaut). */ export interface CarrierFilters { search?: string 'certificationType[]'?: string[] includeArchived?: boolean } /** * Repertoire transporteurs (M4, ERP-164) — simple enveloppe de * `usePaginatedList` sur la ressource `/carriers` (regle ABSOLUE n°13 : * pagination serveur obligatoire ; jamais de chargement integral en memoire). * Miroir de `useSuppliersRepository` (M2) / `useProvidersRepository` (M3). * * Les filtres (recherche, certifications, archives) sont pilotes par la page via * `setFilters` du composable partage — la remise en page 1 est garantie. Par * defaut AUCUN `includeArchived` n'est envoye : le back masque alors les archives * (RG-4.04, § 2.4). Cocher « Inclure les archivés » envoie `includeArchived=true`. * * Volontairement PAR INSTANCE (pas de singleton module-level) : l'etat tableau * est propre a l'ecran Repertoire et meurt avec lui, comme tout consommateur de * `usePaginatedList`. Aucun reset au logout a gerer. */ export function useCarriersRepository() { return usePaginatedList({ url: '/carriers' }) }