Skip to content

Commit

Permalink
fix: mise à jour des champs type_cfa, nom , prenom pour SIFA (#3516)
Browse files Browse the repository at this point in the history
  • Loading branch information
nkrmr authored Jan 19, 2024
1 parent b6a1b2e commit 1d08e14
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 42 deletions.
54 changes: 12 additions & 42 deletions server/src/common/actions/sifa.actions/sifa.actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,39 +9,7 @@ import { getCodePostalInfo } from "@/common/apis/apiTablesCorrespondances";
import { Effectif } from "@/common/model/@types/Effectif";
import { effectifsDb } from "@/common/model/collections";

import { SIFA_FIELDS, formatAN_FORM } from "./sifaCsvFields";

const formatStringForSIFA = (str) => {
if (!str) return undefined;
const accent = [
/[\300-\306]/g,
/[\340-\346]/g, // A, a
/[\310-\313]/g,
/[\350-\353]/g, // E, e
/[\314-\317]/g,
/[\354-\357]/g, // I, i
/[\322-\330]/g,
/[\362-\370]/g, // O, o
/[\331-\334]/g,
/[\371-\374]/g, // U, u
/[\321]/g,
/[\361]/g, // N, n
/[\307]/g,
/[\347]/g, // C, c
];
const noaccent = ["A", "a", "E", "e", "I", "i", "O", "o", "U", "u", "N", "n", "C", "c"];

for (var i = 0; i < accent.length; i++) {
str = str.replace(accent[i], noaccent[i]);
}

return str.replaceAll(/[^0-9a-zA-Z\- ]/g, "") ?? undefined;
};

const wrapNumString = (str) => {
if (!str) return str;
return `="${str}"`;
};
import { SIFA_FIELDS, formatAN_FORM, formatStringForSIFA, wrapNumString } from "./sifaCsvFields";

export const isEligibleSIFA = (historique_statut: Effectif["apprenant"]["historique_statut"]) => {
const endOfyear = getSIFADate(new Date());
Expand Down Expand Up @@ -137,11 +105,18 @@ export const generateSifa = async (organisme_id: ObjectId) => {

// Extraction du code diplome cfd
const codeDiplome = wrapNumString(formationBcn?.cfd || effectif.formation.cfd);
// Adresse de l'effectif
const effectifAddress = effectif.apprenant.adresse
? effectif.apprenant.adresse?.complete ??
`${effectif.apprenant.adresse?.numero ?? ""} ${effectif.apprenant.adresse?.repetition_voie ?? ""} ${
effectif.apprenant.adresse?.voie ?? ""
}`
: undefined;

const requiredFields = {
NUMERO_UAI: organismeResponsableUai,
NOM: formatStringForSIFA(effectif.apprenant.nom),
PRENOM1: formatStringForSIFA(effectif.apprenant.prenom),
NOM: formatStringForSIFA(effectif.apprenant.nom)?.slice(0, 100),
PRENOM1: formatStringForSIFA(effectif.apprenant.prenom)?.slice(0, 100),
DATE_NAIS: effectif.apprenant.date_de_naissance
? wrapNumString(
DateTime.fromJSDate(new Date(effectif.apprenant.date_de_naissance))
Expand All @@ -153,12 +128,7 @@ export const generateSifa = async (organisme_id: ObjectId) => {

LIEU_NAIS: wrapNumString(cpNaissanceInfo?.code_commune_insee),
SEXE: effectif.apprenant.sexe === "M" ? "1" : "2",
ADRESSE: effectif.apprenant.adresse
? effectif.apprenant.adresse?.complete ??
`${effectif.apprenant.adresse?.numero ?? ""} ${effectif.apprenant.adresse?.repetition_voie ?? ""} ${
effectif.apprenant.adresse?.voie ?? ""
}`
: undefined,
ADRESSE: effectifAddress?.slice(0, 200) || "",
SIT_N_1: effectif.apprenant.derniere_situation,
ETAB_N_1: effectif.apprenant.dernier_organisme_uai
? effectif.apprenant.dernier_organisme_uai.length === 8
Expand All @@ -179,7 +149,7 @@ export const generateSifa = async (organisme_id: ObjectId) => {
AN_FORM: formatAN_FORM(effectif.formation.annee),
SIT_FORM: organismeFormateurUai,
STATUT: "APP", // STATUT courant
TYPE_CFA: wrapNumString(effectif.apprenant.type_cfa),
TYPE_CFA: wrapNumString(String(effectif.apprenant.type_cfa).padStart(2, "0")),
UAI_EPLE: "NC",
NAT_STR_JUR: "NC", // Unknown for now
};
Expand Down
35 changes: 35 additions & 0 deletions server/src/common/actions/sifa.actions/sifaCsvFields.ts
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,42 @@ export const SIFA_FIELDS = [
},
];

// Detecter la durée de formation
export const formatAN_FORM = (year: number | undefined) => {
if (year == null) return year;
return `${year}A`;
};

export const formatStringForSIFA = (str: string | undefined) => {
if (typeof str !== "string" || str.length === 0) return undefined;

const accentsMap = {
A: /[\300-\306]/g,
a: /[\340-\346]/g,
E: /[\310-\313]/g,
e: /[\350-\353]/g,
I: /[\314-\317]/g,
i: /[\354-\357]/g,
O: /[\322-\330]/g,
o: /[\362-\370]/g,
U: /[\331-\334]/g,
u: /[\371-\374]/g,
N: /[\321]/g,
n: /[\361]/g,
C: /[\307]/g,
c: /[\347]/g,
};

// Remplace chaque accent par son homologue non accentué
for (const [replacement, regex] of Object.entries(accentsMap)) {
str = str.replace(regex, replacement);
}

// Remplacez les traits d'union par des espaces et supprimez tous les caractères non alphanumériques (hors espaces)
return str.replace(/-/g, " ").replace(/[^0-9a-zA-Z ]/g, "");
};

export const wrapNumString = (str: string | number | null | undefined) => {
if (str === null || str === undefined) return str;
return `="${str}"`;
};

0 comments on commit 1d08e14

Please sign in to comment.