diff --git a/src/models/index.ts b/src/models/index.ts index 0f4034e..fd4e055 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -17,3 +17,4 @@ export * from './url'; export * from './lieu-mediation-numerique'; export * from './model'; export * from './presentation'; +export * from './modalite-acces'; diff --git a/src/models/lieu-mediation-numerique.ts b/src/models/lieu-mediation-numerique.ts index 910e5c5..0c94941 100644 --- a/src/models/lieu-mediation-numerique.ts +++ b/src/models/lieu-mediation-numerique.ts @@ -10,6 +10,7 @@ import { Services } from './service'; import { PublicsAccueillis } from './public-accueilli'; import { ConditionsAcces } from './condition-acces'; import { ModalitesAccompagnement } from './modalite-accompagnement'; +import { ModalitesAcces } from './modalite-acces'; import { Url } from './url'; import { Pivot } from './pivot'; import { CleBan } from './cle-ban'; @@ -34,6 +35,7 @@ export type LieuMediationNumerique = { services: Services; publics_accueillis?: PublicsAccueillis; conditions_acces?: ConditionsAcces; + modalites_acces?: ModalitesAcces; labels_nationaux?: LabelsNationaux; labels_autres?: string[]; modalites_accompagnement?: ModalitesAccompagnement; diff --git a/src/models/modalite-acces/errors/index.ts b/src/models/modalite-acces/errors/index.ts new file mode 100644 index 0000000..11bee17 --- /dev/null +++ b/src/models/modalite-acces/errors/index.ts @@ -0,0 +1 @@ +export * from './modalite-acces.error'; diff --git a/src/models/modalite-acces/errors/modalite-acces.error.ts b/src/models/modalite-acces/errors/modalite-acces.error.ts new file mode 100644 index 0000000..febdb91 --- /dev/null +++ b/src/models/modalite-acces/errors/modalite-acces.error.ts @@ -0,0 +1,9 @@ +import { ModelError } from '../../../errors'; +import { LieuMediationNumerique } from '../../lieu-mediation-numerique'; +import { ModaliteAcces, ModalitesAccesIndefinie } from '../modalite-acces'; + +export class ModalitesAccesError extends ModelError { + constructor(modalitesAcces: ModaliteAcces | ModalitesAccesIndefinie) { + super('modalites_acces', `La modalité d'accès '${modalitesAcces}' n'est pas une valeur admise`); + } +} diff --git a/src/models/modalite-acces/index.ts b/src/models/modalite-acces/index.ts new file mode 100644 index 0000000..f8cb56b --- /dev/null +++ b/src/models/modalite-acces/index.ts @@ -0,0 +1,2 @@ +export * from './errors'; +export * from './modalite-acces'; diff --git a/src/models/modalite-acces/modalite-acces.spec.ts b/src/models/modalite-acces/modalite-acces.spec.ts new file mode 100644 index 0000000..69dadb3 --- /dev/null +++ b/src/models/modalite-acces/modalite-acces.spec.ts @@ -0,0 +1,22 @@ +import { ModalitesAccesError } from './errors'; +import { ModaliteAcces, ModalitesAcces } from './modalite-acces'; + +describe('modalite acces model', (): void => { + it('should create valid modalites acces', (): void => { + const modalitesAcces: ModalitesAcces = ModalitesAcces([ModaliteAcces.SePresenter]); + + expect(modalitesAcces).toStrictEqual([ModaliteAcces.SePresenter]); + }); + + it('should not create invalid modalites acces', (): void => { + expect((): void => { + ModalitesAcces(['Venir sur place' as ModaliteAcces]); + }).toThrow(new ModalitesAccesError('Venir sur place' as ModaliteAcces)); + }); + + it('should not create invalid modalite acces containing a valid and an invalid value', (): void => { + expect((): void => { + ModalitesAcces([ModaliteAcces.SePresenter, 'Venir sur place' as ModaliteAcces]); + }).toThrow(new ModalitesAccesError('Venir sur place' as ModaliteAcces)); + }); +}); diff --git a/src/models/modalite-acces/modalite-acces.ts b/src/models/modalite-acces/modalite-acces.ts new file mode 100644 index 0000000..d6cf9ac --- /dev/null +++ b/src/models/modalite-acces/modalite-acces.ts @@ -0,0 +1,28 @@ +import { Model } from '../model'; +import { ModalitesAccesError } from './errors'; + +export enum ModaliteAcces { + SePresenter = 'Se présenter', + Telephoner = 'Téléphoner', + ContacterParMail = 'Contacter par mail', + PrendreRdvEnLigne = 'Prendre un RDV en ligne', + PasDePublic = "Ce lieu n'accueille pas de public" +} + +export type ModalitesAcces = Model<'ModalitesAcces', ModaliteAcces[]>; + +export type ModalitesAccesIndefinie = "modalité d'accès indéfinie"; + +const firstInvalidModaliteAcces = (modaliteAcces: ModaliteAcces): boolean => + !Object.values(ModaliteAcces).includes(modaliteAcces); + +const throwModalitesAccesError = (modalitesAcces: ModaliteAcces[]): ModalitesAcces => { + throw new ModalitesAccesError(modalitesAcces.find(firstInvalidModaliteAcces) ?? "modalité d'accès indéfinie"); +}; + +const isModalitesAcces = (modalitesAcces: ModaliteAcces[]): modalitesAcces is ModalitesAcces => + modalitesAcces.find(firstInvalidModaliteAcces) == null; + +/* eslint-disable-next-line @typescript-eslint/naming-convention */ +export const ModalitesAcces = (modalitesAcces: ModaliteAcces[]): ModalitesAcces => + isModalitesAcces(modalitesAcces) ? modalitesAcces : throwModalitesAccesError(modalitesAcces); diff --git a/src/transfer/schema-data-inclusion/from-schema-data-inclusion/from-schema-data-inclusion-fields.ts b/src/transfer/schema-data-inclusion/from-schema-data-inclusion/from-schema-data-inclusion-fields.ts index afc48a1..1381115 100644 --- a/src/transfer/schema-data-inclusion/from-schema-data-inclusion/from-schema-data-inclusion-fields.ts +++ b/src/transfer/schema-data-inclusion/from-schema-data-inclusion/from-schema-data-inclusion-fields.ts @@ -9,7 +9,9 @@ import { LabelNational, LabelsNationaux, Localisation, + ModaliteAcces, ModaliteAccompagnement, + ModalitesAcces, ModalitesAccompagnement, /* eslint-disable-next-line @typescript-eslint/no-shadow */ Presentation, @@ -48,6 +50,13 @@ export const FRAIS_TO_CONDITION_ACCES: Map = new Map = new Map([ + ['se-presenter', ModaliteAcces.SePresenter], + ['telephoner', ModaliteAcces.Telephoner], + ['envoyer-un-mail', ModaliteAcces.ContacterParMail], + ['prise-rdv', ModaliteAcces.PrendreRdvEnLigne] +]); + const LABELS_NATIONAUX_MAP: Map = new Map([ ['aidants-connect', LabelNational.AidantsConnect], ['aptic', LabelNational.APTIC], @@ -228,12 +237,44 @@ export const modalitesAccompagnementFromDataInclusion = ( types .map((type: string): ModaliteAccompagnement | undefined => TYPES_TO_MODALITES_ACCOMPAGNEMENT_MAP.get(type)) .filter( - (modalitesAccompagnement?: ModaliteAccompagnement): modalitesAccompagnement is ModaliteAccompagnement => - modalitesAccompagnement != null + (modaliteAccompagnement?: ModaliteAccompagnement): modaliteAccompagnement is ModaliteAccompagnement => + modaliteAccompagnement != null ) ) }; +const getModalitesAccesDefault = (): ModaliteAcces[] => [ + ModaliteAcces.SePresenter, + ModaliteAcces.Telephoner, + ModaliteAcces.ContacterParMail +]; + +const getModalitesAccesByMap = (modesOrientation: string[]): ModaliteAcces[] => + modesOrientation + .map((modeOrientation: string): ModaliteAcces | undefined => MODES_ORIENTATION_TO_MODALITE_ACCES.get(modeOrientation)) + .filter((modaliteAcces?: ModaliteAcces): modaliteAcces is ModaliteAcces => modaliteAcces != null); + +export const modalitesAccesFromDataInclusion = ( + modesOrientation?: string[], + priseRdv?: { prise_rdv?: Url } +): { modalites_acces?: ModalitesAcces } => { + let modalitesAccesList: ModaliteAcces[] = []; + + if (priseRdv?.prise_rdv != null) { + modalitesAccesList.push(ModaliteAcces.PrendreRdvEnLigne); + } + + if (modesOrientation == null || modesOrientation.length === 0) { + modalitesAccesList = modalitesAccesList.concat(getModalitesAccesDefault()); + } else { + modalitesAccesList = modalitesAccesList.concat(getModalitesAccesByMap(modesOrientation)); + } + + return { + modalites_acces: ModalitesAcces(modalitesAccesList) + }; +}; + export const presentationFromDataInclusion = ( presentation_detail?: string, presentation_resume?: string @@ -295,3 +336,10 @@ export const mergeFrais = (frais?: string[], fraisToAdd?: string[]): { frais?: s export const mergePriseRdv = (priseRdv?: string, priseRdvToAdd?: string): { prise_rdv?: string } => priseRdv == null && priseRdvToAdd == null ? {} : { prise_rdv: priseRdvToAdd ?? priseRdv ?? '' }; + +export const mergeModesOrientation = ( + modesOrientation?: string[], + modesOrientationToAdd?: string[] +): { modes_orientation: string[] } => ({ + modes_orientation: Array.from(new Set([...(modesOrientation ?? []), ...(modesOrientationToAdd ?? [])])) +}); diff --git a/src/transfer/schema-data-inclusion/from-schema-data-inclusion/from-schema-data-inclusion.spec.ts b/src/transfer/schema-data-inclusion/from-schema-data-inclusion/from-schema-data-inclusion.spec.ts index 5bbc79f..6a6033f 100644 --- a/src/transfer/schema-data-inclusion/from-schema-data-inclusion/from-schema-data-inclusion.spec.ts +++ b/src/transfer/schema-data-inclusion/from-schema-data-inclusion/from-schema-data-inclusion.spec.ts @@ -10,7 +10,9 @@ import { LabelsNationaux, LieuMediationNumerique, Localisation, + ModaliteAcces, ModaliteAccompagnement, + ModalitesAcces, ModalitesAccompagnement, Nom, Pivot, @@ -59,6 +61,7 @@ describe('from schema data inclusion', (): void => { voie: '12 BIS RUE DE LECLERCQ' }), services: Services([Service.DevenirAutonomeDansLesDemarchesAdministratives]), + modalites_acces: ModalitesAcces([ModaliteAcces.SePresenter, ModaliteAcces.Telephoner, ModaliteAcces.ContacterParMail]), date_maj: new Date('2022-10-10') }); }); @@ -162,6 +165,12 @@ describe('from schema data inclusion', (): void => { Service.PromouvoirLaCitoyenneteNumerique, Service.SoutenirLaParentalite ]), + modalites_acces: ModalitesAcces([ + ModaliteAcces.PrendreRdvEnLigne, + ModaliteAcces.SePresenter, + ModaliteAcces.Telephoner, + ModaliteAcces.ContacterParMail + ]), date_maj: new Date('2022-10-10'), localisation: Localisation({ latitude: 43.52609, @@ -286,6 +295,7 @@ describe('from schema data inclusion', (): void => { voie: '12 BIS RUE DE LECLERCQ' }), services: Services([Service.DevenirAutonomeDansLesDemarchesAdministratives]), + modalites_acces: ModalitesAcces([ModaliteAcces.SePresenter, ModaliteAcces.Telephoner, ModaliteAcces.ContacterParMail]), date_maj: new Date('2022-10-10') }); }); @@ -323,6 +333,7 @@ describe('from schema data inclusion', (): void => { voie: '12 BIS RUE DE LECLERCQ' }), services: Services([Service.DevenirAutonomeDansLesDemarchesAdministratives]), + modalites_acces: ModalitesAcces([ModaliteAcces.SePresenter, ModaliteAcces.Telephoner, ModaliteAcces.ContacterParMail]), date_maj: new Date('2022-10-10') }); }); @@ -382,6 +393,7 @@ describe('from schema data inclusion', (): void => { voie: '12 BIS RUE DE LECLERCQ' }), services: Services([Service.DevenirAutonomeDansLesDemarchesAdministratives, Service.AccederAUneConnexionInternet]), + modalites_acces: ModalitesAcces([ModaliteAcces.SePresenter, ModaliteAcces.Telephoner, ModaliteAcces.ContacterParMail]), date_maj: new Date('2022-10-10') }); }); @@ -427,6 +439,7 @@ describe('from schema data inclusion', (): void => { voie: '12 BIS RUE DE LECLERCQ' }), services: Services([Service.DevenirAutonomeDansLesDemarchesAdministratives, Service.AccederAUneConnexionInternet]), + modalites_acces: ModalitesAcces([ModaliteAcces.SePresenter, ModaliteAcces.Telephoner, ModaliteAcces.ContacterParMail]), date_maj: new Date('2022-10-10'), conditions_acces: ConditionsAcces([ConditionAcces.Payant, ConditionAcces.Gratuit]) }); @@ -490,6 +503,12 @@ describe('from schema data inclusion', (): void => { Service.PrendreEnMainUnSmartphoneOuUneTablette, Service.PrendreEnMainUnOrdinateur ]), + modalites_acces: ModalitesAcces([ + ModaliteAcces.PrendreRdvEnLigne, + ModaliteAcces.SePresenter, + ModaliteAcces.Telephoner, + ModaliteAcces.ContacterParMail + ]), date_maj: new Date('2022-10-10'), publics_accueillis: PublicsAccueillis([ PublicAccueilli.Seniors, @@ -506,4 +525,86 @@ describe('from schema data inclusion', (): void => { prise_rdv: Url('https://www.rdv-solidarites.fr/service2') }); }); + + it('should get modalite acces with prise rdv', (): void => { + const structure: SchemaStructureDataInclusion = { + adresse: '12 BIS RUE DE LECLERCQ', + code_postal: '51100', + commune: 'Reims', + date_maj: new Date('2022-10-10').toISOString(), + id: 'structure-1', + nom: 'Anonymal', + siret: '43493312300029' + }; + + const service: SchemaServiceDataInclusion = { + id: 'structure-1-mediation-numerique', + nom: 'Médiation numérique', + source: 'Hubik', + structure_id: 'structure-1', + thematiques: ['numerique--devenir-autonome-dans-les-demarches-administratives'], + modes_orientation: ['se-presenter'], + prise_rdv: 'http://www.test.com' + }; + + const minimalLieuMediationNumerique: LieuMediationNumerique = fromSchemaDataInclusion([service], structure); + + expect(minimalLieuMediationNumerique).toStrictEqual({ + id: Id('structure-1'), + nom: Nom('Anonymal'), + pivot: Pivot('43493312300029'), + adresse: Adresse({ + code_postal: '51100', + commune: 'Reims', + voie: '12 BIS RUE DE LECLERCQ' + }), + services: Services([Service.DevenirAutonomeDansLesDemarchesAdministratives]), + date_maj: new Date('2022-10-10'), + modalites_acces: ModalitesAcces([ModaliteAcces.PrendreRdvEnLigne, ModaliteAcces.SePresenter]), + prise_rdv: Url('http://www.test.com') + }); + }); + + it('should get defaut modalites when no modes orientation from data inclusion', (): void => { + const structure: SchemaStructureDataInclusion = { + adresse: '12 BIS RUE DE LECLERCQ', + code_postal: '51100', + commune: 'Reims', + date_maj: new Date('2022-10-10').toISOString(), + id: 'structure-1', + nom: 'Anonymal', + siret: '43493312300029' + }; + + const service: SchemaServiceDataInclusion = { + id: 'structure-1-mediation-numerique', + nom: 'Médiation numérique', + source: 'Hubik', + structure_id: 'structure-1', + thematiques: ['numerique--devenir-autonome-dans-les-demarches-administratives'], + prise_rdv: 'http://www.test.com' + }; + + const minimalLieuMediationNumerique: LieuMediationNumerique = fromSchemaDataInclusion([service], structure); + + expect(minimalLieuMediationNumerique).toStrictEqual({ + id: Id('structure-1'), + nom: Nom('Anonymal'), + pivot: Pivot('43493312300029'), + adresse: Adresse({ + code_postal: '51100', + commune: 'Reims', + voie: '12 BIS RUE DE LECLERCQ' + }), + services: Services([Service.DevenirAutonomeDansLesDemarchesAdministratives]), + date_maj: new Date('2022-10-10'), + modalites_acces: ModalitesAcces([ + ModaliteAcces.PrendreRdvEnLigne, + ModaliteAcces.SePresenter, + ModaliteAcces.Telephoner, + ModaliteAcces.ContacterParMail + ]), + prise_rdv: Url('http://www.test.com') + }); + }); }); diff --git a/src/transfer/schema-data-inclusion/from-schema-data-inclusion/from-schema-data-inclusion.ts b/src/transfer/schema-data-inclusion/from-schema-data-inclusion/from-schema-data-inclusion.ts index 58074f2..2c70d26 100644 --- a/src/transfer/schema-data-inclusion/from-schema-data-inclusion/from-schema-data-inclusion.ts +++ b/src/transfer/schema-data-inclusion/from-schema-data-inclusion/from-schema-data-inclusion.ts @@ -1,4 +1,4 @@ -/* eslint-disable @typescript-eslint/naming-convention, camelcase */ +/* eslint-disable @typescript-eslint/naming-convention, camelcase, max-lines-per-function */ import { Id, LieuMediationNumerique, Nom, Pivot } from '../../../models'; import { SchemaServiceDataInclusion, SchemaStructureDataInclusion } from '../schema-data-inclusion'; @@ -11,10 +11,12 @@ import { labelsFromDataInclusion, localisationFromDataInclusion, mergeFrais, + mergeModesOrientation, mergePriseRdv, mergeProfils, mergeThematiques, mergeTypes, + modalitesAccesFromDataInclusion, modalitesAccompagnementFromDataInclusion, presentationFromDataInclusion, priseRdvFromDataInclusion, @@ -36,7 +38,8 @@ const toSingleService = ( ...mergeFrais(mergedService.frais, service.frais), ...mergeProfils(mergedService.profils, service.profils), ...mergeTypes(mergedService.types, service.types), - ...mergePriseRdv(mergedService.prise_rdv, service.prise_rdv) + ...mergePriseRdv(mergedService.prise_rdv, service.prise_rdv), + ...mergeModesOrientation(mergedService.modes_orientation, service.modes_orientation) }); export const mergeServices = ( @@ -73,6 +76,7 @@ const fromSchemaDataInclusionItem = ( ...horairesFromDataInclusion(structure.horaires_ouverture), ...labelsFromDataInclusion(structure.labels_nationaux, structure.labels_autres), ...modalitesAccompagnementFromDataInclusion(service.types), + ...modalitesAccesFromDataInclusion(service.modes_orientation, priseRdvFromDataInclusion(service.prise_rdv)), ...presentationFromDataInclusion(structure.presentation_detail, structure.presentation_resume), ...priseRdvFromDataInclusion(service.prise_rdv), ...publicsAccueillisFromDataInclusion(service.profils), diff --git a/src/transfer/schema-data-inclusion/schema-data-inclusion.ts b/src/transfer/schema-data-inclusion/schema-data-inclusion.ts index 271f8fb..028ffac 100644 --- a/src/transfer/schema-data-inclusion/schema-data-inclusion.ts +++ b/src/transfer/schema-data-inclusion/schema-data-inclusion.ts @@ -66,6 +66,7 @@ export type SchemaStructureDataInclusionCollecteFields = { export type SchemaStructureDataInclusionAccesFields = { profils?: string[]; frais?: string[]; + modes_orientation?: string[]; types?: string[]; }; diff --git a/src/transfer/schema-data-inclusion/to-schema-data-inclusion/to-schema-data-inclusion-fields.ts b/src/transfer/schema-data-inclusion/to-schema-data-inclusion/to-schema-data-inclusion-fields.ts index 776c76f..edd887f 100644 --- a/src/transfer/schema-data-inclusion/to-schema-data-inclusion/to-schema-data-inclusion-fields.ts +++ b/src/transfer/schema-data-inclusion/to-schema-data-inclusion/to-schema-data-inclusion-fields.ts @@ -4,6 +4,7 @@ import { ConditionAcces, LabelNational, LieuMediationNumerique, + ModaliteAcces, ModaliteAccompagnement, PublicAccueilli, Service @@ -46,6 +47,12 @@ const MODALITES_ACCOMPAGNEMENT_TO_TYPES_MAP: Map [ModaliteAccompagnement.DansUnAtelier, 'atelier'] ]); +const MODALITES_ACCES_TO_MODES_ORIENTATION_MAP: Map = new Map([ + [ModaliteAcces.SePresenter, 'se-presenter'], + [ModaliteAcces.Telephoner, 'telephoner'], + [ModaliteAcces.ContacterParMail, 'envoyer-un-mail'] +]); + const CONDITION_ACCES_TO_FRAIS: Map = new Map([ [ConditionAcces.Gratuit, 'gratuit'], [ConditionAcces.GratuitSousCondition, 'gratuit-sous-conditions'], @@ -212,6 +219,14 @@ const typesFromModalitesAccompagnement = (lieuMediationNumerique: LieuMediationN .filter((type: string | null): type is string => type != null) }); +const modesOrientationFromModalitesAcces = ( + lieuMediationNumerique: LieuMediationNumerique +): { modes_orientation: string[] } => ({ + modes_orientation: (lieuMediationNumerique.modalites_acces ?? []) + .map((modaliteAcces: ModaliteAcces): string | null => MODALITES_ACCES_TO_MODES_ORIENTATION_MAP.get(modaliteAcces) ?? null) + .filter((modaliteAccompagnement: string | null): modaliteAccompagnement is string => modaliteAccompagnement != null) +}); + const profilsFromPublicsAccueillis = (lieuMediationNumerique: LieuMediationNumerique): { profils: string[] } => ({ profils: (lieuMediationNumerique.publics_accueillis ?? []) .map((publicAccueilli: PublicAccueilli): string | null => PUBLICS_ACCUEILLIS_TO_PROFILS.get(publicAccueilli) ?? null) @@ -223,5 +238,6 @@ export const accesFields = (lieuMediationNumerique: LieuMediationNumerique): Sch ...(lieuMediationNumerique.conditions_acces == null ? {} : fraisFromConditionAcces(lieuMediationNumerique.conditions_acces.at(0))), - ...(lieuMediationNumerique.publics_accueillis == null ? {} : profilsFromPublicsAccueillis(lieuMediationNumerique)) + ...(lieuMediationNumerique.publics_accueillis == null ? {} : profilsFromPublicsAccueillis(lieuMediationNumerique)), + ...(lieuMediationNumerique.modalites_acces == null ? {} : modesOrientationFromModalitesAcces(lieuMediationNumerique)) }); diff --git a/src/transfer/schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique-fields.ts b/src/transfer/schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique-fields.ts index f2b7832..cdcdd8c 100644 --- a/src/transfer/schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique-fields.ts +++ b/src/transfer/schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique-fields.ts @@ -7,6 +7,8 @@ import { Contact, LabelsNationaux, Localisation, + ModaliteAcces, + ModalitesAcces, ModalitesAccompagnement, /* eslint-disable @typescript-eslint/no-shadow */ Presentation, @@ -91,6 +93,13 @@ export const publicsAccueillisIfAny = (publicsAccueillis?: string): { publics_ac export const conditionsAccesIfAny = (conditionsAcces?: string): { conditions_acces?: ConditionsAcces } => conditionsAcces == null ? {} : { conditions_acces: ConditionsAcces(listFromString(conditionsAcces)) }; +export const modalitesAccesIfAny = (modalitesAcces?: string): { modalites_acces?: ModalitesAcces } => + modalitesAcces == null + ? { + modalites_acces: ModalitesAcces([ModaliteAcces.SePresenter, ModaliteAcces.Telephoner, ModaliteAcces.ContacterParMail]) + } + : { modalites_acces: ModalitesAcces(listFromString(modalitesAcces)) }; + export const labelsNationauxIfAny = (labelsNationaux?: string): { labels_nationaux?: LabelsNationaux } => labelsNationaux == null ? {} : { labels_nationaux: LabelsNationaux(listFromString(labelsNationaux)) }; diff --git a/src/transfer/schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique.spec.ts b/src/transfer/schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique.spec.ts index 64f498a..a4e08bc 100644 --- a/src/transfer/schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique.spec.ts +++ b/src/transfer/schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique.spec.ts @@ -11,7 +11,9 @@ import { LabelsNationaux, LieuMediationNumerique, Localisation, + ModaliteAcces, ModaliteAccompagnement, + ModalitesAcces, ModalitesAccompagnement, Nom, Pivot, @@ -63,6 +65,7 @@ describe('from schema lieux de mediation numerique', (): void => { Service.AccederAUneConnexionInternet, Service.AccederADuMateriel ]), + modalites_acces: ModalitesAcces([ModaliteAcces.SePresenter, ModaliteAcces.Telephoner, ModaliteAcces.ContacterParMail]), date_maj: new Date('2022-10-10') } ]); @@ -102,6 +105,7 @@ describe('from schema lieux de mediation numerique', (): void => { labels_autres: 'SudLabs;Nièvre médiation numérique', modalites_accompagnement: "Seul : j'ai accès à du matériel et une connexion;Avec de l'aide : je suis accompagné seul dans l'usage du numérique", + modalites_acces: 'Se présenter', accessibilite: 'https://acceslibre.beta.gouv.fr/app/29-lampaul-plouarzel/a/bibliotheque-mediatheque/erp/mediatheque-13/', prise_rdv: 'https://www.rdv-solidarites.fr/', @@ -132,6 +136,7 @@ describe('from schema lieux de mediation numerique', (): void => { Service.AccederAUneConnexionInternet, Service.AccederADuMateriel ]), + modalites_acces: ModalitesAcces([ModaliteAcces.SePresenter]), date_maj: new Date('2022-10-10'), localisation: Localisation({ latitude: 43.52609, diff --git a/src/transfer/schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique.ts b/src/transfer/schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique.ts index c89da5f..0d31bb4 100644 --- a/src/transfer/schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique.ts +++ b/src/transfer/schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique/from-schema-lieux-de-mediation-numerique.ts @@ -13,6 +13,7 @@ import { labelsNationauxIfAny, listFromString, localisationIfAny, + modalitesAccesIfAny, modalitesAccompagnementIfAny, presentationIfAny, priseRdvIfAny, @@ -33,6 +34,7 @@ const optionalFields = (schemaLieuMediationNumeriqueItem: SchemaLieuMediationNum ...structureParenteIfAny(schemaLieuMediationNumeriqueItem.structure_parente), ...publicsAccueillisIfAny(schemaLieuMediationNumeriqueItem.publics_accueillis), ...conditionsAccesIfAny(schemaLieuMediationNumeriqueItem.conditions_acces), + ...modalitesAccesIfAny(schemaLieuMediationNumeriqueItem.modalites_acces), ...labelsNationauxIfAny(schemaLieuMediationNumeriqueItem.labels_nationaux), ...labelsAutresIfAny(schemaLieuMediationNumeriqueItem.labels_autres), ...modalitesAccompagnementIfAny(schemaLieuMediationNumeriqueItem.modalites_accompagnement), diff --git a/src/transfer/schema-lieux-de-mediation-numerique/schema-lieux-de-mediation-numerique.ts b/src/transfer/schema-lieux-de-mediation-numerique/schema-lieux-de-mediation-numerique.ts index 589177e..159d2cd 100644 --- a/src/transfer/schema-lieux-de-mediation-numerique/schema-lieux-de-mediation-numerique.ts +++ b/src/transfer/schema-lieux-de-mediation-numerique/schema-lieux-de-mediation-numerique.ts @@ -39,6 +39,7 @@ export type SchemaLieuMediationNumeriqueAccesFields = { conditions_acces?: string; modalites_accompagnement?: string; accessibilite?: string; + modalites_acces?: string; }; export type SchemaLieuMediationNumeriqueLabelsFields = { diff --git a/src/transfer/schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique-fields.ts b/src/transfer/schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique-fields.ts index f95a40e..c5dce1e 100644 --- a/src/transfer/schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique-fields.ts +++ b/src/transfer/schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique-fields.ts @@ -66,6 +66,9 @@ export const accesFields = (lieuMediationNumerique: LieuMediationNumerique): Sch ...(lieuMediationNumerique.conditions_acces == null ? {} : { conditions_acces: lieuMediationNumerique.conditions_acces.join(';') }), + ...(lieuMediationNumerique.modalites_acces == null + ? {} + : { modalites_acces: lieuMediationNumerique.modalites_acces.join(';') }), ...(lieuMediationNumerique.modalites_accompagnement == null ? {} : { modalites_accompagnement: lieuMediationNumerique.modalites_accompagnement.join(';') }), diff --git a/src/transfer/schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique.spec.ts b/src/transfer/schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique.spec.ts index e9a9baa..ffbcd4e 100644 --- a/src/transfer/schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique.spec.ts +++ b/src/transfer/schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique/to-schema-lieux-de-mediation-numerique.spec.ts @@ -11,7 +11,9 @@ import { LabelsNationaux, LieuMediationNumerique, Localisation, + ModaliteAcces, ModaliteAccompagnement, + ModalitesAcces, ModalitesAccompagnement, Nom, Pivot, @@ -89,6 +91,7 @@ describe('to schema lieux de mediation numerique', (): void => { Service.AccederAUneConnexionInternet, Service.AccederADuMateriel ]), + modalites_acces: ModalitesAcces([ModaliteAcces.SePresenter]), date_maj: new Date('2022-10-10'), localisation: Localisation({ latitude: 43.52609, @@ -151,6 +154,7 @@ describe('to schema lieux de mediation numerique', (): void => { source: 'Hubik', structure_parente: 'Pôle emploi', publics_accueillis: 'Familles/enfants;Adultes;Déficience visuelle', + modalites_acces: 'Se présenter', conditions_acces: "Payant : L'accès au lieu et/ou à ses services est payant;Accepte le Pass numérique : Il est possible d'utiliser un Pass numérique pour accéder au lieu", labels_nationaux: 'France Services;APTIC;Point relais CAF',