UNPKG

@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
"use strict"; 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;