23 lines
1.0 KiB
TypeScript
23 lines
1.0 KiB
TypeScript
/**
|
|
* Règles communes aux imports et écritures de bases de répartition OPEX.
|
|
*
|
|
* Les fichiers sources mélangent parfois des lignes d'établissement avec des
|
|
* en-têtes de catégories ou des totaux. Cette validation est appliquée côté
|
|
* client pour guider l'utilisateur et côté serveur pour protéger la BDD.
|
|
*/
|
|
const OPEX_SUMMARY_LABEL = /^(?:infog|s.curit|t.l.phonie|app(?:licatifs)?(?:\s|$)|total|ventilation|r.partition|nouveaut)/i;
|
|
|
|
/** Préserve l'affichage du code, tout en stabilisant casse et espaces. */
|
|
export function normalizeOpexEtablissementCode(value: string): string {
|
|
return value.trim().replace(/\s+/g, " ").toUpperCase();
|
|
}
|
|
|
|
/**
|
|
* Un code établissement OPEX débute toujours par son code numérique d'entité.
|
|
* Les suffixes composites historiques (« + CAC », « +MIC ») restent admis.
|
|
*/
|
|
export function isOpexEtablissementCode(value: string): boolean {
|
|
const code = normalizeOpexEtablissementCode(value);
|
|
return code.length > 0 && /^\d{4}[A-Z0-9 +]*$/.test(code) && !OPEX_SUMMARY_LABEL.test(code);
|
|
}
|