@gouvfr-anct/lieux-de-mediation-numerique
Version:
📚 Bibliothèque pour la modélisation des lieux de médiation numérique respectant le standard du schéma de données des lieux de médiation numériques
239 lines (238 loc) • 13.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.accesFields = exports.serviceGeneralFields = exports.collecteFields = exports.disponibiliteFields = exports.labelsFields = exports.presentationFields = exports.contactFields = exports.localisationFields = exports.adresseFields = exports.structureGeneralFields = void 0;
const models_1 = require("../../../models");
const SERVICES_TO_THEMATIQUES = new Map([
[models_1.Service.MaterielInformatiqueAPrixSolidaire, ['numerique--s-equiper-en-materiel-informatique']],
[
models_1.Service.AideAuxDemarchesAdministratives,
[
'numerique--realiser-des-demarches-administratives-avec-un-accompagnement',
'numerique--devenir-autonome-dans-les-demarches-administratives',
'numerique--accompagner-les-demarches-de-sante'
]
],
[
models_1.Service.MaitriseDesOutilsNumeriquesDuQuotidien,
[
'numerique--prendre-en-main-un-smartphone-ou-une-tablette',
'numerique--prendre-en-main-un-ordinateur',
'numerique--utiliser-le-numerique-au-quotidien'
]
],
[
models_1.Service.InsertionProfessionnelleViaLeNumerique,
['numerique--favoriser-mon-insertion-professionnelle', 'numerique--creer-et-developper-mon-entreprise']
],
[models_1.Service.ParentaliteEtEducationAvecLeNumerique, ['numerique--soutenir-la-parentalite-et-l-education-avec-le-numerique']],
[models_1.Service.LoisirsEtCreationsNumeriques, ['numerique--creer-avec-le-numerique']],
[
models_1.Service.ComprehensionDuMondeNumerique,
['numerique--approfondir-ma-culture-numerique', 'numerique--promouvoir-la-citoyennete-numerique']
],
[
models_1.Service.AccesInternetEtMaterielInformatique,
['numerique--acceder-a-une-connexion-internet', 'numerique--acceder-a-du-materiel']
]
]);
const MODALITES_ACCOMPAGNEMENT_TO_TYPES_MAP = new Map([
[models_1.ModaliteAccompagnement.EnAutonomie, 'autonomie'],
[models_1.ModaliteAccompagnement.AccompagnementIndividuel, 'accompagnement'],
[models_1.ModaliteAccompagnement.DansUnAtelier, 'atelier']
]);
const CONDITION_ACCES_TO_FRAIS = new Map([
[models_1.Frais.Gratuit, 'gratuit'],
[models_1.Frais.GratuitSousCondition, 'gratuit-sous-conditions'],
[models_1.Frais.Payant, 'payant']
]);
const PUBLICS_SPECIFIQUES = new Map([
[models_1.PublicSpecifiquementAdresse.Seniors, 'seniors-65'],
[models_1.PublicSpecifiquementAdresse.FamillesEnfants, 'familles-enfants'],
[models_1.PublicSpecifiquementAdresse.Jeunes, 'jeunes-16-26'],
[models_1.PublicSpecifiquementAdresse.Femmes, 'femmes'],
[models_1.PriseEnChargeSpecifique.LanguesEtrangeresAnglais, 'public-langues-etrangeres'],
[models_1.PriseEnChargeSpecifique.LanguesEtrangeresAutre, 'public-langues-etrangeres'],
[models_1.PriseEnChargeSpecifique.DeficienceVisuelle, 'deficience-visuelle'],
[models_1.PriseEnChargeSpecifique.Surdite, 'surdite'],
[models_1.PriseEnChargeSpecifique.HandicapsMentaux, 'handicaps-mentaux'],
[models_1.PriseEnChargeSpecifique.Illettrisme, 'personnes-en-situation-illettrisme']
]);
const MODALITE_ACCESS_TO_MODE_ORIENTATION_BENEFICIAIRE = new Map([
[models_1.ModaliteAcces.ContacterParMail, 'envoyer-un-mail'],
[models_1.ModaliteAcces.SePresenter, 'se-presenter'],
[models_1.ModaliteAcces.Telephoner, 'telephoner']
]);
const MODALITE_ACCESS_TO_MODE_ORIENTATION_ACCOMPAGNATEUR = new Map([
[models_1.ModaliteAcces.ContacterParMail, 'envoyer-un-mail'],
[models_1.ModaliteAcces.PrescriptionParMail, 'envoyer-un-mail-avec-une-fiche-de-prescription'],
[models_1.ModaliteAcces.Telephoner, 'telephoner']
]);
const LABELS_NATIONAUX_MAP = new Map([
[models_1.DispositifProgrammeNational.AidantsConnect, 'aidants-connect'],
[models_1.DispositifProgrammeNational.ConseillersNumeriques, 'conseiller-numerique'],
[models_1.DispositifProgrammeNational.FranceServices, 'france-service'],
[models_1.DispositifProgrammeNational.GrandeEcoleDuNumerique, 'grandes-ecoles-du-numerique'],
[models_1.DispositifProgrammeNational.PointNumeriqueCAF, 'caf'],
[models_1.FormationLabel.FormeAMonEspaceSante, 'mon-espace-sante'],
[models_1.FormationLabel.FormeADuplex, 'duplex'],
[models_1.FormationLabel.ArniaMednum, 'arnia'],
[models_1.FormationLabel.CollectifRessourcesEtActeursReemploi, 'ressources-reemploi'],
[models_1.FormationLabel.EtapesNumeriques, 'etapes-numeriques'],
[models_1.FormationLabel.FabriquesDeTerritoire, 'fabrique-de-territoire'],
[models_1.FormationLabel.LesEclaireurs, 'les-eclaireurs'],
[models_1.FormationLabel.MesPapiers, 'mes-papiers'],
[models_1.FormationLabel.Ordi3, 'ordi-3'],
[models_1.FormationLabel.SudLabs, 'sud-labs']
]);
const typologyIfExist = (typologie) => (typologie == null ? {} : { typologie });
const siteWebIfExist = (site_web) => (site_web == null ? {} : { site_web });
const courrielIfExist = (courriel) => (courriel == null ? {} : { courriel });
const fraisIfExist = (frais) => (frais == null ? {} : { frais: [frais] });
const fraisFromConditionAcces = (conditionAcces) => conditionAcces == null ? {} : fraisIfExist(CONDITION_ACCES_TO_FRAIS.get(conditionAcces));
const structureGeneralFields = (lieuMediationNumerique) => ({
id: lieuMediationNumerique.id,
nom: lieuMediationNumerique.nom,
siret: lieuMediationNumerique.pivot,
...(lieuMediationNumerique.typologies != null && lieuMediationNumerique.typologies.length > 0
? typologyIfExist(lieuMediationNumerique.typologies.at(0)?.toString())
: {}),
...(lieuMediationNumerique.structure_parente == null ? {} : { structure_parente: lieuMediationNumerique.structure_parente }),
...(lieuMediationNumerique.fiche_acces_libre == null ? {} : { accessibilite: lieuMediationNumerique.fiche_acces_libre }),
thematiques: [
'numerique',
...(lieuMediationNumerique.services ?? [])
.flatMap((service) => SERVICES_TO_THEMATIQUES.get(service) ?? [])
.filter((service) => service != null)
]
});
exports.structureGeneralFields = structureGeneralFields;
const adresseFields = (lieuMediationNumerique) => ({
commune: lieuMediationNumerique.adresse.commune,
code_postal: lieuMediationNumerique.adresse.code_postal,
adresse: lieuMediationNumerique.adresse.voie,
...(lieuMediationNumerique.adresse.code_insee == null ? {} : { code_insee: lieuMediationNumerique.adresse.code_insee }),
...(lieuMediationNumerique.adresse.complement_adresse == null
? {}
: { complement_adresse: lieuMediationNumerique.adresse.complement_adresse })
});
exports.adresseFields = adresseFields;
const localisationFields = (lieuMediationNumerique) => ({
...(lieuMediationNumerique.localisation?.latitude == null ? {} : { latitude: lieuMediationNumerique.localisation.latitude }),
...(lieuMediationNumerique.localisation?.longitude == null
? {}
: { longitude: lieuMediationNumerique.localisation.longitude })
});
exports.localisationFields = localisationFields;
const contactFields = (lieuMediationNumerique) => ({
...(lieuMediationNumerique.contact?.telephone == null ? {} : { telephone: lieuMediationNumerique.contact.telephone }),
...(lieuMediationNumerique.contact?.courriels != null && lieuMediationNumerique.contact.courriels.length > 0
? courrielIfExist(lieuMediationNumerique.contact.courriels.at(0)?.toString())
: {}),
...(lieuMediationNumerique.contact?.site_web != null && lieuMediationNumerique.contact.site_web.length > 0
? siteWebIfExist(lieuMediationNumerique.contact.site_web.at(0)?.toString())
: {})
});
exports.contactFields = contactFields;
const presentationFields = (lieuMediationNumerique) => ({
...(lieuMediationNumerique.presentation?.resume == null
? {}
: {
presentation_resume: lieuMediationNumerique.presentation.resume.length > 280
? `${lieuMediationNumerique.presentation.resume.slice(0, 277)}...`
: lieuMediationNumerique.presentation.resume
}),
...(lieuMediationNumerique.presentation?.detail == null
? {}
: { presentation_detail: lieuMediationNumerique.presentation.detail })
});
exports.presentationFields = presentationFields;
const labelsFields = (lieuMediationNumerique) => ({
...(lieuMediationNumerique.dispositif_programmes_nationaux == null
? {}
: {
labels_nationaux: Array.from(new Set([...lieuMediationNumerique.dispositif_programmes_nationaux, ...(lieuMediationNumerique.formations_labels ?? [])]
.map((dispositifProgrammeNational) => LABELS_NATIONAUX_MAP.get(dispositifProgrammeNational) ?? null)
.filter((dispositifProgrammeNational) => dispositifProgrammeNational != null)))
}),
...(lieuMediationNumerique.autres_formations_labels == null
? {}
: { labels_autres: lieuMediationNumerique.autres_formations_labels })
});
exports.labelsFields = labelsFields;
const disponibiliteFields = (lieuMediationNumerique) => ({
...(lieuMediationNumerique.horaires == null ? {} : { horaires_ouverture: lieuMediationNumerique.horaires })
});
exports.disponibiliteFields = disponibiliteFields;
const collecteFields = (lieuMediationNumerique) => ({
...(lieuMediationNumerique.source == null ? {} : { source: lieuMediationNumerique.source }),
date_maj: new Date(lieuMediationNumerique.date_maj).toISOString()
});
exports.collecteFields = collecteFields;
const throwNoSourceError = () => {
throw new Error('data.inclusion service should have a source');
};
const serviceGeneralFields = (lieuMediationNumerique) => ({
id: `${lieuMediationNumerique.id}-mediation-numerique`,
structure_id: lieuMediationNumerique.id,
nom: 'Médiation numérique',
source: lieuMediationNumerique.source ?? throwNoSourceError(),
...(lieuMediationNumerique.prise_rdv == null
? {}
: {
prise_rdv: lieuMediationNumerique.prise_rdv
}),
thematiques: [
'numerique',
...(lieuMediationNumerique.services ?? [])
.flatMap((service) => SERVICES_TO_THEMATIQUES.get(service) ?? [])
.filter((service) => service != null)
]
});
exports.serviceGeneralFields = serviceGeneralFields;
const typesFromModalitesAccompagnement = (lieuMediationNumerique) => {
const types = (lieuMediationNumerique.modalites_accompagnement ?? [])
.map((modaliteAccompagnement) => MODALITES_ACCOMPAGNEMENT_TO_TYPES_MAP.get(modaliteAccompagnement) ?? null)
.filter((type) => type != null);
return types.length === 0 ? {} : { types };
};
const isEnPresentiel = (modalitesAccompagnement) => modalitesAccompagnement.filter((modaliteAccompagnement) => modaliteAccompagnement !== models_1.ModaliteAccompagnement.ADistance).length > 0;
const isADistance = (modalitesAccompagnement) => modalitesAccompagnement.includes(models_1.ModaliteAccompagnement.ADistance);
const modesAccueilFromModalitesAccompagnement = (lieuMediationNumerique) => lieuMediationNumerique.modalites_accompagnement == null
? { modes_accueil: [] }
: {
modes_accueil: [
...(isADistance(lieuMediationNumerique.modalites_accompagnement) ? ['a-distance'] : []),
...(isEnPresentiel(lieuMediationNumerique.modalites_accompagnement) ? ['en-presentiel'] : [])
]
};
const profilsFromPublicsSpecifiques = (lieuMediationNumerique) => ({
profils: Array.from(new Set([
...(lieuMediationNumerique.prise_en_charge_specifique ?? []),
...(lieuMediationNumerique.publics_specifiquement_adresses ?? [])
]
.map((publiqueSpecifique) => PUBLICS_SPECIFIQUES.get(publiqueSpecifique) ?? null)
.filter((profil) => profil != null)))
});
const modeOrientationFromModalitesAcces = (lieuMediationNumerique) => ({
modes_orientation_accompagnateur: (lieuMediationNumerique.modalites_acces ?? [])
.map((modaliteAcces) => MODALITE_ACCESS_TO_MODE_ORIENTATION_ACCOMPAGNATEUR.get(modaliteAcces) ?? null)
.filter((modaliteAcces) => modaliteAcces != null),
modes_orientation_beneficiaire: (lieuMediationNumerique.modalites_acces ?? [])
.map((modaliteAcces) => MODALITE_ACCESS_TO_MODE_ORIENTATION_BENEFICIAIRE.get(modaliteAcces) ?? null)
.filter((modaliteAcces) => modaliteAcces != null)
});
const accesFields = (lieuMediationNumerique) => ({
...(lieuMediationNumerique.modalites_accompagnement == null ? {} : typesFromModalitesAccompagnement(lieuMediationNumerique)),
...(lieuMediationNumerique.modalites_accompagnement == null
? {}
: modesAccueilFromModalitesAccompagnement(lieuMediationNumerique)),
...(lieuMediationNumerique.frais_a_charge == null
? {}
: fraisFromConditionAcces(lieuMediationNumerique.frais_a_charge.at(0))),
...(lieuMediationNumerique.publics_specifiquement_adresses == null &&
lieuMediationNumerique.prise_en_charge_specifique == null
? {}
: profilsFromPublicsSpecifiques(lieuMediationNumerique)),
...(lieuMediationNumerique.modalites_acces == null ? {} : modeOrientationFromModalitesAcces(lieuMediationNumerique))
});
exports.accesFields = accesFields;