/** * Helpers purs de l'onglet Comptabilite prestataire (M3 Technique, ERP-144) — * miroir SIMPLIFIE des regles M2, reimplemente cote module Technique (regle * ABSOLUE n°1 : pas d'import inter-module). Portent les RG inter-champs RG-3.07 * (banque si VIREMENT) et RG-3.08 (RIB si LCR), testables sans Vue ni API. */ import type { ProviderAccountingDraft, ProviderRibFormDraft, } from '~/modules/technique/types/providerForm' /** Code pivot du type de reglement imposant une banque (RG-3.07). */ const PAYMENT_TYPE_VIREMENT = 'VIREMENT' /** Code pivot du type de reglement imposant au moins un RIB (RG-3.08). */ const PAYMENT_TYPE_LCR = 'LCR' /** Champs RIB obligatoires non nullable cote back (NotBlank) — omis si vides au POST. */ const RIB_REQUIRED_NON_NULLABLE_KEYS = ['label', 'bic', 'iban'] as const /** Vrai si une chaine porte au moins un caractere non-espace. */ function isFilled(value: string | null | undefined): boolean { return value !== null && value !== undefined && value.trim() !== '' } /** RG-3.07 : la banque n'est requise/visible que pour un reglement par VIREMENT. */ export function isBankRequiredForPaymentType(code: string | null | undefined): boolean { return code === PAYMENT_TYPE_VIREMENT } /** RG-3.08 : au moins un RIB n'est requis que pour un reglement par LCR. */ export function isRibRequiredForPaymentType(code: string | null | undefined): boolean { return code === PAYMENT_TYPE_LCR } /** Vrai si AUCUN champ du bloc RIB n'est rempli (amorce vide a ignorer au submit). */ export function isRibBlank(rib: ProviderRibFormDraft): boolean { return ![rib.label, rib.bic, rib.iban].some(isFilled) } /** Vrai si les 3 champs du RIB sont remplis (gating « + RIB »). */ export function isRibComplete(rib: ProviderRibFormDraft): boolean { return isFilled(rib.label) && isFilled(rib.bic) && isFilled(rib.iban) } /** * Payload du PATCH comptable (groupe `provider:write:accounting`). Les relations * sont en IRI ; la banque n'est envoyee que si elle est requise (RG-3.07), sinon * `null` (le back vide la relation hors VIREMENT). */ export function buildProviderAccountingPayload( accounting: ProviderAccountingDraft, isBankRequired: boolean, ): Record { return { siren: accounting.siren || null, accountNumber: accounting.accountNumber || null, tvaMode: accounting.tvaModeIri, nTva: accounting.nTva || null, paymentDelay: accounting.paymentDelayIri, paymentType: accounting.paymentTypeIri, bank: isBankRequired ? accounting.bankIri : null, } } /** * Payload d'un RIB (sous-ressource, groupe `provider:write:accounting`). Les * champs requis vides sont omis a la creation pour que la 422 NotBlank porte sur * le champ. */ export function buildProviderRibPayload(rib: ProviderRibFormDraft): Record { const payload: Record = { label: rib.label, bic: rib.bic, iban: rib.iban, } for (const key of RIB_REQUIRED_NON_NULLABLE_KEYS) { const value = payload[key] if (value === null || value === undefined || value === '') { delete payload[key] } } return payload }