@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
281 lines (280 loc) • 14.9 kB
JavaScript
import { Adresse, Contact, Frais, FraisACharge, Courriel, DispositifProgrammeNational, DispositifProgrammesNationaux, Localisation, ModaliteAccompagnement, ModalitesAccompagnement, Service, Services, Typologie, Typologies, Url, ModaliteAcces, ModalitesAcces, PrisesEnChargeSpecifiques, PublicsSpecifiquementAdresses, PublicSpecifiquementAdresse, PriseEnChargeSpecifique, FormationsLabels, FormationLabel } from '../../../models';
const THEMATIQUES_TO_SERVICES = new Map([
['numerique--devenir-autonome-dans-les-demarches-administratives', Service.AideAuxDemarchesAdministratives],
['numerique--realiser-des-demarches-administratives-avec-un-accompagnement', Service.AideAuxDemarchesAdministratives],
['numerique--accompagner-les-demarches-de-sante', Service.AideAuxDemarchesAdministratives],
['numerique--prendre-en-main-un-smartphone-ou-une-tablette', Service.MaitriseDesOutilsNumeriquesDuQuotidien],
['numerique--prendre-en-main-un-ordinateur', Service.MaitriseDesOutilsNumeriquesDuQuotidien],
['numerique--utiliser-le-numerique-au-quotidien', Service.MaitriseDesOutilsNumeriquesDuQuotidien],
['numerique--approfondir-ma-culture-numerique', Service.ComprehensionDuMondeNumerique],
['numerique--favoriser-mon-insertion-professionnelle', Service.InsertionProfessionnelleViaLeNumerique],
['numerique--acceder-a-une-connexion-internet', Service.AccesInternetEtMaterielInformatique],
['numerique--acceder-a-du-materiel', Service.AccesInternetEtMaterielInformatique],
['numerique--s-equiper-en-materiel-informatique', Service.MaterielInformatiqueAPrixSolidaire],
['numerique--creer-et-developper-mon-entreprise', Service.InsertionProfessionnelleViaLeNumerique],
['numerique--creer-avec-le-numerique', Service.LoisirsEtCreationsNumeriques],
['numerique--promouvoir-la-citoyennete-numerique', Service.ComprehensionDuMondeNumerique],
['numerique--soutenir-la-parentalite-et-l-education-avec-le-numerique', Service.ParentaliteEtEducationAvecLeNumerique]
]);
export const FRAIS_TO_CONDITION_ACCES = new Map([
['gratuit', Frais.Gratuit],
['gratuit-sous-conditions', Frais.GratuitSousCondition],
['payant', Frais.Payant],
['adhesion', Frais.Payant],
['pass-numerique', Frais.GratuitSousCondition]
]);
export const MODES_ORIENTATION_TO_MODALITE_ACCES = new Map([
['envoyer-un-mail', ModaliteAcces.ContacterParMail],
['envoyer-un-mail-avec-une-fiche-de-prescription', ModaliteAcces.PrescriptionParMail],
['telephoner', ModaliteAcces.Telephoner],
['se-presenter', ModaliteAcces.SePresenter]
]);
const DISPOSITIF_PROGRAMMES_NATIONAUX_MAP = new Map([
['aidants-connect', DispositifProgrammeNational.AidantsConnect],
['conseiller-numerique', DispositifProgrammeNational.ConseillersNumeriques],
['france-service', DispositifProgrammeNational.FranceServices],
['grandes-ecoles-du-numerique', DispositifProgrammeNational.GrandeEcoleDuNumerique],
['caf', DispositifProgrammeNational.PointNumeriqueCAF]
]);
const FORMATIONS_LABELS_MAP = new Map([
['mon-espace-sante', FormationLabel.FormeAMonEspaceSante],
['duplex', FormationLabel.FormeADuplex],
['arnia', FormationLabel.ArniaMednum],
['ressources-reemploi', FormationLabel.CollectifRessourcesEtActeursReemploi],
['etapes-numeriques', FormationLabel.EtapesNumeriques],
['fabrique-de-territoire', FormationLabel.FabriquesDeTerritoire],
['les-eclaireurs', FormationLabel.LesEclaireurs],
['mes-papiers', FormationLabel.MesPapiers],
['ordi-3', FormationLabel.Ordi3],
['sud-labs', FormationLabel.SudLabs]
]);
const TYPES_TO_MODALITES_ACCOMPAGNEMENT_MAP = new Map([
['autonomie', ModaliteAccompagnement.EnAutonomie],
['accompagnement', ModaliteAccompagnement.AccompagnementIndividuel],
['delegation', ModaliteAccompagnement.AccompagnementIndividuel],
['atelier', ModaliteAccompagnement.DansUnAtelier]
]);
const PROFILS_TO_PRISES_EN_CHARGE_SPECIFIQUE = new Map([
['surdite', PriseEnChargeSpecifique.Surdite],
['handicaps-mentaux', PriseEnChargeSpecifique.HandicapsMentaux],
['personnes-en-situation-illettrisme', PriseEnChargeSpecifique.Illettrisme],
['public-langues-etrangeres', PriseEnChargeSpecifique.LanguesEtrangeresAutre],
['deficience-visuelle', PriseEnChargeSpecifique.DeficienceVisuelle]
]);
const PROFILS_TO_PUBLICS_SPECIFIQUEMENT_ADRESSES = new Map([
['jeunes-16-26', PublicSpecifiquementAdresse.Jeunes],
['familles-enfants', PublicSpecifiquementAdresse.FamillesEnfants],
['seniors-65', PublicSpecifiquementAdresse.Seniors],
['femmes', PublicSpecifiquementAdresse.Femmes]
]);
export const TYPOLOGIES_MAP = new Map([
['ACI', Typologie.ACI],
['ACIPHC', Typologie.ACIPHC],
['AFPA', Typologie.AFPA],
['AI', Typologie.AI],
['ASE', Typologie.ASE],
['ASSO', Typologie.ASSO],
['ASSO_CHOMEUR', Typologie.ASSO_CHOMEUR],
['Autre', Typologie.AUTRE],
['AVIP', Typologie.AVIP],
['BIB', Typologie.BIB],
['CAARUD', Typologie.CAARUD],
['CADA', Typologie.CADA],
['CAF', Typologie.CAF],
['CAP_EMPLOI', Typologie.CAP_EMPLOI],
['CAVA', Typologie.CAVA],
['CC', Typologie.CC],
['CCAS', Typologie.CCAS],
['CCONS', Typologie.CCONS],
['CD', Typologie.CD],
['CDAS', Typologie.CDAS],
['CFP', Typologie.CFP],
['CHRS', Typologie.CHRS],
['CHU', Typologie.CHU],
['CIAS', Typologie.CIAS],
['CIDFF', Typologie.CIDFF],
['CITMET', Typologie.CITMET],
['CMP', Typologie.CMP],
['CMS', Typologie.CMS],
['CPAM', Typologie.CPAM],
['CPH', Typologie.CPH],
['CS', Typologie.CS],
['CSAPA', Typologie.CSAPA],
['CSC', Typologie.CSC],
['DEETS', Typologie.DEETS],
['DEPT', Typologie.DEPT],
['DIPLP', Typologie.DIPLP],
['E2C', Typologie.E2C],
['EA', Typologie.EA],
['EATT', Typologie.EATT],
['EI', Typologie.EI],
['EITI', Typologie.EITI],
['ENM', Typologie.ENM],
['EPCI', Typologie.EPCI],
['EPI', Typologie.EPI],
['EPIDE', Typologie.EPIDE],
['EPN', Typologie.EPN],
['ES', Typologie.ES],
['ESS', Typologie.ESS],
['ETTI', Typologie.ETTI],
['EVS', Typologie.EVS],
['FABLAB', Typologie.FABLAB],
['FAIS', Typologie.FAIS],
['FT', Typologie.FT],
['GEIQ', Typologie.GEIQ],
['HUDA', Typologie.HUDA],
['LA_POSTE', Typologie.LA_POSTE],
['MDE', Typologie.MDE],
['MDEF', Typologie.MDEF],
['MDPH', Typologie.MDPH],
['MDS', Typologie.MDS],
['MJC', Typologie.MJC],
['ML', Typologie.ML],
['MQ', Typologie.MQ],
['MSA', Typologie.MSA],
['MSAP', Typologie.MSAP],
['MUNI', Typologie.MUNI],
['OACAS', Typologie.OACAS],
['ODC', Typologie.ODC],
['OF', Typologie.OF],
['OIL', Typologie.OIL],
['OPCS', Typologie.OPCS],
['PAD', Typologie.PAD],
['PE', Typologie.FT],
['PENSION', Typologie.PENSION],
['PI', Typologie.PI],
['PIJ_BIJ', Typologie.PIJ_BIJ],
['PIMMS', Typologie.PIMMS],
['PJJ', Typologie.PJJ],
['PLIE', Typologie.PLIE],
['PREF', Typologie.PREF],
['PREVENTION', Typologie.PREVENTION],
['REG', Typologie.REG],
['RESSOURCERIE', Typologie.RESSOURCERIE],
['RFS', Typologie.RFS],
['RS_FJT', Typologie.RS_FJT],
['SCP', Typologie.SCP],
['SPIP', Typologie.SPIP],
['TIERS_LIEUX', Typologie.TIERS_LIEUX],
['UDAF', Typologie.UDAF]
]);
export const conditionsAccesFromDataInclusion = (conditionsAcces) => conditionsAcces == null || conditionsAcces.length === 0
? {}
: {
frais_a_charge: FraisACharge(conditionsAcces
.map((conditionAcces) => FRAIS_TO_CONDITION_ACCES.get(conditionAcces))
.filter((conditionAcces) => conditionAcces != null))
};
export const contactFromDataInclusion = (courriel, telephone, site_web) => courriel == null && telephone == null && site_web == null
? {}
: {
contact: Contact({
...(courriel == null ? {} : { courriels: courriel.split('|').map(Courriel) }),
...(telephone == null ? {} : { telephone }),
...(site_web == null ? {} : { site_web: site_web.split('|').map(Url) })
})
};
export const localisationFromDataInclusion = (latitude, longitude) => latitude == null || longitude == null ? {} : { localisation: Localisation({ latitude, longitude }) };
const formationsLabelsFromLabelsNationaux = (labelsNationaux) => {
const formationsLabels = FormationsLabels(labelsNationaux
.map((formationLabel) => FORMATIONS_LABELS_MAP.get(formationLabel))
.filter((formationLabel) => formationLabel != null));
return formationsLabels.length === 0 ? {} : { formations_labels: formationsLabels };
};
const dispositifProgrammesNationauxFromLabelsNationaux = (labelsNationaux) => {
const dispositifProgrammesNationaux = DispositifProgrammesNationaux(labelsNationaux
.map((labelNational) => DISPOSITIF_PROGRAMMES_NATIONAUX_MAP.get(labelNational))
.filter((labelNational) => labelNational != null));
return dispositifProgrammesNationaux.length === 0 ? {} : { dispositif_programmes_nationaux: dispositifProgrammesNationaux };
};
export const labelsFromDataInclusion = (labelsNationaux, labelsAutres) => ({
...(labelsNationaux == null ? {} : dispositifProgrammesNationauxFromLabelsNationaux(labelsNationaux)),
...(labelsNationaux == null ? {} : formationsLabelsFromLabelsNationaux(labelsNationaux)),
...(labelsAutres == null ? {} : { autres_formations_labels: labelsAutres })
});
const hasCodeInsee = (structure) => structure.code_insee == null && structure._di_geocodage_code_insee == null;
export const adresseFromDataInclusion = (structure) => ({
adresse: Adresse({
code_postal: structure.code_postal,
commune: structure.commune,
voie: structure.adresse,
...(structure.complement_adresse == null ? {} : { complement_adresse: structure.complement_adresse }),
...(hasCodeInsee(structure) ? {} : { code_insee: structure.code_insee ?? structure._di_geocodage_code_insee })
})
});
export const servicesFromDataInclusion = (thematiques) => ({
services: Services(thematiques
?.map((thematique) => THEMATIQUES_TO_SERVICES.get(thematique))
.filter((service) => service != null) ?? [])
});
export const modalitesAccompagnementFromDataInclusion = (types, modesAccueil) => types == null || types.length === 0
? {}
: {
modalites_accompagnement: ModalitesAccompagnement([
...types
.map((type) => TYPES_TO_MODALITES_ACCOMPAGNEMENT_MAP.get(type))
.filter((modalitesAccompagnement) => modalitesAccompagnement != null),
...(modesAccueil?.includes('a-distance') === true ? [ModaliteAccompagnement.ADistance] : [])
])
};
export const presentationFromDataInclusion = (presentation_detail, presentation_resume) => presentation_detail == null && presentation_resume == null
? {}
: {
presentation: {
...(presentation_detail == null ? {} : { detail: presentation_detail }),
...(presentation_resume == null ? {} : { resume: presentation_resume })
}
};
export const publicSpecifiquementAdresseFromDataInclusion = (profils) => profils == null || profils.length === 0
? {}
: {
publics_specifiquement_adresses: PublicsSpecifiquementAdresses(profils
.map((profil) => PROFILS_TO_PUBLICS_SPECIFIQUEMENT_ADRESSES.get(profil))
.filter((publicSpecifiquementAdresse) => publicSpecifiquementAdresse != null))
};
export const priseEnChargeSpecifiqueFromDataInclusion = (profils) => profils == null || profils.length === 0
? {}
: {
prise_en_charge_specifique: PrisesEnChargeSpecifiques(profils
.map((profil) => PROFILS_TO_PRISES_EN_CHARGE_SPECIFIQUE.get(profil))
.filter((priseEnChargeSpecifique) => priseEnChargeSpecifique != null))
};
export const typologiesFromDataInclusion = (typologie) => typologie == null ? {} : { typologies: Typologies([typologie]) };
export const sourceFromDataInclusion = (source) => (source == null ? {} : { source });
export const accessibiliteFromDataInclusion = (accessibilite) => accessibilite == null ? {} : { fiche_acces_libre: Url(accessibilite) };
export const horairesFromDataInclusion = (horaires) => (horaires == null ? {} : { horaires });
export const priseRdvFromDataInclusion = (priseRdv) => priseRdv == null ? {} : { prise_rdv: Url(priseRdv) };
export const structureParenteFromDataInclusion = (structureParente) => structureParente == null ? {} : { structure_parente: structureParente };
export const mergeThematiques = (thematiques, thematiquesToAdd) => ({
thematiques: Array.from(new Set([...(thematiques ?? []), ...(thematiquesToAdd ?? [])]))
});
export const mergeProfils = (profils, profilsToAdd) => ({
profils: Array.from(new Set([...(profils ?? []), ...(profilsToAdd ?? [])]))
});
export const mergeTypes = (types, typesToAdd) => ({
types: Array.from(new Set([...(types ?? []), ...(typesToAdd ?? [])]))
});
export const mergeModesAccueil = (modesAccueil, modesAccueilToAdd) => ({
modes_accueil: Array.from(new Set([...(modesAccueil ?? []), ...(modesAccueilToAdd ?? [])]))
});
const fraisIfDefined = (frais) => (frais == null ? {} : { frais });
export const mergeFrais = (frais, fraisToAdd) => fraisIfDefined(Array.from(new Set([...(frais ?? []), ...(fraisToAdd ?? [])])));
export const mergePriseRdv = (priseRdv, priseRdvToAdd) => priseRdv == null && priseRdvToAdd == null ? {} : { prise_rdv: priseRdvToAdd ?? priseRdv ?? '' };
const defaultModalitesAcces = (priseRdv) => priseRdv?.prise_rdv == null ? [] : [ModaliteAcces.PrendreRdvEnLigne];
const onlyDefined = (nullable) => nullable != null;
const toModaliteAccess = (modeOrientation) => MODES_ORIENTATION_TO_MODALITE_ACCES.get(modeOrientation);
const hasModesOrientation = (modesOrientation) => modesOrientation != null && modesOrientation.length > 0;
export const modalitesAccesFromDataInclusion = (modesOrientation, priseRdv) => ({
modalites_acces: ModalitesAcces([
...defaultModalitesAcces(priseRdv),
...(hasModesOrientation(modesOrientation)
? Array.from(new Set(modesOrientation)).map(toModaliteAccess).filter(onlyDefined)
: [ModaliteAcces.SePresenter, ModaliteAcces.Telephoner, ModaliteAcces.ContacterParMail])
])
});
export const mergeModesOrientationBeneficiaire = (modesOrientationBeneficiaire, modesOrientationBeneficiaireToAdd) => ({
modes_orientation_beneficiaire: Array.from(new Set([...(modesOrientationBeneficiaire ?? []), ...(modesOrientationBeneficiaireToAdd ?? [])]))
});
export const mergeModesOrientationAccompagnateur = (modesOrientationAccompagnateur, modesOrientationAccompagnateurToAdd) => ({
modes_orientation_accompagnateur: Array.from(new Set([...(modesOrientationAccompagnateur ?? []), ...(modesOrientationAccompagnateurToAdd ?? [])]))
});