@gouvfr-anct/mednum
Version:
✨ Permet de transformer une source de données vers le schéma des lieux de mediation numerique
39 lines (38 loc) • 3.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.processAdresse = exports.complementAdresseIfAny = void 0;
const lieux_de_mediation_numerique_1 = require("@gouvfr-anct/lieux-de-mediation-numerique");
const anciennes_communes_1 = require("./anciennes-communes");
const clean_code_postal_1 = require("./clean-code-postal");
const clean_commune_1 = require("./clean-commune");
const clean_operations_1 = require("./clean-operations");
const clean_voie_1 = require("./clean-voie");
const nouvelleCaledonieException = (codePostal) => codePostal.startsWith('98');
const complementAdresseIfAny = (complementAdresse) => complementAdresse == null ? {} : { complement_adresse: complementAdresse.replace(/\s+/g, ' ').trim() };
exports.complementAdresseIfAny = complementAdresseIfAny;
const codeInseeIfAny = (code_insee) => (code_insee == null ? {} : { code_insee });
const normalizedCodePostalIfExist = (codePostal, normalizedCodePostaux = []) => normalizedCodePostaux.includes(codePostal) || nouvelleCaledonieException(codePostal) ? codePostal : normalizedCodePostaux[0];
const addressFields = (addressToNormalize, commune, sourceAddress) => ({
...sourceAddress,
code_postal: normalizedCodePostalIfExist(addressToNormalize.code_postal, commune?.codesPostaux) ?? addressToNormalize.code_postal,
commune: commune?.nom ?? addressToNormalize.commune,
...codeInseeIfAny(commune?.code),
voie: clean_voie_1.CLEAN_VOIE.reduce(clean_operations_1.toCleanField, sourceAddress.voie)
});
const communeFrom = (findCommune, addressToNormalize) => findCommune.parNom(addressToNormalize.commune) ??
findCommune.parCodePostal(addressToNormalize.code_postal) ??
findCommune.parNomEtCodePostal(addressToNormalize.commune, addressToNormalize.code_postal) ??
findCommune.parNomEtCodePostalLePlusProcheDuDepartement(addressToNormalize.commune, addressToNormalize.code_postal) ??
(0, anciennes_communes_1.getNewCommune)(addressToNormalize.commune);
const buildAddress = (findCommune) => (addressToNormalize, sourceAddress) => (0, lieux_de_mediation_numerique_1.Adresse)(addressFields(addressToNormalize, communeFrom(findCommune, addressToNormalize), sourceAddress));
const normalizeAddress = (findCommune) => (sourceAddress) => buildAddress(findCommune)({
commune: clean_commune_1.CLEAN_COMMUNE.reduce(clean_operations_1.toCleanField, (0, clean_commune_1.communeField)(sourceAddress.voie, sourceAddress.commune)),
code_postal: clean_code_postal_1.CLEAN_CODE_POSTAL.reduce(clean_operations_1.toCleanField, (0, clean_code_postal_1.codePostalField)(sourceAddress.voie, sourceAddress.code_postal))
}, sourceAddress);
const processAdresse = (findCommune) => (source, matching) => normalizeAddress(findCommune)({
voie: (0, clean_voie_1.voieField)(source, matching.adresse),
commune: source[matching.commune.colonne]?.toString(),
code_postal: source[matching.code_postal.colonne]?.toString(),
...(0, exports.complementAdresseIfAny)(source[matching.complement_adresse?.colonne ?? '']?.toString())
});
exports.processAdresse = processAdresse;