From 7aa818da00d75770a621f6823e10576d14915849 Mon Sep 17 00:00:00 2001
From: Bastien Dumont <bdumont@grandlyon.com>
Date: Mon, 26 Jun 2023 09:03:32 +0200
Subject: [PATCH 01/19] chore: type recap language

---
 .../orientation-recap/orientation-recap.component.ts            | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/app/form/orientation-form-view/global-components/orientation-recap/orientation-recap.component.ts b/src/app/form/orientation-form-view/global-components/orientation-recap/orientation-recap.component.ts
index 949c26c85..d4d33cc96 100644
--- a/src/app/form/orientation-form-view/global-components/orientation-recap/orientation-recap.component.ts
+++ b/src/app/form/orientation-form-view/global-components/orientation-recap/orientation-recap.component.ts
@@ -20,7 +20,7 @@ export class OrientationRecapComponent implements OnInit {
   public orientator: { structureName: string; structureMail: string; structurePhone: string };
   public comment: string;
   public beneficiary: any;
-  public recap: { day: string; hours: string; month: string; language: string };
+  public recap: { day: string; hours: string; month: string; language?: string };
 
   constructor(private datePipe: DatePipe) {}
 
-- 
GitLab


From 04e32efdff5ab852537a1e3eabdbbe7e46a366c1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marl=C3=A8ne=20SIMONDANT?= <msimondant@grandlyon.com>
Date: Mon, 10 Jul 2023 15:43:35 +0000
Subject: [PATCH 02/19] feat(orientation) : RDV en ligne V2 - parcours
 principal

---
 src/app/carto/carto.component.html            |   2 +
 src/app/carto/carto.component.ts              |  27 +-
 .../form/form-view/form-view.component.html   |   2 +-
 .../base-skills-choice.component.html         |   2 +-
 .../enums/AppointmentSteps.enum.ts            |  10 +
 .../enums/MeetingRDVSSteps.enum.ts            |  10 -
 .../enums/hotlineMediationSteps.enum.ts       |   2 +-
 .../enums/onlineDemarche.enum.ts              |   2 +-
 .../enums/structuresListSteps.enum.ts         |   2 +-
 .../information-screen.component.html         |  10 +-
 .../navigation/navigation.component.html      |  16 +-
 .../navigation/navigation.component.ts        |   3 +-
 .../needs-selection.component.html            |   2 +-
 .../structure-orientator.component.html       |  10 +-
 .../structure-orientator.component.scss       |   9 +
 .../interfaces/appointment.interface.ts       |  11 +
 .../interfaces/appointmentForm.interface.ts   |  16 ++
 .../interfaces/meetingRDVSForm.interface.ts   |  11 -
 .../appointment-end.component.html            |  14 +
 .../appointment-end.component.scss}           |   0
 .../appointment-end.component.ts              |  32 +++
 .../make-appointment.component.html           |  63 +++++
 .../make-appointment.component.scss           |  79 ++++++
 .../make-appointment.component.ts             |  49 ++++
 ...ediation-language-selection.component.html |   2 +-
 .../meeting-digital-pass.component.html       |   9 -
 .../meeting-digital-pass.component.ts         |  23 --
 .../meeting-rdvs-doing.component.html         |  10 -
 .../meeting-rdvs-doing.component.ts           |  95 -------
 .../accompaniment-type.component.html         |   2 +-
 .../accompaniment-type.component.ts           |  13 +-
 .../online-demarch.component.html             |   2 +-
 ...mediation-beneficiary-info.component.html} |  34 ++-
 .../mediation-beneficiary-info.component.scss |  11 +
 .../mediation-beneficiary-info.component.ts}  |  13 +-
 .../mediation-hours-selection.component.html  |   2 +-
 .../onlineDemarch-form.component.html         |  62 +++--
 .../onlineDemarch-form.component.ts           |  37 ++-
 .../orientation-form-view.component.html      |   2 +-
 .../orientation-form-view.component.ts        | 165 +++++++++---
 .../orientation-comments.component.html       |   2 +-
 .../orientation-structure-list.component.html |   4 +-
 .../orientation-structure-list.component.ts   |  19 +-
 .../orientation.module.ts                     |  12 +-
 .../types/onlineDemarcheStep.type.ts          |   4 +-
 .../types/orientation.type.ts                 |   4 -
 src/app/guards/deactivate.guard.ts            |   2 +-
 src/app/map/components/map.component.scss     |  11 -
 src/app/map/components/map.component.ts       |   1 +
 src/app/models/owner.model.ts                 |   1 +
 src/app/models/structure.model.ts             |   1 +
 .../services/online-mediation.service.spec.ts |  16 --
 ...ce.spec.ts => orientation.service.spec.ts} |   8 +-
 ...tion.service.ts => orientation.service.ts} |  12 +-
 src/app/services/rdvs.service.ts              |  22 --
 src/app/services/structure.service.ts         |  12 +-
 .../components/button/button.component.html   |  15 --
 .../components/button/buttonType.enum.ts      |   1 -
 .../structure-pmr.component.html              |   2 +-
 .../components/card/card.component.html       |  22 +-
 .../components/card/card.component.scss       |   4 +
 .../components/card/card.component.ts         |   8 +
 .../structure-details.component.ts            |   6 +-
 .../structure-list.component.html             |   2 +
 .../structure-list.component.ts               |   6 +
 src/app/utils/orientationUtils.ts             |  87 +++---
 src/assets/form/rdvsImage.svg                 | 228 ----------------
 src/assets/form/rdvsImageNotFound.svg         | 250 ------------------
 src/assets/ico/sprite.svg                     |   8 +-
 69 files changed, 714 insertions(+), 922 deletions(-)
 create mode 100644 src/app/form/orientation-form-view/enums/AppointmentSteps.enum.ts
 delete mode 100644 src/app/form/orientation-form-view/enums/MeetingRDVSSteps.enum.ts
 create mode 100644 src/app/form/orientation-form-view/interfaces/appointment.interface.ts
 create mode 100644 src/app/form/orientation-form-view/interfaces/appointmentForm.interface.ts
 delete mode 100644 src/app/form/orientation-form-view/interfaces/meetingRDVSForm.interface.ts
 create mode 100644 src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.html
 rename src/app/form/orientation-form-view/online-demarch/{meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.scss => appointment/appointment-end/appointment-end.component.scss} (100%)
 create mode 100644 src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.ts
 create mode 100644 src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html
 create mode 100644 src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.scss
 create mode 100644 src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.ts
 delete mode 100644 src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component.html
 delete mode 100644 src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component.ts
 delete mode 100644 src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.html
 delete mode 100644 src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.ts
 rename src/app/form/orientation-form-view/online-demarch/online-mediation/{mediation-beneciary-info/mediation-beneciary-info.component.html => mediation-beneficiary-info/mediation-beneficiary-info.component.html} (59%)
 create mode 100644 src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.scss
 rename src/app/form/orientation-form-view/online-demarch/online-mediation/{mediation-beneciary-info/mediation-beneciary-info.component.ts => mediation-beneficiary-info/mediation-beneficiary-info.component.ts} (62%)
 delete mode 100644 src/app/form/orientation-form-view/types/orientation.type.ts
 delete mode 100644 src/app/services/online-mediation.service.spec.ts
 rename src/app/services/{rdvs.service.spec.ts => orientation.service.spec.ts} (51%)
 rename src/app/services/{online-mediation.service.ts => orientation.service.ts} (57%)
 delete mode 100644 src/app/services/rdvs.service.ts
 delete mode 100644 src/assets/form/rdvsImage.svg
 delete mode 100644 src/assets/form/rdvsImageNotFound.svg

diff --git a/src/app/carto/carto.component.html b/src/app/carto/carto.component.html
index 18994671e..90416a26c 100644
--- a/src/app/carto/carto.component.html
+++ b/src/app/carto/carto.component.html
@@ -11,12 +11,14 @@
       [isLoading]="isLoadingStructures"
       [selectedStructureList]="structuresSelected"
       [isOrientation]="isOrientationForm"
+      [isOrientationRdv]="isOrientationRdv"
       [location]="currentLocation"
       [selectedStructure]="currentStructure"
       [ngClass]="{ mapPhone: isMapPhone === true }"
       (displayMapMarkerId)="setMapMarkerId($event)"
       (selectedMarkerId)="setSelectedMarkerId($event)"
       (structureSelected)="selectStructure($event)"
+      (structureRDVSelected)="selectStructureRDV($event)"
     />
     <div class="btnSwitch">
       <app-button
diff --git a/src/app/carto/carto.component.ts b/src/app/carto/carto.component.ts
index 0571ea605..2bd0e98b9 100644
--- a/src/app/carto/carto.component.ts
+++ b/src/app/carto/carto.component.ts
@@ -19,11 +19,13 @@ import { CustomRegExp } from '../utils/CustomRegExp';
 })
 export class CartoComponent implements OnInit {
   @Input() public isOrientationForm = false;
+  @Input() public isOrientationRdv = false;
   @Input() public filters: Filter[] = [];
   @Input() public userLatitude: number = null;
   @Input() public userLongitude: number = null;
   @Input() public structuresSelected: Structure[] = [];
   @Output() structureSelection = new EventEmitter<any>();
+  @Output() structureSelectionRDV = new EventEmitter<any>();
 
   public structures: Structure[] = [];
   public isLoadingStructures: boolean = true;
@@ -69,6 +71,9 @@ export class CartoComponent implements OnInit {
 
   public getStructures(filters: Filter[]): void {
     this.isLoadingStructures = true;
+    let mustLoadStructures: boolean = false;
+    let sortByDistance: boolean = false;
+
     const queryString = _.find(filters, { name: 'query' });
     if (queryString) {
       this.searchedValue = queryString.value;
@@ -83,20 +88,20 @@ export class CartoComponent implements OnInit {
           this.isLoadingStructures = false;
         });
       } else {
-        this.structureService.getStructures(filters).subscribe((structures) => {
-          if (structures) {
-            this.updateStructuresDistance(structures, this.userLongitude, this.userLatitude, false);
-          } else {
-            this.structures = [];
-          }
-          this.isLoadingStructures = false;
-        });
+        mustLoadStructures = true;
+        sortByDistance = false;
       }
     } else {
       this.searchedValue = null;
+      mustLoadStructures = true;
+      sortByDistance = true;
+    }
+
+    if (mustLoadStructures) {
       this.structureService.getStructures(filters).subscribe((structures) => {
         if (structures) {
-          this.updateStructuresDistance(structures, this.userLongitude, this.userLatitude);
+          if (this.isOrientationRdv) structures = structures.filter((structure) => structure.withAppointment);
+          this.updateStructuresDistance(structures, this.userLongitude, this.userLatitude, sortByDistance);
         } else {
           this.structures = [];
         }
@@ -229,4 +234,8 @@ export class CartoComponent implements OnInit {
     this.structuresSelected = structures;
     this.structureSelection.emit(this.structuresSelected);
   }
+
+  public selectStructureRDV(structure: Structure): void {
+    this.structureSelectionRDV.emit(structure);
+  }
 }
diff --git a/src/app/form/form-view/form-view.component.html b/src/app/form/form-view/form-view.component.html
index 3b83ab9f2..0c0bf2c9a 100644
--- a/src/app/form/form-view/form-view.component.html
+++ b/src/app/form/form-view/form-view.component.html
@@ -44,7 +44,7 @@
       (setEditStep)="setCurrentStep($event)"
     />
     <app-personal-offer-form
-      *ngIf="formType[routeParam] === formType.personaloffer"
+      *ngIf="formType[routeParam] === formType.personaloffer && structure"
       [nbSteps]="nbSteps"
       [personalOfferForm]="personalOfferForm"
       [currentStep]="currentPage"
diff --git a/src/app/form/orientation-form-view/base-skills/base-skills-choice/base-skills-choice.component.html b/src/app/form/orientation-form-view/base-skills/base-skills-choice/base-skills-choice.component.html
index ab87c686e..3c886550d 100644
--- a/src/app/form/orientation-form-view/base-skills/base-skills-choice/base-skills-choice.component.html
+++ b/src/app/form/orientation-form-view/base-skills/base-skills-choice/base-skills-choice.component.html
@@ -1,4 +1,4 @@
-<h2>De quelle compétence(s) numérique(s) le bénéficiaire a-t-il besoin ?</h2>
+<h2>Quel est le besoin numérique de la personne ?</h2>
 
 <div fxLayout="column" fxLayoutGap="32px">
   <div class="btn-grid">
diff --git a/src/app/form/orientation-form-view/enums/AppointmentSteps.enum.ts b/src/app/form/orientation-form-view/enums/AppointmentSteps.enum.ts
new file mode 100644
index 000000000..1769cc2dd
--- /dev/null
+++ b/src/app/form/orientation-form-view/enums/AppointmentSteps.enum.ts
@@ -0,0 +1,10 @@
+export enum AppointmentSteps {
+  infoScreen,
+  structureOrientator,
+  pmrAccess,
+  location,
+  carto,
+  makeAppointment,
+  mediationBeneficiaryInfo,
+  rdvEnd,
+}
diff --git a/src/app/form/orientation-form-view/enums/MeetingRDVSSteps.enum.ts b/src/app/form/orientation-form-view/enums/MeetingRDVSSteps.enum.ts
deleted file mode 100644
index a7e54b7b9..000000000
--- a/src/app/form/orientation-form-view/enums/MeetingRDVSSteps.enum.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export enum MeetingRDVSSteps {
-  infoScreen,
-  structureOrientator,
-  publicTypeMandatory,
-  publicTypeOptional,
-  pmrAccess,
-  digitalPass,
-  location,
-  rdvsDoing
-}
diff --git a/src/app/form/orientation-form-view/enums/hotlineMediationSteps.enum.ts b/src/app/form/orientation-form-view/enums/hotlineMediationSteps.enum.ts
index 1e8c39bdd..f3e6c54ca 100644
--- a/src/app/form/orientation-form-view/enums/hotlineMediationSteps.enum.ts
+++ b/src/app/form/orientation-form-view/enums/hotlineMediationSteps.enum.ts
@@ -1,6 +1,6 @@
 export enum HotlineMediationSteps {
   infoScreen,
-  mediationBeneciaryInfo,
+  mediationBeneficiaryInfo,
   mediationHoursSelection,
   mediationLanguageSelection,
   orientationRecap,
diff --git a/src/app/form/orientation-form-view/enums/onlineDemarche.enum.ts b/src/app/form/orientation-form-view/enums/onlineDemarche.enum.ts
index 3aa41e049..791d5d81b 100644
--- a/src/app/form/orientation-form-view/enums/onlineDemarche.enum.ts
+++ b/src/app/form/orientation-form-view/enums/onlineDemarche.enum.ts
@@ -1,6 +1,6 @@
 export enum OnlineDemarche {
   common = 'Common',
   structureList = 'Trouver une structure',
-  meetings = 'RDV Conseiller Numérique',
+  appointment = 'RDV Conseiller Numérique',
   onlineMediation = 'Médiation Numérique à distance',
 }
diff --git a/src/app/form/orientation-form-view/enums/structuresListSteps.enum.ts b/src/app/form/orientation-form-view/enums/structuresListSteps.enum.ts
index 6587fbaec..f3fe927b7 100644
--- a/src/app/form/orientation-form-view/enums/structuresListSteps.enum.ts
+++ b/src/app/form/orientation-form-view/enums/structuresListSteps.enum.ts
@@ -3,7 +3,7 @@ export enum StructuresListSteps {
   address,
   structureChoice,
   structureOrientator,
-  mediationBeneciaryInfo,
+  mediationBeneficiaryInfo,
   comments,
   orientationRecap,
 }
diff --git a/src/app/form/orientation-form-view/global-components/information-screen/information-screen.component.html b/src/app/form/orientation-form-view/global-components/information-screen/information-screen.component.html
index 13b50f16e..d03f7499a 100644
--- a/src/app/form/orientation-form-view/global-components/information-screen/information-screen.component.html
+++ b/src/app/form/orientation-form-view/global-components/information-screen/information-screen.component.html
@@ -1,10 +1,10 @@
-<div *ngIf="currentType === currentTypeEnum.meetings" class="container">
-  <img src="../../../../../assets/img/rdvsBeginning.svg" alt="Meeting image" />
-  <h2>Vous vous apprêtez à prendre RDV auprès d'un Conseiller numérique</h2>
+<div *ngIf="currentType === currentTypeEnum.appointment" class="container">
+  <img src="../../../../../assets/img/rdvsBeginning.svg" alt="Appointment image" />
+  <h2>Vous vous apprêtez à prendre RDV auprès d'un·e accompagnant·e numérique</h2>
   <p>
     Ces professionnels sont là pour accompagner les publics sur des problématiques liées au numérique et non aux
-    démarches administratives en elles-mêmes. Si le frein est uniquement administratif, merci d'orienter le bénéficiaire
-    vers un lieu type "Maison France services"
+    démarches administratives en elles-mêmes. Si le frein est uniquement administratif, merci d’orienter le bénéficiaire
+    vers un lieu type “Maison France services”
   </p>
 </div>
 <div *ngIf="currentType === currentTypeEnum.onlineMediation" class="container">
diff --git a/src/app/form/orientation-form-view/global-components/navigation/navigation.component.html b/src/app/form/orientation-form-view/global-components/navigation/navigation.component.html
index 75b0265e7..1b4300645 100644
--- a/src/app/form/orientation-form-view/global-components/navigation/navigation.component.html
+++ b/src/app/form/orientation-form-view/global-components/navigation/navigation.component.html
@@ -1,14 +1,14 @@
 <div class="footerForm" fxLayout="row" fxLayoutGap="10px" fxLayoutAlign="center center">
   <ng-container *ngIf="!shouldResetOrientation">
     <app-button
-      *ngIf="currentStep !== null && !hideNavButtons"
+      *ngIf="currentStep !== null && !(isLastStep && needType === 2)"
       [text]="'Précédent'"
       [iconType]="'form'"
       [iconBtn]="'chevronLeft'"
       (action)="prevPage()"
     />
     <app-button
-      *ngIf="!isRdvsWindowStep && !hideNavButtons"
+      *ngIf="!hideNavButtons"
       [text]="isLastStep ? 'Terminer' : 'Suivant'"
       [iconBtn]="!isLastStep ? 'chevronRight' : 'finish'"
       [iconType]="'form'"
@@ -17,19 +17,9 @@
       [disabled]="!isPageValid"
       (action)="nextPage()"
     />
-    <app-button
-      *ngIf="isRdvsWindowStep && !hideNavButtons"
-      [text]="'RDV Solidarités'"
-      [iconBtn]="'redirect'"
-      [iconType]="'form'"
-      [iconPos]="'left'"
-      [style]="buttonTypeEnum.RdvsButton"
-      [disabled]="!isPageValid"
-      (action)="nextPage()"
-    />
   </ng-container>
   <ng-container *ngIf="shouldResetOrientation">
-    <app-button [text]="'Aller à la cartographie'" (action)="goCarto()" />
+    <app-button [text]="'Cartographie'" (action)="goCarto()" />
     <app-button [text]="'Recommencer'" [style]="buttonTypeEnum.Primary" (action)="resetOrientation()" />
   </ng-container>
 </div>
diff --git a/src/app/form/orientation-form-view/global-components/navigation/navigation.component.ts b/src/app/form/orientation-form-view/global-components/navigation/navigation.component.ts
index 9c88bbb35..43385e348 100644
--- a/src/app/form/orientation-form-view/global-components/navigation/navigation.component.ts
+++ b/src/app/form/orientation-form-view/global-components/navigation/navigation.component.ts
@@ -18,7 +18,6 @@ export class NavigationComponent {
   @Input() isPageValid: boolean;
   @Input() needType: NeedsType;
   @Input() isLastStep = false;
-  @Input() isRdvsWindowStep = false;
   @Input() hideNavButtons = false;
   @Input() shouldResetOrientation = false;
 
@@ -42,7 +41,7 @@ export class NavigationComponent {
     this.router.routeReuseStrategy.shouldReuseRoute = () => false;
     this.router.onSameUrlNavigation = 'reload';
     this.router.navigate(['./'], { relativeTo: this.route });
-  
+
     // avoid blocking the main thread and freezing the app
     setTimeout(() => {
       location.reload();
diff --git a/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.html b/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.html
index 2f650951f..c04c4fb2b 100644
--- a/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.html
+++ b/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.html
@@ -1,4 +1,4 @@
-<h2>Quels sont les besoins du bénéficiaire ?</h2>
+<h2>Quels sont les besoins de la personnne ?</h2>
 <app-multi-radio-form
   [items]="needsList"
   [displayIcon]="true"
diff --git a/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html b/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html
index 80243dcf7..4eccefa90 100644
--- a/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html
+++ b/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html
@@ -1,4 +1,4 @@
-<h2>Quelle structure oriente le bénéficiaire ?</h2>
+<h2>Quelle structure oriente la personne ?</h2>
 <div *ngIf="hasStructures && structuresLinked.length >= 2" class="select-structure border">
   <div class="number">{{ structuresLinked.length }} structures sont associées à votre compte</div>
   <div
@@ -49,7 +49,7 @@
       </div>
     </div>
     <div class="form-group" fxLayout="column">
-      <label for="structureMail">Email de votre structure</label>
+      <label for="structureMail">Email de votre structure<sup class="footnote-nb">1</sup></label>
       <p class="notRequired">Facultatif</p>
       <div fxLayout="row" fxLayoutGap="13px">
         <input
@@ -74,7 +74,7 @@
       </div>
     </div>
     <div class="form-group" fxLayout="column">
-      <label for="structurePhone">Téléphone de votre structure</label>
+      <label for="structurePhone">Téléphone de votre structure<sup class="footnote-nb">1</sup></label>
       <p class="notRequired">Facultatif</p>
       <div fxLayout="row" fxLayoutGap="13px">
         <input
@@ -99,4 +99,8 @@
       </div>
     </div>
   </form>
+  <p class="footnote">
+    <sup class="footnote-nb">1</sup> Un moyen de communication (email et/ou téléphone) est obligatoire pour valider
+    cette étape
+  </p>
 </div>
diff --git a/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.scss b/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.scss
index 088c84851..197f472ea 100644
--- a/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.scss
+++ b/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.scss
@@ -56,3 +56,12 @@
 .notRequired {
   margin-bottom: 0;
 }
+
+sup {
+  color: red;
+  font-size: $font-size-xxsmall;
+}
+.footnote {
+  margin-top: 2em;
+  font-size: $font-size-xmsmall;
+}
diff --git a/src/app/form/orientation-form-view/interfaces/appointment.interface.ts b/src/app/form/orientation-form-view/interfaces/appointment.interface.ts
new file mode 100644
index 000000000..0a43eb127
--- /dev/null
+++ b/src/app/form/orientation-form-view/interfaces/appointment.interface.ts
@@ -0,0 +1,11 @@
+export interface IAppointment {
+  structureOrientator: { structureName: string; structureMail: string; structurePhone: string };
+  structureRDV: string;
+  onlineDemarcheType: string[];
+  socialWorkerId: string;
+  details: string;
+  name: string;
+  surname: string;
+  email: string;
+  phone: string;
+}
diff --git a/src/app/form/orientation-form-view/interfaces/appointmentForm.interface.ts b/src/app/form/orientation-form-view/interfaces/appointmentForm.interface.ts
new file mode 100644
index 000000000..a679e82e0
--- /dev/null
+++ b/src/app/form/orientation-form-view/interfaces/appointmentForm.interface.ts
@@ -0,0 +1,16 @@
+import { FormControl, FormGroup } from '@angular/forms';
+import { StructureOrientator } from './structureOrientator.interface';
+
+export interface AppointmentForm {
+  structureOrientator: FormGroup<StructureOrientator>;
+  structureRDV: FormControl<string>;
+  pmrAccess: FormControl<boolean>;
+  address: FormControl<string>;
+  onlineDemarcheType: FormControl<any>;
+  socialWorkerId: FormControl<string>;
+  details: FormControl<any>;
+  name: FormControl<string>;
+  surname: FormControl<string>;
+  email: FormControl<any>;
+  phone: FormControl<any>;
+}
diff --git a/src/app/form/orientation-form-view/interfaces/meetingRDVSForm.interface.ts b/src/app/form/orientation-form-view/interfaces/meetingRDVSForm.interface.ts
deleted file mode 100644
index a6582b6cd..000000000
--- a/src/app/form/orientation-form-view/interfaces/meetingRDVSForm.interface.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { FormControl, FormGroup, UntypedFormGroup } from '@angular/forms';
-import { StructureOrientator } from './structureOrientator.interface';
-
-export interface MeetingRDVSForm {
-  structureOrientator: FormGroup<StructureOrientator>;
-  categories: UntypedFormGroup;
-  pmrAccess: FormControl<boolean>;
-  digitalPass: FormControl<boolean>;
-  address: FormControl<string>;
-  onlineDemarcheType: FormControl<any>;
-}
diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.html b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.html
new file mode 100644
index 000000000..4d4d6a997
--- /dev/null
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.html
@@ -0,0 +1,14 @@
+<div *ngIf="structureRDV" class="container">
+  <img src="../../../../../../assets/form/structureCreated.svg" alt="rdv illustration" />
+  <h2>Votre demande de RDV a été transmise !</h2>
+  <p>
+    La demande de <b>rendez-vous auprès d’un conseiller ou une conseillère numérique</b> a bien été transmise à
+    <b>{{ socialWorkerName.name | userName }} {{ socialWorkerName.surname | uppercase }}</b> au sein de la structure
+    <b>{{ structureRDV.structureName }}</b>
+  </p>
+</div>
+<div *ngIf="!structureRDV" class="container">
+  <img src="../../../../../../assets/img/joinRefused.svg" alt="rdv illustration" />
+  <h2>Aucune structure correspondant à votre recherche ne propose de rendez-vous</h2>
+  <p>Renouvelez votre recherche avec des critères différents ou accédez à la cartographie</p>
+</div>
diff --git a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.scss b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.scss
similarity index 100%
rename from src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.scss
rename to src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.scss
diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.ts b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.ts
new file mode 100644
index 000000000..bfe24100d
--- /dev/null
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.ts
@@ -0,0 +1,32 @@
+import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
+import { UntypedFormGroup } from '@angular/forms';
+import { Owner } from '../../../../../models/owner.model';
+import { Structure } from '../../../../../models/structure.model';
+import { NotificationService } from '../../../../../services/notification.service';
+
+@Component({
+  selector: 'app-appointment-end',
+  templateUrl: './appointment-end.component.html',
+  styleUrls: ['./appointment-end.component.scss'],
+})
+export class AppointmentEndComponent implements OnInit {
+  @Input() form: UntypedFormGroup;
+  @Input() structureRDV: Structure;
+  @Input() socialWorkerName: Owner;
+  @Output() setResetOrientation = new EventEmitter();
+  @Output() checkValidation = new EventEmitter<any>();
+
+  constructor(private notificationService: NotificationService) {}
+
+  async ngOnInit(): Promise<void> {
+    this.checkValidation.emit();
+    try {
+      if (!this.structureRDV) {
+        this.setResetOrientation.emit();
+      }
+    } catch (error) {
+      console.error(error);
+      this.notificationService.showError('Une erreur est survenue', error.message);
+    }
+  }
+}
diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html
new file mode 100644
index 000000000..12291aefe
--- /dev/null
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html
@@ -0,0 +1,63 @@
+<form [formGroup]="form">
+  <div class="title">
+    <h3>Vous allez prendre rendez-vous avec la structure :</h3>
+  </div>
+
+  <div class="structure" tabindex="0" fxLayout="column">
+    <div fxLayout="row" fxLayoutAlign="space-between center" fxLayoutGap="16px">
+      <div fxLayout="row" fxLayoutAlign="center center" fxLayoutGap="8px">
+        <app-svg-icon [type]="'ico'" [icon]="structureRDV?.getTypeStructureIcon()" [iconClass]="'icon-52'" />
+        <div fxLayout="column" fxLayoutAlign="end">
+          <div fxLayout="row" class="structure-name-container">
+            <span class="structure-name">{{ structureRDV.structureName }}</span>
+          </div>
+          <span class="structure-type">{{ structureRDV.getLabelTypeStructure() }}</span>
+        </div>
+      </div>
+      <div fxLayout="column" fxLayoutAlign="none end">
+        <div class="structure-place">{{ structureRDV.address.commune }}</div>
+      </div>
+    </div>
+  </div>
+  <div class="profile">
+    <h4>Sélectionnez un·e accompagnant·e numérique</h4>
+    <div
+      *ngFor="let owner of owners"
+      class="profile-single selected"
+      fxLayout="row"
+      fxLayoutAlign="left center"
+      fxLayoutGap="16px"
+      [ngClass]="{ selected: this.form.get('socialWorkerId')?.value === owner._id }"
+    >
+      <input
+        type="radio"
+        formControlName="socialWorkerId"
+        id="{{ owner._id }}"
+        value="{{ owner._id }}"
+        (change)="onRadioChange(owner)"
+      />
+      <label for="{{ owner._id }}">
+        <app-svg-icon class="avatar" [type]="'avatar'" [icon]="'defaultAvatar'" [iconClass]="'icon-40'" />
+        <div fxLayout="column" fxLayoutAlign="start">
+          <div fxLayout="row" class="profile-name-container">
+            <span class="profile-name">{{ owner.name | userName }} {{ owner.surname | uppercase }}</span>
+          </div>
+          <span class="profile-job">{{ owner.job?.name }}</span>
+        </div>
+      </label>
+    </div>
+  </div>
+  <div class="details">
+    <label for="details-field">Précisez les besoins de la personne (disponibilités...) :</label>
+    <div fxLayout="row" fxLayoutAlign="left center" fxLayoutGap="16px">
+      <textarea
+        formControlName="details"
+        id="details"
+        name="details-field"
+        rows="10"
+        maxlength="1000"
+        (change)="onDetailsChange()"
+      ></textarea>
+    </div>
+  </div>
+</form>
diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.scss b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.scss
new file mode 100644
index 000000000..d668532e2
--- /dev/null
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.scss
@@ -0,0 +1,79 @@
+@import 'color';
+@import 'typography';
+
+.structure {
+  margin-top: 24px;
+  padding: 24px 32px 24px 48px;
+  border: 2px solid $grey-6;
+  border-radius: 8px 8px 0 0;
+  min-height: 110px;
+  display: flex;
+  justify-content: center;
+  .typeStructure {
+    color: $grey-3;
+    @include lato-regular-16;
+    font-style: italic;
+  }
+  .structure-name-container {
+    align-items: center;
+  }
+  .structure-name {
+    @include lato-bold-18;
+    color: $grey-1;
+    width: 100%;
+  }
+  .structure-place {
+    color: $grey-3;
+  }
+}
+.profile {
+  padding: 0 32px 24px 48px;
+  border: 2px solid $grey-6;
+  border-top: none;
+  min-height: 110px;
+  display: flex;
+  justify-content: center;
+  flex-direction: column;
+  .profile-single {
+    padding: 16px 8px;
+    border: 1px solid transparent;
+    &.selected {
+      border-color: black;
+    }
+  }
+  .profile-job {
+    color: $grey-3;
+    @include lato-regular-16;
+    font-style: italic;
+  }
+  .profile-name-container {
+    align-items: center;
+  }
+  .profile-name {
+    @include lato-bold-18;
+    color: $grey-1;
+    width: 100%;
+  }
+  h4 {
+    @include lato-bold-18;
+  }
+  ::ng-deep svg {
+    padding: 0 24px 0 8px;
+  }
+  label {
+    display: flex;
+    flex-direction: row;
+    cursor: pointer;
+  }
+}
+.details {
+  margin-top: 40px;
+  label {
+    @include lato-regular-16;
+    padding-bottom: 8px;
+  }
+  textarea {
+    width: 100%;
+    margin-top: 8px;
+  }
+}
diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.ts b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.ts
new file mode 100644
index 000000000..639e6af71
--- /dev/null
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.ts
@@ -0,0 +1,49 @@
+import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
+import { AbstractControl, UntypedFormGroup } from '@angular/forms';
+import { Observable } from 'rxjs';
+import { map } from 'rxjs/operators';
+import { Owner } from '../../../../../models/owner.model';
+import { Structure } from '../../../../../models/structure.model';
+import { StructureService } from '../../../../../services/structure.service';
+
+@Component({
+  selector: 'app-make-appointment',
+  templateUrl: './make-appointment.component.html',
+  styleUrls: ['./make-appointment.component.scss'],
+})
+export class MakeAppointmentComponent implements OnInit {
+  @Input() form: UntypedFormGroup;
+  @Input() structureRDV: Structure;
+  @Output() checkValidation = new EventEmitter<any>();
+  @Output() socialWorkerName = new EventEmitter<Owner>();
+
+  public owners: Owner[];
+  //public selectedOption: string;
+
+  constructor(private structureService: StructureService) {}
+
+  ngOnInit(): void {
+    this.checkValidation.emit();
+
+    this.findOwners(this.structureRDV._id).subscribe((owners) => {
+      this.owners = owners.filter((owner) => owner.withAppointment && owner.job?.hasPersonalOffer);
+    });
+  }
+
+  private findOwners(structureId: string): Observable<Owner[]> {
+    return this.structureService.getStructureWithOwners(structureId).pipe(map((result) => result.owners));
+  }
+
+  public getStructureControl(nameControl: string): AbstractControl {
+    return this.form.get(nameControl);
+  }
+
+  public onRadioChange(socialWorker: Owner): void {
+    this.socialWorkerName.emit(socialWorker);
+    this.checkValidation.emit();
+  }
+
+  public onDetailsChange(): void {
+    this.checkValidation.emit();
+  }
+}
diff --git a/src/app/form/orientation-form-view/online-demarch/mediation-language-selection/mediation-language-selection.component.html b/src/app/form/orientation-form-view/online-demarch/mediation-language-selection/mediation-language-selection.component.html
index 8efeb4f4a..eacdee046 100644
--- a/src/app/form/orientation-form-view/online-demarch/mediation-language-selection/mediation-language-selection.component.html
+++ b/src/app/form/orientation-form-view/online-demarch/mediation-language-selection/mediation-language-selection.component.html
@@ -1,4 +1,4 @@
-<h2>Dans quelle langue le bénéficiaire souhaite-t-il être rappelé ?</h2>
+<h2>Dans quelle langue la personne souhaite-t-elle être rappelée ?</h2>
 
 <app-multi-radio-form
   [items]="languages"
diff --git a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component.html b/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component.html
deleted file mode 100644
index e7842d478..000000000
--- a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<form [formGroup]="form">
-  <div class="title">
-    <h3>Le bénéficiaire dispose-t-il de Pass numériques ?</h3>
-    <p>Facultatif</p>
-  </div>
-
-  <app-radio-form [selectedOption]="form.get('digitalPass').value" (selectedEvent)="handleChange($event)">
-  </app-radio-form>
-</form>
diff --git a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component.ts b/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component.ts
deleted file mode 100644
index 9a424f860..000000000
--- a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
-import { UntypedFormGroup } from '@angular/forms';
-
-@Component({
-  selector: 'app-meeting-digital-pass',
-  templateUrl: './meeting-digital-pass.component.html',
-})
-export class MeetingDigitalPassComponent implements OnInit {
-  @Input() form: UntypedFormGroup;
-  @Output() checkValidation = new EventEmitter<any>();
-
-  ngOnInit(): void {
-    this.checkValidation.emit();
-  }
-  public handleChange(val: boolean) {
-    this.form.get('digitalPass').patchValue(val);
-    this.checkValidation.emit();
-  }
-
-  public isSelected(): boolean {
-    return this.form.get('digitalPass').value;
-  }
-}
diff --git a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.html b/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.html
deleted file mode 100644
index 797174e97..000000000
--- a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<div *ngIf="!shouldReset" class="container">
-  <img src="../../../../../../assets/form/rdvsImage.svg" alt="rdvs illustration" />
-  <h2>Votre orientation sur Rés'in est terminée !</h2>
-  <p>Si toutefois votre recherche n'a pas aboutie, nous vous invitons à renouveler votre recherche en modifiant certains critères ou vous orienter vers la cartographie</p>
-</div>
-<div *ngIf="shouldReset" class="container">
-  <img src="../../../../../../assets/form/rdvsImageNotFound.svg" alt="rdvs illustration" />
-  <h2>Aucune structure correspondant à votre recherche ne propose de rendez-vous</h2>
-  <p>Renouvellez votre recherche avec des critères différents ou accédez à la cartographie</p>
-</div>
diff --git a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.ts b/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.ts
deleted file mode 100644
index 76c2e2a18..000000000
--- a/src/app/form/orientation-form-view/online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component.ts
+++ /dev/null
@@ -1,95 +0,0 @@
-import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
-import { UntypedFormGroup } from '@angular/forms';
-import { lastValueFrom } from 'rxjs';
-import { Structure } from '../../../../../models/structure.model';
-import { GeojsonService } from '../../../../../services/geojson.service';
-import { NotificationService } from '../../../../../services/notification.service';
-import { RdvsService } from '../../../../../services/rdvs.service';
-import { StructureService } from '../../../../../services/structure.service';
-import { Filter } from '../../../../../structure-list/models/filter.model';
-
-@Component({
-  selector: 'app-meeting-rdvs-doing',
-  templateUrl: './meeting-rdvs-doing.component.html',
-  styleUrls: ['./meeting-rdvs-doing.component.scss'],
-})
-export class MeetingRdvsDoingComponent implements OnInit {
-  @Input() form: UntypedFormGroup;
-  public structureList: Structure[] = [];
-  public filters: Filter[] = [];
-  public shouldReset = false;
-  @Output() setResetOrientation = new EventEmitter();
-  constructor(
-    private structureService: StructureService,
-    private rdvsService: RdvsService,
-    private notificationService: NotificationService,
-    private geoJsonService: GeojsonService
-  ) {}
-
-  async ngOnInit(): Promise<void> {
-    try {
-      this.buildFilters();
-      await this.getData();
-  
-      const addressCoords = this.form.get('address')?.value?.coordinates;
-  
-      if (addressCoords) {
-        this.structureList = this.sortByDistance(this.structureList, addressCoords);
-      }
-  
-      if (this.structureList.length === 0) {
-        this.shouldReset = true;
-        this.setResetOrientation.emit();
-        return;
-      }
-  
-      this.rdvsService.sendStructureArray(this.structureList);
-      this.setResetOrientation.emit();
-    } catch (error) {
-      console.error(error);
-      this.notificationService.showError('Une erreur est survenue', error.message);
-    }
-  }
-
-  private async getData(): Promise<void> {
-    try {
-      // Get structures based on the filters
-      const structures = await lastValueFrom(this.structureService.getStructures(this.filters));
-
-      // Filter out structures that have no idCNFS or have a duplicate idCNFS
-      this.structureList = structures.reduce((acc, curr) => {
-        if (!curr.idCNFS || acc.some(structure => structure.idCNFS === curr.idCNFS)) {
-          // If current structure has no idCNFS or a duplicate idCNFS, skip it
-          return acc;
-        }
-        // If current structure has a unique idCNFS, add it to the list
-        return [...acc, curr];
-      }, []);
-    } catch (error) {
-      console.error(error);
-      this.notificationService.showError('Error fetching structures', error.message);
-    }
-  } 
-  
-  private buildFilters(): void {
-    const filters = [];
-    for (let [categ, moduleIdArray] of Object.entries(this.form.get('categories').value)) {
-      const idArray = moduleIdArray as string[];
-      if (idArray.length)
-        idArray.forEach((filterId: string) => {
-          filters.push(new Filter(categ, filterId));
-        });
-    }
-    if (this.form.get('pmrAccess').value) filters.push(new Filter('pmrAccess', this.form.get('pmrAccess').value));
-    if (this.form.get('digitalPass').value) filters.push(new Filter('labelsQualifications', 'passNumerique'));
-    filters.push(...this.form.get('onlineDemarcheType').value);
-    this.filters = filters;
-  }
-  private sortByDistance(structures: Structure[], addresscoords: number[]): Structure[] {
-    return structures.sort(
-      (a, b) =>
-        parseInt(this.geoJsonService.getDistance(a.getLat(), a.getLon(), addresscoords[1], addresscoords[0], 'M')) -
-        parseInt(this.geoJsonService.getDistance(b.getLat(), b.getLon(), addresscoords[1], addresscoords[0], 'M'))
-    );
-  }
-}
diff --git a/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.html b/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.html
index 5cf5caeb6..813fa15a5 100644
--- a/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.html
+++ b/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.html
@@ -1,3 +1,3 @@
-<h2>De quel accompagnement a besoin le bénéficiaire ?</h2>
+<h2>De quel accompagnement la personne a-t-elle besoin ?</h2>
 
 <app-multi-radio-form [items]="accompanimentTypes" [selected]="selected" (handleSelect)="handleSelect($event)" />
diff --git a/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.ts b/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.ts
index 7764df13b..f913c9647 100644
--- a/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.ts
+++ b/src/app/form/orientation-form-view/online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component.ts
@@ -15,18 +15,17 @@ export class AccompanimentTypeComponent implements OnInit {
   public accompanimentTypes: INeedItem[] = [
     {
       title: "Trouver une structure proposant l'accompagnement adapté",
-      hint: "Le bénéficiaire pourra prendre contact avec la structure ou s'y rendre directement",
+      hint: 'La personne pourra prendre contact avec la structure ou s’y rendre directement',
       key: OnlineDemarche.structureList,
     },
-    /* rdv disabled waiting for reworking
     {
-     title: 'Prendre RDV auprès d’un conseiller ou une conseillère numérique',
-     hint: 'Redirection vers RDV Aide Numérique pour voir les disponibilités',
-     key: OnlineDemarche.meetings,
-    },*/
+      title: 'Prendre RDV auprès d’un conseiller ou une conseillère numérique',
+      hint: 'La demande de RDV sera transmise à un conseiller numérique',
+      key: OnlineDemarche.appointment,
+    },
     {
       title: 'Choisir un créneau de médiation numérique à distance',
-      hint: 'Le bénéficiaire sera contacté par téléphone sur le créneau de son choix',
+      hint: 'La personne sera recontactée par téléphone sur le créneau de son choix',
       key: OnlineDemarche.onlineMediation,
     },
   ];
diff --git a/src/app/form/orientation-form-view/online-demarch/online-demarch-common/online-demarch.component.html b/src/app/form/orientation-form-view/online-demarch/online-demarch-common/online-demarch.component.html
index 81d97fa02..63b824b88 100644
--- a/src/app/form/orientation-form-view/online-demarch/online-demarch-common/online-demarch.component.html
+++ b/src/app/form/orientation-form-view/online-demarch/online-demarch-common/online-demarch.component.html
@@ -1,4 +1,4 @@
-<h2>Quelle démarche en ligne le bénéficiaire a-t-il besoin de réaliser ?</h2>
+<h2>Quelle démarche en ligne la personne a-t-elle besoin de réaliser ?</h2>
 <div class="btn-grid btnContainer">
   <span *ngFor="let module of accompanimentType">
     <app-button
diff --git a/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneciary-info/mediation-beneciary-info.component.html b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.html
similarity index 59%
rename from src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneciary-info/mediation-beneciary-info.component.html
rename to src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.html
index 4bafb78e6..8cc5163b7 100644
--- a/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneciary-info/mediation-beneciary-info.component.html
+++ b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.html
@@ -1,4 +1,5 @@
-<h2>Quelles sont les informations du bénéficiaire ?</h2>
+<h2 *ngIf="currentType !== 'RDV Conseiller Numérique'">Quelles sont les informations de la personne ?</h2>
+<h2 *ngIf="currentType === 'RDV Conseiller Numérique'">Quelles sont les coordonnées de la personne ?</h2>
 <form [formGroup]="form">
   <div class="form-group" fxLayout="column">
     <label for="name">Prénom</label>
@@ -39,8 +40,33 @@
     </div>
   </div>
 
+  <div *ngIf="isEmail()" class="form-group" fxLayout="column">
+    <label for="email">Email <sup *ngIf="isOrientationRdv" class="footnote-nb">1</sup></label>
+    <div fxLayout="row" fxLayoutGap="13px">
+      <input
+        type="text"
+        autocomplete="on"
+        formControlName="email"
+        class="form-input"
+        (input)="updatedForm('email', $event.target)"
+      />
+      <app-svg-icon
+        *ngIf="form.get('email').value && form.get('email').valid"
+        [iconClass]="'validation'"
+        [type]="'form'"
+        [icon]="'validate'"
+      />
+      <app-svg-icon
+        *ngIf="form.get('email').value && !form.get('email').valid"
+        [iconClass]="'validation'"
+        [type]="'form'"
+        [icon]="'notValidate'"
+      />
+    </div>
+  </div>
+
   <div *ngIf="isPhone()" class="form-group" fxLayout="column">
-    <label for="phone">Téléphone</label>
+    <label for="phone">Téléphone<sup *ngIf="isOrientationRdv" class="footnote-nb">1</sup></label>
     <div fxLayout="row" fxLayoutGap="13px">
       <input
         type="phone"
@@ -58,4 +84,8 @@
       />
     </div>
   </div>
+  <p *ngIf="isOrientationRdv && isPhone() && isEmail()" class="footnote">
+    <sup class="footnote-nb">1</sup> Un moyen de communication (email et/ou téléphone) est obligatoire pour valider
+    cette étape
+  </p>
 </form>
diff --git a/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.scss b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.scss
new file mode 100644
index 000000000..9059e80a0
--- /dev/null
+++ b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.scss
@@ -0,0 +1,11 @@
+@import 'color';
+@import 'typography';
+
+sup {
+  color: red;
+  font-size: $font-size-xxsmall;
+}
+.footnote {
+  margin-top: 2em;
+  font-size: $font-size-xmsmall;
+}
diff --git a/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneciary-info/mediation-beneciary-info.component.ts b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.ts
similarity index 62%
rename from src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneciary-info/mediation-beneciary-info.component.ts
rename to src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.ts
index f1713ddb0..8c67872fc 100644
--- a/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneciary-info/mediation-beneciary-info.component.ts
+++ b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component.ts
@@ -1,14 +1,18 @@
 import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
 import { UntypedFormGroup } from '@angular/forms';
 import { Utils } from '../../../../../utils/utils';
+import { MediationType } from '../../../types/mediation.type';
 
 @Component({
-  selector: 'app-mediation-beneciary-info',
-  templateUrl: './mediation-beneciary-info.component.html',
+  selector: 'app-mediation-beneficiary-info',
+  templateUrl: './mediation-beneficiary-info.component.html',
+  styleUrls: ['./mediation-beneficiary-info.component.scss'],
 })
-export class MediationBeneciaryInfoComponent implements OnInit {
+export class MediationBeneficiaryInfoComponent implements OnInit {
   @Input() form: UntypedFormGroup;
   @Output() checkValidation = new EventEmitter<any>();
+  @Input() currentType: MediationType;
+  @Input() public isOrientationRdv = false;
   public utils = new Utils();
 
   ngOnInit(): void {
@@ -18,6 +22,9 @@ export class MediationBeneciaryInfoComponent implements OnInit {
   public isPhone(): boolean {
     return Boolean(this.form.get('phone'));
   }
+  public isEmail(): boolean {
+    return Boolean(this.form.get('email'));
+  }
 
   public updatedForm(field: string, target: EventTarget) {
     const value = (target as HTMLInputElement).value;
diff --git a/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-hours-selection/mediation-hours-selection.component.html b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-hours-selection/mediation-hours-selection.component.html
index f710da40e..963e78036 100644
--- a/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-hours-selection/mediation-hours-selection.component.html
+++ b/src/app/form/orientation-form-view/online-demarch/online-mediation/mediation-hours-selection/mediation-hours-selection.component.html
@@ -1,4 +1,4 @@
-<h2>Sur quel créneau horaire le bénéficiaire souhaite-t-il être rappelé ?</h2>
+<h2>Sur quel créneau horaire la personne souhaite-t-elle être rappelée ?</h2>
 <div class="subtitle">Horaires de la Hotline</div>
 <div class="container">
   <div *ngFor="let slot of timeSlots" class="slot">
diff --git a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html
index 4259b8ace..c520d08a9 100644
--- a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html
+++ b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html
@@ -11,53 +11,57 @@
     (checkValidation)="checkValidation()"
   />
 </ng-container>
-<!-- MEETING FORM (RDVS) -->
-<ng-container *ngIf="currentType === onlineDemarcheTypeEnum.meetings">
+<!-- APPOINTMENT FORM -->
+<ng-container *ngIf="currentType === onlineDemarcheTypeEnum.appointment">
   <app-information-screen
-    *ngIf="currentStep === onlineDemarchesMeetingSteps.infoScreen"
+    *ngIf="currentStep === onlineDemarchesAppointmentSteps.infoScreen"
     [currentType]="currentType"
     (checkValidation)="checkValidation()"
   />
   <app-structure-orientator
-    *ngIf="currentStep === onlineDemarchesMeetingSteps.structureOrientator"
+    *ngIf="currentStep === onlineDemarchesAppointmentSteps.structureOrientator"
     [profile]="profile"
     [form]="form"
     (validatePage)="checkValidation()"
   />
-  <app-structure-public-target
-    *ngIf="
-      currentStep === onlineDemarchesMeetingSteps.publicTypeMandatory ||
-      currentStep === onlineDemarchesMeetingSteps.publicTypeOptional
-    "
-    [structureForm]="form"
-    [languageAndIlliteracy]="categories.languageAndIlliteracy"
-    [handicaps]="categories.handicaps"
-    [genre]="categories.genre"
-    [age]="categories.age"
-    [isMandatoryFields]="currentStep === onlineDemarchesMeetingSteps.publicTypeMandatory"
-    (validateForm)="checkValidation()"
-    (updateChoice)="updatePublicChoice($event)"
-  >
-  </app-structure-public-target>
   <app-structure-pmr
-    *ngIf="currentStep === onlineDemarchesMeetingSteps.pmrAccess"
+    *ngIf="currentStep === onlineDemarchesAppointmentSteps.pmrAccess"
     [structureForm]="form"
     (validateForm)="checkValidation()"
     (radioChange)="onRadioChange($event)"
   />
-  <app-meeting-digital-pass
-    *ngIf="currentStep === onlineDemarchesMeetingSteps.digitalPass"
+  <app-orientation-structure-address
+    *ngIf="currentStep === onlineDemarchesAppointmentSteps.location"
+    [form]="form"
+    (addressStructure)="checkValidation()"
+  />
+  <app-carto
+    *ngIf="currentStep === onlineDemarchesAppointmentSteps.carto"
+    [isOrientationForm]="true"
+    [isOrientationRdv]="true"
+    [filters]="filters"
+    [userLongitude]="form.get('address').value?.coordinates[0]"
+    [userLatitude]="form.get('address').value?.coordinates[1]"
+    (structureSelectionRDV)="checkValidation($event)"
+  />
+  <app-make-appointment
+    *ngIf="currentStep === onlineDemarchesAppointmentSteps.makeAppointment"
     [form]="form"
+    [structureRDV]="structureRDV"
     (checkValidation)="checkValidation()"
+    (socialWorkerName)="getSocialWorkerName($event)"
   />
-  <app-orientation-structure-address
-    *ngIf="currentStep === onlineDemarchesMeetingSteps.location"
+  <app-mediation-beneficiary-info
+    *ngIf="currentStep === onlineDemarchesAppointmentSteps.mediationBeneficiaryInfo"
     [form]="form"
-    (addressStructure)="checkValidation()"
+    [isOrientationRdv]="true"
+    (checkValidation)="checkValidation()"
   />
-  <app-meeting-rdvs-doing
-    *ngIf="currentStep === onlineDemarchesMeetingSteps.rdvsDoing"
+  <app-appointment-end
+    *ngIf="currentStep === onlineDemarchesAppointmentSteps.rdvEnd"
     [form]="form"
+    [structureRDV]="structureRDV"
+    [socialWorkerName]="socialWorkerName"
     (checkValidation)="checkValidation()"
     (setResetOrientation)="showResetOrientation()"
   />
@@ -69,8 +73,8 @@
     [currentType]="currentType"
     (checkValidation)="checkValidation()"
   />
-  <app-mediation-beneciary-info
-    *ngIf="currentStep === HotlineMediationStepsEnum.mediationBeneciaryInfo"
+  <app-mediation-beneficiary-info
+    *ngIf="currentStep === HotlineMediationStepsEnum.mediationBeneficiaryInfo"
     [form]="form"
     (checkValidation)="checkValidation()"
   />
diff --git a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts
index 558eda13a..139e79bf2 100644
--- a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts
+++ b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts
@@ -1,11 +1,13 @@
 import { Component, EventEmitter, Input, Output } from '@angular/core';
 import { UntypedFormArray, UntypedFormControl, UntypedFormGroup } from '@angular/forms';
+import { Owner } from '../../../models/owner.model';
+import { Structure } from '../../../models/structure.model';
 import { User } from '../../../models/user.model';
 import { Category } from '../../../structure-list/models/category.model';
 import { Filter } from '../../../structure-list/models/filter.model';
 import { OrientationUtils } from '../../../utils/orientationUtils';
+import { AppointmentSteps } from '../enums/AppointmentSteps.enum';
 import { HotlineMediationSteps } from '../enums/hotlineMediationSteps.enum';
-import { MeetingRDVSSteps } from '../enums/MeetingRDVSSteps.enum';
 import { OnlineDemarche } from '../enums/onlineDemarche.enum';
 import { OnlineDemarchesCommonSteps } from '../enums/onlineDemarchesCommonSteps.enum';
 import { RecapsType } from '../enums/recapsType.enum';
@@ -19,27 +21,30 @@ import { OnlineMediationSteps } from '../types/onlineDemarcheStep.type';
   templateUrl: './onlineDemarch-form.component.html',
 })
 export class OnlineDemarchFormComponent {
-  @Input() currentStep: OnlineMediationSteps | StructuresListSteps | MeetingRDVSSteps | MediationStepType;
+  @Input() currentStep: OnlineMediationSteps | StructuresListSteps | AppointmentSteps | MediationStepType;
   @Input() currentType: OnlineDemarche | MediationType;
   @Input() form: UntypedFormGroup;
   @Input() filters: Filter[] = [];
   @Input() profile: User;
   @Input() categories: { [key: string]: Category };
   @Output() validatePage = new EventEmitter<any>();
+  @Output() validateStructureRDV = new EventEmitter<Structure>();
   @Output() setResetOrientation = new EventEmitter<any>();
 
   public orientationUtils = new OrientationUtils();
   public pagesValidation: any[] = [];
+  public structureRDV: Structure = null;
+  public socialWorkerName: Owner;
 
   // Enums
   public HotlineMediationStepsEnum = HotlineMediationSteps;
   public onlineDemarchesCommonStepsEnum = OnlineDemarchesCommonSteps;
   public structuresListStepsEnum = StructuresListSteps;
   public onlineDemarcheTypeEnum = OnlineDemarche;
-  public onlineDemarchesMeetingSteps = MeetingRDVSSteps;
+  public onlineDemarchesAppointmentSteps = AppointmentSteps;
   public recapsType = RecapsType;
 
-  public checkValidation(): void {
+  public checkValidation(event?: any): void {
     switch (this.currentType) {
       case OnlineDemarche.onlineMediation:
         this.orientationUtils.setValidationsOnlineMediationForm(
@@ -65,12 +70,20 @@ export class OnlineDemarchFormComponent {
           this.currentStep as OnlineDemarchesCommonSteps
         );
         break;
-      case OnlineDemarche.meetings:
-        this.orientationUtils.setValidationsOnlineMeetingForm(
+      case OnlineDemarche.appointment:
+        if (this.currentStep === AppointmentSteps.carto - 1) {
+          this.structureRDV = null;
+        }
+        if (this.currentStep === AppointmentSteps.carto) {
+          this.structureRDV = event;
+          this.validateStructureRDV.emit(event);
+          return;
+        }
+        this.orientationUtils.setValidationsAppointmentForm(
           this.pagesValidation,
           this.form,
           (isValid) => this.validatePage.emit(isValid),
-          this.currentStep as MeetingRDVSSteps
+          this.currentStep as AppointmentSteps
         );
         break;
       default:
@@ -78,6 +91,11 @@ export class OnlineDemarchFormComponent {
     }
   }
 
+  /* Get socialWorkerName from makeAppointment to display it in rdvEnd */
+  public getSocialWorkerName(item: Owner) {
+    this.socialWorkerName = item;
+  }
+
   public updatePublicChoice({ formControlName, choice }: { formControlName: string; choice: string }): void {
     const event = !this.isInArray({ formControlName, term: choice });
     this.onCheckChange({ event, formControlName, value: choice });
@@ -110,9 +128,10 @@ export class OnlineDemarchFormComponent {
     }
     return false;
   }
-  public onRadioChange(nameAndEvent: { name: string; value: boolean }): void {
-    const { name, value } = nameAndEvent;
+  public onRadioChange(event: { name: string; value: boolean }): void {
+    const { name, value } = event;
     this.form.get(name).setValue(value);
+    this.orientationUtils.manuallySetOfPmr(this.filters, event);
     this.checkValidation();
   }
   public showResetOrientation(): void {
diff --git a/src/app/form/orientation-form-view/orientation-form-view.component.html b/src/app/form/orientation-form-view/orientation-form-view.component.html
index adea40f64..2be04ecc3 100644
--- a/src/app/form/orientation-form-view/orientation-form-view.component.html
+++ b/src/app/form/orientation-form-view/orientation-form-view.component.html
@@ -38,6 +38,7 @@
         [profile]="profile"
         [categories]="categories"
         (validatePage)="validatePage($event)"
+        (validateStructureRDV)="validateStructureRDV($event)"
         (setResetOrientation)="setResetOrientation()"
       />
       <app-base-skills
@@ -56,7 +57,6 @@
       [needType]="needType"
       [currentType]="currentType"
       [isPageValid]="isPageValid"
-      [isRdvsWindowStep]="isRdvsWindowStep"
       [hideNavButtons]="hideNavButtons"
       [shouldResetOrientation]="shouldResetOrientation"
       (goNext)="nextPage()"
diff --git a/src/app/form/orientation-form-view/orientation-form-view.component.ts b/src/app/form/orientation-form-view/orientation-form-view.component.ts
index 223d9a059..c5e78d4ec 100644
--- a/src/app/form/orientation-form-view/orientation-form-view.component.ts
+++ b/src/app/form/orientation-form-view/orientation-form-view.component.ts
@@ -1,10 +1,13 @@
 import { AfterContentChecked, ChangeDetectorRef, Component, OnInit } from '@angular/core';
 import { FormGroup, UntypedFormGroup } from '@angular/forms';
+import { Router } from '@angular/router';
+import { lastValueFrom } from 'rxjs';
+import { Structure } from '../../models/structure.model';
 import { User } from '../../models/user.model';
 import { ProfileService } from '../../profile/services/profile.service';
 import { AuthService } from '../../services/auth.service';
 import { NotificationService } from '../../services/notification.service';
-import { OnlineMediationService } from '../../services/online-mediation.service';
+import { OrientationService } from '../../services/orientation.service';
 import { StructureService } from '../../services/structure.service';
 import { CategoryEnum } from '../../shared/enum/category.enum';
 import { Category } from '../../structure-list/models/category.model';
@@ -13,7 +16,7 @@ import { Module } from '../../structure-list/models/module.model';
 import { SearchService } from '../../structure-list/services/search.service';
 import { OrientationUtils } from '../../utils/orientationUtils';
 import { Utils } from '../../utils/utils';
-import { MeetingRDVSSteps } from './enums/MeetingRDVSSteps.enum';
+import { AppointmentSteps } from './enums/AppointmentSteps.enum';
 import { FiltersSteps } from './enums/filtersSteps.enum';
 import { GenericOrientationSteps } from './enums/genericOrientationSteps.enum';
 import { HotlineMediationSteps } from './enums/hotlineMediationSteps.enum';
@@ -21,6 +24,7 @@ import { NeedsType } from './enums/needs.enum';
 import { OnlineDemarche } from './enums/onlineDemarche.enum';
 import { OnlineDemarchesCommonSteps } from './enums/onlineDemarchesCommonSteps.enum';
 import { StructuresListSteps } from './enums/structuresListSteps.enum';
+import { IAppointment } from './interfaces/appointment.interface';
 import { FiltersForm } from './interfaces/filtersForm.interface';
 import { IOnlineMediation } from './interfaces/onlineMediation.interface';
 import { StructureOrientationForm } from './interfaces/structureOrientationForm.interface';
@@ -37,7 +41,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
   public static readonly MAX_STEP =
     (Math.max(
       Object.keys(HotlineMediationSteps).length,
-      Object.keys(MeetingRDVSSteps).length,
+      Object.keys(AppointmentSteps).length,
       Object.keys(StructuresListSteps).length
     ) +
       Object.keys(OnlineDemarchesCommonSteps).length) /
@@ -60,7 +64,6 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
   public currentType: MediationType = OnlineDemarche.common;
   public currentStep: MediationStepType = null;
   public isLastStep = false;
-  public isRdvsWindowStep = false;
   public hideNavButtons = false;
   public nbSteps: number = OrientationFormViewComponent.MAX_STEP;
   public isPageValid: boolean = false;
@@ -103,13 +106,14 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
   private resolve: Function;
 
   constructor(
-    private onlineMediationService: OnlineMediationService,
+    private orientationService: OrientationService,
     private notificationService: NotificationService,
     private authService: AuthService,
     private profileService: ProfileService,
     private searchService: SearchService,
     private structureService: StructureService,
-    private cdref: ChangeDetectorRef
+    private cdref: ChangeDetectorRef,
+    private router: Router
   ) {
     this.setCategories();
   }
@@ -146,6 +150,11 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
     this.isPageValid = event;
   }
 
+  public validateStructureRDV(event: Structure) {
+    this.onlineDemarcheForm.get('structureRDV').patchValue(event._id);
+    this.nextPage();
+  }
+
   public setStepNumber(enumLength: number): void {
     this.nbSteps = enumLength / 2;
   }
@@ -172,13 +181,6 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
   }
 
   public checkLastStep(): void {
-    if (
-      this.needType === NeedsType.onlineDemarch &&
-      this.currentType === OnlineDemarche.meetings &&
-      this.currentStep === MeetingRDVSSteps.location
-    ) {
-      this.isRdvsWindowStep = true;
-    }
     if (
       this.needType === NeedsType.onlineDemarch &&
       this.currentType === OnlineDemarche.onlineMediation &&
@@ -187,26 +189,47 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
       this.isLastStep = true;
     } else if (this.isStructureListForm() && this.currentStep === StructuresListSteps.orientationRecap) {
       this.isLastStep = true;
+    } else if (
+      this.needType === NeedsType.onlineDemarch &&
+      this.currentType === OnlineDemarche.appointment &&
+      this.currentStep === AppointmentSteps.rdvEnd
+    ) {
+      this.isLastStep = true;
     } else this.isLastStep = false;
   }
 
   /**
-   * Handle online mediation finish by sending appointements to server
+   * Handle appointment, send to server
+   */
+  public async handleAppointment(): Promise<void> {
+    const appointment: IAppointment = {
+      ...this.onlineDemarcheForm.value,
+    };
+
+    // pmrAccess filter must not be send in the onlineDemarcheType array of the appointment
+    appointment.onlineDemarcheType = appointment.onlineDemarcheType.filter((item) => item['name'] != 'pmrAccess');
+
+    await lastValueFrom(this.orientationService.createAppointment(appointment));
+    this.canDeactivate = true;
+  }
+
+  /**
+   * Handle online mediation, send to server then print
    */
-  public handleOnlineAppointment(): void {
+  public async handleOnlineAppointment(): Promise<void> {
     const toCreate: IOnlineMediation = {
       ...this.onlineDemarcheForm.value,
-      onlineDemarchType: this.onlineDemarcheForm.value.filters.map((module: Module) => module.displayText),
+      onlineDemarcheType: this.onlineDemarcheForm.value.filters.map((module: Module) => module.displayText),
     };
-    this.onlineMediationService.createOnlineMediation(toCreate).subscribe((data) => {
-      if (data) {
+    await lastValueFrom(this.orientationService.createOnlineMediation(toCreate))
+      .then(() => {
         this.canDeactivate = true;
         this.notificationService.showSuccess('Votre démarche en ligne a bien été enregistrée');
-      } else {
-        this.notificationService.showError('Echec de la création de votre démarche en ligne');
-      }
-      this.printForm();
-    });
+      })
+      .catch((error) => {
+        this.notificationService.showErrorPleaseRetry('Echec de la création de votre démarche en ligne');
+      })
+      .finally(() => this.printForm());
   }
 
   public printForm(): void {
@@ -238,12 +261,11 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
           this.utils.convertFiltersToModule(this.filters)
         );
         break;
-      case OnlineDemarche.meetings:
-        this.currentType = OnlineDemarche.meetings;
-        this.currentStep = MeetingRDVSSteps.infoScreen;
-        this.setStepNumber(Object.keys(MeetingRDVSSteps).length);
-        this.skipStructureOrientator();
-        this.onlineDemarcheForm = this.orientationUtils.createMeetingRDVSForm(this.filters, this.orientator);
+      case OnlineDemarche.appointment:
+        this.currentType = OnlineDemarche.appointment;
+        this.currentStep = AppointmentSteps.infoScreen;
+        this.setStepNumber(Object.keys(AppointmentSteps).length);
+        this.onlineDemarcheForm = this.orientationUtils.createAppointmentForm(this.filters, this.orientator);
         break;
       case OnlineDemarche.onlineMediation:
         this.currentType = OnlineDemarche.onlineMediation;
@@ -282,10 +304,14 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
     });
   }
 
-  public skipStructureOrientator() {
+  private skipStructureOrientator(isNextPage: boolean) {
     if (this.profile?.structuresLink?.length === 1) {
-      // skip first step
-      this.currentStep++;
+      // skip structureOrientator if user with only one structure
+      if (isNextPage) {
+        this.currentStep++;
+      } else {
+        this.currentStep--;
+      }
     }
   }
 
@@ -304,9 +330,8 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
     });
   }
 
-  public nextPage(): void {
+  public async nextPage(): Promise<void> {
     this.isPageValid = false;
-    this.isRdvsWindowStep = false;
     this.hideNavButtons = false;
     // Handle filters form
     if (
@@ -352,9 +377,20 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
         this.currentType === OnlineDemarche.onlineMediation &&
         this.currentStep === HotlineMediationSteps.orientationRecap
       ) {
-        this.handleOnlineAppointment();
+        await this.handleOnlineAppointment();
         return;
       }
+      // Handle last screen appointment
+      if (this.currentType === OnlineDemarche.appointment && this.currentStep === AppointmentSteps.rdvEnd - 1) {
+        try {
+          await this.handleAppointment();
+        } catch (e) {
+          console.log(e);
+          this.notificationService.showErrorPleaseRetry("Echec de l'envoi de votre demande de RDV");
+          // If appointment fails, don't go to next page
+          return;
+        }
+      }
     }
 
     // Structure list handling
@@ -372,7 +408,41 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
       // Unset fullscreen
       if (this.currentStep === StructuresListSteps.structureChoice) {
         this.fullScreen = false;
-        this.skipStructureOrientator();
+        this.skipStructureOrientator(true);
+      }
+    }
+
+    // Appointment handling
+    if (this.currentType === OnlineDemarche.appointment) {
+      if (this.currentStep === AppointmentSteps.structureOrientator - 1) {
+        this.skipStructureOrientator(true);
+      }
+
+      // If no structure found, go to the end
+      if (this.currentStep === AppointmentSteps.pmrAccess) {
+        if (
+          (await lastValueFrom(this.structureService.getStructures(this.filters))).filter(
+            (structure) => structure.withAppointment
+          ).length == 0
+        ) {
+          this.currentStep = AppointmentSteps.rdvEnd - 1;
+        }
+      }
+
+      // Carto display case for full screen
+      // Set to full screen
+      if (this.currentStep === AppointmentSteps.location) {
+        this.fullScreen = true;
+      }
+      // Unset fullscreen
+      if (this.currentStep === AppointmentSteps.carto) {
+        this.fullScreen = false;
+      }
+
+      // after last page, go to new orientation
+      if (this.currentStep === AppointmentSteps.rdvEnd) {
+        window.location.reload();
+        return;
       }
     }
 
@@ -390,14 +460,29 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
   }
 
   public prevPage(): void {
-    this.isRdvsWindowStep = false;
     this.hideNavButtons = false;
     // Structure list previous page
     if (this.isStructureListForm()) {
       if (this.currentStep === StructuresListSteps.structureChoice) {
         this.fullScreen = false;
       }
-      if (this.currentStep === StructuresListSteps.structureOrientator) {
+      if (this.currentStep === StructuresListSteps.structureOrientator + 1) {
+        this.skipStructureOrientator(false);
+      }
+      if (this.currentStep === StructuresListSteps.structureChoice + 1) {
+        this.fullScreen = true;
+      }
+    }
+
+    // Appointment previous page
+    if (this.currentType === OnlineDemarche.appointment) {
+      if (this.currentStep === AppointmentSteps.structureOrientator + 1) {
+        this.skipStructureOrientator(false);
+      }
+      if (this.currentStep === AppointmentSteps.carto) {
+        this.fullScreen = false;
+      }
+      if (this.currentStep === AppointmentSteps.makeAppointment) {
         this.fullScreen = true;
       }
     }
@@ -496,8 +581,8 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
   public checkHideNavButtons(): void {
     if (
       this.needType === NeedsType.onlineDemarch &&
-      this.currentType === OnlineDemarche.meetings &&
-      this.currentStep === MeetingRDVSSteps.rdvsDoing
+      this.currentType === OnlineDemarche.appointment &&
+      this.currentStep === AppointmentSteps.carto
     ) {
       this.hideNavButtons = true;
     }
diff --git a/src/app/form/orientation-form-view/orientation-structure-list/orientation-comments/orientation-comments.component.html b/src/app/form/orientation-form-view/orientation-structure-list/orientation-comments/orientation-comments.component.html
index ee6537cde..151949484 100644
--- a/src/app/form/orientation-form-view/orientation-structure-list/orientation-comments/orientation-comments.component.html
+++ b/src/app/form/orientation-form-view/orientation-structure-list/orientation-comments/orientation-comments.component.html
@@ -5,7 +5,7 @@
       <p>Facultatif</p>
     </div>
   </div>
-  <p>Ces informations accompagneront la fiche d'orientation du bénéficiaire</p>
+  <p>Ces informations accompagneront la fiche d'orientation de la personne</p>
   <div class="textareaBlock" fxLayout="column">
     <textarea
       rows="8"
diff --git a/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.html b/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.html
index eccf3745b..15c93ca9d 100644
--- a/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.html
+++ b/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.html
@@ -26,8 +26,8 @@
     (validatePage)="checkValidation($event)"
   />
 
-  <app-mediation-beneciary-info
-    *ngIf="currentStep === structuresListStepsEnum.mediationBeneciaryInfo"
+  <app-mediation-beneficiary-info
+    *ngIf="currentStep === structuresListStepsEnum.mediationBeneficiaryInfo"
     [form]="form"
     (checkValidation)="checkValidation()"
   />
diff --git a/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.ts b/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.ts
index 2966825a0..5190c6c95 100644
--- a/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.ts
+++ b/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.ts
@@ -3,6 +3,7 @@ import { UntypedFormGroup } from '@angular/forms';
 import { Structure } from '../../../models/structure.model';
 import { User } from '../../../models/user.model';
 import { Filter } from '../../../structure-list/models/filter.model';
+import { OrientationUtils } from '../../../utils/orientationUtils';
 import { FiltersSteps } from '../enums/filtersSteps.enum';
 import { RecapsType } from '../enums/recapsType.enum';
 import { StructuresListSteps } from '../enums/structuresListSteps.enum';
@@ -18,6 +19,9 @@ export class OrientationStructureListComponent implements OnChanges {
   @Input() form: UntypedFormGroup;
   @Input() filters: Filter[] = [];
   @Output() validatePage = new EventEmitter<any>();
+
+  public orientationUtils = new OrientationUtils();
+
   // Enum
   public structuresListStepsEnum = StructuresListSteps;
   public recapsType = RecapsType;
@@ -31,7 +35,8 @@ export class OrientationStructureListComponent implements OnChanges {
   public radioChange(event: { name: string; value: boolean }): void {
     const { name, value } = event;
     this.form.get(name).setValue(value);
-    this.manuallySetOfPmr(event);
+    this.orientationUtils.manuallySetOfPmr(this.filters, event);
+    this.checkValidation();
   }
 
   public checkValidation(event?: any): void {
@@ -49,16 +54,4 @@ export class OrientationStructureListComponent implements OnChanges {
     }
     this.validatePage.emit(event);
   }
-
-  private manuallySetOfPmr(event: { name: string; value: boolean }): void {
-    // Handle special PMR access case
-    if (event.name === 'pmrAccess') {
-      if (event.value) {
-        this.filters.push(new Filter('pmrAccess', 'True', 'PMR'));
-      } else {
-        this.filters = this.filters.filter((module) => module.name !== 'pmrAccess');
-      }
-    }
-    this.checkValidation();
-  }
 }
diff --git a/src/app/form/orientation-form-view/orientation.module.ts b/src/app/form/orientation-form-view/orientation.module.ts
index 7509686d8..31dd29226 100644
--- a/src/app/form/orientation-form-view/orientation.module.ts
+++ b/src/app/form/orientation-form-view/orientation.module.ts
@@ -16,12 +16,12 @@ import { OrientationRecapComponent } from './global-components/orientation-recap
 import { PrintHeaderComponent } from './global-components/print-header/print-header.component';
 import { SelectComponent } from './global-components/select/select.component';
 import { StructureOrientatorComponent } from './global-components/structure-orientator/structure-orientator.component';
+import { AppointmentEndComponent } from './online-demarch/appointment/appointment-end/appointment-end.component';
+import { MakeAppointmentComponent } from './online-demarch/appointment/make-appointment/make-appointment.component';
 import { MediationLanguageSelectionComponent } from './online-demarch/mediation-language-selection/mediation-language-selection.component';
-import { MeetingDigitalPassComponent } from './online-demarch/meeting-rdvs/meeting-digital-pass/meeting-digital-pass.component';
-import { MeetingRdvsDoingComponent } from './online-demarch/meeting-rdvs/meeting-rdvs-doing/meeting-rdvs-doing.component';
 import { AccompanimentTypeComponent } from './online-demarch/online-demarch-common/accompaniment-type/accompaniment-type.component';
 import { OnlineDemarchComponent } from './online-demarch/online-demarch-common/online-demarch.component';
-import { MediationBeneciaryInfoComponent } from './online-demarch/online-mediation/mediation-beneciary-info/mediation-beneciary-info.component';
+import { MediationBeneficiaryInfoComponent } from './online-demarch/online-mediation/mediation-beneficiary-info/mediation-beneficiary-info.component';
 import { MediationHoursSelectionComponent } from './online-demarch/online-mediation/mediation-hours-selection/mediation-hours-selection.component';
 import { OnlineDemarchFormComponent } from './online-demarch/onlineDemarch-form.component';
 import { OrientationFormViewComponent } from './orientation-form-view.component';
@@ -38,7 +38,7 @@ import { OrientationStructureListComponent } from './orientation-structure-list/
     MultiRadioFormComponent,
     OnlineDemarchComponent,
     AccompanimentTypeComponent,
-    MediationBeneciaryInfoComponent,
+    MediationBeneficiaryInfoComponent,
     MediationHoursSelectionComponent,
     OrientationRecapComponent,
     OnlineDemarchFormComponent,
@@ -56,8 +56,8 @@ import { OrientationStructureListComponent } from './orientation-structure-list/
     BaseSkillsChoiceComponent,
     MediationLanguageSelectionComponent,
     SelectComponent,
-    MeetingDigitalPassComponent,
-    MeetingRdvsDoingComponent,
+    MakeAppointmentComponent,
+    AppointmentEndComponent,
     InformationScreenComponent,
   ],
   imports: [OrientationRoutingModule, CartoModule, SharedModule],
diff --git a/src/app/form/orientation-form-view/types/onlineDemarcheStep.type.ts b/src/app/form/orientation-form-view/types/onlineDemarcheStep.type.ts
index f79cbe32c..4134976e9 100644
--- a/src/app/form/orientation-form-view/types/onlineDemarcheStep.type.ts
+++ b/src/app/form/orientation-form-view/types/onlineDemarcheStep.type.ts
@@ -1,10 +1,10 @@
+import { AppointmentSteps } from '../enums/AppointmentSteps.enum';
 import { HotlineMediationSteps } from '../enums/hotlineMediationSteps.enum';
 import { OnlineDemarchesCommonSteps } from '../enums/onlineDemarchesCommonSteps.enum';
-import { MeetingRDVSSteps } from '../enums/MeetingRDVSSteps.enum';
 import { StructuresListSteps } from '../enums/structuresListSteps.enum';
 
 export type OnlineMediationSteps =
   | HotlineMediationSteps
   | StructuresListSteps
   | OnlineDemarchesCommonSteps
-  | MeetingRDVSSteps;
+  | AppointmentSteps;
diff --git a/src/app/form/orientation-form-view/types/orientation.type.ts b/src/app/form/orientation-form-view/types/orientation.type.ts
deleted file mode 100644
index c77c285bc..000000000
--- a/src/app/form/orientation-form-view/types/orientation.type.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import { GenericOrientationSteps } from '../enums/genericOrientationSteps.enum';
-import { OnlineDemarche } from '../enums/onlineDemarche.enum';
-
-export type OrientationType = OnlineDemarche | GenericOrientationSteps;
diff --git a/src/app/guards/deactivate.guard.ts b/src/app/guards/deactivate.guard.ts
index a0e8f3d14..00075b2be 100644
--- a/src/app/guards/deactivate.guard.ts
+++ b/src/app/guards/deactivate.guard.ts
@@ -14,6 +14,6 @@ export class DeactivateGuard implements CanDeactivate<Object> {
   component: Object;
 
   canDeactivate(component: IDeactivateComponent): Observable<boolean> | Promise<boolean> | boolean {
-    return component.canExit();
+    return component?.canExit();
   }
 }
diff --git a/src/app/map/components/map.component.scss b/src/app/map/components/map.component.scss
index f09fccb0d..1208aabed 100644
--- a/src/app/map/components/map.component.scss
+++ b/src/app/map/components/map.component.scss
@@ -89,17 +89,6 @@
       @include lato-bold-14;
       font-size: 16px;
     }
-
-    .orientationButton {
-      display: flex;
-      padding: 10px 20px;
-      border-radius: 20px;
-      margin: 0 4px;
-      color: $black;
-      background-color: $white;
-      border: solid 1px $grey-3;
-      min-width: 120px;
-    }
   }
   span {
     margin-right: 4px;
diff --git a/src/app/map/components/map.component.ts b/src/app/map/components/map.component.ts
index 58a2c3108..7cfd44066 100644
--- a/src/app/map/components/map.component.ts
+++ b/src/app/map/components/map.component.ts
@@ -16,6 +16,7 @@ import { ZoomLevel } from './zoomLevel.enum';
 })
 export class MapComponent implements OnChanges {
   @Input() public isOrientationForm = false;
+  @Input() public isOrientationRdv = false;
   @Input() public structures: Structure[] = [];
   @Input() public structuresToPrint: Structure[] = [];
   @Input() public togglePopupId: string;
diff --git a/src/app/models/owner.model.ts b/src/app/models/owner.model.ts
index c26356932..f80b5913b 100644
--- a/src/app/models/owner.model.ts
+++ b/src/app/models/owner.model.ts
@@ -8,4 +8,5 @@ export class Owner {
   surname: string;
   job?: Job;
   employer?: Employer;
+  withAppointment?: boolean;
 }
diff --git a/src/app/models/structure.model.ts b/src/app/models/structure.model.ts
index ba4ed7504..6a66593ca 100644
--- a/src/app/models/structure.model.ts
+++ b/src/app/models/structure.model.ts
@@ -62,6 +62,7 @@ export class Structure {
   public alreadySelected? = false;
   public isClaimed?: boolean = null;
   public idCNFS?: string;
+  public withAppointment?: boolean = null;
 
   constructor(obj?: any) {
     Object.assign(this, obj, {
diff --git a/src/app/services/online-mediation.service.spec.ts b/src/app/services/online-mediation.service.spec.ts
deleted file mode 100644
index 6cae33a63..000000000
--- a/src/app/services/online-mediation.service.spec.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { TestBed } from '@angular/core/testing';
-
-import { OnlineMediationService } from './online-mediation.service';
-
-describe('OnlineMediationService', () => {
-  let service: OnlineMediationService;
-
-  beforeEach(() => {
-    TestBed.configureTestingModule({});
-    service = TestBed.inject(OnlineMediationService);
-  });
-
-  it('should be created', () => {
-    expect(service).toBeTruthy();
-  });
-});
diff --git a/src/app/services/rdvs.service.spec.ts b/src/app/services/orientation.service.spec.ts
similarity index 51%
rename from src/app/services/rdvs.service.spec.ts
rename to src/app/services/orientation.service.spec.ts
index d524bab92..3288082ba 100644
--- a/src/app/services/rdvs.service.spec.ts
+++ b/src/app/services/orientation.service.spec.ts
@@ -1,13 +1,13 @@
 import { TestBed } from '@angular/core/testing';
 
-import { RdvsService } from './rdvs.service';
+import { OrientationService } from './orientation.service';
 
-describe('RdvsService', () => {
-  let service: RdvsService;
+describe('OrientationService', () => {
+  let service: OrientationService;
 
   beforeEach(() => {
     TestBed.configureTestingModule({});
-    service = TestBed.inject(RdvsService);
+    service = TestBed.inject(OrientationService);
   });
 
   it('should be created', () => {
diff --git a/src/app/services/online-mediation.service.ts b/src/app/services/orientation.service.ts
similarity index 57%
rename from src/app/services/online-mediation.service.ts
rename to src/app/services/orientation.service.ts
index 4e542a504..a3b63ac74 100644
--- a/src/app/services/online-mediation.service.ts
+++ b/src/app/services/orientation.service.ts
@@ -1,16 +1,24 @@
 import { HttpClient } from '@angular/common/http';
 import { Injectable } from '@angular/core';
 import { Observable } from 'rxjs';
+import { IAppointment } from '../form/orientation-form-view/interfaces/appointment.interface';
 import { IOnlineMediation } from '../form/orientation-form-view/interfaces/onlineMediation.interface';
 
 @Injectable({
   providedIn: 'root',
 })
-export class OnlineMediationService {
+export class OrientationService {
   constructor(private http: HttpClient) {}
 
   /**
-   * Retrive all tcl stop point around given coord
+   * Send appointment to server
+   */
+  public createAppointment(newAppointment: IAppointment): Observable<IAppointment> {
+    return this.http.post<IAppointment>('/api/appointment', newAppointment);
+  }
+
+  /**
+   * Send online mediation to server
    */
   public createOnlineMediation(newMediation: IOnlineMediation): Observable<IOnlineMediation> {
     return this.http.post<IOnlineMediation>('/api/online-mediation', newMediation);
diff --git a/src/app/services/rdvs.service.ts b/src/app/services/rdvs.service.ts
deleted file mode 100644
index 6cb428ff1..000000000
--- a/src/app/services/rdvs.service.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { HttpClient } from '@angular/common/http';
-import { Injectable } from '@angular/core';
-import { Structure } from '../models/structure.model';
-
-@Injectable({
-  providedIn: 'root',
-})
-export class RdvsService {
-  private readonly rdvsBaseUrl = 'https://www.rdv-aide-numerique.fr/resin';
-  constructor(private http: HttpClient) {}
-
-  public sendStructureArray(structureArray: Structure[]): void {
-    const idsArray = structureArray.map((_structure) => _structure.idCNFS);
-    const url = `${this.rdvsBaseUrl}/${idsArray.join(',')}`;
-    window.open(url, '_blank');
-  }
-
-  public goToRDVS(idCnfs) {
-    const url = this.rdvsBaseUrl + '/' + idCnfs;
-    window.open(url, '_blank');
-  }
-}
diff --git a/src/app/services/structure.service.ts b/src/app/services/structure.service.ts
index 6555db827..7625427eb 100644
--- a/src/app/services/structure.service.ts
+++ b/src/app/services/structure.service.ts
@@ -73,8 +73,9 @@ export class StructureService {
   }
 
   public getStructures(filters: Filter[], searchUrl: string = 'search', limit?: number): Observable<Structure[]> {
+    let requestUrl = `${this.baseUrl}/${searchUrl}`;
+    let requestFilters = null;
     if (filters && filters.length > 0) {
-      let requestUrl = `${this.baseUrl}/${searchUrl}`;
       const queryString = _.find(filters, { name: 'query' });
       if (queryString) {
         _.remove(filters, { name: 'query' });
@@ -86,12 +87,11 @@ export class StructureService {
 
       const andFormatedFilters = this.formatFilters(filters.filter((e) => !e.orOperator));
       const orFormatedFilters = this.formatFilters(filters.filter((e) => e.orOperator));
-      return this.http
-        .post(requestUrl, { filters: [andFormatedFilters, orFormatedFilters], limit: limit })
-        .pipe(map((data: any[]) => data.map((item) => new Structure(item))));
-    } else {
-      return this.http.get(`${this.baseUrl}`).pipe(map((data: any[]) => data.map((item) => new Structure(item))));
+      requestFilters = { filters: [andFormatedFilters, orFormatedFilters], limit: limit };
     }
+    return this.http
+      .post(requestUrl, requestFilters)
+      .pipe(map((data: any[]) => data.map((item) => new Structure(item))));
   }
 
   private formatFilters(filters: Filter[]): object {
diff --git a/src/app/shared/components/button/button.component.html b/src/app/shared/components/button/button.component.html
index 1856dafa9..c0ea8b8c5 100644
--- a/src/app/shared/components/button/button.component.html
+++ b/src/app/shared/components/button/button.component.html
@@ -311,21 +311,6 @@
   </button>
 </ng-container>
 
-<ng-container *ngIf="style === buttonTypeEnum.RdvsButton">
-  <button class="btn-rdvs" type="{{ type }}" [disabled]="disabled" [ngClass]="extraClass" (click)="doAction()">
-    <div *ngIf="!iconBtn" class="text" [ngClass]="variant">{{ text }}</div>
-    <div
-      *ngIf="iconBtn && iconPos === 'left'"
-      fxLayout="row center"
-      class="text withIcon left"
-      fxLayoutAlign="space-around center"
-      [ngClass]="variant"
-    >
-      <app-svg-icon [type]="iconType" [icon]="iconBtn" [iconColor]="'currentColor'" />
-      <span [ngClass]="extraClass">{{ text }}</span>
-    </div>
-  </button>
-</ng-container>
 <ng-container *ngIf="style === buttonTypeEnum.TagCloudResetButton">
   <button type="button" class="flex row btn-tags-cloud reset" (click)="doAction()">
     <span>Supprimer les filtres</span>
diff --git a/src/app/shared/components/button/buttonType.enum.ts b/src/app/shared/components/button/buttonType.enum.ts
index 4e7b5ac5d..1026afb54 100644
--- a/src/app/shared/components/button/buttonType.enum.ts
+++ b/src/app/shared/components/button/buttonType.enum.ts
@@ -15,6 +15,5 @@ export enum ButtonType {
   modalPrimary,
   modalSecondary,
   TagCloudButton,
-  RdvsButton,
   TagCloudResetButton,
 }
diff --git a/src/app/shared/components/structure-pmr/structure-pmr.component.html b/src/app/shared/components/structure-pmr/structure-pmr.component.html
index 36b0ca2db..c56c7b3e2 100644
--- a/src/app/shared/components/structure-pmr/structure-pmr.component.html
+++ b/src/app/shared/components/structure-pmr/structure-pmr.component.html
@@ -10,7 +10,7 @@
       (keyup.enter)="goBack()"
     />
     <div class="titleContent">
-      <h3>{{ title ? title : 'La structure doit-elle être accessible pour les personnes à mobilité réduite ?' }}</h3>
+      <h3>{{ title ? title : 'La personne a-t-elle besoin d’un accès mobilité réduite ?' }}</h3>
     </div>
   </div>
   <p *ngIf="isEditMode && !structureForm.get('pmrAccess').valid" class="missing-information">
diff --git a/src/app/structure-list/components/card/card.component.html b/src/app/structure-list/components/card/card.component.html
index 78113ca64..eab17fada 100644
--- a/src/app/structure-list/components/card/card.component.html
+++ b/src/app/structure-list/components/card/card.component.html
@@ -14,10 +14,11 @@
         <div fxLayout="column" fxLayoutAlign="end">
           <div fxLayout="row" class="structure-name-container">
             <span class="structure-name" [ngClass]="{ notClaimed: !isClaimed }">{{ structure.structureName }}</span>
-            <!-- rdv disabled waiting for reworking
+            <!-- rdv disabled waiting for reworking -->
             <span *ngIf="structure.idCNFS && !isOrientation" class="rdv">
               <app-svg-icon [type]="'ico'" [icon]="'rdv'" [iconColor]="'black'" [iconClass]="'icon-22'"></app-svg-icon>
-            </span> -->
+            </span>
+            <!-- End-->
           </div>
           <span class="typeStructure" [ngClass]="{ typeStructureOrientation: isOrientation }">{{
             structure.getLabelTypeStructure()
@@ -37,7 +38,7 @@
       </div>
     </div>
   </div>
-  <div *ngIf="isOrientation" class="actions right">
+  <div *ngIf="isOrientation && !isOrientationRdv" class="actions right">
     <div
       *ngIf="!isSelected"
       fxLayout="row"
@@ -63,4 +64,19 @@
       <span>Ajouté</span>
     </div>
   </div>
+  <div *ngIf="isOrientation && isOrientationRdv" class="actions right">
+    <app-button
+      tabindex="0"
+      fxLayout="row"
+      fxLayoutGap="6px"
+      class="rdv-button"
+      [style]="buttonTypeEnum.modalPrimary"
+      [type]="'form'"
+      [text]="' Prendre RDV'"
+      [iconBtn]="'appointement'"
+      [iconPos]="'left'"
+      (click)="cardRDV(); $event.stopPropagation()"
+      (keyup.enter)="cardRDV(); $event.stopPropagation()"
+    />
+  </div>
 </div>
diff --git a/src/app/structure-list/components/card/card.component.scss b/src/app/structure-list/components/card/card.component.scss
index bf1bbe2e6..de3a0976c 100644
--- a/src/app/structure-list/components/card/card.component.scss
+++ b/src/app/structure-list/components/card/card.component.scss
@@ -62,6 +62,10 @@
   border-radius: 20px;
 }
 
+.rdv-button ::ng-deep app-svg-icon {
+  padding: 6px 8px 0 0;
+}
+
 .selected {
   border: solid 1px $grey-4;
   background-color: $white;
diff --git a/src/app/structure-list/components/card/card.component.ts b/src/app/structure-list/components/card/card.component.ts
index dcaf3e41e..0a63fd6de 100644
--- a/src/app/structure-list/components/card/card.component.ts
+++ b/src/app/structure-list/components/card/card.component.ts
@@ -3,6 +3,7 @@ import { ActivatedRoute, Router } from '@angular/router';
 import { Structure } from '../../../models/structure.model';
 import { ProfileService } from '../../../profile/services/profile.service';
 import { StructureService } from '../../../services/structure.service';
+import { ButtonType } from '../../../shared/components/button/buttonType.enum';
 
 @Component({
   selector: 'app-card',
@@ -13,10 +14,13 @@ export class CardComponent implements OnInit {
   @Input() public structure: Structure;
   @Input() public isSelected: boolean;
   @Input() public isOrientation: boolean = false;
+  @Input() public isOrientationRdv: boolean = false;
   @Output() public showDetails: EventEmitter<Structure> = new EventEmitter<Structure>();
   @Output() public addToList: EventEmitter<Structure> = new EventEmitter<Structure>();
+  @Output() public selectRDV: EventEmitter<Structure> = new EventEmitter<Structure>();
   @Output() public hover: EventEmitter<Structure> = new EventEmitter<Structure>();
   public isClaimed = true;
+  public buttonTypeEnum = ButtonType;
 
   constructor(
     private route: ActivatedRoute,
@@ -69,4 +73,8 @@ export class CardComponent implements OnInit {
   public cardAddToList(): void {
     this.addToList.emit(this.structure);
   }
+
+  public cardRDV(): void {
+    this.selectRDV.emit(this.structure);
+  }
 }
diff --git a/src/app/structure-list/components/structure-details/structure-details.component.ts b/src/app/structure-list/components/structure-details/structure-details.component.ts
index 89ffc5773..8879911f4 100644
--- a/src/app/structure-list/components/structure-details/structure-details.component.ts
+++ b/src/app/structure-list/components/structure-details/structure-details.component.ts
@@ -9,7 +9,6 @@ import { TclStopPoint } from '../../../models/tclStopPoint.model';
 import { User } from '../../../models/user.model';
 import { ProfileService } from '../../../profile/services/profile.service';
 import { AuthService } from '../../../services/auth.service';
-import { RdvsService } from '../../../services/rdvs.service';
 import { StructureService } from '../../../services/structure.service';
 import { TclService } from '../../../services/tcl.service';
 import { UserService } from '../../../services/user.service';
@@ -69,8 +68,7 @@ export class StructureDetailsComponent implements OnInit {
     private route: ActivatedRoute,
     private location: Location,
     private router: Router,
-    private usersService: UserService,
-    private rdvsService: RdvsService
+    private usersService: UserService
   ) {
     this.route.url.subscribe((url) => {
       if (url.length > 0 && url[0].path === 'structure') {
@@ -302,7 +300,7 @@ export class StructureDetailsComponent implements OnInit {
   }
 
   public goToRDVS(): void {
-    this.rdvsService.goToRDVS(this.structure.idCNFS);
+    //this.rdvsService.goToRDVS(this.structure.idCNFS);
   }
 
   public displayTrainings(): boolean {
diff --git a/src/app/structure-list/structure-list.component.html b/src/app/structure-list/structure-list.component.html
index 2e2db9d8a..236b25601 100644
--- a/src/app/structure-list/structure-list.component.html
+++ b/src/app/structure-list/structure-list.component.html
@@ -29,11 +29,13 @@
         role="listitem"
         [structure]="structure"
         [isOrientation]="isOrientation"
+        [isOrientationRdv]="isOrientationRdv"
         [isSelected]="isInPrintList(structure._id)"
         (showDetails)="showDetails(structure)"
         (keyup.enter)="showDetails(structure)"
         (hover)="handleCardHover($event)"
         (addToList)="addToList($event)"
+        (selectRDV)="selectRDV($event)"
       />
       <p *ngIf="structureList.length === 0" class="noStructureFound">
         Il n'y a aucune réponse correspondant à votre recherche
diff --git a/src/app/structure-list/structure-list.component.ts b/src/app/structure-list/structure-list.component.ts
index 49569c049..5b5c13852 100644
--- a/src/app/structure-list/structure-list.component.ts
+++ b/src/app/structure-list/structure-list.component.ts
@@ -14,6 +14,7 @@ import { PrintService } from '../shared/service/print.service';
 })
 export class StructureListComponent implements OnChanges, OnInit {
   @Input() public isOrientation: boolean = false;
+  @Input() public isOrientationRdv: boolean = false;
   @Input() public structureList: Structure[];
   @Input() public isLoading = true;
   @Input() public location: GeoJson;
@@ -22,6 +23,7 @@ export class StructureListComponent implements OnChanges, OnInit {
   @Output() public displayMapMarkerId: EventEmitter<string> = new EventEmitter<string>();
   @Output() public selectedMarkerId: EventEmitter<string> = new EventEmitter<string>();
   @Output() public structureSelected: EventEmitter<Structure[]> = new EventEmitter<Structure[]>();
+  @Output() public structureRDVSelected: EventEmitter<Structure> = new EventEmitter<Structure>();
 
   public buttonTypeEnum = ButtonType;
   public structure: Structure;
@@ -62,6 +64,10 @@ export class StructureListComponent implements OnChanges, OnInit {
     }
   }
 
+  public selectRDV(structure: Structure): void {
+    this.structureRDVSelected.emit(structure);
+  }
+
   public addToList(structure: Structure): void {
     let index = this.selectedStructureList.findIndex((elem) => elem._id == structure._id);
     if (index > -1) {
diff --git a/src/app/utils/orientationUtils.ts b/src/app/utils/orientationUtils.ts
index 25dad14d5..950de9423 100644
--- a/src/app/utils/orientationUtils.ts
+++ b/src/app/utils/orientationUtils.ts
@@ -1,24 +1,18 @@
-import {
-  FormControl,
-  FormGroup,
-  UntypedFormArray,
-  UntypedFormControl,
-  UntypedFormGroup,
-  Validators,
-} from '@angular/forms';
+import { FormControl, FormGroup, UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
 import { structureFormStep } from '../form/form-view/structure-form/structureFormStep.enum';
-import { MeetingRDVSSteps } from '../form/orientation-form-view/enums/MeetingRDVSSteps.enum';
+import { AppointmentSteps } from '../form/orientation-form-view/enums/AppointmentSteps.enum';
 import { FiltersSteps } from '../form/orientation-form-view/enums/filtersSteps.enum';
 import { HotlineMediationSteps } from '../form/orientation-form-view/enums/hotlineMediationSteps.enum';
 import { NeedsType } from '../form/orientation-form-view/enums/needs.enum';
 import { OnlineDemarchesCommonSteps } from '../form/orientation-form-view/enums/onlineDemarchesCommonSteps.enum';
 import { PreferredLanguages } from '../form/orientation-form-view/enums/preferredLanguages.enum';
 import { StructuresListSteps } from '../form/orientation-form-view/enums/structuresListSteps.enum';
+import { AppointmentForm } from '../form/orientation-form-view/interfaces/appointmentForm.interface';
 import { FiltersForm } from '../form/orientation-form-view/interfaces/filtersForm.interface';
-import { MeetingRDVSForm } from '../form/orientation-form-view/interfaces/meetingRDVSForm.interface';
 import { OnlineDemarchesForm } from '../form/orientation-form-view/interfaces/onlineDemarchesForm.interface';
 import { StructureOrientationForm } from '../form/orientation-form-view/interfaces/structureOrientationForm.interface';
 import { StructureOrientator } from '../form/orientation-form-view/interfaces/structureOrientator.interface';
+import { Filter } from '../structure-list/models/filter.model';
 import { Module } from '../structure-list/models/module.model';
 import { CustomRegExp } from './CustomRegExp';
 
@@ -108,25 +102,22 @@ export class OrientationUtils {
       structurePhone: new FormControl(orientator?.structurePhone || '', [Validators.pattern(CustomRegExp.PHONE)]),
     });
   }
-  public createMeetingRDVSForm(
+  public createAppointmentForm(
     onlineDemarcheType,
     orientatorForm?: FormGroup<StructureOrientator>
-  ): FormGroup<MeetingRDVSForm> {
-    return new FormGroup<MeetingRDVSForm>({
+  ): FormGroup<AppointmentForm> {
+    return new FormGroup<AppointmentForm>({
       structureOrientator: orientatorForm || this.createStructureOrientatorForm(),
-      categories: new UntypedFormGroup(
-        {
-          age: new UntypedFormArray([], Validators.required),
-          languageAndIlliteracy: new UntypedFormArray([]),
-          genre: new UntypedFormArray([]),
-          handicaps: new UntypedFormArray([]),
-        },
-        Validators.required
-      ),
+      structureRDV: new FormControl('', Validators.required),
       pmrAccess: new FormControl(null, Validators.required),
-      digitalPass: new FormControl(null, Validators.required),
       address: new FormControl(''),
       onlineDemarcheType: new FormControl(onlineDemarcheType),
+      socialWorkerId: new FormControl('', Validators.required),
+      details: new FormControl(''),
+      name: new FormControl('', [Validators.required, Validators.pattern(CustomRegExp.TEXT_WITHOUT_NUMBER)]),
+      surname: new FormControl('', [Validators.required, Validators.pattern(CustomRegExp.TEXT_WITHOUT_NUMBER)]),
+      email: new UntypedFormControl('', [Validators.required, Validators.pattern(CustomRegExp.EMAIL)]),
+      phone: new UntypedFormControl('', [Validators.required, Validators.pattern(CustomRegExp.PHONE)]),
     });
   }
   /**
@@ -167,7 +158,7 @@ export class OrientationUtils {
     pagesValidation[HotlineMediationSteps.infoScreen] = {
       valid: true,
     };
-    pagesValidation[HotlineMediationSteps.mediationBeneciaryInfo] = {
+    pagesValidation[HotlineMediationSteps.mediationBeneficiaryInfo] = {
       valid: form.get('name').valid && form.get('surname').valid && form.get('phone').valid,
     };
     pagesValidation[HotlineMediationSteps.mediationHoursSelection] = {
@@ -205,7 +196,7 @@ export class OrientationUtils {
     pagesValidation[StructuresListSteps.structureOrientator] = {
       valid: form.get('structureOrientator').valid,
     };
-    pagesValidation[StructuresListSteps.mediationBeneciaryInfo] = {
+    pagesValidation[StructuresListSteps.mediationBeneficiaryInfo] = {
       valid: form.get('name').valid && form.get('surname').valid,
     };
     pagesValidation[StructuresListSteps.comments] = { valid: true };
@@ -220,31 +211,35 @@ export class OrientationUtils {
    * @param updatePageValid
    * @param step
    */
-  public setValidationsOnlineMeetingForm(
+  public setValidationsAppointmentForm(
     pagesValidation: any[],
-    form: FormGroup<MeetingRDVSForm>,
+    form: FormGroup<AppointmentForm>,
     updatePageValid: (isValid: boolean) => void,
-    step: MeetingRDVSSteps
+    step: AppointmentSteps
   ): void {
-    pagesValidation[MeetingRDVSSteps.infoScreen] = {
+    pagesValidation[AppointmentSteps.infoScreen] = {
       valid: true,
     };
-    pagesValidation[MeetingRDVSSteps.structureOrientator] = {
+    pagesValidation[AppointmentSteps.structureOrientator] = {
       valid: form.get('structureOrientator').valid,
     };
-    pagesValidation[MeetingRDVSSteps.publicTypeMandatory] = {
-      valid: form.get('categories').valid && form.get('categories').get('age').valid,
+    pagesValidation[AppointmentSteps.pmrAccess] = {
+      valid: form.get('pmrAccess').valid,
     };
-    pagesValidation[MeetingRDVSSteps.publicTypeOptional] = {
+    pagesValidation[AppointmentSteps.location] = {
       valid: true,
     };
-    pagesValidation[MeetingRDVSSteps.pmrAccess] = {
-      valid: form.get('pmrAccess').valid,
-    };
-    pagesValidation[MeetingRDVSSteps.digitalPass] = {
+    pagesValidation[AppointmentSteps.carto] = {
       valid: true,
     };
-    pagesValidation[MeetingRDVSSteps.location] = {
+    pagesValidation[AppointmentSteps.makeAppointment] = {
+      valid: form.get('socialWorkerId').valid,
+    };
+    pagesValidation[AppointmentSteps.mediationBeneficiaryInfo] = {
+      valid:
+        form.get('name').valid && form.get('surname').valid && (form.get('phone').valid || form.get('email').valid),
+    };
+    pagesValidation[AppointmentSteps.rdvEnd] = {
       valid: true,
     };
 
@@ -269,4 +264,20 @@ export class OrientationUtils {
     };
     updatePageValid(pagesValidation[step].valid);
   }
+
+  /**
+   *
+   * @param filters
+   * @param event
+   */
+  public manuallySetOfPmr(filters: Filter[], event: { name: string; value: boolean }): void {
+    // Handle special PMR access case
+    if (event.name === 'pmrAccess') {
+      if (event.value) {
+        filters.push(new Filter('pmrAccess', 'True', 'PMR'));
+      } else {
+        filters = filters.filter((module) => module.name !== 'pmrAccess');
+      }
+    }
+  }
 }
diff --git a/src/assets/form/rdvsImage.svg b/src/assets/form/rdvsImage.svg
deleted file mode 100644
index 538893ef5..000000000
--- a/src/assets/form/rdvsImage.svg
+++ /dev/null
@@ -1,228 +0,0 @@
-<svg width="200" height="201" viewBox="0 0 200 201" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M116.463 134.905L184.883 95.4026C191.101 91.8127 191.101 85.9924 184.883 82.4026L148.679 61.5" stroke="#706F6F" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/>
-<path d="M20.9996 126.54L44.0803 113.214C50.2981 109.624 60.3792 109.624 66.597 113.214L101.944 133.622" stroke="#706F6F" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/>
-<path d="M145.673 140.952C146.992 141.714 146.997 142.953 145.691 143.715L103.532 168.215C102.221 168.977 100.078 168.977 98.7585 168.215L54.3282 142.564C53.0087 141.802 52.9998 140.562 54.3105 139.801L96.4692 115.301C97.7799 114.539 99.923 114.539 101.243 115.301L145.673 140.952Z" fill="white" stroke="#DA3635" stroke-miterlimit="10"/>
-<path d="M136.825 141.112C137.888 141.728 137.892 142.729 136.838 143.34L102.845 163.093C101.787 163.708 100.06 163.708 98.9969 163.093L63.1702 142.41C62.1075 141.794 62.0986 140.798 63.1569 140.183L97.1504 120.429C98.2087 119.814 99.9356 119.814 100.998 120.429L136.825 141.112Z" fill="#EDEDED"/>
-<path d="M68.0088 103.646V140.948L100.616 159.594V122.297L68.0088 103.646Z" fill="white"/>
-<path d="M68.0088 103.646V140.948L100.616 159.594V122.297L68.0088 103.646Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.616 122.299L133.175 103.626L100.616 84.9355L68.0088 103.648L100.616 122.299Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.638 119.544L128.335 103.657L100.638 87.7559L72.9014 103.679L100.638 119.544Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M133.175 103.625L133.224 140.948L100.616 159.595V122.298L133.175 103.625Z" fill="white"/>
-<path d="M133.175 103.625L133.224 140.948L100.616 159.595V122.298L133.175 103.625Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.616 80.6709L68.0088 99.3879L100.616 118.034L133.175 99.3614L100.616 80.6709ZM72.9017 99.4189L100.638 83.4959L128.34 99.3968L100.638 115.28L72.9017 99.4189Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M68.0088 99.3887V106.075L100.616 124.721V118.035L68.0088 99.3887Z" fill="white"/>
-<path d="M68.0088 99.3887V106.075L100.616 124.721V118.035L68.0088 99.3887Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.616 118.033V124.351L133.175 105.674V99.3555L100.616 118.033Z" fill="white"/>
-<path d="M100.616 118.033V124.351L133.175 105.674V99.3555L100.616 118.033Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.639 83.4961V87.7558L124.621 101.527L128.336 99.3969L100.639 83.4961Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M72.9014 99.4191L100.638 83.4961V87.7558L76.5855 101.527L72.9014 99.4191Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.428 115.62V125.37L128.729 121.775L129.756 121.195V111.436L122.428 115.62Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.428 115.624V124.303L128.729 120.708V112.033L122.428 115.624Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.134 120.735V130.49L119.435 126.894L120.462 126.31V116.555L113.134 120.735Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.134 120.74V129.423L119.435 125.827V117.148L113.134 120.74Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.034 125.491V135.241L110.335 131.65L111.367 131.065V121.311L104.034 125.491Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.034 125.495V134.179L110.335 130.583V121.904L104.034 125.495Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.45 127.523V137.278L128.751 133.683L129.783 133.094V123.339L122.45 127.523Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.45 127.528V136.211L128.751 132.615V123.937L122.45 127.528Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.156 132.638V142.388L119.457 138.797L120.489 138.213V128.458L113.156 132.638Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.156 132.643V141.326L119.457 137.731V129.052L113.156 132.643Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.062 137.394V147.149L110.358 143.553L111.39 142.969V133.214L104.062 137.394Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.062 137.402V146.08L110.358 142.485V133.811L104.062 137.402Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M90.6436 151.983L90.6745 127.058L98.4323 131.534L98.4014 156.464L90.6436 151.983Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M69.2617 139.646L69.2927 114.717L77.0505 119.198L77.0195 144.123L69.2617 139.646Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M87.991 129.367L87.9245 152.41L76.2568 145.671L76.3233 122.632L87.991 129.367Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M74.5147 122.513L77.2025 120.95L77.1316 146.19L74.4395 147.753L74.5147 122.513Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M88.0694 128.503L90.7616 126.94L90.6819 154.009L87.9941 155.576L88.0694 128.503Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M72.8701 119.732L75.5623 118.164L90.7591 126.94L88.0669 128.503L72.8701 119.732Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M88.0689 128.503L87.9937 155.576L86.3464 154.624L86.4173 129.389L74.5149 122.512L74.4397 147.752L72.7969 146.8L72.8722 119.731L88.0689 128.503Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M74.4502 126.356L75.2384 125.896L86.4057 132.351L86.4146 133.273L74.4502 126.356Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M86.4151 133.273L86.4018 137.209L74.4375 130.297L74.4507 126.356L86.4151 133.273Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M85.1492 140.492L85.1403 143.645L84.0732 143.03L84.0865 139.877L85.1492 140.492Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M84.2203 141.29L84.0432 141.503C83.9901 141.569 83.8971 141.596 83.8174 141.569L82.8211 141.251C82.6705 141.202 82.52 141.33 82.551 141.49C82.5642 141.569 82.6218 141.631 82.6971 141.653L84.2513 142.141C84.3133 142.158 84.3797 142.149 84.4284 142.114L84.8535 141.835C84.9775 141.751 84.9775 141.565 84.8535 141.485L84.5037 141.255C84.4107 141.189 84.2912 141.211 84.2203 141.29Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M68.0088 63.3496V100.646L100.616 119.293V81.9958L68.0088 63.3496Z" fill="white"/>
-<path d="M68.0088 63.3496V100.646L100.616 119.293V81.9958L68.0088 63.3496Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.616 81.9955L133.175 63.3227L100.616 44.6367L68.0088 63.3493L100.616 81.9955Z" fill="white"/>
-<path d="M100.616 81.9955L133.175 63.3227L100.616 44.6367L68.0088 63.3493L100.616 81.9955Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M133.175 63.3223L133.224 100.646L100.616 119.292V81.995L133.175 63.3223Z" fill="white"/>
-<path d="M133.175 63.3223L133.224 100.646L100.616 119.292V81.995L133.175 63.3223Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M77.4734 75.6859V85.4407L71.1724 81.8452L70.1406 81.2607V71.5059L77.4734 75.6859Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M77.469 75.6907V84.3739L71.168 80.774V72.0996L77.469 75.6907Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M86.7683 80.805V90.5598L80.4673 86.9643L79.4355 86.3798V76.625L86.7683 80.805Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M86.7639 80.8034V89.4867L80.4629 85.8912V77.2168L86.7639 80.8034Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M95.8624 85.5609V95.3157L89.5614 91.7202L88.5342 91.1357V81.3809L95.8624 85.5609Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M95.8625 85.5637V94.247L89.5615 90.6515V81.9727L95.8625 85.5637Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M77.5715 87.5887V97.3435L71.2705 93.7524L70.2432 93.1635V83.4131L77.5715 87.5887Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M77.5715 87.593V96.2763L71.2705 92.6808V84.002L77.5715 87.593Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M86.8674 92.7073V102.462L80.5664 98.8666L79.5391 98.2822V88.5273L86.8674 92.7073Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M86.8664 92.7122V101.391L80.5654 97.7999V89.1211L86.8664 92.7122Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M95.9621 97.4632V107.218L89.6655 103.623L88.6338 103.042V93.2832L95.9621 97.4632Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M95.9621 97.4705V106.145L89.6611 102.554V93.875L95.9621 97.4705Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.428 75.3197V85.0745L128.729 81.479L129.756 80.8945V71.1396L122.428 75.3197Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.428 75.3245V84.0033L128.729 80.4122V71.7334L122.428 75.3245Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.134 80.4339V90.1931L119.435 86.5932L120.462 86.0087V76.2539L113.134 80.4339Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.134 80.4417V89.1205L119.435 85.5294V76.8506L113.134 80.4417Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.034 85.1947V94.945L110.34 91.3539L111.367 90.765V81.0146L104.034 85.1947Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.034 85.1975V93.8808L110.34 90.2853V81.6064L104.034 85.1975Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.449 87.22V96.9749L128.75 93.3794L129.782 92.7949V83.04L122.449 87.22Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.449 87.2249V95.9081L128.75 92.3126V83.6338L122.449 87.2249Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.155 92.3392V102.09L119.456 98.4941L120.488 97.9096V88.1592L113.155 92.3392Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.155 92.344V101.027L119.456 97.4317V88.7529L113.155 92.344Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.061 97.095V106.845L110.362 103.254L111.389 102.67V92.915L104.061 97.095Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.061 97.0999V105.779L110.362 102.188V93.5088L104.061 97.0999Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M68.0088 61.4141V63.3491L100.882 82.7569V80.8263L68.0088 61.4141Z" fill="white"/>
-<path d="M68.0088 61.4141V63.3491L100.882 82.7569V80.8263L68.0088 61.4141Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.882 80.8262L133.056 62.3749L100.231 42.9229L68.0088 61.4141L100.882 80.8262Z" fill="white"/>
-<path d="M100.882 80.8262L133.056 62.3749L100.231 42.9229L68.0088 61.4141L100.882 80.8262Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M133.055 62.374L133.104 64.3356L100.882 82.756V80.8254L133.055 62.374Z" fill="white"/>
-<path d="M133.055 62.374L133.104 64.3356L100.882 82.756V80.8254L133.055 62.374Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M98.7614 41.9336L69.8379 58.5385L73.6902 60.7392L100.878 76.547L125.949 62.1694L129.757 59.9864L98.7614 41.9336ZM100.9 74.1028L74.1773 58.565L98.7791 44.4442L125.471 60.0174L123.833 60.9561L100.9 74.1028Z" fill="white"/>
-<path d="M98.7614 41.9336L69.8379 58.5385L73.6902 60.7392L100.878 76.547L125.949 62.1694L129.757 59.9864L98.7614 41.9336ZM100.9 74.1028L74.1773 58.565L98.7791 44.4442L125.471 60.0174L123.833 60.9561L100.9 74.1028Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M69.8447 58.5371V60.5784L100.88 78.5914V76.5457L69.8447 58.5371Z" fill="white"/>
-<path d="M69.8447 58.5371V60.5784L100.88 78.5914V76.5457L69.8447 58.5371Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.88 76.546V78.5917L129.764 62.0222V59.9854L100.88 76.546Z" fill="white"/>
-<path d="M100.88 76.546V78.5917L129.764 62.0222V59.9854L100.88 76.546Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M98.7812 44.4385L98.8122 46.7543L123.467 61.1673L125.469 60.0116L98.7812 44.4385Z" fill="white"/>
-<path d="M98.7812 44.4385L98.8122 46.7543L123.467 61.1673L125.469 60.0116L98.7812 44.4385Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M74.1787 58.5637L98.785 44.4385L98.8159 46.7543L76.1935 59.715L74.1787 58.5637Z" fill="white"/>
-<path d="M74.1787 58.5637L98.785 44.4385L98.8159 46.7543L76.1935 59.715L74.1787 58.5637Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M107.017 55.6205C110.887 57.8566 110.909 61.4742 107.066 63.7104C103.222 65.9465 96.9655 65.9465 93.0954 63.7104C89.2254 61.4742 89.2077 57.8566 93.0511 55.6205C96.8946 53.3843 103.147 53.3843 107.017 55.6205Z" fill="white" stroke="#DA3635" stroke-miterlimit="10"/>
-<path d="M104.372 57.1576C106.772 58.5436 106.786 60.7886 104.403 62.1745C102.021 63.5605 98.1422 63.5605 95.7422 62.1745C93.3422 60.7886 93.3334 58.5436 95.7156 57.1576C98.0978 55.7717 101.972 55.7717 104.372 57.1576Z" fill="#EDEDED"/>
-<path d="M123.199 156.5L141.949 167.325C148.167 170.915 148.167 176.735 141.949 180.325L128.462 188.112" stroke="#706F6F" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/>
-<path d="M128.208 154.049C130.248 155.225 130.261 157.135 128.233 158.311C126.206 159.487 122.909 159.487 120.869 158.311C118.829 157.135 118.82 155.225 120.848 154.049C122.876 152.873 126.168 152.873 128.208 154.049Z" fill="white" stroke="#DA3635" stroke-miterlimit="10"/>
-<path d="M133.362 185.949C138.27 188.784 138.301 193.38 133.42 196.215C128.544 199.049 120.605 199.049 115.698 196.215C110.79 193.38 110.763 188.784 115.645 185.949C120.526 183.115 128.454 183.115 133.362 185.949Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 5"/>
-<path d="M131.955 186.648C136.075 189.028 136.101 192.884 132.008 195.264C127.914 197.643 121.251 197.643 117.125 195.264C113.005 192.884 112.984 189.028 117.078 186.648C121.171 184.268 127.83 184.268 131.955 186.648Z" fill="#EDEDED"/>
-<path d="M134.208 186.41C134.203 186.458 134.203 186.505 134.198 186.558C134.192 186.601 134.187 186.643 134.182 186.685C134.177 186.733 134.166 186.78 134.161 186.828C134.155 186.87 134.145 186.913 134.134 186.955C134.124 187.003 134.113 187.05 134.097 187.098C134.087 187.14 134.071 187.182 134.06 187.225C134.044 187.272 134.028 187.32 134.013 187.362C133.997 187.405 133.981 187.447 133.965 187.489C133.944 187.537 133.923 187.584 133.901 187.637C133.886 187.68 133.864 187.717 133.843 187.759C133.822 187.806 133.796 187.854 133.769 187.902C133.748 187.939 133.727 187.981 133.706 188.018C133.674 188.076 133.637 188.134 133.6 188.187C133.579 188.224 133.558 188.256 133.531 188.293C133.489 188.357 133.441 188.42 133.394 188.478C133.373 188.505 133.351 188.531 133.33 188.563C133.251 188.663 133.166 188.758 133.082 188.854C133.061 188.88 133.034 188.901 133.013 188.928C132.944 189.002 132.87 189.076 132.796 189.145C132.759 189.176 132.727 189.208 132.69 189.24C132.643 189.282 132.595 189.319 132.548 189.361C132.505 189.398 132.463 189.435 132.415 189.472C132.368 189.515 132.315 189.552 132.262 189.594C132.214 189.631 132.167 189.668 132.119 189.7C132.066 189.737 132.013 189.779 131.955 189.816C131.902 189.853 131.855 189.885 131.802 189.922C131.744 189.959 131.686 189.996 131.627 190.033C131.553 190.081 131.479 190.123 131.405 190.171C131.194 190.292 130.977 190.403 130.755 190.514C130.697 190.541 130.638 190.572 130.575 190.599C130.374 190.694 130.168 190.779 129.956 190.863C129.93 190.874 129.903 190.885 129.872 190.895C129.644 190.98 129.411 191.059 129.179 191.133C129.015 191.186 128.845 191.228 128.682 191.276C128.555 191.313 128.428 191.345 128.301 191.376C128.126 191.419 127.946 191.456 127.767 191.493C127.634 191.519 127.507 191.551 127.375 191.572C127.322 191.583 127.264 191.588 127.211 191.598C126.989 191.636 126.767 191.667 126.54 191.694C126.476 191.699 126.407 191.71 126.344 191.715C126.217 191.731 126.085 191.736 125.953 191.747C125.736 191.762 125.519 191.778 125.297 191.789C125.159 191.794 125.016 191.799 124.879 191.799C124.704 191.805 124.525 191.805 124.35 191.799C124.202 191.799 124.054 191.794 123.906 191.789C123.742 191.784 123.578 191.773 123.414 191.762C123.266 191.752 123.118 191.741 122.964 191.725C122.801 191.71 122.642 191.694 122.483 191.673C122.34 191.657 122.192 191.636 122.05 191.609C121.875 191.583 121.706 191.551 121.537 191.519C121.404 191.493 121.267 191.466 121.135 191.44C120.934 191.398 120.733 191.345 120.532 191.292C120.405 191.26 120.273 191.228 120.146 191.186C120.077 191.165 120.008 191.144 119.945 191.123C119.744 191.059 119.548 190.99 119.358 190.922C119.299 190.9 119.246 190.879 119.188 190.858C119.014 190.789 118.845 190.715 118.675 190.641C118.591 190.604 118.506 190.572 118.427 190.53C118.183 190.414 117.945 190.292 117.718 190.16C115.809 189.06 114.857 187.611 114.862 186.167L114.852 190.329C114.846 191.773 115.798 193.217 117.707 194.322C117.935 194.454 118.173 194.576 118.416 194.692C118.495 194.729 118.585 194.766 118.665 194.803C118.808 194.867 118.95 194.936 119.098 194.994C119.125 195.004 119.151 195.015 119.178 195.02C119.231 195.041 119.289 195.063 119.347 195.084C119.537 195.152 119.738 195.221 119.934 195.285C120.003 195.306 120.072 195.327 120.14 195.348C120.188 195.364 120.23 195.38 120.278 195.39C120.357 195.412 120.442 195.428 120.526 195.449C120.727 195.502 120.923 195.549 121.129 195.597C121.182 195.607 121.235 195.623 121.288 195.634C121.367 195.65 121.447 195.66 121.526 195.676C121.695 195.708 121.87 195.74 122.039 195.766C122.108 195.777 122.176 195.792 122.245 195.803C122.319 195.814 122.399 195.819 122.473 195.829C122.631 195.851 122.795 195.866 122.959 195.882C123.038 195.888 123.113 195.903 123.192 195.909C123.266 195.914 123.335 195.914 123.409 195.919C123.573 195.93 123.737 195.941 123.901 195.946C123.985 195.951 124.065 195.956 124.149 195.956C124.213 195.956 124.281 195.956 124.345 195.956C124.519 195.956 124.699 195.956 124.874 195.956C124.964 195.956 125.048 195.956 125.138 195.956C125.191 195.956 125.244 195.946 125.291 195.946C125.508 195.935 125.73 195.919 125.947 195.903C126.037 195.898 126.122 195.893 126.212 195.888C126.254 195.882 126.296 195.877 126.339 195.872C126.402 195.866 126.471 195.856 126.534 195.851C126.762 195.824 126.984 195.792 127.206 195.755C127.259 195.745 127.317 195.74 127.37 195.729C127.396 195.724 127.423 195.724 127.449 195.718C127.555 195.697 127.656 195.671 127.761 195.65C127.941 195.613 128.121 195.576 128.295 195.533C128.422 195.502 128.549 195.465 128.676 195.433C128.845 195.385 129.009 195.343 129.173 195.29C129.21 195.279 129.247 195.269 129.279 195.258C129.48 195.195 129.676 195.126 129.866 195.052C129.893 195.041 129.919 195.031 129.951 195.02C130.162 194.936 130.369 194.851 130.57 194.756C130.628 194.729 130.691 194.703 130.749 194.671C130.972 194.565 131.194 194.449 131.4 194.327C131.442 194.306 131.479 194.28 131.516 194.259C131.553 194.238 131.585 194.216 131.622 194.19C131.68 194.153 131.738 194.116 131.797 194.079C131.849 194.042 131.902 194.01 131.95 193.973C132.003 193.936 132.061 193.899 132.114 193.857C132.162 193.82 132.209 193.783 132.257 193.746C132.31 193.709 132.357 193.666 132.41 193.629C132.458 193.592 132.5 193.555 132.542 193.518C132.59 193.476 132.637 193.439 132.68 193.397C132.701 193.381 132.717 193.365 132.738 193.349C132.754 193.333 132.77 193.317 132.786 193.301C132.86 193.227 132.934 193.159 133.002 193.085C133.024 193.058 133.05 193.037 133.071 193.011C133.161 192.915 133.246 192.815 133.32 192.72C133.325 192.714 133.325 192.709 133.33 192.709C133.346 192.688 133.362 192.662 133.383 192.64C133.431 192.577 133.478 192.519 133.521 192.455C133.542 192.418 133.568 192.387 133.589 192.349C133.626 192.291 133.664 192.233 133.695 192.18C133.706 192.164 133.716 192.149 133.722 192.133C133.732 192.111 133.743 192.085 133.759 192.064C133.785 192.016 133.812 191.969 133.833 191.921C133.854 191.879 133.87 191.842 133.891 191.799C133.912 191.752 133.933 191.704 133.954 191.651C133.965 191.63 133.976 191.609 133.981 191.588C133.986 191.567 133.991 191.546 134.002 191.53C134.018 191.482 134.034 191.435 134.05 191.392C134.06 191.35 134.076 191.308 134.087 191.265C134.097 191.218 134.113 191.17 134.124 191.123C134.129 191.096 134.139 191.07 134.145 191.048C134.15 191.033 134.15 191.011 134.155 190.996C134.166 190.948 134.171 190.9 134.177 190.853C134.182 190.81 134.187 190.768 134.192 190.726C134.198 190.678 134.198 190.631 134.203 190.578C134.203 190.551 134.208 190.52 134.208 190.493C134.208 190.467 134.208 190.435 134.208 190.409L134.219 186.246C134.219 186.299 134.214 186.352 134.208 186.41Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/>
-<path d="M131.357 182.248C135.149 184.437 135.17 187.986 131.405 190.175C127.639 192.365 121.51 192.365 117.718 190.175C113.926 187.986 113.91 184.437 117.675 182.248C121.441 180.058 127.565 180.058 131.357 182.248Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/>
-<path d="M129.094 183.966C129.226 184.046 129.231 184.173 129.089 184.252L125.984 186.055C125.852 186.135 125.852 186.262 125.989 186.341L128.951 188.049C129.083 188.129 129.089 188.256 128.946 188.335L128.306 188.705C128.168 188.784 127.941 188.784 127.809 188.71L124.847 187.002C124.71 186.923 124.482 186.923 124.345 187.002L121.214 188.821C121.076 188.901 120.849 188.901 120.717 188.827L119.976 188.398C119.839 188.319 119.833 188.187 119.976 188.107L123.107 186.288C123.245 186.209 123.245 186.077 123.112 186.003L120.172 184.305C120.034 184.226 120.029 184.093 120.172 184.014L120.812 183.644C120.949 183.564 121.177 183.564 121.314 183.644L124.255 185.341C124.387 185.421 124.614 185.421 124.747 185.341L127.851 183.538C127.989 183.459 128.216 183.459 128.354 183.538L129.094 183.966Z" fill="#DA3635"/>
-<path d="M24.8715 127.409C28.1368 129.363 28.1555 132.524 24.9126 134.478C21.6697 136.432 16.3906 136.432 13.1253 134.478C9.86 132.524 9.84506 129.363 13.088 127.409C16.3309 125.455 21.6062 125.455 24.8715 127.409Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/>
-<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" fill="white"/>
-<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" fill="white"/>
-<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" fill="white"/>
-<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" fill="white"/>
-<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" fill="white"/>
-<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" fill="white"/>
-<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" fill="white"/>
-<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" fill="white"/>
-<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" fill="white"/>
-<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" fill="white"/>
-<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" fill="white"/>
-<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" fill="white"/>
-<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" fill="white"/>
-<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" fill="white"/>
-<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.7717 109.551C15.3734 109.688 15.0865 109.941 14.7911 110.223C14.4442 110.557 13.9046 110.866 13.6905 111.324C13.3694 112.022 13.2066 113.311 13.1424 114.073C13.0482 114.998 13.1167 115.923 13.1938 116.852C13.1938 116.852 13.1724 117.443 14.5812 116.737C14.5812 116.737 14.3543 118.368 15.1636 118.638C15.9944 119.096 16.8551 118.921 17.7929 118.921C18.812 118.908 19.7927 118.707 20.208 117.713C20.4521 117.289 20.2038 116.03 20.2038 116.03C20.8889 116.433 21.8053 115.713 21.8053 115.713C21.9809 114.399 21.1202 113.003 20.6363 111.821C20.3793 111.204 20.0839 110.72 19.6428 110.211C19.4672 109.997 19.2403 109.568 19.0262 109.418C18.6793 109.149 18.9319 109.243 18.5294 109.337C17.6987 109.538 16.3541 111.08 15.883 109.564C15.8916 109.564 15.883 109.513 15.7717 109.551Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.8919 109.564C16.3629 111.08 17.7032 109.538 18.5383 109.337C18.9408 109.243 18.6839 109.149 19.035 109.418C19.2491 109.564 19.4761 109.997 19.6516 110.211C20.0927 110.72 20.3882 111.204 20.6451 111.821C21.129 113.003 21.9854 114.399 21.8141 115.713C21.8141 115.713 20.902 116.433 20.2126 116.03C20.2126 116.03 20.461 117.289 20.2169 117.713C19.8015 118.707 18.8209 118.908 17.8017 118.921C16.8639 118.921 16.0032 119.096 15.1724 118.638C14.3631 118.368 14.5901 116.737 14.5901 116.737C13.1769 117.443 13.2026 116.852 13.2026 116.852C13.1213 115.927 13.057 115.002 13.1512 114.073C13.2198 113.307 13.3782 112.022 13.6994 111.324C13.9135 110.866 14.453 110.557 14.7999 110.223C15.0954 109.941 15.378 109.675 15.7805 109.551C15.772 109.551 15.8447 109.508 15.8919 109.564Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" fill="white"/>
-<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" fill="#DA3635"/>
-<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M13 111.282L13.2826 109.92L14.8884 108.986L16.2117 109.415L26.8872 127.789L23.6755 129.657L13 111.282Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M23.6758 129.656L23.9413 128.26L25.5471 127.331L26.8874 127.789L27.5169 132.572L23.6758 129.656Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M25.8594 131.314L26.0478 130.941C26.1934 130.65 26.5017 130.47 26.8314 130.487L27.2468 130.509L27.5209 132.577L25.8594 131.314Z" fill="#DA3635" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M14.8887 108.986L25.5471 127.331L26.8874 127.789L16.2119 109.415L14.8887 108.986Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M23.941 128.261L13.2826 109.92L13 111.282L23.6755 129.657L23.941 128.261Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M13.6992 116.672C13.6992 116.672 15.0952 116.488 15.7632 115.876L15.2879 115.02C15.2879 115.02 14.0504 115.499 13.9262 115.675C13.802 115.855 13.6992 116.672 13.6992 116.672Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.292 115.02C15.292 115.02 15.292 114.245 15.5917 114C15.8958 113.761 15.5917 114.57 15.5917 114.57C15.5917 114.57 16.3069 113.953 16.5124 114.018C16.718 114.082 16.9406 114.75 16.8764 115.071C16.8122 115.392 15.8787 115.739 15.763 115.876L15.292 115.02Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M13.832 117.036C13.832 117.036 15.592 116.073 15.7633 115.876L15.288 115.02C15.288 115.02 14.2688 115.379 13.9733 115.628" fill="white"/>
-<path d="M13.832 117.036C13.832 117.036 15.592 116.073 15.7633 115.876L15.288 115.02C15.288 115.02 14.2688 115.379 13.9733 115.628" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M20.6021 114.518C20.6021 114.518 18.8764 114.154 18.5381 113.73L19.4673 115.486C19.4673 115.486 20.0839 116.137 21.1245 116.03" fill="white"/>
-<path d="M20.6021 114.518C20.6021 114.518 18.8764 114.154 18.5381 113.73L19.4673 115.486C19.4673 115.486 20.0839 116.137 21.1245 116.03" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M18.8633 111.967C18.8633 111.967 19.4499 114.044 20.0709 114.391Z" fill="white"/>
-<path d="M18.8633 111.967C18.8633 111.967 19.4499 114.044 20.0709 114.391" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M153.972 87.8867C154.213 87.8867 154.373 88.0426 154.373 88.2995V94.2098C154.373 94.4499 154.217 94.61 153.972 94.61C153.728 94.61 153.56 94.4541 153.56 94.2098V88.2995C153.576 88.131 153.732 87.8867 153.972 87.8867Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M153.972 90.4776C156.125 90.4776 157.86 88.742 157.86 86.5894C157.86 84.4409 156.125 82.7012 153.972 82.7012C151.82 82.7012 150.084 84.4367 150.084 86.5894C150.084 88.742 151.824 90.4776 153.972 90.4776Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M153.972 90.4776C156.121 90.4776 157.86 88.7378 157.86 86.5894C157.86 84.4409 156.121 82.7012 153.972 82.7012C151.824 82.7012 150.084 84.4409 150.084 86.5894C150.084 88.7378 151.824 90.4776 153.972 90.4776Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M155.114 89.4248C152.919 89.4248 151.226 87.647 151.226 85.5366C151.226 84.6393 151.554 83.8431 151.95 83.2744C150.809 83.9316 150 85.2248 150 86.5939C150 88.7844 151.782 90.4821 153.888 90.4821C155.186 90.4821 156.323 89.8291 157.052 88.8603C156.479 89.2562 155.839 89.4248 155.114 89.4248Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M155.114 89.4248C152.919 89.4248 151.226 87.647 151.226 85.5366C151.226 84.6393 151.554 83.8431 151.95 83.2744C150.809 83.9316 150 85.2248 150 86.5939C150 88.7844 151.782 90.4821 153.888 90.4821C155.186 90.4821 156.323 89.8291 157.052 88.8603C156.479 89.2562 155.839 89.4248 155.114 89.4248Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M177.942 79.6309H178.186C178.515 79.6309 178.755 79.871 178.755 80.1995V89.8379C178.755 90.1665 178.51 90.4066 178.186 90.4066H177.942C177.613 90.4066 177.373 90.1665 177.373 89.8379V80.1995C177.386 79.871 177.63 79.6309 177.942 79.6309Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M178.027 83.6747C181.43 83.6747 184.177 80.9281 184.177 77.5244C184.177 74.1206 181.426 71.374 178.027 71.374C174.623 71.374 171.872 74.1206 171.872 77.5244C171.876 80.9239 174.623 83.6747 178.027 83.6747Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M178.027 83.6747C181.43 83.6747 184.177 80.9281 184.177 77.5244C184.177 74.1206 181.426 71.374 178.027 71.374C174.623 71.374 171.872 74.1206 171.872 77.5244C171.876 80.9239 174.623 83.6747 178.027 83.6747Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M179.892 82.053C176.489 82.053 173.742 79.3064 173.742 75.9026C173.742 74.5209 174.227 73.3119 174.951 72.2588C173.085 73.3119 171.876 75.3339 171.876 77.5961C171.876 80.9998 174.627 83.7464 178.031 83.7464C180.053 83.7464 181.834 82.7775 182.972 81.24C182.07 81.737 181.03 82.053 179.892 82.053Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M179.892 82.053C176.489 82.053 173.742 79.3064 173.742 75.9026C173.742 74.5209 174.227 73.3119 174.951 72.2588C173.085 73.3119 171.876 75.3339 171.876 77.5961C171.876 80.9998 174.627 83.7464 178.031 83.7464C180.053 83.7464 181.834 82.7775 182.972 81.24C182.07 81.737 181.03 82.053 179.892 82.053Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M167.33 73.1514C167.659 73.1514 167.899 73.3957 167.899 73.7201V81.1678C167.899 81.4964 167.655 81.7366 167.33 81.7366C167.002 81.7366 166.762 81.4964 166.762 81.1678V73.7201C166.779 73.3072 167.019 73.1514 167.33 73.1514Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M167.331 76.3827C170.065 76.3827 172.272 74.1753 172.272 71.4413C172.272 68.7074 170.065 66.5 167.331 66.5C164.597 66.5 162.39 68.7074 162.39 71.4413C162.39 74.1795 164.614 76.3827 167.331 76.3827Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M167.331 76.3827C170.065 76.3827 172.272 74.1753 172.272 71.4413C172.272 68.7074 170.065 66.5 167.331 66.5C164.597 66.5 162.39 68.7074 162.39 71.4413C162.39 74.1795 164.614 76.3827 167.331 76.3827Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M168.801 75.0179C166.054 75.0179 163.86 72.8274 163.86 70.0766C163.86 69.0234 164.188 67.9703 164.828 67.1572C163.375 68.0545 162.394 69.5921 162.394 71.3698C162.394 74.1164 164.588 76.3111 167.335 76.3111C168.957 76.3111 170.41 75.4981 171.307 74.2891C170.579 74.7609 169.681 75.0179 168.801 75.0179Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M168.801 75.0179C166.054 75.0179 163.86 72.8274 163.86 70.0766C163.86 69.0234 164.188 67.9703 164.828 67.1572C163.375 68.0545 162.394 69.5921 162.394 71.3698C162.394 74.1164 164.588 76.3111 167.335 76.3111C168.957 76.3111 170.41 75.4981 171.307 74.2891C170.579 74.7609 169.681 75.0179 168.801 75.0179Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M164.913 89.0957C165.313 89.0957 165.726 89.4243 165.726 89.9087V100.6C165.726 101 165.397 101.413 164.913 101.413C164.512 101.413 164.1 101.085 164.1 100.6V89.9087C164.1 89.4243 164.428 89.0957 164.913 89.0957Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M164.913 93.7085C168.801 93.7085 171.965 90.5617 171.965 86.6609C171.965 82.7601 168.805 79.6133 164.913 79.6133C161.025 79.6133 157.865 82.7601 157.865 86.6609C157.861 90.5659 161.025 93.7085 164.913 93.7085Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M164.913 93.7085C168.801 93.7085 171.965 90.5617 171.965 86.6609C171.965 82.7601 168.805 79.6133 164.913 79.6133C161.025 79.6133 157.865 82.7601 157.865 86.6609C157.861 90.5659 161.025 93.7085 164.913 93.7085Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M167.019 91.8468C163.131 91.8468 159.972 88.6874 159.972 84.7992C159.972 83.2616 160.456 81.8083 161.353 80.6709C159.247 81.8799 157.865 84.1463 157.865 86.7496C157.865 90.6378 161.025 93.7972 164.913 93.7972C167.263 93.7972 169.285 92.6598 170.583 90.9622C169.441 91.4466 168.317 91.8468 167.019 91.8468Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M167.019 91.8468C163.131 91.8468 159.972 88.6874 159.972 84.7992C159.972 83.2616 160.456 81.8083 161.353 80.6709C159.247 81.8799 157.865 84.1463 157.865 86.7496C157.865 90.6378 161.025 93.7972 164.913 93.7972C167.263 93.7972 169.285 92.6598 170.583 90.9622C169.441 91.4466 168.317 91.8468 167.019 91.8468Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M156.774 58.6325C160.172 60.583 160.186 63.7466 156.816 65.7041C153.445 67.6546 147.957 67.6546 144.558 65.7041C141.16 63.7535 141.146 60.5899 144.524 58.6325C147.901 56.675 153.383 56.6819 156.774 58.6325Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/>
-<path d="M155.437 59.5395C157.837 60.9254 157.85 63.1704 155.468 64.5564C153.085 65.9423 149.207 65.9423 146.807 64.5564C144.407 63.1704 144.398 60.9254 146.78 59.5395C149.162 58.1535 153.037 58.1535 155.437 59.5395Z" fill="#EDEDED"/>
-<path d="M159.036 165.114C160.534 165.977 160.54 167.378 159.054 168.245C157.568 169.108 155.148 169.108 153.649 168.245C152.151 167.381 152.145 165.981 153.634 165.114C155.12 164.247 157.54 164.247 159.036 165.114Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M158.092 165.66C159.062 166.222 159.069 167.131 158.104 167.692C157.14 168.254 155.568 168.254 154.595 167.692C153.625 167.131 153.618 166.222 154.583 165.66C155.55 165.102 157.119 165.102 158.092 165.66Z" fill="#EDEDED"/>
-<path d="M143.649 127.091C142.853 127.585 143.033 128.849 143.649 129.206L145.007 129.99C145.297 130.158 145.657 130.158 145.947 129.99L150.726 127.231C151.254 126.926 151.409 125.69 150.726 125.352L145.849 127.918L143.649 127.091Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M154.876 124.323C153.747 123.67 152.401 123.67 151.272 124.323L150.109 124.994L149.59 124.695C149.038 124.375 148.354 124.375 147.799 124.695L143.649 127.091C143.032 127.448 143.032 128.339 143.649 128.696L145.007 129.48C145.297 129.648 145.657 129.648 145.947 129.48L150.726 126.721C151.253 126.416 151.253 125.656 150.726 125.351L150.567 125.26L151.501 124.723C152.486 124.155 153.661 124.155 154.647 124.723C155.633 125.29 156.222 126.309 156.222 127.448V153.438H156.679V127.448C156.676 126.142 156.005 124.976 154.876 124.323Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M154.968 166.633C154.968 167.082 155.6 167.445 156.378 167.445C157.156 167.445 157.788 167.082 157.788 166.633V165.821H154.965V166.633H154.968Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M156.381 166.633C157.159 166.633 157.79 166.27 157.79 165.822C157.79 165.373 157.159 165.01 156.381 165.01C155.602 165.01 154.971 165.373 154.971 165.822C154.971 166.27 155.602 166.633 156.381 166.633Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M155.529 165.74C155.529 166.011 155.911 166.228 156.381 166.228C156.851 166.228 157.232 166.008 157.232 165.74V147.519H155.529V165.74Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M156.381 148.007C156.851 148.007 157.232 147.788 157.232 147.519C157.232 147.249 156.851 147.03 156.381 147.03C155.91 147.03 155.529 147.249 155.529 147.519C155.529 147.788 155.91 148.007 156.381 148.007Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100 39.5L100 59.5" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/>
-<path d="M114.253 30.5793L107.61 26.7204C107.56 26.689 107.516 26.6513 107.472 26.5947L114.115 30.4536C114.152 30.5101 114.203 30.5478 114.253 30.5793Z" fill="white" stroke="#47C562" stroke-linejoin="round"/>
-<path d="M113.593 12.2902L120.236 16.149C120.085 16.061 119.877 16.0673 119.632 16.2119L112.989 12.353C113.234 12.2148 113.442 12.2022 113.593 12.2902Z" fill="white" stroke="#47C562" stroke-linejoin="round"/>
-<path d="M117.012 17.7264L110.369 13.8613L112.99 12.3467L119.633 16.2118L117.012 17.7264Z" fill="white" stroke="#47C562" stroke-linejoin="round"/>
-<path d="M111.694 27.0538L109.281 23.66L102.632 19.7949L105.051 23.195L107.471 26.595L114.114 30.4539L111.694 27.0538Z" fill="white" stroke="#47C562" stroke-linejoin="round"/>
-<path d="M95.0971 43.5006L88.4541 39.6418C90.3835 40.7605 93.0483 40.6096 95.9895 38.9065C98.0635 37.7061 100.062 35.8584 101.772 33.5896C102.136 33.1056 102.545 32.7348 102.959 32.496C103.525 32.1692 104.084 32.1001 104.505 32.3452L111.148 36.204C110.727 35.9589 110.168 36.028 109.602 36.3549C109.194 36.5937 108.779 36.9645 108.415 37.4484C106.711 39.7172 104.706 41.5649 102.633 42.7653C99.6913 44.4622 97.0202 44.6193 95.0971 43.5006Z" fill="white" stroke="#47C562" stroke-linejoin="round"/>
-<path d="M110.098 17.6704L103.455 13.8115C104.448 14.3897 105.24 15.301 105.78 16.514L103.367 17.9092C102.714 18.2863 102.305 19.3421 102.638 19.8009L109.281 23.6597C108.948 23.201 109.357 22.1451 110.01 21.768L112.423 20.3728C111.889 19.1599 111.091 18.2486 110.098 17.6704Z" fill="white" stroke="#47C562" stroke-linejoin="round"/>
-<path d="M102.55 13.403C106.522 11.109 110.28 10.7382 113.121 12.3597C115 13.4281 116.326 15.2758 117.011 17.7269L119.632 16.2123C120.286 15.8352 120.7 16.4134 120.374 17.2492L117.979 23.4272L115.591 29.5988C115.428 30.0199 115.138 30.353 114.856 30.5164C114.573 30.6798 114.284 30.6861 114.114 30.4535L111.694 27.0535L109.275 23.6534C108.942 23.1946 109.35 22.1388 110.004 21.7617L112.417 20.3665C110.833 16.7967 107.012 15.8226 102.563 18.3931C102.368 18.5062 102.173 18.6256 101.978 18.745C96.6047 22.1765 92.2682 29.6868 92.0043 36.0218C91.6963 43.2242 96.5859 46.2471 102.626 42.7591C104.699 41.5587 106.698 39.711 108.408 37.4422C108.772 36.9583 109.181 36.5875 109.595 36.3486C110.186 36.0093 110.764 35.9464 111.192 36.2292C112.116 36.8389 111.921 38.7683 110.789 40.2703C108.389 43.4693 105.567 46.0712 102.644 47.7555C98.6724 50.0494 94.9204 50.4139 92.0734 48.7988C89.2264 47.1773 87.6552 43.7647 87.6427 39.2019C87.6301 34.6392 89.1761 29.4291 92.0043 24.5333C94.8324 19.6375 98.5719 15.6781 102.55 13.3841V13.403Z" fill="#47C562" stroke="#47C562" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M106.478 8.49447C103.638 6.873 99.8795 7.2438 95.9075 9.53774C91.9356 11.8317 88.1898 15.7911 85.3617 20.6869C82.5336 25.5827 80.9875 30.7928 81.0001 35.3555C81.0126 39.9183 82.5838 43.3309 85.4308 44.9524L92.0738 48.8112C89.2268 47.1897 87.6556 43.7771 87.6431 39.2144C87.6305 34.6516 89.1765 29.4416 92.0047 24.5457C94.8328 19.6499 98.5723 15.6905 102.544 13.3966C106.516 11.1026 110.274 10.7318 113.115 12.3533L106.472 8.49447H106.478Z" fill="white" stroke="#47C562" stroke-linejoin="round"/>
-<path d="M151.509 54.6992L148.006 52.6622C147.817 52.5529 147.663 52.384 147.554 52.1505C147.444 51.917 147.38 51.6139 147.38 51.2661C147.38 50.9183 147.435 50.5606 147.549 50.188C147.663 49.8253 147.822 49.4676 148.016 49.1297C148.215 48.7919 148.448 48.4789 148.716 48.1907C148.99 47.9025 149.283 47.664 149.606 47.4802C149.929 47.2964 150.212 47.197 150.48 47.1722C150.753 47.1473 150.987 47.1871 151.191 47.2964L154.693 49.3334C154.49 49.2291 154.256 49.1844 153.983 49.2092C153.715 49.234 153.421 49.3384 153.108 49.5172C152.795 49.6961 152.492 49.9396 152.219 50.2277C151.951 50.5159 151.717 50.8289 151.519 51.1667C151.325 51.5046 151.166 51.8623 151.052 52.225C150.937 52.5927 150.883 52.9504 150.883 53.3031C150.883 53.6559 150.942 53.949 151.056 54.1875C151.171 54.426 151.32 54.5899 151.509 54.6992V54.6992Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/>
-<path d="M151.231 47.3158L154.734 49.3528C154.734 49.3528 154.714 49.3429 154.699 49.3329L151.196 47.2959C151.196 47.2959 151.216 47.3058 151.231 47.3158Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/>
-<path d="M154.699 49.3286C154.902 49.4379 155.061 49.6068 155.175 49.8403C155.29 50.0788 155.349 50.367 155.349 50.7197C155.349 51.0725 155.295 51.4302 155.18 51.8029C155.066 52.1755 154.907 52.5332 154.708 52.8711C154.505 53.2139 154.271 53.5269 153.998 53.8051C153.73 54.0883 153.437 54.3168 153.124 54.5007C152.811 54.6845 152.507 54.7938 152.234 54.8236C151.966 54.8534 151.727 54.8137 151.529 54.7044C151.33 54.5951 151.171 54.4212 151.057 54.1827C150.942 53.9442 150.883 53.6461 150.883 53.2983C150.883 52.9505 150.937 52.5928 151.052 52.2202C151.166 51.8575 151.325 51.4998 151.519 51.1619C151.717 50.8241 151.951 50.5111 152.219 50.2229C152.493 49.9347 152.786 49.6963 153.109 49.5124C153.432 49.3286 153.715 49.2292 153.983 49.2044C154.256 49.1796 154.49 49.2193 154.694 49.3286H154.699Z" fill="#706F6F" stroke="#706F6F" stroke-miterlimit="10"/>
-<path fill-rule="evenodd" clip-rule="evenodd" d="M154.748 35.9638L151.25 33.9297C151.54 34.0998 151.683 34.4565 151.683 34.995C151.683 35.4819 151.598 35.9539 151.419 36.411C151.24 36.8731 151.022 37.3202 150.749 37.7624C150.48 38.2046 150.187 38.6418 149.874 39.0691C149.566 39.4964 149.273 39.9236 149 40.3459C148.731 40.7732 148.508 41.1906 148.329 41.6179C148.15 42.0402 148.066 42.4674 148.066 42.8947V42.8947C148.066 42.9543 148.066 43.009 148.071 43.0636C148.073 43.091 148.077 43.1183 148.081 43.1456C148.084 43.1729 148.088 43.2003 148.091 43.2276L148.379 45.4137L151.881 47.4507L151.593 45.2646C151.591 45.2373 151.587 45.21 151.583 45.1827C151.58 45.1553 151.576 45.128 151.573 45.1007C151.573 45.0733 151.572 45.0448 151.571 45.0162C151.57 44.9876 151.568 44.9591 151.568 44.9318C151.568 44.5045 151.653 44.0772 151.832 43.6549C152.011 43.2326 152.234 42.8103 152.502 42.383C152.776 41.9607 153.064 41.5334 153.377 41.1061C153.69 40.6788 153.983 40.2416 154.251 39.7994C154.525 39.3572 154.743 38.9101 154.922 38.448C155.101 37.9909 155.185 37.5239 155.185 37.032C155.185 36.4905 155.041 36.1328 154.748 35.9638ZM149.711 39.0244L149.651 38.9896C149.613 38.9594 149.58 38.9218 149.547 38.8753L146.044 36.8383C146.094 36.9029 146.148 36.9576 146.208 36.9923L149.651 38.9896C149.669 39.0046 149.689 39.0178 149.711 39.0294V39.0244ZM148.542 38.2865C148.737 38.3994 148.941 38.1557 148.795 37.9843L148.52 37.6594C148.505 37.6421 148.488 37.6274 148.468 37.6159L145.999 36.1777C145.805 36.0647 145.6 36.3078 145.745 36.4794L146.021 36.8068C146.036 36.8243 146.054 36.8392 146.074 36.8507L148.542 38.2865Z" fill="white"/>
-<path d="M151.25 33.9297L151.502 33.4975C151.263 33.3588 150.958 33.4394 150.819 33.6775C150.68 33.9156 150.759 34.2213 150.997 34.3609L151.25 33.9297ZM154.748 35.9638L154.497 36.3961L154.498 36.3971L154.748 35.9638ZM151.419 36.411L150.954 36.2288L150.953 36.2305L151.419 36.411ZM150.749 37.7624L150.323 37.4995L150.321 37.503L150.749 37.7624ZM149.874 39.0691L149.471 38.7736L149.469 38.7767L149.874 39.0691ZM149 40.3459L148.58 40.0743L148.576 40.0801L149 40.3459ZM148.329 41.6179L148.789 41.8128L148.79 41.8109L148.329 41.6179ZM148.071 43.0636L147.573 43.1089V43.1089L148.071 43.0636ZM148.081 43.1456L148.576 43.0781L148.576 43.0781L148.081 43.1456ZM148.091 43.2276L147.593 43.2729C147.593 43.2796 147.594 43.2863 147.595 43.2929L148.091 43.2276ZM148.379 45.4137L147.883 45.479C147.903 45.6326 147.993 45.7681 148.127 45.8459L148.379 45.4137ZM151.881 47.4507L151.63 47.8829C151.795 47.9788 152 47.9726 152.159 47.8669C152.317 47.7612 152.402 47.5744 152.377 47.3854L151.881 47.4507ZM151.593 45.2646L151.095 45.3099C151.096 45.3166 151.097 45.3233 151.098 45.33L151.593 45.2646ZM151.583 45.1827L152.079 45.1151V45.1151L151.583 45.1827ZM151.573 45.1007H151.073C151.073 45.1158 151.074 45.1309 151.075 45.1459L151.573 45.1007ZM151.832 43.6549L152.292 43.8499H152.292L151.832 43.6549ZM152.502 42.383L152.083 42.1113L152.079 42.1171L152.502 42.383ZM153.377 41.1061L153.78 41.4016V41.4016L153.377 41.1061ZM154.251 39.7994L153.826 39.5366L153.824 39.5401L154.251 39.7994ZM154.922 38.448L154.456 38.2658L154.456 38.2675L154.922 38.448ZM149.711 39.0244H150.211C150.211 38.8461 150.116 38.6814 149.961 38.5919L149.711 39.0244ZM149.547 38.8753L149.953 38.5847C149.912 38.527 149.859 38.4788 149.798 38.4431L149.547 38.8753ZM146.044 36.8383L146.295 36.4061C146.089 36.286 145.826 36.3288 145.668 36.5083C145.511 36.6878 145.502 36.9538 145.648 37.1432L146.044 36.8383ZM146.208 36.9923L145.956 37.4242L145.957 37.4248L146.208 36.9923ZM149.711 39.0294L149.473 39.4696C149.628 39.553 149.816 39.5489 149.967 39.4586C150.118 39.3684 150.211 39.2054 150.211 39.0294H149.711ZM148.795 37.9843L149.177 37.661L149.177 37.661L148.795 37.9843ZM148.542 38.2865L148.794 37.8542L148.794 37.8542L148.542 38.2865ZM148.52 37.6594L148.139 37.9827L148.139 37.9827L148.52 37.6594ZM148.468 37.6159L148.217 38.048L148.217 38.048L148.468 37.6159ZM145.999 36.1777L145.747 36.6097H145.747L145.999 36.1777ZM145.745 36.4794L146.127 36.1571L146.127 36.1571L145.745 36.4794ZM146.021 36.8068L145.639 37.1291L145.639 37.1291L146.021 36.8068ZM146.074 36.8507L146.325 36.4185L146.325 36.4185L146.074 36.8507ZM150.999 34.3619L154.497 36.3961L154.999 35.5316L151.502 33.4975L150.999 34.3619ZM152.183 34.995C152.183 34.3956 152.025 33.8048 151.503 33.4985L150.997 34.3609C151.055 34.3948 151.183 34.5174 151.183 34.995H152.183ZM151.885 36.5932C152.088 36.0754 152.183 35.5413 152.183 34.995H151.183C151.183 35.4225 151.109 35.8325 150.954 36.2288L151.885 36.5932ZM151.174 38.0252C151.464 37.5557 151.696 37.0808 151.886 36.5915L150.953 36.2305C150.785 36.6653 150.58 37.0847 150.323 37.4995L151.174 38.0252ZM150.278 39.3646C150.599 38.9262 150.9 38.477 151.176 38.0218L150.321 37.503C150.061 37.9322 149.776 38.3574 149.471 38.7736L150.278 39.3646ZM149.42 40.6176C149.688 40.203 149.976 39.7826 150.28 39.3615L149.469 38.7767C149.156 39.2101 148.858 39.6443 148.58 40.0743L149.42 40.6176ZM148.79 41.8109C148.956 41.4138 149.166 41.0209 149.423 40.6118L148.576 40.0801C148.297 40.5256 148.059 40.9674 147.868 41.4248L148.79 41.8109ZM148.566 42.8947C148.566 42.5351 148.636 42.1741 148.789 41.8128L147.869 41.4229C147.664 41.9062 147.566 42.3998 147.566 42.8947H148.566ZM148.566 42.8947V42.8947H147.566V42.8947H148.566ZM148.569 43.0184C148.566 42.9902 148.566 42.9586 148.566 42.8947H147.566C147.566 42.9501 147.565 43.0278 147.573 43.1089L148.569 43.0184ZM148.576 43.0781C148.572 43.0488 148.57 43.0327 148.569 43.0184L147.573 43.1089C147.576 43.1493 147.582 43.1878 147.585 43.2132L148.576 43.0781ZM148.588 43.1823C148.585 43.142 148.579 43.1035 148.576 43.0781L147.585 43.2132C147.589 43.2424 147.591 43.2586 147.593 43.2729L148.588 43.1823ZM148.874 45.3483L148.586 43.1623L147.595 43.2929L147.883 45.479L148.874 45.3483ZM152.133 47.0185L148.63 44.9815L148.127 45.8459L151.63 47.8829L152.133 47.0185ZM151.098 45.33L151.386 47.5161L152.377 47.3854L152.089 45.1993L151.098 45.33ZM151.088 45.2502C151.092 45.2794 151.094 45.2956 151.095 45.3099L152.091 45.2194C152.087 45.179 152.082 45.1405 152.079 45.1151L151.088 45.2502ZM151.075 45.1459C151.079 45.1863 151.084 45.2248 151.088 45.2502L152.079 45.1151C152.075 45.0859 152.073 45.0697 152.071 45.0554L151.075 45.1459ZM151.071 45.0379C151.073 45.0687 151.073 45.0861 151.073 45.1007H152.073C152.073 45.0606 152.072 45.0209 152.07 44.9945L151.071 45.0379ZM151.068 44.9318C151.068 44.9719 151.07 45.0115 151.071 45.0379L152.07 44.9945C152.069 44.9637 152.068 44.9463 152.068 44.9318H151.068ZM151.371 43.4599C151.167 43.9433 151.068 44.4368 151.068 44.9318H152.068C152.068 44.5721 152.139 44.2111 152.292 43.8499L151.371 43.4599ZM152.079 42.1171C151.798 42.564 151.562 43.01 151.371 43.4599L152.292 43.8499C152.459 43.4551 152.67 43.0565 152.926 42.6489L152.079 42.1171ZM152.974 40.8106C152.653 41.248 152.359 41.6837 152.083 42.1114L152.922 42.6546C153.192 42.2376 153.475 41.8188 153.78 41.4016L152.974 40.8106ZM153.824 39.5401C153.563 39.9692 153.278 40.3944 152.974 40.8106L153.78 41.4016C154.101 40.9633 154.403 40.514 154.679 40.0588L153.824 39.5401ZM154.456 38.2675C154.287 38.7023 154.082 39.1218 153.826 39.5366L154.677 40.0623C154.967 39.5927 155.199 39.1178 155.388 38.6285L154.456 38.2675ZM154.685 37.032C154.685 37.4642 154.612 37.8692 154.456 38.2658L155.388 38.6302C155.59 38.1127 155.685 37.5836 155.685 37.032H154.685ZM154.498 36.3971C154.556 36.4305 154.685 36.5517 154.685 37.032H155.685C155.685 36.4293 155.526 35.8351 154.998 35.5306L154.498 36.3971ZM149.4 39.4221L149.46 39.4569L149.961 38.5919L149.901 38.5571L149.4 39.4221ZM149.964 38.5997C149.973 38.6069 149.97 38.6074 149.953 38.5847L149.14 39.166C149.19 39.2363 149.253 39.3119 149.338 39.3796L149.964 38.5997ZM149.798 38.4431L146.295 36.4061L145.793 37.2705L149.295 39.3076L149.798 38.4431ZM145.648 37.1432C145.718 37.235 145.819 37.3444 145.956 37.4242L146.46 36.5604C146.47 36.5666 146.473 36.5699 146.467 36.5648C146.462 36.5599 146.453 36.5501 146.44 36.5335L145.648 37.1432ZM145.957 37.4248L149.4 39.4221L149.901 38.5571L146.459 36.5598L145.957 37.4248ZM149.948 38.5891C149.953 38.5923 149.959 38.596 149.964 38.5997L149.338 39.3796C149.38 39.4132 149.425 39.4434 149.473 39.4696L149.948 38.5891ZM149.211 39.0244V39.0294H150.211V39.0244H149.211ZM148.414 38.3075C148.196 38.0504 148.502 37.6848 148.794 37.8542L148.291 38.7187C148.971 39.114 149.685 38.2609 149.177 37.661L148.414 38.3075ZM148.139 37.9827L148.414 38.3075L149.177 37.661L148.902 37.3362L148.139 37.9827ZM148.217 38.048C148.187 38.0308 148.161 38.0087 148.139 37.9827L148.902 37.3362C148.85 37.2754 148.789 37.2239 148.72 37.1838L148.217 38.048ZM145.747 36.6097L148.217 38.048L148.72 37.1838L146.25 35.7456L145.747 36.6097ZM146.127 36.1571C146.344 36.4145 146.038 36.7792 145.747 36.6097L146.25 35.7456C145.571 35.3502 144.856 36.2012 145.363 36.8018L146.127 36.1571ZM146.403 36.4844L146.127 36.1571L145.363 36.8018L145.639 37.1291L146.403 36.4844ZM146.325 36.4185C146.355 36.4358 146.381 36.4581 146.403 36.4844L145.639 37.1291C145.691 37.1905 145.753 37.2426 145.822 37.283L146.325 36.4185ZM148.794 37.8542L146.325 36.4185L145.822 37.283L148.291 38.7187L148.794 37.8542Z" fill="#706F6F"/>
-<path d="M154.139 29.7805C154.141 29.7823 154.143 29.7838 154.145 29.785L157.644 31.8202C157.575 31.7804 157.505 31.7457 157.436 31.7159C156.989 31.5221 156.442 31.4873 155.801 31.6165C155.165 31.7457 154.445 32.0338 153.65 32.4959C153.084 32.8238 152.557 33.1865 152.07 33.574C151.583 33.9665 151.131 34.3839 150.709 34.8261C150.286 35.2682 149.894 35.7303 149.526 36.2023C149.199 36.6267 148.896 37.051 148.612 37.4789C148.553 37.5678 148.435 37.596 148.343 37.5423L145.181 35.7018C145.083 35.6443 145.052 35.5158 145.115 35.4206C145.396 34.9983 145.696 34.5793 146.019 34.1603C146.386 33.6833 146.784 33.2262 147.201 32.7841C147.623 32.3419 148.08 31.9245 148.562 31.532C149.049 31.1395 149.576 30.7768 150.142 30.4539C150.937 29.9918 151.658 29.7037 152.294 29.5745C152.934 29.4503 153.476 29.4801 153.928 29.6739C154.002 29.7032 154.07 29.7374 154.134 29.7764C154.136 29.7776 154.138 29.779 154.139 29.7805V29.7805Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/>
-<path d="M158.469 32.7517C158.469 32.7498 158.472 32.7492 158.473 32.7509C158.714 33.2468 158.837 33.8854 158.837 34.657C158.837 35.4321 158.753 36.1028 158.574 36.7338C158.4 37.3698 158.171 37.9709 157.898 38.5274C157.625 39.0838 157.327 39.6006 156.999 40.0775C156.676 40.5545 156.368 41.0016 156.075 41.4239C155.782 41.8463 155.528 42.2437 155.315 42.6064C155.101 42.9741 154.967 43.3268 154.917 43.6547L154.584 45.8059C154.575 45.8657 154.539 45.9181 154.486 45.9484L152.141 47.3055C152.017 47.3769 151.861 47.2999 151.842 47.1586L151.593 45.2695L151.573 45.1055C151.573 45.0509 151.568 44.9912 151.568 44.9366C151.568 44.5093 151.653 44.082 151.832 43.6597C152.011 43.2374 152.234 42.8151 152.502 42.3878C152.776 41.9655 153.064 41.5382 153.377 41.1109C153.69 40.6837 153.983 40.2464 154.251 39.8043C154.525 39.3621 154.743 38.9149 154.922 38.4529C155.101 37.9958 155.185 37.5288 155.185 37.0369C155.185 36.4556 155.016 36.0879 154.679 35.9339C154.346 35.7849 153.884 35.8743 153.302 36.2121C152.855 36.4705 152.483 36.7388 152.18 37.022C151.881 37.3052 151.623 37.5685 151.404 37.8269C151.186 38.0852 151.002 38.3088 150.843 38.5125C150.684 38.7112 150.525 38.8603 150.361 38.9497C149.998 39.1584 149.725 39.1385 149.546 38.8801L148.599 37.7565C148.542 37.6891 148.536 37.5924 148.584 37.5189C148.874 37.0791 149.185 36.6431 149.521 36.2072C149.889 35.7302 150.287 35.2731 150.704 34.8309C151.126 34.3887 151.583 33.9714 152.065 33.5789C152.552 33.1864 153.079 32.8237 153.645 32.5008C154.44 32.0387 155.161 31.7505 155.796 31.6214C156.437 31.4972 156.979 31.527 157.431 31.7207C157.881 31.9136 158.223 32.2591 158.466 32.7524C158.467 32.754 158.469 32.7535 158.469 32.7517V32.7517Z" fill="#706F6F" stroke="#706F6F" stroke-miterlimit="10"/>
-<path d="M151 54.5L151 62.5" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/>
-<path d="M183.024 103.673C182.67 103.906 182.374 104.226 182.083 104.541C181.472 105.177 180.797 105.875 180.356 106.647C179.769 107.71 179.672 109.5 179.754 110.698C179.803 111.446 180.254 112.096 180.72 112.668C181.603 113.755 182.995 113.464 184.048 112.62C185.004 111.863 185.984 110.883 186.445 109.791C186.896 108.738 187.459 107.627 187.561 106.453C187.673 105.24 187.231 103.6 186.033 103.037C185.285 102.693 183.927 102.731 183.364 103.367" fill="white"/>
-<path d="M183.024 103.673C182.67 103.906 182.374 104.226 182.083 104.541C181.472 105.177 180.797 105.875 180.356 106.647C179.769 107.71 179.672 109.5 179.754 110.698C179.803 111.446 180.254 112.096 180.72 112.668C181.603 113.755 182.995 113.464 184.048 112.62C185.004 111.863 185.984 110.883 186.445 109.791C186.896 108.738 187.459 107.627 187.561 106.453C187.673 105.24 187.231 103.6 186.033 103.037C185.285 102.693 183.927 102.731 183.364 103.367" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M183.024 103.673C182.67 103.906 182.374 104.226 182.083 104.541C181.472 105.177 180.797 105.875 180.356 106.647C179.769 107.71 179.672 109.5 179.754 110.698C179.803 111.446 180.254 112.096 180.72 112.668C181.603 113.755 182.995 113.464 184.048 112.62C185.004 111.863 185.984 110.883 186.445 109.791C186.896 108.738 187.459 107.627 187.561 106.453C187.673 105.24 187.231 103.6 186.033 103.037C185.285 102.693 183.927 102.731 183.364 103.367" fill="white"/>
-<path d="M183.024 103.673C182.67 103.906 182.374 104.226 182.083 104.541C181.472 105.177 180.797 105.875 180.356 106.647C179.769 107.71 179.672 109.5 179.754 110.698C179.803 111.446 180.254 112.096 180.72 112.668C181.603 113.755 182.995 113.464 184.048 112.62C185.004 111.863 185.984 110.883 186.445 109.791C186.896 108.738 187.459 107.627 187.561 106.453C187.673 105.24 187.231 103.6 186.033 103.037C185.285 102.693 183.927 102.731 183.364 103.367" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M171.064 110.771C170.317 110.932 169.521 111.334 168.973 111.849C168.337 112.436 167.92 113.168 167.444 113.843C166.954 114.517 166.513 115.201 166.304 116.021C165.984 117.293 165.741 118.675 166.522 119.85C167.279 121.014 168.516 121.465 169.841 120.951C171.054 120.476 172.155 119.447 172.743 118.297C173.194 117.404 173.65 116.73 173.931 115.556C174.455 113.367 174.63 111.446 172.044 110.796" fill="white"/>
-<path d="M171.064 110.771C170.317 110.932 169.521 111.334 168.973 111.849C168.337 112.436 167.92 113.168 167.444 113.843C166.954 114.517 166.513 115.201 166.304 116.021C165.984 117.293 165.741 118.675 166.522 119.85C167.279 121.014 168.516 121.465 169.841 120.951C171.054 120.476 172.155 119.447 172.743 118.297C173.194 117.404 173.65 116.73 173.931 115.556C174.455 113.367 174.63 111.446 172.044 110.796" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M171.064 110.771C170.317 110.932 169.521 111.334 168.973 111.849C168.337 112.436 167.92 113.168 167.444 113.843C166.954 114.517 166.513 115.201 166.304 116.021C165.984 117.293 165.741 118.675 166.522 119.85C167.279 121.014 168.516 121.465 169.841 120.951C171.054 120.476 172.155 119.447 172.743 118.297C173.194 117.404 173.65 116.73 173.931 115.556C174.455 113.367 174.63 111.446 172.044 110.796" fill="white"/>
-<path d="M171.064 110.771C170.317 110.932 169.521 111.334 168.973 111.849C168.337 112.436 167.92 113.168 167.444 113.843C166.954 114.517 166.513 115.201 166.304 116.021C165.984 117.293 165.741 118.675 166.522 119.85C167.279 121.014 168.516 121.465 169.841 120.951C171.054 120.476 172.155 119.447 172.743 118.297C173.194 117.404 173.65 116.73 173.931 115.556C174.455 113.367 174.63 111.446 172.044 110.796" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M176.489 114.871C176.222 116.011 178.852 115.497 179.046 114.711C179.119 114.405 178.997 114.27 178.716 114.27C178.289 114.27 178.473 114.599 178.216 114.832C177.663 115.264 176.916 114.629 176.489 114.871Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M179.327 104.468C179.938 104.565 180.196 105.298 180.501 105.764C180.807 106.215 181.151 106.647 181.515 107.05C181.845 107.404 182.2 107.782 182.631 108.03C182.976 108.214 183.354 108.238 183.733 108.238C183.951 108.238 183.951 107.894 183.733 107.894C183.218 107.894 182.85 107.821 182.447 107.477C182.005 107.122 181.627 106.681 181.273 106.23C180.894 105.754 180.598 105.264 180.283 104.75C180.074 104.42 179.807 104.187 179.414 104.124C179.191 104.104 179.109 104.444 179.327 104.468Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M172.116 108.224C171.874 109.534 171.442 110.829 171.063 112.115C170.879 112.727 170.622 113.338 170.452 113.964C170.282 114.614 170.234 115.274 170.011 115.895C170.059 115.856 170.122 115.808 170.171 115.759H170.122C170.171 115.856 170.195 115.953 170.243 116.055C170.258 116.041 170.292 116.016 170.307 115.992C170.467 115.832 170.219 115.589 170.064 115.749C170.049 115.764 170.025 115.798 170.001 115.812C169.889 115.924 169.986 116.094 170.122 116.108H170.171C170.243 116.123 170.306 116.045 170.331 115.973C170.549 115.361 170.603 114.726 170.748 114.1C170.918 113.45 171.19 112.828 171.374 112.178C171.752 110.907 172.194 109.607 172.427 108.287C172.495 108.103 172.155 108.006 172.116 108.224Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M170.243 106.943C170.074 107.724 171.393 108.034 172.078 107.971C172.922 107.898 172.946 107.321 172.349 106.797C171.956 106.453 170.903 106.234 170.476 106.428" fill="white"/>
-<path d="M170.243 106.943C170.074 107.724 171.393 108.034 172.078 107.971C172.922 107.898 172.946 107.321 172.349 106.797C171.956 106.453 170.903 106.234 170.476 106.428" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M170.243 106.943C170.074 107.724 171.393 108.034 172.078 107.971C172.922 107.898 172.946 107.321 172.349 106.797C171.956 106.453 170.903 106.234 170.476 106.428" fill="white"/>
-<path d="M170.243 106.943C170.074 107.724 171.393 108.034 172.078 107.971C172.922 107.898 172.946 107.321 172.349 106.797C171.956 106.453 170.903 106.234 170.476 106.428" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M172.029 108.045C172.505 108.656 172.898 109.364 173.509 109.854C174.266 110.441 175.1 110.932 175.872 111.494C176.056 111.63 176.226 111.334 176.042 111.189C175.319 110.665 174.562 110.199 173.849 109.67C173.198 109.194 172.796 108.496 172.32 107.86C172.204 107.686 171.898 107.86 172.029 108.045Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M179.143 102.818C179.157 103.318 179.191 103.808 179.191 104.298C179.191 104.516 179.536 104.516 179.536 104.298C179.521 103.798 179.497 103.308 179.487 102.818C179.487 102.61 179.143 102.595 179.143 102.818Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M179.118 104.589C179.206 104.943 178.885 105.4 178.774 105.729C178.58 106.307 178.454 106.904 178.332 107.505C178.124 108.607 177.857 109.694 177.488 110.737C177.415 110.945 177.745 111.042 177.818 110.834C178.235 109.684 178.492 108.495 178.725 107.297C178.837 106.719 178.968 106.132 179.191 105.594C179.327 105.249 179.545 104.885 179.448 104.492C179.414 104.274 179.07 104.371 179.118 104.589Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M179.07 104.249C178.827 104.827 178.104 105.157 177.59 105.438C176.891 105.831 176.217 106.258 175.508 106.651C175.324 106.763 175.494 107.054 175.678 106.957C176.459 106.515 177.245 106.05 178.017 105.598C178.541 105.293 179.142 104.948 179.375 104.351C179.497 104.128 179.157 104.041 179.07 104.249Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M177.759 100.946C178.162 101.557 179.069 101.596 179.608 102.047C179.778 102.183 180.025 101.95 179.851 101.805C179.593 101.586 179.288 101.475 178.992 101.329C178.696 101.193 178.259 101.048 178.06 100.766C177.944 100.592 177.638 100.762 177.759 100.946Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M181.442 102.925C181.481 103.367 181.37 103.808 181.37 104.235C181.355 104.454 181.7 104.454 181.714 104.235C181.729 103.794 181.811 103.367 181.787 102.925C181.772 102.707 181.433 102.697 181.442 102.925Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M177.478 110.708C177.502 110.305 177.871 109.752 178.21 110.291C178.371 110.534 178.089 111.601 177.939 111.834C177.521 112.508 177.376 111.994 177.352 111.431C177.332 110.834 177.357 111.446 177.478 110.708Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M176.023 110.32C175.935 111.494 176.231 112.901 176.377 114.066C176.45 114.653 176.391 115.289 177.037 115.23C177.464 115.182 178.541 114.925 178.507 114.41C177.93 114.396 177.648 114.425 177.551 113.848C177.478 113.406 177.527 112.916 177.503 112.479C177.439 111.378 177.391 110.116 176.644 109.224" fill="white"/>
-<path d="M176.023 110.32C175.935 111.494 176.231 112.901 176.377 114.066C176.45 114.653 176.391 115.289 177.037 115.23C177.464 115.182 178.541 114.925 178.507 114.41C177.93 114.396 177.648 114.425 177.551 113.848C177.478 113.406 177.527 112.916 177.503 112.479C177.439 111.378 177.391 110.116 176.644 109.224" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M176.023 110.32C175.935 111.494 176.231 112.901 176.377 114.066C176.45 114.653 176.391 115.289 177.037 115.23C177.464 115.182 178.541 114.925 178.507 114.41C177.93 114.396 177.648 114.425 177.551 113.848C177.478 113.406 177.527 112.916 177.503 112.479C177.439 111.378 177.391 110.116 176.644 109.224" fill="white"/>
-<path d="M176.023 110.32C175.935 111.494 176.231 112.901 176.377 114.066C176.45 114.653 176.391 115.289 177.037 115.23C177.464 115.182 178.541 114.925 178.507 114.41C177.93 114.396 177.648 114.425 177.551 113.848C177.478 113.406 177.527 112.916 177.503 112.479C177.439 111.378 177.391 110.116 176.644 109.224" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M175.251 103.624C174.212 104.468 175.187 106.035 175.644 106.938C175.949 107.563 176.318 108.16 176.536 108.81C176.73 109.388 177.099 109.999 176.367 110.203C175.226 110.533 173.378 110.276 173.271 108.893C173.208 108.087 173.222 107.646 172.538 107.132C171.951 106.68 170.923 106.578 170.432 106.04C169.748 105.283 170.36 104.366 170.995 103.9C171.413 103.594 171.447 103.347 171.728 102.944C172.048 102.493 172.354 102.726 172.82 102.993" fill="white"/>
-<path d="M175.251 103.624C174.212 104.468 175.187 106.035 175.644 106.938C175.949 107.563 176.318 108.16 176.536 108.81C176.73 109.388 177.099 109.999 176.367 110.203C175.226 110.533 173.378 110.276 173.271 108.893C173.208 108.087 173.222 107.646 172.538 107.132C171.951 106.68 170.923 106.578 170.432 106.04C169.748 105.283 170.36 104.366 170.995 103.9C171.413 103.594 171.447 103.347 171.728 102.944C172.048 102.493 172.354 102.726 172.82 102.993" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M175.251 103.624C174.212 104.468 175.187 106.035 175.644 106.938C175.949 107.563 176.318 108.16 176.536 108.81C176.73 109.388 177.099 109.999 176.367 110.203C175.226 110.533 173.378 110.276 173.271 108.893C173.208 108.087 173.222 107.646 172.538 107.132C171.951 106.68 170.923 106.578 170.432 106.04C169.748 105.283 170.36 104.366 170.995 103.9C171.413 103.594 171.447 103.347 171.728 102.944C172.048 102.493 172.354 102.726 172.82 102.993" fill="white"/>
-<path d="M175.251 103.624C174.212 104.468 175.187 106.035 175.644 106.938C175.949 107.563 176.318 108.16 176.536 108.81C176.73 109.388 177.099 109.999 176.367 110.203C175.226 110.533 173.378 110.276 173.271 108.893C173.208 108.087 173.222 107.646 172.538 107.132C171.951 106.68 170.923 106.578 170.432 106.04C169.748 105.283 170.36 104.366 170.995 103.9C171.413 103.594 171.447 103.347 171.728 102.944C172.048 102.493 172.354 102.726 172.82 102.993" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M178.419 101.839C178.919 102.12 179.705 101.999 180.243 101.912C180.831 101.824 181.845 102.106 181.689 102.95C181.238 103.037 180.991 102.644 180.564 102.644C180.219 102.644 179.768 102.804 179.399 102.853C179.103 102.892 178.385 103.11 178.113 102.95C177.745 102.756 178.235 101.776 178.419 101.839Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M174.945 98.3982C176.11 97.9809 176.6 99.3637 177.085 100.101C177.439 100.601 177.919 101.018 178.259 101.533C178.725 102.217 178.244 102.44 177.856 103.051C177.221 102.61 176.716 101.484 176.459 100.761C175.983 101.285 175.906 102.45 175.566 103.134C175.26 103.735 175.003 103.609 174.377 103.464C173.853 103.352 173.14 103.046 172.592 103.012C170.84 102.877 171.811 100.674 172.592 99.9169C173.106 99.4171 173.654 99.0338 174.271 98.6699C174.639 98.471 174.503 98.5729 174.945 98.3982Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M173.354 97.3358C172.679 95.8317 174.906 94.0704 176.328 94.5944C177.366 94.9874 176.915 95.953 176.828 96.7341C176.731 97.5299 176.634 98.3256 175.605 98.4711C175.188 98.5342 174.833 98.3984 174.44 98.6167C174.023 98.8593 173.878 99.3639 173.766 99.8055C173.606 100.456 173.523 100.931 172.961 101.334C172.471 101.688 172.238 101.897 172.092 102.508C171.811 103.585 171.015 104.696 169.656 104.357C168.628 104.09 168.274 102.557 168.201 101.64C168.152 101.062 168.337 100.169 168.924 99.8394C169.511 99.5095 170.258 99.9607 170.821 99.4852C171.408 98.9855 171.554 97.9666 172.374 97.7094C172.767 97.5735 174.028 97.8792 173.587 97.001C173.514 97.0398 173.489 97.0883 173.426 97.1368" fill="white"/>
-<path d="M173.354 97.3358C172.679 95.8317 174.906 94.0704 176.328 94.5944C177.366 94.9874 176.915 95.953 176.828 96.7341C176.731 97.5299 176.634 98.3256 175.605 98.4711C175.188 98.5342 174.833 98.3984 174.44 98.6167C174.023 98.8593 173.878 99.3639 173.766 99.8055C173.606 100.456 173.523 100.931 172.961 101.334C172.471 101.688 172.238 101.897 172.092 102.508C171.811 103.585 171.015 104.696 169.656 104.357C168.628 104.09 168.274 102.557 168.201 101.64C168.152 101.062 168.337 100.169 168.924 99.8394C169.511 99.5095 170.258 99.9607 170.821 99.4852C171.408 98.9855 171.554 97.9666 172.374 97.7094C172.767 97.5735 174.028 97.8792 173.587 97.001C173.514 97.0398 173.489 97.0883 173.426 97.1368" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M173.354 97.3358C172.679 95.8317 174.906 94.0704 176.328 94.5944C177.366 94.9874 176.915 95.953 176.828 96.7341C176.731 97.5299 176.634 98.3256 175.605 98.4711C175.188 98.5342 174.833 98.3984 174.44 98.6167C174.023 98.8593 173.878 99.3639 173.766 99.8055C173.606 100.456 173.523 100.931 172.961 101.334C172.471 101.688 172.238 101.897 172.092 102.508C171.811 103.585 171.015 104.696 169.656 104.357C168.628 104.09 168.274 102.557 168.201 101.64C168.152 101.062 168.337 100.169 168.924 99.8394C169.511 99.5095 170.258 99.9607 170.821 99.4852C171.408 98.9855 171.554 97.9666 172.374 97.7094C172.767 97.5735 174.028 97.8792 173.587 97.001C173.514 97.0398 173.489 97.0883 173.426 97.1368" fill="#DA3635"/>
-<path d="M173.354 97.3358C172.679 95.8317 174.906 94.0704 176.328 94.5944C177.366 94.9874 176.915 95.953 176.828 96.7341C176.731 97.5299 176.634 98.3256 175.605 98.4711C175.188 98.5342 174.833 98.3984 174.44 98.6167C174.023 98.8593 173.878 99.3639 173.766 99.8055C173.606 100.456 173.523 100.931 172.961 101.334C172.471 101.688 172.238 101.897 172.092 102.508C171.811 103.585 171.015 104.696 169.656 104.357C168.628 104.09 168.274 102.557 168.201 101.64C168.152 101.062 168.337 100.169 168.924 99.8394C169.511 99.5095 170.258 99.9607 170.821 99.4852C171.408 98.9855 171.554 97.9666 172.374 97.7094C172.767 97.5735 174.028 97.8792 173.587 97.001C173.514 97.0398 173.489 97.0883 173.426 97.1368" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-</svg>
diff --git a/src/assets/form/rdvsImageNotFound.svg b/src/assets/form/rdvsImageNotFound.svg
deleted file mode 100644
index 9ea8268ab..000000000
--- a/src/assets/form/rdvsImageNotFound.svg
+++ /dev/null
@@ -1,250 +0,0 @@
-<svg width="200" height="201" viewBox="0 0 200 201" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M116.463 134.905L184.883 95.4026C191.101 91.8127 191.101 85.9924 184.883 82.4026L148.679 61.5" stroke="#706F6F" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/>
-<path d="M20.9996 126.54L44.0803 113.214C50.2981 109.624 60.3792 109.624 66.597 113.214L101.944 133.622" stroke="#706F6F" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/>
-<path d="M145.673 140.952C146.992 141.714 146.997 142.953 145.69 143.715L103.532 168.215C102.221 168.977 100.078 168.977 98.7585 168.215L54.3282 142.564C53.0087 141.802 52.9998 140.562 54.3105 139.801L96.4692 115.301C97.7799 114.539 99.923 114.539 101.243 115.301L145.673 140.952Z" fill="white" stroke="#DA3635" stroke-miterlimit="10"/>
-<path d="M136.825 141.112C137.888 141.728 137.892 142.729 136.838 143.34L102.845 163.093C101.787 163.708 100.06 163.708 98.9969 163.093L63.1702 142.41C62.1075 141.794 62.0986 140.798 63.1569 140.183L97.1504 120.429C98.2087 119.814 99.9356 119.814 100.998 120.429L136.825 141.112Z" fill="#EDEDED"/>
-<path d="M68.0088 103.646V140.948L100.616 159.594V122.297L68.0088 103.646Z" fill="white"/>
-<path d="M68.0088 103.646V140.948L100.616 159.594V122.297L68.0088 103.646Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.616 122.299L133.175 103.626L100.616 84.9355L68.0088 103.648L100.616 122.299Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.638 119.544L128.335 103.657L100.638 87.7559L72.9014 103.679L100.638 119.544Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M133.175 103.625L133.224 140.948L100.616 159.595V122.298L133.175 103.625Z" fill="white"/>
-<path d="M133.175 103.625L133.224 140.948L100.616 159.595V122.298L133.175 103.625Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.616 80.6709L68.0088 99.3879L100.616 118.034L133.175 99.3614L100.616 80.6709ZM72.9017 99.4189L100.638 83.4959L128.34 99.3968L100.638 115.28L72.9017 99.4189Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M68.0088 99.3887V106.075L100.616 124.721V118.035L68.0088 99.3887Z" fill="white"/>
-<path d="M68.0088 99.3887V106.075L100.616 124.721V118.035L68.0088 99.3887Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.616 118.033V124.351L133.175 105.674V99.3555L100.616 118.033Z" fill="white"/>
-<path d="M100.616 118.033V124.351L133.175 105.674V99.3555L100.616 118.033Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.639 83.4961V87.7558L124.621 101.527L128.336 99.3969L100.639 83.4961Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M72.9014 99.4191L100.638 83.4961V87.7558L76.5855 101.527L72.9014 99.4191Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.428 115.62V125.37L128.729 121.775L129.756 121.195V111.436L122.428 115.62Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.428 115.624V124.303L128.729 120.708V112.033L122.428 115.624Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.134 120.735V130.49L119.435 126.894L120.462 126.31V116.555L113.134 120.735Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.134 120.74V129.423L119.435 125.827V117.148L113.134 120.74Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.034 125.491V135.241L110.335 131.65L111.367 131.065V121.311L104.034 125.491Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.034 125.495V134.179L110.335 130.583V121.904L104.034 125.495Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.45 127.523V137.278L128.751 133.683L129.783 133.094V123.339L122.45 127.523Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.45 127.528V136.211L128.751 132.615V123.937L122.45 127.528Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.156 132.638V142.388L119.457 138.797L120.489 138.213V128.458L113.156 132.638Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.156 132.643V141.326L119.457 137.731V129.052L113.156 132.643Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.062 137.394V147.149L110.358 143.553L111.39 142.969V133.214L104.062 137.394Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.062 137.402V146.08L110.358 142.485V133.811L104.062 137.402Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M90.6436 151.983L90.6745 127.058L98.4323 131.534L98.4014 156.464L90.6436 151.983Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M69.2617 139.646L69.2927 114.717L77.0505 119.198L77.0195 144.123L69.2617 139.646Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M87.991 129.367L87.9245 152.41L76.2568 145.671L76.3233 122.632L87.991 129.367Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M74.5147 122.513L77.2025 120.95L77.1316 146.19L74.4395 147.753L74.5147 122.513Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M88.0694 128.503L90.7616 126.94L90.6819 154.009L87.9941 155.576L88.0694 128.503Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M72.8701 119.732L75.5623 118.164L90.7591 126.94L88.0669 128.503L72.8701 119.732Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M88.0689 128.503L87.9937 155.576L86.3464 154.624L86.4173 129.389L74.5149 122.512L74.4397 147.752L72.7969 146.8L72.8722 119.731L88.0689 128.503Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M74.4502 126.356L75.2384 125.896L86.4057 132.351L86.4146 133.273L74.4502 126.356Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M86.4151 133.273L86.4018 137.209L74.4375 130.297L74.4507 126.356L86.4151 133.273Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M85.1492 140.492L85.1403 143.645L84.0732 143.03L84.0865 139.877L85.1492 140.492Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M84.2203 141.29L84.0432 141.503C83.9901 141.569 83.8971 141.596 83.8174 141.569L82.8211 141.251C82.6705 141.202 82.52 141.33 82.551 141.49C82.5642 141.569 82.6218 141.631 82.6971 141.653L84.2513 142.141C84.3133 142.158 84.3797 142.149 84.4284 142.114L84.8535 141.835C84.9775 141.751 84.9775 141.565 84.8535 141.485L84.5037 141.255C84.4107 141.189 84.2912 141.211 84.2203 141.29Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M68.0088 63.3496V100.646L100.616 119.293V81.9958L68.0088 63.3496Z" fill="white"/>
-<path d="M68.0088 63.3496V100.646L100.616 119.293V81.9958L68.0088 63.3496Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.616 81.9955L133.175 63.3227L100.616 44.6367L68.0088 63.3493L100.616 81.9955Z" fill="white"/>
-<path d="M100.616 81.9955L133.175 63.3227L100.616 44.6367L68.0088 63.3493L100.616 81.9955Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M133.175 63.3223L133.224 100.646L100.616 119.292V81.995L133.175 63.3223Z" fill="white"/>
-<path d="M133.175 63.3223L133.224 100.646L100.616 119.292V81.995L133.175 63.3223Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M77.4734 75.6859V85.4407L71.1724 81.8452L70.1406 81.2607V71.5059L77.4734 75.6859Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M77.469 75.6907V84.3739L71.168 80.774V72.0996L77.469 75.6907Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M86.7683 80.805V90.5598L80.4673 86.9643L79.4355 86.3798V76.625L86.7683 80.805Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M86.7639 80.8034V89.4867L80.4629 85.8912V77.2168L86.7639 80.8034Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M95.8624 85.5609V95.3157L89.5614 91.7202L88.5342 91.1357V81.3809L95.8624 85.5609Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M95.8625 85.5637V94.247L89.5615 90.6515V81.9727L95.8625 85.5637Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M77.5715 87.5887V97.3435L71.2705 93.7524L70.2432 93.1635V83.4131L77.5715 87.5887Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M77.5715 87.593V96.2763L71.2705 92.6808V84.002L77.5715 87.593Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M86.8674 92.7073V102.462L80.5664 98.8666L79.5391 98.2822V88.5273L86.8674 92.7073Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M86.8664 92.7122V101.391L80.5654 97.7999V89.1211L86.8664 92.7122Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M95.9621 97.4632V107.218L89.6655 103.623L88.6338 103.042V93.2832L95.9621 97.4632Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M95.9621 97.4705V106.145L89.6611 102.554V93.875L95.9621 97.4705Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.428 75.3197V85.0745L128.729 81.479L129.756 80.8945V71.1396L122.428 75.3197Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.428 75.3245V84.0033L128.729 80.4122V71.7334L122.428 75.3245Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.134 80.4339V90.1931L119.435 86.5932L120.462 86.0087V76.2539L113.134 80.4339Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.134 80.4417V89.1205L119.435 85.5294V76.8506L113.134 80.4417Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.034 85.1947V94.945L110.34 91.3539L111.367 90.765V81.0146L104.034 85.1947Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.034 85.1975V93.8808L110.34 90.2853V81.6064L104.034 85.1975Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.449 87.22V96.9749L128.75 93.3794L129.782 92.7949V83.04L122.449 87.22Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M122.449 87.2249V95.9081L128.75 92.3126V83.6338L122.449 87.2249Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.155 92.3392V102.09L119.456 98.4941L120.488 97.9096V88.1592L113.155 92.3392Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M113.155 92.344V101.027L119.456 97.4317V88.7529L113.155 92.344Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.061 97.095V106.845L110.362 103.254L111.389 102.67V92.915L104.061 97.095Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M104.061 97.0999V105.779L110.362 102.188V93.5088L104.061 97.0999Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M68.0088 61.4141V63.3491L100.882 82.7569V80.8263L68.0088 61.4141Z" fill="white"/>
-<path d="M68.0088 61.4141V63.3491L100.882 82.7569V80.8263L68.0088 61.4141Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.882 80.8262L133.056 62.3749L100.231 42.9229L68.0088 61.4141L100.882 80.8262Z" fill="white"/>
-<path d="M100.882 80.8262L133.056 62.3749L100.231 42.9229L68.0088 61.4141L100.882 80.8262Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M133.055 62.374L133.104 64.3356L100.882 82.756V80.8254L133.055 62.374Z" fill="white"/>
-<path d="M133.055 62.374L133.104 64.3356L100.882 82.756V80.8254L133.055 62.374Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M98.7614 41.9336L69.8379 58.5385L73.6902 60.7392L100.878 76.547L125.949 62.1694L129.757 59.9864L98.7614 41.9336ZM100.9 74.1028L74.1773 58.565L98.7791 44.4442L125.471 60.0174L123.833 60.9561L100.9 74.1028Z" fill="white"/>
-<path d="M98.7614 41.9336L69.8379 58.5385L73.6902 60.7392L100.878 76.547L125.949 62.1694L129.757 59.9864L98.7614 41.9336ZM100.9 74.1028L74.1773 58.565L98.7791 44.4442L125.471 60.0174L123.833 60.9561L100.9 74.1028Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M69.8447 58.5371V60.5784L100.88 78.5914V76.5457L69.8447 58.5371Z" fill="white"/>
-<path d="M69.8447 58.5371V60.5784L100.88 78.5914V76.5457L69.8447 58.5371Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M100.88 76.546V78.5917L129.764 62.0222V59.9854L100.88 76.546Z" fill="white"/>
-<path d="M100.88 76.546V78.5917L129.764 62.0222V59.9854L100.88 76.546Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M98.7812 44.4385L98.8122 46.7543L123.467 61.1673L125.469 60.0116L98.7812 44.4385Z" fill="white"/>
-<path d="M98.7812 44.4385L98.8122 46.7543L123.467 61.1673L125.469 60.0116L98.7812 44.4385Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M74.1787 58.5637L98.785 44.4385L98.8159 46.7543L76.1935 59.715L74.1787 58.5637Z" fill="white"/>
-<path d="M74.1787 58.5637L98.785 44.4385L98.8159 46.7543L76.1935 59.715L74.1787 58.5637Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M107.017 55.6205C110.887 57.8566 110.909 61.4742 107.066 63.7104C103.222 65.9465 96.9655 65.9465 93.0954 63.7104C89.2254 61.4742 89.2077 57.8566 93.0511 55.6205C96.8946 53.3843 103.147 53.3843 107.017 55.6205Z" fill="white" stroke="#DA3635" stroke-miterlimit="10"/>
-<path d="M104.372 57.1576C106.772 58.5436 106.786 60.7886 104.403 62.1745C102.021 63.5605 98.1422 63.5605 95.7422 62.1745C93.3422 60.7886 93.3334 58.5436 95.7156 57.1576C98.0978 55.7717 101.972 55.7717 104.372 57.1576Z" fill="#EDEDED"/>
-<path d="M123.199 156.5L141.949 167.325C148.167 170.915 148.167 176.735 141.949 180.325L128.462 188.112" stroke="#706F6F" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/>
-<path d="M128.208 154.049C130.248 155.225 130.261 157.135 128.233 158.311C126.206 159.487 122.909 159.487 120.869 158.311C118.829 157.135 118.82 155.225 120.848 154.049C122.876 152.873 126.168 152.873 128.208 154.049Z" fill="white" stroke="#DA3635" stroke-miterlimit="10"/>
-<path d="M133.362 185.949C138.27 188.784 138.301 193.38 133.42 196.215C128.544 199.049 120.605 199.049 115.698 196.215C110.79 193.38 110.763 188.784 115.645 185.949C120.526 183.115 128.454 183.115 133.362 185.949Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 5"/>
-<path d="M131.955 186.648C136.075 189.028 136.101 192.884 132.008 195.264C127.914 197.643 121.251 197.643 117.125 195.264C113.005 192.884 112.984 189.028 117.078 186.648C121.171 184.268 127.83 184.268 131.955 186.648Z" fill="#EDEDED"/>
-<path d="M134.208 186.41C134.203 186.458 134.203 186.505 134.198 186.558C134.192 186.601 134.187 186.643 134.182 186.685C134.177 186.733 134.166 186.78 134.161 186.828C134.155 186.87 134.145 186.913 134.134 186.955C134.124 187.003 134.113 187.05 134.097 187.098C134.087 187.14 134.071 187.182 134.06 187.225C134.044 187.272 134.028 187.32 134.013 187.362C133.997 187.405 133.981 187.447 133.965 187.489C133.944 187.537 133.923 187.584 133.901 187.637C133.886 187.68 133.864 187.717 133.843 187.759C133.822 187.806 133.796 187.854 133.769 187.902C133.748 187.939 133.727 187.981 133.706 188.018C133.674 188.076 133.637 188.134 133.6 188.187C133.579 188.224 133.558 188.256 133.531 188.293C133.489 188.357 133.441 188.42 133.394 188.478C133.373 188.505 133.351 188.531 133.33 188.563C133.251 188.663 133.166 188.758 133.082 188.854C133.061 188.88 133.034 188.901 133.013 188.928C132.944 189.002 132.87 189.076 132.796 189.145C132.759 189.176 132.727 189.208 132.69 189.24C132.643 189.282 132.595 189.319 132.548 189.361C132.505 189.398 132.463 189.435 132.415 189.472C132.368 189.515 132.315 189.552 132.262 189.594C132.214 189.631 132.167 189.668 132.119 189.7C132.066 189.737 132.013 189.779 131.955 189.816C131.902 189.853 131.855 189.885 131.802 189.922C131.744 189.959 131.686 189.996 131.627 190.033C131.553 190.081 131.479 190.123 131.405 190.171C131.194 190.292 130.977 190.403 130.755 190.514C130.697 190.541 130.638 190.572 130.575 190.599C130.374 190.694 130.168 190.779 129.956 190.863C129.93 190.874 129.903 190.885 129.872 190.895C129.644 190.98 129.411 191.059 129.179 191.133C129.015 191.186 128.845 191.228 128.682 191.276C128.555 191.313 128.428 191.345 128.301 191.376C128.126 191.419 127.946 191.456 127.767 191.493C127.634 191.519 127.507 191.551 127.375 191.572C127.322 191.583 127.264 191.588 127.211 191.598C126.989 191.636 126.767 191.667 126.54 191.694C126.476 191.699 126.407 191.71 126.344 191.715C126.217 191.731 126.085 191.736 125.953 191.747C125.736 191.762 125.519 191.778 125.297 191.789C125.159 191.794 125.016 191.799 124.879 191.799C124.704 191.805 124.525 191.805 124.35 191.799C124.202 191.799 124.054 191.794 123.906 191.789C123.742 191.784 123.578 191.773 123.414 191.762C123.266 191.752 123.118 191.741 122.964 191.725C122.801 191.71 122.642 191.694 122.483 191.673C122.34 191.657 122.192 191.636 122.05 191.609C121.875 191.583 121.706 191.551 121.537 191.519C121.404 191.493 121.267 191.466 121.135 191.44C120.934 191.398 120.733 191.345 120.532 191.292C120.405 191.26 120.273 191.228 120.146 191.186C120.077 191.165 120.008 191.144 119.945 191.123C119.744 191.059 119.548 190.99 119.358 190.922C119.299 190.9 119.246 190.879 119.188 190.858C119.014 190.789 118.845 190.715 118.675 190.641C118.591 190.604 118.506 190.572 118.427 190.53C118.183 190.414 117.945 190.292 117.718 190.16C115.809 189.06 114.857 187.611 114.862 186.167L114.852 190.329C114.846 191.773 115.798 193.217 117.707 194.322C117.935 194.454 118.173 194.576 118.416 194.692C118.495 194.729 118.585 194.766 118.665 194.803C118.808 194.867 118.95 194.936 119.098 194.994C119.125 195.004 119.151 195.015 119.178 195.02C119.231 195.041 119.289 195.063 119.347 195.084C119.537 195.152 119.738 195.221 119.934 195.285C120.003 195.306 120.072 195.327 120.14 195.348C120.188 195.364 120.23 195.38 120.278 195.39C120.357 195.412 120.442 195.428 120.526 195.449C120.727 195.502 120.923 195.549 121.129 195.597C121.182 195.607 121.235 195.623 121.288 195.634C121.367 195.65 121.447 195.66 121.526 195.676C121.695 195.708 121.87 195.74 122.039 195.766C122.108 195.777 122.176 195.792 122.245 195.803C122.319 195.814 122.399 195.819 122.473 195.829C122.631 195.851 122.795 195.866 122.959 195.882C123.038 195.888 123.113 195.903 123.192 195.909C123.266 195.914 123.335 195.914 123.409 195.919C123.573 195.93 123.737 195.941 123.901 195.946C123.985 195.951 124.065 195.956 124.149 195.956C124.213 195.956 124.281 195.956 124.345 195.956C124.519 195.956 124.699 195.956 124.874 195.956C124.964 195.956 125.048 195.956 125.138 195.956C125.191 195.956 125.244 195.946 125.291 195.946C125.508 195.935 125.73 195.919 125.947 195.903C126.037 195.898 126.122 195.893 126.212 195.888C126.254 195.882 126.296 195.877 126.339 195.872C126.402 195.866 126.471 195.856 126.534 195.851C126.762 195.824 126.984 195.792 127.206 195.755C127.259 195.745 127.317 195.74 127.37 195.729C127.396 195.724 127.423 195.724 127.449 195.718C127.555 195.697 127.656 195.671 127.761 195.65C127.941 195.613 128.121 195.576 128.295 195.533C128.422 195.502 128.549 195.465 128.676 195.433C128.845 195.385 129.009 195.343 129.173 195.29C129.21 195.279 129.247 195.269 129.279 195.258C129.48 195.195 129.676 195.126 129.866 195.052C129.893 195.041 129.919 195.031 129.951 195.02C130.162 194.936 130.369 194.851 130.57 194.756C130.628 194.729 130.691 194.703 130.749 194.671C130.972 194.565 131.194 194.449 131.4 194.327C131.442 194.306 131.479 194.28 131.516 194.259C131.553 194.238 131.585 194.216 131.622 194.19C131.68 194.153 131.738 194.116 131.797 194.079C131.849 194.042 131.902 194.01 131.95 193.973C132.003 193.936 132.061 193.899 132.114 193.857C132.162 193.82 132.209 193.783 132.257 193.746C132.31 193.709 132.357 193.666 132.41 193.629C132.458 193.592 132.5 193.555 132.542 193.518C132.59 193.476 132.637 193.439 132.68 193.397C132.701 193.381 132.717 193.365 132.738 193.349C132.754 193.333 132.77 193.317 132.786 193.301C132.86 193.227 132.934 193.159 133.002 193.085C133.024 193.058 133.05 193.037 133.071 193.011C133.161 192.915 133.246 192.815 133.32 192.72C133.325 192.714 133.325 192.709 133.33 192.709C133.346 192.688 133.362 192.662 133.383 192.64C133.431 192.577 133.478 192.519 133.521 192.455C133.542 192.418 133.568 192.387 133.589 192.349C133.626 192.291 133.664 192.233 133.695 192.18C133.706 192.164 133.716 192.149 133.722 192.133C133.732 192.111 133.743 192.085 133.759 192.064C133.785 192.016 133.812 191.969 133.833 191.921C133.854 191.879 133.87 191.842 133.891 191.799C133.912 191.752 133.933 191.704 133.954 191.651C133.965 191.63 133.976 191.609 133.981 191.588C133.986 191.567 133.991 191.546 134.002 191.53C134.018 191.482 134.034 191.435 134.05 191.392C134.06 191.35 134.076 191.308 134.087 191.265C134.097 191.218 134.113 191.17 134.124 191.123C134.129 191.096 134.139 191.07 134.145 191.048C134.15 191.033 134.15 191.011 134.155 190.996C134.166 190.948 134.171 190.9 134.177 190.853C134.182 190.81 134.187 190.768 134.192 190.726C134.198 190.678 134.198 190.631 134.203 190.578C134.203 190.551 134.208 190.52 134.208 190.493C134.208 190.467 134.208 190.435 134.208 190.409L134.219 186.246C134.219 186.299 134.214 186.352 134.208 186.41Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/>
-<path d="M131.357 182.248C135.149 184.437 135.17 187.986 131.405 190.175C127.639 192.365 121.51 192.365 117.718 190.175C113.926 187.986 113.91 184.437 117.675 182.248C121.441 180.058 127.565 180.058 131.357 182.248Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/>
-<path d="M129.094 183.966C129.226 184.046 129.231 184.173 129.089 184.252L125.984 186.055C125.852 186.135 125.852 186.262 125.989 186.341L128.951 188.049C129.083 188.129 129.089 188.256 128.946 188.335L128.306 188.705C128.168 188.784 127.941 188.784 127.809 188.71L124.847 187.002C124.71 186.923 124.482 186.923 124.345 187.002L121.214 188.821C121.076 188.901 120.849 188.901 120.717 188.827L119.976 188.398C119.839 188.319 119.833 188.187 119.976 188.107L123.107 186.288C123.245 186.209 123.245 186.077 123.112 186.003L120.172 184.305C120.034 184.226 120.029 184.093 120.172 184.014L120.812 183.644C120.949 183.564 121.177 183.564 121.314 183.644L124.255 185.341C124.387 185.421 124.614 185.421 124.747 185.341L127.851 183.538C127.989 183.459 128.216 183.459 128.354 183.538L129.094 183.966Z" fill="#DA3635"/>
-<path d="M24.8715 127.409C28.1368 129.363 28.1555 132.524 24.9126 134.478C21.6697 136.432 16.3906 136.432 13.1253 134.478C9.86 132.524 9.84506 129.363 13.088 127.409C16.3309 125.455 21.6062 125.455 24.8715 127.409Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/>
-<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" fill="white"/>
-<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" fill="white"/>
-<path d="M15.7717 107.513C16.1742 106.267 18.9534 105.715 18.8592 107.501C18.8035 108.387 18.5509 108.721 17.6387 108.815C16.9022 108.871 15.6518 108.199 15.7717 107.351" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" fill="white"/>
-<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" fill="white"/>
-<path d="M16.2812 108.733C16.08 109.376 15.489 110.677 16.7394 110.305C17.1291 110.185 18.0155 109.996 17.7329 109.513C17.5445 109.179 16.7266 109.041 16.5125 108.669" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" fill="white"/>
-<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" fill="white"/>
-<path d="M17.6774 121.336C17.6646 123.7 16.5212 126.046 16.7525 128.393C16.8081 128.89 16.9794 129.425 16.8467 129.935C16.7011 130.431 16.093 130.821 15.6648 130.281C15.395 129.947 15.4635 128.967 15.4507 128.551C15.425 127.866 15.532 127.275 15.4121 126.607C15.1295 125.147 15.6691 123.614 15.2366 122.179C15.0096 121.413 14.8212 121.135 14.9968 120.342C15.2537 119.203 14.7955 118.45 16.2043 118.304C17.0351 118.223 17.8573 118.064 18.6623 117.876C18.9021 117.82 19.8314 117.341 20.0583 117.473C20.3795 117.662 20.1097 119.542 20.1097 119.996C20.1097 121.554 19.947 123.027 20.1097 124.543C20.2296 125.588 19.8956 126.663 19.8014 127.695C19.75 128.337 20.084 129.909 18.9707 129.639C18.0029 129.412 18.2855 126.564 18.247 125.721C18.2084 124.513 18.7309 122.338 17.7888 121.4" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" fill="white"/>
-<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" fill="white"/>
-<path d="M18.671 129.455C18.7095 129.695 18.5896 129.802 18.4697 130.003C19.1292 130.701 19.2876 130.072 19.5146 129.562C19.0992 129.656 19.0435 129.682 18.7481 129.536" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" fill="white"/>
-<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" fill="white"/>
-<path d="M18.4698 130.097C17.8275 131.142 19.7587 131.052 20.431 131.052C21.6515 131.039 20.6452 130.461 20.1099 130.204C19.8572 130.084 19.6388 129.934 19.3862 129.977C18.9965 130.029 18.9023 130.512 18.4869 129.99" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" fill="white"/>
-<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" fill="white"/>
-<path d="M15.7721 130.406C15.7721 130.62 15.7036 130.77 15.7164 130.984C16.6157 131.643 16.5472 130.997 16.5472 130.354C16.3202 130.449 16.0505 130.517 15.8235 130.41" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" fill="white"/>
-<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" fill="white"/>
-<path d="M15.6095 130.928C15.541 131.493 15.5153 131.639 15.9735 132.11C16.3503 132.486 16.6972 132.846 17.2368 132.902C17.4894 132.324 16.8599 131.506 16.5131 131.078C16.2433 131.21 15.8665 131.24 15.7209 130.945" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.7717 109.551C15.3734 109.688 15.0865 109.941 14.7911 110.223C14.4442 110.557 13.9046 110.866 13.6905 111.324C13.3694 112.022 13.2066 113.311 13.1424 114.073C13.0482 114.998 13.1167 115.923 13.1938 116.852C13.1938 116.852 13.1724 117.443 14.5812 116.737C14.5812 116.737 14.3543 118.368 15.1636 118.638C15.9944 119.096 16.8551 118.921 17.7929 118.921C18.812 118.908 19.7927 118.707 20.208 117.713C20.4521 117.289 20.2038 116.03 20.2038 116.03C20.8889 116.433 21.8053 115.713 21.8053 115.713C21.9809 114.399 21.1202 113.003 20.6363 111.821C20.3793 111.204 20.0839 110.72 19.6428 110.211C19.4672 109.997 19.2403 109.568 19.0262 109.418C18.6793 109.149 18.9319 109.243 18.5294 109.337C17.6987 109.538 16.3541 111.08 15.883 109.564C15.8916 109.564 15.883 109.513 15.7717 109.551Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.8919 109.564C16.3629 111.08 17.7032 109.538 18.5383 109.337C18.9408 109.243 18.6839 109.149 19.035 109.418C19.2491 109.564 19.4761 109.997 19.6516 110.211C20.0927 110.72 20.3882 111.204 20.6451 111.821C21.129 113.003 21.9854 114.399 21.8141 115.713C21.8141 115.713 20.902 116.433 20.2126 116.03C20.2126 116.03 20.461 117.289 20.2169 117.713C19.8015 118.707 18.8209 118.908 17.8017 118.921C16.8639 118.921 16.0032 119.096 15.1724 118.638C14.3631 118.368 14.5901 116.737 14.5901 116.737C13.1769 117.443 13.2026 116.852 13.2026 116.852C13.1213 115.927 13.057 115.002 13.1512 114.073C13.2198 113.307 13.3782 112.022 13.6994 111.324C13.9135 110.866 14.453 110.557 14.7999 110.223C15.0954 109.941 15.378 109.675 15.7805 109.551C15.772 109.551 15.8447 109.508 15.8919 109.564Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" fill="white"/>
-<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" fill="#DA3635"/>
-<path d="M16.508 107.474C16.6151 107.449 16.5337 107.205 16.6707 107.14C16.9791 106.965 16.9105 107.235 17.236 107.235C17.6385 107.235 18.0796 106.806 18.4693 106.656C18.5378 106.802 18.632 107.166 18.859 107.14C19.0988 107.102 19.1673 106.631 19.1416 106.442C19.0731 105.946 18.6448 105.864 18.2295 105.744C17.8398 105.637 17.3859 105.53 16.9833 105.505C16.2468 105.449 15.977 105.907 15.6944 106.579C15.4803 107.076 15.3989 107.586 15.7329 108.057C16.0156 108.459 16.5808 109.089 16.9833 109.384C17.4415 109.718 18.3537 109.92 18.6191 109.346C18.9275 108.686 18.6191 108.352 18.041 108.515C17.236 108.755 17.1289 108.785 16.5251 108.232C16.3624 108.1 15.9085 108.031 15.9085 107.71C15.9214 107.346 16.2982 107.376 16.4181 107.671" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M13 111.282L13.2826 109.92L14.8884 108.986L16.2117 109.415L26.8872 127.789L23.6755 129.657L13 111.282Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M23.6758 129.656L23.9413 128.26L25.5471 127.331L26.8874 127.789L27.5169 132.572L23.6758 129.656Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M25.8594 131.314L26.0478 130.941C26.1934 130.65 26.5017 130.47 26.8314 130.487L27.2468 130.509L27.5209 132.577L25.8594 131.314Z" fill="#DA3635" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M14.8887 108.986L25.5471 127.331L26.8874 127.789L16.2119 109.415L14.8887 108.986Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M23.941 128.261L13.2826 109.92L13 111.282L23.6755 129.657L23.941 128.261Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M13.6992 116.672C13.6992 116.672 15.0952 116.488 15.7632 115.876L15.2879 115.02C15.2879 115.02 14.0504 115.499 13.9262 115.675C13.802 115.855 13.6992 116.672 13.6992 116.672Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M15.292 115.02C15.292 115.02 15.292 114.245 15.5917 114C15.8958 113.761 15.5917 114.57 15.5917 114.57C15.5917 114.57 16.3069 113.953 16.5124 114.018C16.718 114.082 16.9406 114.75 16.8764 115.071C16.8122 115.392 15.8787 115.739 15.763 115.876L15.292 115.02Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M13.832 117.036C13.832 117.036 15.592 116.073 15.7633 115.876L15.288 115.02C15.288 115.02 14.2688 115.379 13.9733 115.628" fill="white"/>
-<path d="M13.832 117.036C13.832 117.036 15.592 116.073 15.7633 115.876L15.288 115.02C15.288 115.02 14.2688 115.379 13.9733 115.628" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M20.6021 114.518C20.6021 114.518 18.8764 114.154 18.5381 113.73L19.4673 115.486C19.4673 115.486 20.0839 116.137 21.1245 116.03" fill="white"/>
-<path d="M20.6021 114.518C20.6021 114.518 18.8764 114.154 18.5381 113.73L19.4673 115.486C19.4673 115.486 20.0839 116.137 21.1245 116.03" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M18.8633 111.967C18.8633 111.967 19.4499 114.044 20.0709 114.391L18.8633 111.967Z" fill="white"/>
-<path d="M18.8633 111.967C18.8633 111.967 19.4499 114.044 20.0709 114.391" stroke="#706F6F" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M153.972 87.8867C154.213 87.8867 154.373 88.0426 154.373 88.2995V94.2098C154.373 94.4499 154.217 94.61 153.972 94.61C153.728 94.61 153.56 94.4541 153.56 94.2098V88.2995C153.576 88.131 153.732 87.8867 153.972 87.8867Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M153.972 90.4776C156.125 90.4776 157.86 88.742 157.86 86.5894C157.86 84.4409 156.125 82.7012 153.972 82.7012C151.82 82.7012 150.084 84.4367 150.084 86.5894C150.084 88.742 151.824 90.4776 153.972 90.4776Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M153.972 90.4776C156.121 90.4776 157.86 88.7378 157.86 86.5894C157.86 84.4409 156.121 82.7012 153.972 82.7012C151.824 82.7012 150.084 84.4409 150.084 86.5894C150.084 88.7378 151.824 90.4776 153.972 90.4776Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M155.114 89.4248C152.919 89.4248 151.226 87.647 151.226 85.5366C151.226 84.6393 151.554 83.8431 151.95 83.2744C150.809 83.9316 150 85.2248 150 86.5939C150 88.7844 151.782 90.4821 153.888 90.4821C155.186 90.4821 156.323 89.8291 157.052 88.8603C156.479 89.2562 155.839 89.4248 155.114 89.4248Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M155.114 89.4248C152.919 89.4248 151.226 87.647 151.226 85.5366C151.226 84.6393 151.554 83.8431 151.95 83.2744C150.809 83.9316 150 85.2248 150 86.5939C150 88.7844 151.782 90.4821 153.888 90.4821C155.186 90.4821 156.323 89.8291 157.052 88.8603C156.479 89.2562 155.839 89.4248 155.114 89.4248Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M177.942 79.6309H178.186C178.515 79.6309 178.755 79.871 178.755 80.1995V89.8379C178.755 90.1665 178.51 90.4066 178.186 90.4066H177.942C177.613 90.4066 177.373 90.1665 177.373 89.8379V80.1995C177.386 79.871 177.63 79.6309 177.942 79.6309Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M178.027 83.6747C181.43 83.6747 184.177 80.9281 184.177 77.5244C184.177 74.1206 181.426 71.374 178.027 71.374C174.623 71.374 171.872 74.1206 171.872 77.5244C171.876 80.9239 174.623 83.6747 178.027 83.6747Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M178.027 83.6747C181.43 83.6747 184.177 80.9281 184.177 77.5244C184.177 74.1206 181.426 71.374 178.027 71.374C174.623 71.374 171.872 74.1206 171.872 77.5244C171.876 80.9239 174.623 83.6747 178.027 83.6747Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M179.892 82.053C176.489 82.053 173.742 79.3064 173.742 75.9026C173.742 74.5209 174.227 73.3119 174.951 72.2588C173.085 73.3119 171.876 75.3339 171.876 77.5961C171.876 80.9998 174.627 83.7464 178.031 83.7464C180.053 83.7464 181.834 82.7775 182.972 81.24C182.07 81.737 181.03 82.053 179.892 82.053Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M179.892 82.053C176.489 82.053 173.742 79.3064 173.742 75.9026C173.742 74.5209 174.227 73.3119 174.951 72.2588C173.085 73.3119 171.876 75.3339 171.876 77.5961C171.876 80.9998 174.627 83.7464 178.031 83.7464C180.053 83.7464 181.834 82.7775 182.972 81.24C182.07 81.737 181.03 82.053 179.892 82.053Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M167.33 73.1514C167.659 73.1514 167.899 73.3957 167.899 73.7201V81.1678C167.899 81.4964 167.655 81.7366 167.33 81.7366C167.002 81.7366 166.762 81.4964 166.762 81.1678V73.7201C166.779 73.3072 167.019 73.1514 167.33 73.1514Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M167.331 76.3827C170.065 76.3827 172.272 74.1753 172.272 71.4413C172.272 68.7074 170.065 66.5 167.331 66.5C164.597 66.5 162.39 68.7074 162.39 71.4413C162.39 74.1795 164.614 76.3827 167.331 76.3827Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M167.331 76.3827C170.065 76.3827 172.272 74.1753 172.272 71.4413C172.272 68.7074 170.065 66.5 167.331 66.5C164.597 66.5 162.39 68.7074 162.39 71.4413C162.39 74.1795 164.614 76.3827 167.331 76.3827Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M168.801 75.0179C166.054 75.0179 163.86 72.8274 163.86 70.0766C163.86 69.0234 164.188 67.9703 164.828 67.1572C163.375 68.0545 162.394 69.5921 162.394 71.3698C162.394 74.1164 164.588 76.3111 167.335 76.3111C168.957 76.3111 170.41 75.4981 171.307 74.2891C170.579 74.7609 169.681 75.0179 168.801 75.0179Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M168.801 75.0179C166.054 75.0179 163.86 72.8274 163.86 70.0766C163.86 69.0234 164.188 67.9703 164.828 67.1572C163.375 68.0545 162.394 69.5921 162.394 71.3698C162.394 74.1164 164.588 76.3111 167.335 76.3111C168.957 76.3111 170.41 75.4981 171.307 74.2891C170.579 74.7609 169.681 75.0179 168.801 75.0179Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M164.913 89.0957C165.313 89.0957 165.726 89.4243 165.726 89.9087V100.6C165.726 101 165.397 101.413 164.913 101.413C164.512 101.413 164.1 101.085 164.1 100.6V89.9087C164.1 89.4243 164.428 89.0957 164.913 89.0957Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M164.913 93.7085C168.801 93.7085 171.965 90.5617 171.965 86.6609C171.965 82.7601 168.805 79.6133 164.913 79.6133C161.025 79.6133 157.865 82.7601 157.865 86.6609C157.861 90.5659 161.025 93.7085 164.913 93.7085Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M164.913 93.7085C168.801 93.7085 171.965 90.5617 171.965 86.6609C171.965 82.7601 168.805 79.6133 164.913 79.6133C161.025 79.6133 157.865 82.7601 157.865 86.6609C157.861 90.5659 161.025 93.7085 164.913 93.7085Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M167.019 91.8468C163.131 91.8468 159.972 88.6874 159.972 84.7992C159.972 83.2616 160.456 81.8083 161.353 80.6709C159.247 81.8799 157.865 84.1463 157.865 86.7496C157.865 90.6378 161.025 93.7972 164.913 93.7972C167.263 93.7972 169.285 92.6598 170.583 90.9622C169.441 91.4466 168.317 91.8468 167.019 91.8468Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M167.019 91.8468C163.131 91.8468 159.972 88.6874 159.972 84.7992C159.972 83.2616 160.456 81.8083 161.353 80.6709C159.247 81.8799 157.865 84.1463 157.865 86.7496C157.865 90.6378 161.025 93.7972 164.913 93.7972C167.263 93.7972 169.285 92.6598 170.583 90.9622C169.441 91.4466 168.317 91.8468 167.019 91.8468Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M156.774 58.6325C160.172 60.583 160.186 63.7466 156.816 65.7041C153.445 67.6546 147.957 67.6546 144.558 65.7041C141.16 63.7535 141.146 60.5899 144.524 58.6325C147.901 56.675 153.383 56.6819 156.774 58.6325Z" fill="white" stroke="#706F6F" stroke-miterlimit="10"/>
-<path d="M159.036 165.114C160.534 165.977 160.54 167.378 159.054 168.245C157.568 169.108 155.148 169.108 153.649 168.245C152.151 167.381 152.145 165.981 153.634 165.114C155.12 164.247 157.54 164.247 159.036 165.114Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M158.092 165.66C159.062 166.222 159.069 167.131 158.104 167.692C157.14 168.254 155.568 168.254 154.595 167.692C153.625 167.131 153.618 166.222 154.583 165.66C155.55 165.102 157.119 165.102 158.092 165.66Z" fill="#EDEDED"/>
-<path d="M143.649 127.091C142.853 127.585 143.033 128.849 143.649 129.206L145.007 129.99C145.297 130.158 145.657 130.158 145.947 129.99L150.726 127.231C151.254 126.926 151.409 125.69 150.726 125.352L145.849 127.918L143.649 127.091Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M154.876 124.323C153.747 123.67 152.401 123.67 151.272 124.323L150.109 124.994L149.59 124.695C149.038 124.375 148.354 124.375 147.799 124.695L143.649 127.091C143.032 127.448 143.032 128.339 143.649 128.696L145.007 129.48C145.297 129.648 145.657 129.648 145.947 129.48L150.726 126.721C151.253 126.416 151.253 125.656 150.726 125.351L150.567 125.26L151.501 124.723C152.486 124.155 153.661 124.155 154.647 124.723C155.633 125.29 156.222 126.309 156.222 127.448V153.438H156.679V127.448C156.676 126.142 156.005 124.976 154.876 124.323Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M154.968 166.633C154.968 167.082 155.6 167.445 156.378 167.445C157.156 167.445 157.788 167.082 157.788 166.633V165.821H154.965V166.633H154.968Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M156.381 166.633C157.159 166.633 157.79 166.27 157.79 165.822C157.79 165.373 157.159 165.01 156.381 165.01C155.602 165.01 154.971 165.373 154.971 165.822C154.971 166.27 155.602 166.633 156.381 166.633Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M155.529 165.74C155.529 166.011 155.911 166.228 156.381 166.228C156.851 166.228 157.232 166.008 157.232 165.74V147.519H155.529V165.74Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M156.381 148.007C156.851 148.007 157.232 147.788 157.232 147.519C157.232 147.249 156.851 147.03 156.381 147.03C155.91 147.03 155.529 147.249 155.529 147.519C155.529 147.788 155.91 148.007 156.381 148.007Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M106.786 30.7703L101.104 27.4697L111.224 33.2397L116.913 36.5402L106.786 30.7703Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M111.28 1.76779L116.969 5.07642C116.187 4.61644 115.154 4.7617 114.121 5.35887L108.432 2.05023C109.465 1.45306 110.498 1.31588 111.28 1.76779Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M83.9402 62.251L78.2509 58.9424C76.6934 58.0386 76.7983 54.9156 78.372 52.2041L84.0612 55.5127C82.4876 58.2242 82.3746 61.3472 83.9402 62.251Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M84.0526 55.5124L78.3633 52.2038L88.4183 34.7891L94.1075 38.0977L84.0526 55.5124Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M101.096 25.9854L95.415 22.6849L105.607 5.03613L111.297 8.33671L101.096 25.9854Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M111.297 8.33647L105.607 5.02783C106.382 3.68017 107.407 2.63109 108.432 2.04199L114.121 5.35062C113.096 5.94779 112.071 6.9888 111.297 8.33647Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M94.1075 38.098L88.4182 34.7894C88.7894 34.1438 88.7894 33.4498 88.4102 33.248L94.0994 36.5567C94.4787 36.7584 94.4868 37.4524 94.1075 38.098Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M99.7567 26.7682L94.0674 23.4595C94.253 23.5644 94.5032 23.5322 94.7453 23.3869C94.9874 23.2497 95.2295 22.9996 95.4151 22.6768L101.104 25.9854C100.919 26.3082 100.677 26.5503 100.434 26.6955C100.184 26.8327 99.9423 26.8731 99.7567 26.7682Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M89.6364 20.99L83.9473 17.6895L94.0668 23.4594L99.756 26.768L89.6364 20.99Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M114.121 5.35095C115.178 4.73765 116.243 4.60854 117.034 5.10887C118.551 6.06918 118.397 9.1115 116.848 11.7988L106.785 29.2215C106.414 29.8591 106.414 30.5531 106.793 30.7629L116.913 36.5328C118.527 37.4447 118.623 40.5274 116.985 43.2631C116.219 44.5462 115.234 45.5307 114.241 46.1036C113.217 46.6927 112.184 46.838 111.401 46.3861L101.144 40.5435C100.959 40.4386 100.716 40.4709 100.474 40.6081C100.232 40.7453 99.9901 40.9954 99.8045 41.3182L89.6123 58.967C88.8295 60.3227 87.8048 61.3637 86.7799 61.9528C85.7873 62.5257 84.8028 62.671 84.0281 62.2837C82.3737 61.4444 82.4545 58.2649 84.0523 55.4969L94.1073 38.0822C94.4785 37.4366 94.4785 36.7426 94.0992 36.5409L83.8425 30.6983C82.2527 29.7864 82.2688 26.7925 83.8989 24.0568C84.6494 22.7979 85.6097 21.8538 86.5861 21.2889C87.6836 20.6594 88.7973 20.5142 89.6204 20.9822L99.74 26.7522C99.9256 26.8571 100.176 26.8248 100.418 26.6795C100.66 26.5424 100.902 26.2922 101.088 25.9694L111.28 8.32066C112.071 6.98914 113.096 5.94812 114.121 5.35095Z" fill="#DA3635" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M83.8511 30.7065L78.1618 27.3979C76.572 26.486 76.5881 23.4921 78.2182 20.7564C78.9687 19.4975 79.9291 18.5533 80.9056 17.9884C82.0031 17.359 83.1167 17.2137 83.9398 17.6818L89.629 20.9904C88.7978 20.5224 87.6922 20.6596 86.5948 21.2971C85.6183 21.862 84.658 22.8142 83.9075 24.065C82.2774 26.8007 82.2613 29.7946 83.8511 30.7065Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M100 39.5L100 59.5" stroke="#DA3635" stroke-miterlimit="10" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="5 8"/>
-<path d="M145.406 52.1319C146.019 51.9934 146.731 51.3493 147.224 51.0121C148.155 50.368 152.341 50.1994 151.248 49.8924C150.854 49.778 154.821 52.3426 154.721 53.8838C154.678 54.6002 154.853 55.9427 154.778 56.6711C154.721 57.2611 154.896 57.6645 154.853 58.2665C154.447 57.9173 154.328 57.0745 153.791 56.7976C153.309 56.5628 152.597 56.936 152.135 57.0504C151.716 57.1467 151.26 57.1347 150.873 57.3273C150.454 57.538 150.379 57.815 150.236 58.2243C149.986 58.9106 149.873 59.4585 149.83 60.1809C149.567 59.7174 149.336 59.3802 148.986 58.9468C148.636 58.5254 148.099 58.3327 147.605 58.0377C146.356 57.2671 145.656 56.4544 145.569 54.9313C145.512 54.0884 145.919 52.8724 145.406 52.1319Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M151.323 41.2957C151.279 42.0542 151.729 42.4034 150.885 42.9332C150.448 43.1981 150.404 43.1017 150.261 43.6074C150.161 43.9566 150.173 44.2938 149.986 44.6128C149.655 45.1727 149.536 44.9319 149.074 44.5827C148.593 44.2215 148.286 44.4443 148.243 43.8844C148.199 43.4208 148.593 42.8911 148.536 42.4696C148.48 41.994 148.243 41.6148 148.405 41.3198C148.786 40.6636 150.773 41.3198 151.267 41.2235" fill="white"/>
-<path d="M151.323 41.2957C151.279 42.0542 151.729 42.4034 150.885 42.9332C150.448 43.1981 150.404 43.1017 150.261 43.6074C150.161 43.9566 150.173 44.2938 149.986 44.6128C149.655 45.1727 149.536 44.9319 149.074 44.5827C148.593 44.2215 148.286 44.4443 148.243 43.8844C148.199 43.4208 148.593 42.8911 148.536 42.4696C148.48 41.994 148.243 41.6148 148.405 41.3198C148.786 40.6636 150.773 41.3198 151.267 41.2235" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M151.323 41.2957C151.279 42.0542 151.729 42.4034 150.885 42.9332C150.448 43.1981 150.404 43.1017 150.261 43.6074C150.161 43.9566 150.173 44.2938 149.986 44.6128C149.655 45.1727 149.536 44.9319 149.074 44.5827C148.593 44.2215 148.286 44.4443 148.243 43.8844C148.199 43.4208 148.593 42.8911 148.536 42.4696C148.48 41.994 148.243 41.6148 148.405 41.3198C148.786 40.6636 150.773 41.3198 151.267 41.2235" fill="white"/>
-<path d="M151.323 41.2957C151.279 42.0542 151.729 42.4034 150.885 42.9332C150.448 43.1981 150.404 43.1017 150.261 43.6074C150.161 43.9566 150.173 44.2938 149.986 44.6128C149.655 45.1727 149.536 44.9319 149.074 44.5827C148.593 44.2215 148.286 44.4443 148.243 43.8844C148.199 43.4208 148.593 42.8911 148.536 42.4696C148.48 41.994 148.243 41.6148 148.405 41.3198C148.786 40.6636 150.773 41.3198 151.267 41.2235" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M152.023 46.1421C152.023 47.6231 151.804 49.0258 151.716 50.4646C150.129 50.1877 151.323 49.1221 151.267 48.3936C151.192 47.5388 150.348 45.8892 152.023 46.0157" fill="white"/>
-<path d="M152.023 46.1421C152.023 47.6231 151.804 49.0258 151.716 50.4646C150.129 50.1877 151.323 49.1221 151.267 48.3936C151.192 47.5388 150.348 45.8892 152.023 46.0157" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M152.023 46.1421C152.023 47.6231 151.804 49.0258 151.716 50.4646C150.129 50.1877 151.323 49.1221 151.267 48.3936C151.192 47.5388 150.348 45.8892 152.023 46.0157" fill="white"/>
-<path d="M152.023 46.1421C152.023 47.6231 151.804 49.0258 151.716 50.4646C150.129 50.1877 151.323 49.1221 151.267 48.3936C151.192 47.5388 150.348 45.8892 152.023 46.0157" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M144.363 52.0593C144.538 50.8131 145.525 48.8144 143.563 48.1823C143.344 48.1101 142.588 47.8873 142.52 47.7187C142.301 47.1468 143.057 47.2432 143.307 47.3575C144.369 47.791 145.312 48.0438 145.312 49.2178C145.312 49.6934 145.094 50.2412 145.037 50.7168C144.994 51.1623 144.775 51.8667 144.744 52.3122" fill="white"/>
-<path d="M144.363 52.0593C144.538 50.8131 145.525 48.8144 143.563 48.1823C143.344 48.1101 142.588 47.8873 142.52 47.7187C142.301 47.1468 143.057 47.2432 143.307 47.3575C144.369 47.791 145.312 48.0438 145.312 49.2178C145.312 49.6934 145.094 50.2412 145.037 50.7168C144.994 51.1623 144.775 51.8667 144.744 52.3122" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M144.363 52.0593C144.538 50.8131 145.525 48.8144 143.563 48.1823C143.344 48.1101 142.588 47.8873 142.52 47.7187C142.301 47.1468 143.057 47.2432 143.307 47.3575C144.369 47.791 145.312 48.0438 145.312 49.2178C145.312 49.6934 145.094 50.2412 145.037 50.7168C144.994 51.1623 144.775 51.8667 144.744 52.3122" fill="white"/>
-<path d="M144.363 52.0593C144.538 50.8131 145.525 48.8144 143.563 48.1823C143.344 48.1101 142.588 47.8873 142.52 47.7187C142.301 47.1468 143.057 47.2432 143.307 47.3575C144.369 47.791 145.312 48.0438 145.312 49.2178C145.312 49.6934 145.094 50.2412 145.037 50.7168C144.994 51.1623 144.775 51.8667 144.744 52.3122" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M143.232 51.8664C144.569 51.7821 145.019 52.4684 145.894 53.1427C147.362 54.2745 147.581 55.8578 147.912 57.3568C148.218 58.7595 147.474 61.0954 145.631 60.8546C143.482 60.5716 142.364 59.3556 141.489 57.5916C141.071 56.7247 140.921 55.2558 141.039 54.2745C141.108 53.6303 142.151 51.8484 143.232 51.8664Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M145.6 52.7461C146.124 53.0652 146.924 53.4745 147.286 53.9923C147.724 54.5943 147.999 55.2505 148.242 55.9368C148.78 57.3636 149.173 58.9469 148.055 60.1931C147.399 60.9215 146.618 60.9336 145.6 60.8794C147.024 60.2051 148.011 59.0432 147.849 57.4359C147.761 56.5148 147.518 55.702 147.062 54.9134C146.799 54.4498 146.043 53.7214 145.637 53.2759" fill="white"/>
-<path d="M145.6 52.7461C146.124 53.0652 146.924 53.4745 147.286 53.9923C147.724 54.5943 147.999 55.2505 148.242 55.9368C148.78 57.3636 149.173 58.9469 148.055 60.1931C147.399 60.9215 146.618 60.9336 145.6 60.8794C147.024 60.2051 148.011 59.0432 147.849 57.4359C147.761 56.5148 147.518 55.702 147.062 54.9134C146.799 54.4498 146.043 53.7214 145.637 53.2759" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M145.6 52.7461C146.124 53.0652 146.924 53.4745 147.286 53.9923C147.724 54.5943 147.999 55.2505 148.242 55.9368C148.78 57.3636 149.173 58.9469 148.055 60.1931C147.399 60.9215 146.618 60.9336 145.6 60.8794C147.024 60.2051 148.011 59.0432 147.849 57.4359C147.761 56.5148 147.518 55.702 147.062 54.9134C146.799 54.4498 146.043 53.7214 145.637 53.2759" fill="white"/>
-<path d="M145.6 52.7461C146.124 53.0652 146.924 53.4745 147.286 53.9923C147.724 54.5943 147.999 55.2505 148.242 55.9368C148.78 57.3636 149.173 58.9469 148.055 60.1931C147.399 60.9215 146.618 60.9336 145.6 60.8794C147.024 60.2051 148.011 59.0432 147.849 57.4359C147.761 56.5148 147.518 55.702 147.062 54.9134C146.799 54.4498 146.043 53.7214 145.637 53.2759" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M145.281 56.1051C145.269 55.9486 145.225 55.786 145.063 55.7138C144.944 55.6717 144.832 55.7138 144.744 55.7981C144.5 56.0208 144.557 56.4001 144.788 56.6228C144.994 56.8215 145.238 56.7372 145.313 56.4844C145.388 56.1894 145.238 55.8703 144.95 55.7439C144.894 55.7319 144.85 55.7318 144.807 55.774C144.575 56.0931 144.557 56.7131 145.081 56.7553C145.125 56.7553 145.169 56.7252 145.181 56.683C145.281 56.4182 145.281 56.1352 145.106 55.9004C145.075 55.8583 144.988 55.8282 144.944 55.8884C144.813 56.0449 144.669 56.4362 144.988 56.4904C145.119 56.5024 145.175 56.3218 145.044 56.2917C144.913 56.2797 145.056 56.069 145.088 56.0268C145.031 56.0268 144.988 56.0148 144.925 56.0148C145.069 56.2135 145.056 56.4362 144.982 56.6589C145.013 56.6288 145.056 56.6168 145.081 56.5867C144.732 56.5566 144.85 56.081 144.982 55.9004C144.938 55.9125 144.882 55.9305 144.838 55.9305C145.013 56.0028 145.113 56.1412 145.113 56.3339C145.113 56.4181 145.1 56.6168 144.969 56.5446C144.794 56.4603 144.738 56.2074 144.807 56.0569C144.838 56.0148 144.894 55.9185 144.95 55.9305C145.038 55.9305 145.069 56.069 145.069 56.1412C145.106 56.2315 145.306 56.2315 145.281 56.1051Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M145.219 56.5988C145.55 56.641 145.744 56.8818 145.944 57.1045C146.15 57.3273 146.362 57.538 146.612 57.7066C147.137 58.0738 147.718 58.3507 148.312 58.5735C148.905 58.7842 149.418 58.9949 149.661 59.5969C149.867 60.0725 149.967 60.5902 150.055 61.1079C150.067 61.2344 150.273 61.1802 150.261 61.0538C150.174 60.5059 150.042 59.9762 149.824 59.4584C149.605 58.9708 149.243 58.7179 148.737 58.5193C148.056 58.2544 147.368 58.0015 146.762 57.5801C146.431 57.3574 146.194 57.0925 145.931 56.8095C145.744 56.5988 145.538 56.4604 145.263 56.4182C145.15 56.3881 145.088 56.5808 145.219 56.5988Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M144.769 55.5873C144.9 55.5873 144.9 55.3887 144.769 55.3887C144.638 55.3947 144.638 55.5873 144.769 55.5873Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M144.856 55.5873C145.119 55.2381 144.987 54.7083 144.987 54.2989C144.987 54.1725 144.781 54.1725 144.781 54.2989C144.781 54.6601 144.913 55.1779 144.681 55.4909C144.606 55.6053 144.781 55.7016 144.856 55.5873Z" fill="white" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M143.782 52.9022C143.145 52.848 142.564 53.1852 142.183 53.6607C141.764 54.2086 141.702 54.7685 141.833 55.4126C141.995 56.1953 142.208 56.996 142.633 57.7063C142.939 58.2361 143.376 58.7117 143.826 59.1211C144.263 59.5124 144.8 59.9157 145.413 59.9458C145.981 59.9759 146.444 59.5967 146.75 59.1753C147.1 58.6696 147.275 58.0555 147.3 57.4535C147.331 56.8213 147.156 56.2916 146.906 55.7196C146.587 55.0213 146.25 54.2206 145.644 53.7209C145.15 53.3356 144.451 52.8601 143.782 52.9022C143.651 52.9022 143.651 53.1129 143.782 53.1009C144.351 53.0587 144.932 53.45 145.35 53.7751C145.813 54.1424 146.119 54.618 146.369 55.1357C146.631 55.6534 146.937 56.2013 147.037 56.7612C147.137 57.309 147.093 57.8809 146.906 58.4107C146.731 58.9284 146.369 59.5003 145.819 59.711C145.25 59.9217 144.657 59.5726 144.232 59.2355C143.276 58.4769 142.608 57.4836 142.27 56.3518C142.052 55.6535 141.789 54.8407 142.127 54.1544C142.42 53.5403 143.045 53.0467 143.782 53.1189C143.913 53.1129 143.913 52.9142 143.782 52.9022Z" fill="white"/>
-<path d="M143.782 52.9022C143.145 52.848 142.564 53.1852 142.183 53.6607C141.764 54.2086 141.702 54.7685 141.833 55.4126C141.995 56.1953 142.208 56.996 142.633 57.7063C142.939 58.2361 143.376 58.7117 143.826 59.1211C144.263 59.5124 144.8 59.9157 145.413 59.9458C145.981 59.9759 146.444 59.5967 146.75 59.1753C147.1 58.6696 147.275 58.0555 147.3 57.4535C147.331 56.8213 147.156 56.2916 146.906 55.7196C146.587 55.0213 146.25 54.2206 145.644 53.7209C145.15 53.3356 144.451 52.8601 143.782 52.9022ZM143.782 52.9022C143.651 52.9022 143.651 53.1129 143.782 53.1009C144.351 53.0587 144.932 53.45 145.35 53.7751C145.813 54.1424 146.119 54.618 146.369 55.1357C146.631 55.6534 146.937 56.2013 147.037 56.7612C147.137 57.309 147.093 57.8809 146.906 58.4107C146.731 58.9284 146.369 59.5003 145.819 59.711C145.25 59.9217 144.657 59.5726 144.232 59.2355C143.276 58.4769 142.608 57.4836 142.27 56.3518C142.052 55.6535 141.789 54.8407 142.127 54.1544C142.42 53.5403 143.045 53.0467 143.782 53.1189C143.913 53.1129 143.913 52.9142 143.782 52.9022Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M143.782 52.9022C143.145 52.848 142.564 53.1852 142.183 53.6607C141.764 54.2086 141.702 54.7685 141.833 55.4126C141.995 56.1953 142.208 56.996 142.633 57.7063C142.939 58.2361 143.376 58.7117 143.826 59.1211C144.263 59.5124 144.8 59.9157 145.413 59.9458C145.981 59.9759 146.444 59.5967 146.75 59.1753C147.1 58.6696 147.275 58.0555 147.3 57.4535C147.331 56.8213 147.156 56.2916 146.906 55.7196C146.587 55.0213 146.25 54.2206 145.644 53.7209C145.15 53.3356 144.451 52.8601 143.782 52.9022ZM143.782 52.9022C143.651 52.9022 143.651 53.1129 143.782 53.1009C144.351 53.0587 144.932 53.45 145.35 53.7751C145.813 54.1424 146.119 54.618 146.369 55.1357C146.631 55.6534 146.937 56.2013 147.037 56.7612C147.137 57.309 147.093 57.8809 146.906 58.4107C146.731 58.9284 146.369 59.5003 145.819 59.711C145.25 59.9217 144.657 59.5726 144.232 59.2355C143.276 58.4769 142.608 57.4836 142.27 56.3518C142.052 55.6535 141.789 54.8407 142.127 54.1544C142.42 53.5403 143.045 53.0467 143.782 53.1189C143.913 53.1129 143.913 52.9142 143.782 52.9022Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M149.743 61.0895C148.755 60.656 148.393 63.329 149.861 63.4554C151.192 63.5818 151.267 61.1437 149.743 61.0895Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M149.742 61.9023C149.686 61.9023 149.667 61.9445 149.623 62.0167C149.548 62.2515 149.623 62.4381 149.898 62.396C149.973 62.1672 149.885 61.9144 149.742 61.9023Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M149.855 41.5242C150.261 41.452 150.929 41.5543 151.323 41.4098C152.066 41.157 151.629 40.4707 151.192 40.0673C150.161 39.1041 149.155 39.6339 147.937 39.7482C147.905 40.3202 147.574 42.9269 148.561 42.8125C148.574 42.5597 148.318 41.5242 148.53 41.3556C148.867 41.0907 149.667 42.3309 149.855 41.5242Z" fill="#DA3635" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M145.362 47.8875C145.419 49.2722 144.969 50.7832 144.725 52.1257C144.607 52.6977 144.307 53.4261 144.375 54.0161C144.538 55.4308 145.131 53.2455 145.612 53.7813C145.787 53.3478 145.569 52.7157 145.556 52.2401C145.525 51.5418 145.612 51.0361 145.875 50.3919C146.106 49.8019 146.556 49.1578 146.687 48.5437C146.831 47.8032 146.075 47.7852 145.437 47.7852" fill="white"/>
-<path d="M145.362 47.8875C145.419 49.2722 144.969 50.7832 144.725 52.1257C144.607 52.6977 144.307 53.4261 144.375 54.0161C144.538 55.4308 145.131 53.2455 145.612 53.7813C145.787 53.3478 145.569 52.7157 145.556 52.2401C145.525 51.5418 145.612 51.0361 145.875 50.3919C146.106 49.8019 146.556 49.1578 146.687 48.5437C146.831 47.8032 146.075 47.7852 145.437 47.7852" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M145.362 47.8875C145.419 49.2722 144.969 50.7832 144.725 52.1257C144.607 52.6977 144.307 53.4261 144.375 54.0161C144.538 55.4308 145.131 53.2455 145.612 53.7813C145.787 53.3478 145.569 52.7157 145.556 52.2401C145.525 51.5418 145.612 51.0361 145.875 50.3919C146.106 49.8019 146.556 49.1578 146.687 48.5437C146.831 47.8032 146.075 47.7852 145.437 47.7852" fill="white"/>
-<path d="M145.362 47.8875C145.419 49.2722 144.969 50.7832 144.725 52.1257C144.607 52.6977 144.307 53.4261 144.375 54.0161C144.538 55.4308 145.131 53.2455 145.612 53.7813C145.787 53.3478 145.569 52.7157 145.556 52.2401C145.525 51.5418 145.612 51.0361 145.875 50.3919C146.106 49.8019 146.556 49.1578 146.687 48.5437C146.831 47.8032 146.075 47.7852 145.437 47.7852" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M151.204 55.1542C151.204 56.5388 151.423 57.8693 151.379 59.2539C151.367 59.6031 151.479 59.856 151.117 59.9944C150.711 60.151 150.373 59.7837 150.273 59.4767C150.086 58.8747 150.217 57.8512 150.217 57.2251C150.217 56.8458 150.03 55.8947 150.117 55.5575C150.217 55.2084 150.773 54.3535 151.06 54.8291" fill="white"/>
-<path d="M151.204 55.1542C151.204 56.5388 151.423 57.8693 151.379 59.2539C151.367 59.6031 151.479 59.856 151.117 59.9944C150.711 60.151 150.373 59.7837 150.273 59.4767C150.086 58.8747 150.217 57.8512 150.217 57.2251C150.217 56.8458 150.03 55.8947 150.117 55.5575C150.217 55.2084 150.773 54.3535 151.06 54.8291" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M151.204 55.1542C151.204 56.5388 151.423 57.8693 151.379 59.2539C151.367 59.6031 151.479 59.856 151.117 59.9944C150.711 60.151 150.373 59.7837 150.273 59.4767C150.086 58.8747 150.217 57.8512 150.217 57.2251C150.217 56.8458 150.03 55.8947 150.117 55.5575C150.217 55.2084 150.773 54.3535 151.06 54.8291" fill="white"/>
-<path d="M151.204 55.1542C151.204 56.5388 151.423 57.8693 151.379 59.2539C151.367 59.6031 151.479 59.856 151.117 59.9944C150.711 60.151 150.373 59.7837 150.273 59.4767C150.086 58.8747 150.217 57.8512 150.217 57.2251C150.217 56.8458 150.03 55.8947 150.117 55.5575C150.217 55.2084 150.773 54.3535 151.06 54.8291" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M152.11 53.6726C151.648 53.8532 152.198 55.8579 152.254 56.2613C152.31 56.6225 152.398 56.9475 152.529 57.2967C152.629 57.5797 152.629 58.1636 152.773 58.3864C152.96 58.6693 153.541 58.7356 153.772 58.5128C154.035 58.26 154.047 58.6392 154.047 58.3141C154.047 57.4713 153.916 55.6833 153.828 54.8585C153.772 54.3107 153.579 52.5769 153.016 52.4625C152.473 52.3542 152.529 53.4619 152.11 53.6726Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M154.996 58.2902C155.227 58.2902 155.621 58.1758 155.783 58.3444C155.871 58.4588 155.827 58.9584 155.871 59.2233C155.902 59.4461 156.033 59.7832 155.946 60.0059C155.89 60.1324 155.99 60.313 155.902 60.4274C155.771 60.626 155.571 60.8307 155.309 60.6802C155.209 60.608 154.99 60.5418 154.977 60.4454C154.946 60.2648 155.052 60.1384 155.065 59.9277C155.121 59.3678 154.934 58.7959 154.99 58.248" fill="white"/>
-<path d="M154.996 58.2902C155.227 58.2902 155.621 58.1758 155.783 58.3444C155.871 58.4588 155.827 58.9584 155.871 59.2233C155.902 59.4461 156.033 59.7832 155.946 60.0059C155.89 60.1324 155.99 60.313 155.902 60.4274C155.771 60.626 155.571 60.8307 155.309 60.6802C155.209 60.608 154.99 60.5418 154.977 60.4454C154.946 60.2648 155.052 60.1384 155.065 59.9277C155.121 59.3678 154.934 58.7959 154.99 58.248" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M154.996 58.2902C155.227 58.2902 155.621 58.1758 155.783 58.3444C155.871 58.4588 155.827 58.9584 155.871 59.2233C155.902 59.4461 156.033 59.7832 155.946 60.0059C155.89 60.1324 155.99 60.313 155.902 60.4274C155.771 60.626 155.571 60.8307 155.309 60.6802C155.209 60.608 154.99 60.5418 154.977 60.4454C154.946 60.2648 155.052 60.1384 155.065 59.9277C155.121 59.3678 154.934 58.7959 154.99 58.248" fill="white"/>
-<path d="M154.996 58.2902C155.227 58.2902 155.621 58.1758 155.783 58.3444C155.871 58.4588 155.827 58.9584 155.871 59.2233C155.902 59.4461 156.033 59.7832 155.946 60.0059C155.89 60.1324 155.99 60.313 155.902 60.4274C155.771 60.626 155.571 60.8307 155.309 60.6802C155.209 60.608 154.99 60.5418 154.977 60.4454C154.946 60.2648 155.052 60.1384 155.065 59.9277C155.121 59.3678 154.934 58.7959 154.99 58.248" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M154.997 58.4706C155.39 58.4706 155.784 59.3676 155.809 59.789C155.821 59.9455 155.734 60.5295 155.621 60.6319C155.39 60.8426 155.053 60.4091 154.94 60.4513C156.496 62.2453 156.19 56.9354 154.984 58.1274" fill="white"/>
-<path d="M154.997 58.4706C155.39 58.4706 155.784 59.3676 155.809 59.789C155.821 59.9455 155.734 60.5295 155.621 60.6319C155.39 60.8426 155.053 60.4091 154.94 60.4513C156.496 62.2453 156.19 56.9354 154.984 58.1274" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M154.997 58.4706C155.39 58.4706 155.784 59.3676 155.809 59.789C155.821 59.9455 155.734 60.5295 155.621 60.6319C155.39 60.8426 155.053 60.4091 154.94 60.4513C156.496 62.2453 156.19 56.9354 154.984 58.1274" fill="white"/>
-<path d="M154.997 58.4706C155.39 58.4706 155.784 59.3676 155.809 59.789C155.821 59.9455 155.734 60.5295 155.621 60.6319C155.39 60.8426 155.053 60.4091 154.94 60.4513C156.496 62.2453 156.19 56.9354 154.984 58.1274" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M152.947 59.2535C152.684 59.5063 152.016 59.6568 151.654 59.8013C151.379 59.9157 151.116 59.9699 150.841 60.0963C150.404 60.295 149.998 60.5599 149.592 60.7826C150.317 61.2161 150.898 61.9746 151.541 61.9987C152.253 62.0408 153.04 61.5773 153.678 61.198C154.084 60.9452 155.158 60.1926 155.346 59.6448C155.49 59.2234 153.69 58.23 153.415 58.8622" fill="white"/>
-<path d="M152.947 59.2535C152.684 59.5063 152.016 59.6568 151.654 59.8013C151.379 59.9157 151.116 59.9699 150.841 60.0963C150.404 60.295 149.998 60.5599 149.592 60.7826C150.317 61.2161 150.898 61.9746 151.541 61.9987C152.253 62.0408 153.04 61.5773 153.678 61.198C154.084 60.9452 155.158 60.1926 155.346 59.6448C155.49 59.2234 153.69 58.23 153.415 58.8622" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M152.947 59.2535C152.684 59.5063 152.016 59.6568 151.654 59.8013C151.379 59.9157 151.116 59.9699 150.841 60.0963C150.404 60.295 149.998 60.5599 149.592 60.7826C150.317 61.2161 150.898 61.9746 151.541 61.9987C152.253 62.0408 153.04 61.5773 153.678 61.198C154.084 60.9452 155.158 60.1926 155.346 59.6448C155.49 59.2234 153.69 58.23 153.415 58.8622" fill="white"/>
-<path d="M152.947 59.2535C152.684 59.5063 152.016 59.6568 151.654 59.8013C151.379 59.9157 151.116 59.9699 150.841 60.0963C150.404 60.295 149.998 60.5599 149.592 60.7826C150.317 61.2161 150.898 61.9746 151.541 61.9987C152.253 62.0408 153.04 61.5773 153.678 61.198C154.084 60.9452 155.158 60.1926 155.346 59.6448C155.49 59.2234 153.69 58.23 153.415 58.8622" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M152.935 58.5857C152.773 59.2298 154.478 60.2232 155.184 59.8319C155.722 59.5369 155.053 58.7663 154.634 58.5134C154.285 58.2907 152.779 58.375 152.935 58.5857Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M150.448 59.8738C150.142 60.53 150.635 60.9093 151.247 61.2344C151.51 61.3729 152.859 61.8364 153.134 61.6799C153.79 61.3187 152.366 60.4879 152.103 60.3073C151.872 60.1387 151.579 59.6932 151.435 59.6511C151.291 59.6089 150.448 59.8196 150.329 59.8196" fill="white"/>
-<path d="M150.448 59.8738C150.142 60.53 150.635 60.9093 151.247 61.2344C151.51 61.3729 152.859 61.8364 153.134 61.6799C153.79 61.3187 152.366 60.4879 152.103 60.3073C151.872 60.1387 151.579 59.6932 151.435 59.6511C151.291 59.6089 150.448 59.8196 150.329 59.8196" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M150.448 59.8738C150.142 60.53 150.635 60.9093 151.247 61.2344C151.51 61.3729 152.859 61.8364 153.134 61.6799C153.79 61.3187 152.366 60.4879 152.103 60.3073C151.872 60.1387 151.579 59.6932 151.435 59.6511C151.291 59.6089 150.448 59.8196 150.329 59.8196" fill="white"/>
-<path d="M150.448 59.8738C150.142 60.53 150.635 60.9093 151.247 61.2344C151.51 61.3729 152.859 61.8364 153.134 61.6799C153.79 61.3187 152.366 60.4879 152.103 60.3073C151.872 60.1387 151.579 59.6932 151.435 59.6511C151.291 59.6089 150.448 59.8196 150.329 59.8196" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M151.073 50.1034C151.467 50.5669 152.16 50.7054 152.585 51.1268C152.904 51.4459 153.166 51.8131 153.485 52.1322C153.76 52.4091 154.122 52.6499 154.341 52.987C154.603 53.3784 154.591 53.8539 154.591 54.3055C154.603 54.8232 154.591 55.3409 154.591 55.8587C154.591 56.3644 154.547 56.8641 154.578 57.3698C154.591 57.7912 154.841 58.0681 154.941 58.4594C154.972 58.4474 154.997 58.4293 155.04 58.4173C154.965 58.2487 154.866 58.0982 154.778 57.9537C154.634 57.7009 154.603 57.4902 154.647 57.2132C154.703 56.7677 154.734 56.3042 154.734 55.8406C154.734 55.365 154.734 54.8774 154.703 54.3958C154.672 54.0346 154.691 53.5951 154.541 53.2459C154.422 52.9509 154.147 52.7161 153.947 52.4753C153.61 52.084 153.279 51.6927 152.941 51.3014C152.46 50.7114 151.81 50.3622 151.123 50.0131C151.073 49.989 151.017 50.0733 151.073 50.1034C151.404 50.2719 151.729 50.4224 152.029 50.6211C152.41 50.8559 152.666 51.1268 152.948 51.4639C153.254 51.8251 153.56 52.1924 153.866 52.5415C154.16 52.8606 154.447 53.1436 154.522 53.5891C154.666 54.5282 154.653 55.5095 154.622 56.4426C154.609 56.8038 154.478 57.2253 154.534 57.5925C154.591 57.9116 154.841 58.1524 154.972 58.4474C154.984 58.5015 155.09 58.4594 155.072 58.4052C155.028 58.2246 154.941 58.0861 154.853 57.9176C154.709 57.6346 154.709 57.3457 154.709 57.0386C154.709 56.5329 154.722 56.0332 154.722 55.5275C154.722 54.9677 154.722 54.4078 154.709 53.8479C154.697 53.5289 154.653 53.2038 154.466 52.9269C154.278 52.6499 154.003 52.4392 153.753 52.2104C153.404 51.8914 153.116 51.5241 152.798 51.175C152.566 50.9402 152.348 50.7716 152.042 50.6151C151.754 50.4465 151.373 50.296 151.154 50.0251C151.104 49.989 151.03 50.0612 151.073 50.1034Z" fill="white"/>
-<path d="M151.073 50.1034C151.467 50.5669 152.16 50.7054 152.585 51.1268C152.904 51.4459 153.166 51.8131 153.485 52.1322C153.76 52.4091 154.122 52.6499 154.341 52.987C154.603 53.3784 154.591 53.8539 154.591 54.3055C154.603 54.8232 154.591 55.3409 154.591 55.8587C154.591 56.3644 154.547 56.8641 154.578 57.3698C154.591 57.7912 154.841 58.0681 154.941 58.4594C154.972 58.4474 154.997 58.4293 155.04 58.4173C154.965 58.2487 154.866 58.0982 154.778 57.9537C154.634 57.7009 154.603 57.4902 154.647 57.2132C154.703 56.7677 154.734 56.3042 154.734 55.8406C154.734 55.365 154.734 54.8774 154.703 54.3958C154.672 54.0346 154.691 53.5951 154.541 53.2459C154.422 52.9509 154.147 52.7161 153.947 52.4753C153.61 52.084 153.279 51.6927 152.941 51.3014C152.46 50.7114 151.81 50.3622 151.123 50.0131C151.073 49.989 151.017 50.0733 151.073 50.1034ZM151.073 50.1034C151.404 50.2719 151.729 50.4224 152.029 50.6211C152.41 50.8559 152.666 51.1268 152.948 51.4639C153.254 51.8251 153.56 52.1924 153.866 52.5415C154.16 52.8606 154.447 53.1436 154.522 53.5891C154.666 54.5282 154.653 55.5095 154.622 56.4426C154.609 56.8038 154.478 57.2253 154.534 57.5925C154.591 57.9116 154.841 58.1524 154.972 58.4474C154.984 58.5015 155.09 58.4594 155.072 58.4052C155.028 58.2246 154.941 58.0861 154.853 57.9176C154.709 57.6346 154.709 57.3457 154.709 57.0386C154.709 56.5329 154.722 56.0332 154.722 55.5275C154.722 54.9677 154.722 54.4078 154.709 53.8479C154.697 53.5289 154.653 53.2038 154.466 52.9269C154.278 52.6499 154.003 52.4392 153.753 52.2104C153.404 51.8914 153.116 51.5241 152.798 51.175C152.566 50.9402 152.348 50.7716 152.042 50.6151C151.754 50.4465 151.373 50.296 151.154 50.0251C151.104 49.989 151.03 50.0612 151.073 50.1034Z" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M151.073 50.1034C151.467 50.5669 152.16 50.7054 152.585 51.1268C152.904 51.4459 153.166 51.8131 153.485 52.1322C153.76 52.4091 154.122 52.6499 154.341 52.987C154.603 53.3784 154.591 53.8539 154.591 54.3055C154.603 54.8232 154.591 55.3409 154.591 55.8587C154.591 56.3644 154.547 56.8641 154.578 57.3698C154.591 57.7912 154.841 58.0681 154.941 58.4594C154.972 58.4474 154.997 58.4293 155.04 58.4173C154.965 58.2487 154.866 58.0982 154.778 57.9537C154.634 57.7009 154.603 57.4902 154.647 57.2132C154.703 56.7677 154.734 56.3042 154.734 55.8406C154.734 55.365 154.734 54.8774 154.703 54.3958C154.672 54.0346 154.691 53.5951 154.541 53.2459C154.422 52.9509 154.147 52.7161 153.947 52.4753C153.61 52.084 153.279 51.6927 152.941 51.3014C152.46 50.7114 151.81 50.3622 151.123 50.0131C151.073 49.989 151.017 50.0733 151.073 50.1034C151.404 50.2719 151.729 50.4224 152.029 50.6211C152.41 50.8559 152.666 51.1268 152.948 51.4639C153.254 51.8251 153.56 52.1924 153.866 52.5415C154.16 52.8606 154.447 53.1436 154.522 53.5891C154.666 54.5282 154.653 55.5095 154.622 56.4426C154.609 56.8038 154.478 57.2253 154.534 57.5925C154.591 57.9116 154.841 58.1524 154.972 58.4474C154.984 58.5015 155.09 58.4594 155.072 58.4052C155.028 58.2246 154.941 58.0861 154.853 57.9176C154.709 57.6346 154.709 57.3457 154.709 57.0386C154.709 56.5329 154.722 56.0332 154.722 55.5275C154.722 54.9677 154.722 54.4078 154.709 53.8479C154.697 53.5289 154.653 53.2038 154.466 52.9269C154.278 52.6499 154.003 52.4392 153.753 52.2104C153.404 51.8914 153.116 51.5241 152.798 51.175C152.566 50.9402 152.348 50.7716 152.042 50.6151C151.754 50.4465 151.373 50.296 151.154 50.0251C151.104 49.989 151.03 50.0612 151.073 50.1034Z" fill="white"/>
-<path d="M151.073 50.1034C151.467 50.5669 152.16 50.7054 152.585 51.1268C152.904 51.4459 153.166 51.8131 153.485 52.1322C153.76 52.4091 154.122 52.6499 154.341 52.987C154.603 53.3784 154.591 53.8539 154.591 54.3055C154.603 54.8232 154.591 55.3409 154.591 55.8587C154.591 56.3644 154.547 56.8641 154.578 57.3698C154.591 57.7912 154.841 58.0681 154.941 58.4594C154.972 58.4474 154.997 58.4293 155.04 58.4173C154.965 58.2487 154.866 58.0982 154.778 57.9537C154.634 57.7009 154.603 57.4902 154.647 57.2132C154.703 56.7677 154.734 56.3042 154.734 55.8406C154.734 55.365 154.734 54.8774 154.703 54.3958C154.672 54.0346 154.691 53.5951 154.541 53.2459C154.422 52.9509 154.147 52.7161 153.947 52.4753C153.61 52.084 153.279 51.6927 152.941 51.3014C152.46 50.7114 151.81 50.3622 151.123 50.0131C151.073 49.989 151.017 50.0733 151.073 50.1034ZM151.073 50.1034C151.404 50.2719 151.729 50.4224 152.029 50.6211C152.41 50.8559 152.666 51.1268 152.948 51.4639C153.254 51.8251 153.56 52.1924 153.866 52.5415C154.16 52.8606 154.447 53.1436 154.522 53.5891C154.666 54.5282 154.653 55.5095 154.622 56.4426C154.609 56.8038 154.478 57.2253 154.534 57.5925C154.591 57.9116 154.841 58.1524 154.972 58.4474C154.984 58.5015 155.09 58.4594 155.072 58.4052C155.028 58.2246 154.941 58.0861 154.853 57.9176C154.709 57.6346 154.709 57.3457 154.709 57.0386C154.709 56.5329 154.722 56.0332 154.722 55.5275C154.722 54.9677 154.722 54.4078 154.709 53.8479C154.697 53.5289 154.653 53.2038 154.466 52.9269C154.278 52.6499 154.003 52.4392 153.753 52.2104C153.404 51.8914 153.116 51.5241 152.798 51.175C152.566 50.9402 152.348 50.7716 152.042 50.6151C151.754 50.4465 151.373 50.296 151.154 50.0251C151.104 49.989 151.03 50.0612 151.073 50.1034Z" stroke="#DA3635" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M150.555 43.5645C151.673 43.4381 152.648 44.6963 152.329 45.7498C152.154 46.3398 151.454 46.0569 151.211 46.5084C150.992 46.9117 151.255 47.893 151.267 48.3445C151.323 49.4944 151.123 50.8369 150.249 51.6617C149.293 52.6008 147.825 52.3179 146.588 52.1373C145.632 51.9988 145.338 52.8356 145.601 50.9212C145.744 49.8556 146.388 49.1031 146.588 48.0917C146.213 47.893 145.875 48.2061 145.544 47.9532C145.169 47.6582 145.413 47.0984 145.532 46.6769C145.807 45.7137 146.319 45.0274 147.1 44.3833C147.419 44.1184 147.812 43.8354 148.249 43.8775C148.874 43.9498 148.918 44.6903 149.38 44.8287C149.993 45.0093 149.774 44.2267 149.993 43.9317C150.217 43.6367 150.174 43.5223 150.555 43.5645Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M150.991 50.5244C151.572 51.3251 153.928 52.2161 153.709 53.3961C153.565 54.2208 152.578 54.3172 151.953 54.0402C151.285 53.7212 150.66 53.1733 149.892 53.1974C150.285 53.6188 151.185 54.1486 151.316 54.7506C151.416 55.2563 150.591 55.6597 150.079 55.7861C149.729 55.3526 149.542 54.8229 149.048 54.4556C148.63 54.1486 148.061 53.9921 147.58 53.8235C146.78 53.5285 145.387 53.2095 145.531 52.1017C145.587 51.6562 146.387 51.7826 146.924 51.879C147.461 51.9753 147.88 52.1318 148.448 52.0897C149.086 52.0475 149.611 51.9211 150.104 51.5178C150.435 51.2529 150.466 50.9037 150.947 50.6087" fill="white"/>
-<path d="M150.991 50.5244C151.572 51.3251 153.928 52.2161 153.709 53.3961C153.565 54.2208 152.578 54.3172 151.953 54.0402C151.285 53.7212 150.66 53.1733 149.892 53.1974C150.285 53.6188 151.185 54.1486 151.316 54.7506C151.416 55.2563 150.591 55.6597 150.079 55.7861C149.729 55.3526 149.542 54.8229 149.048 54.4556C148.63 54.1486 148.061 53.9921 147.58 53.8235C146.78 53.5285 145.387 53.2095 145.531 52.1017C145.587 51.6562 146.387 51.7826 146.924 51.879C147.461 51.9753 147.88 52.1318 148.448 52.0897C149.086 52.0475 149.611 51.9211 150.104 51.5178C150.435 51.2529 150.466 50.9037 150.947 50.6087" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M150.991 50.5244C151.572 51.3251 153.928 52.2161 153.709 53.3961C153.565 54.2208 152.578 54.3172 151.953 54.0402C151.285 53.7212 150.66 53.1733 149.892 53.1974C150.285 53.6188 151.185 54.1486 151.316 54.7506C151.416 55.2563 150.591 55.6597 150.079 55.7861C149.729 55.3526 149.542 54.8229 149.048 54.4556C148.63 54.1486 148.061 53.9921 147.58 53.8235C146.78 53.5285 145.387 53.2095 145.531 52.1017C145.587 51.6562 146.387 51.7826 146.924 51.879C147.461 51.9753 147.88 52.1318 148.448 52.0897C149.086 52.0475 149.611 51.9211 150.104 51.5178C150.435 51.2529 150.466 50.9037 150.947 50.6087" fill="white"/>
-<path d="M150.991 50.5244C151.572 51.3251 153.928 52.2161 153.709 53.3961C153.565 54.2208 152.578 54.3172 151.953 54.0402C151.285 53.7212 150.66 53.1733 149.892 53.1974C150.285 53.6188 151.185 54.1486 151.316 54.7506C151.416 55.2563 150.591 55.6597 150.079 55.7861C149.729 55.3526 149.542 54.8229 149.048 54.4556C148.63 54.1486 148.061 53.9921 147.58 53.8235C146.78 53.5285 145.387 53.2095 145.531 52.1017C145.587 51.6562 146.387 51.7826 146.924 51.879C147.461 51.9753 147.88 52.1318 148.448 52.0897C149.086 52.0475 149.611 51.9211 150.104 51.5178C150.435 51.2529 150.466 50.9037 150.947 50.6087" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-<path d="M149.48 61.0475C150.642 60.9331 151.454 63.1907 150.148 63.4014C150.092 63.4134 150.117 63.5158 150.18 63.4977C151.604 63.275 150.761 60.8368 149.499 60.9512C149.405 60.9632 149.405 61.0595 149.48 61.0475Z" fill="white" stroke="#706F6F" stroke-miterlimit="10" stroke-linejoin="round"/>
-</svg>
diff --git a/src/assets/ico/sprite.svg b/src/assets/ico/sprite.svg
index c3dbc3c0e..de3f6117e 100644
--- a/src/assets/ico/sprite.svg
+++ b/src/assets/ico/sprite.svg
@@ -2719,4 +2719,10 @@
     <path d="M6 16L12.5 9L19 16" stroke="black" stroke-linecap="round" stroke-linejoin="round" />
   </symbol>
 
-</svg>
+  <symbol id="appointement" width="20" height="21" viewBox="0 0 20 21" fill="none" xmlns="http://www.w3.org/2000/svg">
+    <path
+      d="M15.8333 3.83366H15V3.00033C15 2.54199 14.625 2.16699 14.1667 2.16699C13.7083 2.16699 13.3333 2.54199 13.3333 3.00033V3.83366H6.66667V3.00033C6.66667 2.54199 6.29167 2.16699 5.83333 2.16699C5.375 2.16699 5 2.54199 5 3.00033V3.83366H4.16667C3.24167 3.83366 2.50833 4.58366 2.50833 5.50033L2.5 17.167C2.5 18.0837 3.24167 18.8337 4.16667 18.8337H15.8333C16.75 18.8337 17.5 18.0837 17.5 17.167V5.50033C17.5 4.58366 16.75 3.83366 15.8333 3.83366ZM15.8333 16.3337C15.8333 16.792 15.4583 17.167 15 17.167H5C4.54167 17.167 4.16667 16.792 4.16667 16.3337V8.00033H15.8333V16.3337ZM5.83333 9.66699H7.5V11.3337H5.83333V9.66699ZM9.16667 9.66699H10.8333V11.3337H9.16667V9.66699ZM12.5 9.66699H14.1667V11.3337H12.5V9.66699Z"
+      fill="white" />
+  </symbol>
+
+</svg>
\ No newline at end of file
-- 
GitLab


From f144431603bae37bfa4985f811456cec3804e79a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20PAILHAREY?= <rpailharey@grandlyon.com>
Date: Mon, 24 Jul 2023 07:50:03 +0000
Subject: [PATCH 03/19] fix(onboarding): personal information step title

---
 .../account-info/account-info.component.html         | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/app/form/form-view/account-form/account-info/account-info.component.html b/src/app/form/form-view/account-form/account-info/account-info.component.html
index c40343735..e625eb587 100644
--- a/src/app/form/form-view/account-form/account-info/account-info.component.html
+++ b/src/app/form/form-view/account-form/account-info/account-info.component.html
@@ -1,9 +1,13 @@
 <form *ngIf="accountForm && !profile" [formGroup]="accountForm">
   <div class="title">
-    <h3>Qui êtes-vous&nbsp;?</h3>
+    <h3>Informations personnelles</h3>
+    <p>
+      Vos informations seront référencées en tant que professionnel·le dans l'annuaire Rés'in pour les
+      utilisateur·trices connecté·e·s.
+    </p>
   </div>
   <div class="form-group" fxLayout="column">
-    <label for="name">Prénom</label>
+    <label for="name">Votre prénom</label>
     <div fxLayout="row" fxLayoutGap="13px">
       <input type="text" formControlName="name" class="form-input" (input)="setValidationsForm()" />
       <app-svg-icon *ngIf="accountForm.get('name').valid" [iconClass]="'icon-26'" [type]="'form'" [icon]="'validate'" />
@@ -16,7 +20,7 @@
     </div>
   </div>
   <div class="form-group" fxLayout="column">
-    <label for="surname">Nom</label>
+    <label for="surname">Votre nom</label>
     <div fxLayout="row" fxLayoutGap="13px">
       <input type="text" formControlName="surname" class="form-input" (input)="setValidationsForm()" />
       <app-svg-icon
@@ -34,7 +38,7 @@
     </div>
   </div>
   <div class="form-group" fxLayout="column">
-    <label for="phone">Téléphone</label>
+    <label for="phone">Votre téléphone</label>
     <div fxLayout="row" fxLayoutGap="13px">
       <input
         type="text"
-- 
GitLab


From 4ec3eef8478907bb666373a4a2aae1017915ac38 Mon Sep 17 00:00:00 2001
From: hnouts <hnouts@grandlyon.com>
Date: Tue, 25 Jul 2023 15:31:27 +0200
Subject: [PATCH 04/19] debugger vscode

launch app on local (npm run start) then launch debugger (f5)
---
 .vscode/launch.json | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)
 create mode 100644 .vscode/launch.json

diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 000000000..0225cccac
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,22 @@
+{
+    // Use IntelliSense to learn about possible attributes.
+    // Hover to view descriptions of existing attributes.
+    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "name": "npm start",
+            "type": "chrome",
+            "request": "launch",
+            "url": "http://localhost:4200/#",
+            "webRoot": "${workspaceFolder}",
+            "sourceMapPathOverrides": {
+              "webpack:/*": "${webRoot}/*",
+              "/./*": "${webRoot}/*",
+              "/src/*": "${webRoot}/*",
+              "/*": "*",
+              "/./~/*": "${webRoot}/node_modules/*"
+            }
+          }
+    ]
+}
\ No newline at end of file
-- 
GitLab


From 70937f127c1b174c5decae453d9dc0ce83565f00 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20PAILHAREY?= <rpailharey@grandlyon.com>
Date: Wed, 26 Jul 2023 08:56:31 +0000
Subject: [PATCH 05/19] feat(profile): manage newsletter subscription

---
 .../form/footer-form/footer-form.component.ts |  2 +-
 ...ription-model.ts => subscription.model.ts} |  0
 .../newsletter-subscription.component.ts      |  4 +-
 .../profile-newsletter.component.html         | 18 +++++
 .../profile-newsletter.component.ts           | 72 +++++++++++++++++++
 src/app/profile/profile.component.html        | 12 ++--
 src/app/profile/profile.module.ts             |  2 +
 src/app/services/newsletter.service.ts        | 13 ++--
 8 files changed, 111 insertions(+), 12 deletions(-)
 rename src/app/models/{subscription-model.ts => subscription.model.ts} (100%)
 create mode 100644 src/app/profile/profile-newsletter/profile-newsletter.component.html
 create mode 100644 src/app/profile/profile-newsletter/profile-newsletter.component.ts

diff --git a/src/app/form/footer-form/footer-form.component.ts b/src/app/form/footer-form/footer-form.component.ts
index aa480e01c..a4de65a11 100644
--- a/src/app/form/footer-form/footer-form.component.ts
+++ b/src/app/form/footer-form/footer-form.component.ts
@@ -135,7 +135,7 @@ export class FooterFormComponent implements OnChanges {
       try {
         await firstValueFrom(this.authService.register(user));
         if (this.acceptNewsletter) {
-          this.newsletterService.newsletterSubscribe(user.email);
+          this.newsletterService.subscribe(user.email);
         }
         document.getElementsByClassName('page')[0].scrollTo(0, 0);
         this.changeCurrentStep.emit(accountFormStep.confirmEmailSentInfo);
diff --git a/src/app/models/subscription-model.ts b/src/app/models/subscription.model.ts
similarity index 100%
rename from src/app/models/subscription-model.ts
rename to src/app/models/subscription.model.ts
diff --git a/src/app/newsletter-subscription/newsletter-subscription.component.ts b/src/app/newsletter-subscription/newsletter-subscription.component.ts
index 3a2b4c566..b8b38399d 100644
--- a/src/app/newsletter-subscription/newsletter-subscription.component.ts
+++ b/src/app/newsletter-subscription/newsletter-subscription.component.ts
@@ -50,7 +50,7 @@ export class NewsletterSubscriptionComponent implements OnInit {
     }
     this.loading = true;
     if (this.subscriptionMod) {
-      await lastValueFrom(this.newsletterService.newsletterSubscribe(this.f.email.value))
+      await lastValueFrom(this.newsletterService.subscribe(this.f.email.value))
         .then(() => {
           this.notificationService.showSuccess(`L'email ${this.f.email.value} a bien été ajouté à la newsletter`);
           this.router.navigate(['']);
@@ -70,7 +70,7 @@ export class NewsletterSubscriptionComponent implements OnInit {
         });
     }
     if (!this.subscriptionMod) {
-      await lastValueFrom(this.newsletterService.newsletterUnsubscribe(this.f.email.value))
+      await lastValueFrom(this.newsletterService.unsubscribe(this.f.email.value))
         .then(() => {
           this.notificationService.showSuccess(`L'email ${this.f.email.value} a bien été retiré de la newsletter`);
           this.router.navigate(['']);
diff --git a/src/app/profile/profile-newsletter/profile-newsletter.component.html b/src/app/profile/profile-newsletter/profile-newsletter.component.html
new file mode 100644
index 000000000..81011d3fc
--- /dev/null
+++ b/src/app/profile/profile-newsletter/profile-newsletter.component.html
@@ -0,0 +1,18 @@
+<div *ngIf="isSubscribed">
+  <p>Vous êtes abonné·e à la newsletter Rés'in.</p>
+  <app-button
+    [text]="'Me désabonner de la newsletter'"
+    [style]="buttonTypeEnum.Secondary"
+    [disabled]="isLoading"
+    (click)="handleUnsubscribe()"
+  />
+</div>
+<div *ngIf="!isSubscribed">
+  <p>Vous n’êtes pas encore abonné·e à la newsletter Rés'in.</p>
+  <app-button
+    [text]="'M\'abonner à la newsletter'"
+    [style]="buttonTypeEnum.Primary"
+    [disabled]="isLoading"
+    (click)="handleSubscribe()"
+  />
+</div>
diff --git a/src/app/profile/profile-newsletter/profile-newsletter.component.ts b/src/app/profile/profile-newsletter/profile-newsletter.component.ts
new file mode 100644
index 000000000..4594eddb6
--- /dev/null
+++ b/src/app/profile/profile-newsletter/profile-newsletter.component.ts
@@ -0,0 +1,72 @@
+import { Component, Input, OnInit } from '@angular/core';
+import { NewsletterService } from '../../services/newsletter.service';
+import { NotificationService } from '../../services/notification.service';
+import { ButtonType } from '../../shared/components/button/buttonType.enum';
+
+@Component({
+  selector: 'app-profile-newsletter',
+  templateUrl: './profile-newsletter.component.html',
+})
+export class ProfileNewsletterComponent implements OnInit {
+  @Input() public userEmail: string;
+  public buttonTypeEnum = ButtonType;
+  public isSubscribed = false;
+  public isLoading = true;
+
+  constructor(private newsletterService: NewsletterService, private notificationService: NotificationService) {}
+
+  ngOnInit(): void {
+    this.newsletterService.find(this.userEmail).subscribe({
+      next: (result) => {
+        this.isSubscribed = result !== null;
+        this.isLoading = false;
+      },
+    });
+  }
+
+  public handleSubscribe() {
+    this.isLoading = true;
+    this.newsletterService.subscribe(this.userEmail).subscribe({
+      next: (result) => {
+        this.notificationService.showSuccess(`L'email ${result.email} a bien été ajouté à la newsletter`);
+        this.isSubscribed = true;
+        this.isLoading = false;
+      },
+      error: (error) => {
+        if (error.status === 418) {
+          this.notificationService.showError(
+            "Merci de vérifier l'email que vous souhaitez inscrire",
+            `L'email ${this.userEmail} semble factice ou invalide`
+          );
+        } else {
+          this.notificationService.showErrorPleaseRetry(`L'email ${this.userEmail} n'a pu être ajouté à la newsletter`);
+        }
+        this.isLoading = false;
+      },
+    });
+  }
+
+  public handleUnsubscribe() {
+    this.isLoading = true;
+    this.newsletterService.unsubscribe(this.userEmail).subscribe({
+      next: (result) => {
+        this.notificationService.showSuccess(`L'email ${result.email} a bien été retiré à la newsletter`);
+        this.isSubscribed = false;
+        this.isLoading = false;
+      },
+      error: (error) => {
+        if (error.status === 404) {
+          this.notificationService.showError(
+            "Merci de vérifier l'email que vous souhaitez désinscrire",
+            `L'email ${this.userEmail} n'est pas inscrit à la newsletter`
+          );
+        } else {
+          this.notificationService.showErrorPleaseRetry(
+            `L'email ${this.userEmail} n'a pu être retiré de la newsletter`
+          );
+        }
+        this.isLoading = false;
+      },
+    });
+  }
+}
diff --git a/src/app/profile/profile.component.html b/src/app/profile/profile.component.html
index d0bd78298..e64bdb5f7 100644
--- a/src/app/profile/profile.component.html
+++ b/src/app/profile/profile.component.html
@@ -133,15 +133,17 @@
     </div>
   </section>
 
-  <!-- Features not implemented yet -->
-  <!-- <section *ngIf="!isPublic">
+  <section *ngIf="!isPublic">
     <div class="header">
-      <h1>Ressources</h1>
+      <h1>Newsletter</h1>
     </div>
+    <app-profile-newsletter [userEmail]="this.userProfile.email" />
   </section>
-  <section *ngIf="!isPublic">
+
+  <!-- Features not implemented yet -->
+  <!-- <section *ngIf="!isPublic">
     <div class="header">
-      <h1>Newsletter</h1>
+      <h1>Ressources</h1>
     </div>
   </section> -->
 </div>
diff --git a/src/app/profile/profile.module.ts b/src/app/profile/profile.module.ts
index 52be3a2ed..09caf05d9 100644
--- a/src/app/profile/profile.module.ts
+++ b/src/app/profile/profile.module.ts
@@ -14,6 +14,7 @@ import { NoInformationComponent } from './structure-edition-summary/no-informati
 import { StructureEditionSummaryComponent } from './structure-edition-summary/structure-edition-summary.component';
 import { StructureMembersManagementComponent } from './structure-members-management/structure-members-management.component';
 import { StructuresManagementComponent } from './structures-management/structures-management.component';
+import { ProfileNewsletterComponent } from './profile-newsletter/profile-newsletter.component';
 
 @NgModule({
   declarations: [
@@ -29,6 +30,7 @@ import { StructuresManagementComponent } from './structures-management/structure
     StructuresManagementComponent,
     PersonalOfferComponent,
     PersonalOfferEditionComponent,
+    ProfileNewsletterComponent,
   ],
   imports: [CommonModule, ProfileRoutingModule, SharedModule],
 })
diff --git a/src/app/services/newsletter.service.ts b/src/app/services/newsletter.service.ts
index f4a0131ff..4635c10d8 100644
--- a/src/app/services/newsletter.service.ts
+++ b/src/app/services/newsletter.service.ts
@@ -1,6 +1,7 @@
 import { HttpClient } from '@angular/common/http';
 import { Injectable } from '@angular/core';
 import { Observable } from 'rxjs';
+import { NewsletterSubscription } from '../models/subscription.model';
 
 @Injectable({
   providedIn: 'root',
@@ -8,11 +9,15 @@ import { Observable } from 'rxjs';
 export class NewsletterService {
   constructor(private http: HttpClient) {}
 
-  public newsletterSubscribe(email: string): Observable<any> {
-    return this.http.post('/api/newsletter/subscribe', {email});
+  public subscribe(email: string): Observable<NewsletterSubscription> {
+    return this.http.post<NewsletterSubscription>('/api/newsletter/subscribe', { email });
   }
 
-  public newsletterUnsubscribe(email: string): Observable<any> {
-    return this.http.post('/api/newsletter/unsubscribe', {email});
+  public unsubscribe(email: string): Observable<NewsletterSubscription> {
+    return this.http.post<NewsletterSubscription>('/api/newsletter/unsubscribe', { email });
+  }
+
+  public find(email: string): Observable<NewsletterSubscription> {
+    return this.http.get<NewsletterSubscription>(`/api/newsletter?email=${email}`);
   }
 }
-- 
GitLab


From e0411d926ce0239918504ec3f275c3d89d250673 Mon Sep 17 00:00:00 2001
From: hnouts <hnouts@grandlyon.com>
Date: Wed, 26 Jul 2023 15:08:56 +0200
Subject: [PATCH 06/19] fix(edit-structure): warning when structureType field
 is missing

---
 .../structure-edition-summary.component.html                | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/app/profile/structure-edition-summary/structure-edition-summary.component.html b/src/app/profile/structure-edition-summary/structure-edition-summary.component.html
index a40d19511..4984c9981 100644
--- a/src/app/profile/structure-edition-summary/structure-edition-summary.component.html
+++ b/src/app/profile/structure-edition-summary/structure-edition-summary.component.html
@@ -62,8 +62,10 @@
         />
       </div>
       <div class="content">
-        <p>{{ structure.structureType?.category }} - {{ structure.getLabelTypeStructure() }}</p>
-      </div>
+        <app-missing-information *ngIf="!isFieldValid('structureType')" />
+        <p *ngIf="isFieldValid('structureType')">
+          <p>{{ structure.structureType?.category }} - {{ structure.getLabelTypeStructure() }}</p>
+        </div>
     </div>
 
     <div class="section phoneAndMail">
-- 
GitLab


From c758ea2eb3bd55d50ebe9b8810751bcf99f5d914 Mon Sep 17 00:00:00 2001
From: Hugo NOUTS <hnouts@grandlyon.com>
Date: Tue, 1 Aug 2023 13:14:01 +0000
Subject: [PATCH 07/19] fix(phone-mail validators): add a cross check
 validation to this fields

---
 package-lock.json                             |   2 +-
 .../structure-contact.component.html          |  28 +--
 .../structure-contact.component.ts            |  35 ++++
 .../structure-form.component.ts               |   5 +-
 .../structure-edition-summary.component.html  |   7 +-
 .../structure-edition-summary.component.ts    |   4 +
 src/app/utils/formUtils.ts                    | 182 +++++++++---------
 src/app/utils/formValidators.ts               |  14 ++
 8 files changed, 157 insertions(+), 120 deletions(-)
 create mode 100644 src/app/utils/formValidators.ts

diff --git a/package-lock.json b/package-lock.json
index 168f44bfd..2c77e83b4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
 {
   "name": "pamn",
-  "version": "2.2.0",
+  "version": "2.3.3",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
diff --git a/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.html b/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.html
index 2cd50fd09..eabad119f 100644
--- a/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.html
+++ b/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.html
@@ -18,18 +18,8 @@
     <label for="structureName">Email de la structure</label>
     <div fxLayout="row" fxLayoutGap="13px">
       <input type="text" formControlName="contactMail" class="form-input" (input)="setValidationsForm()" />
-      <app-svg-icon
-        *ngIf="structureForm.get('contactMail').valid"
-        [iconClass]="'icon-26'"
-        [type]="'form'"
-        [icon]="'validate'"
-      />
-      <app-svg-icon
-        *ngIf="structureForm.get('contactMail').invalid && structureForm.get('contactMail').value !== null"
-        [iconClass]="'icon-26'"
-        [type]="'form'"
-        [icon]="'notValidate'"
-      />
+      <app-svg-icon *ngIf="isContactMailValid()" [iconClass]="'icon-26'" [type]="'form'" [icon]="'validate'" />
+      <app-svg-icon *ngIf="isContactMailNotValid()" [iconClass]="'icon-26'" [type]="'form'" [icon]="'notValidate'" />
     </div>
   </div>
   <div class="form-group" fxLayout="column">
@@ -43,18 +33,8 @@
         class="form-input"
         (input)="utils.modifyPhoneInput(structureForm, 'contactPhone', $event.target); setValidationsForm()"
       />
-      <app-svg-icon
-        *ngIf="structureForm.get('contactPhone').valid"
-        [iconClass]="'icon-26'"
-        [type]="'form'"
-        [icon]="'validate'"
-      />
-      <app-svg-icon
-        *ngIf="structureForm.get('contactPhone').invalid && structureForm.get('contactPhone').value"
-        [iconClass]="'icon-26'"
-        [type]="'form'"
-        [icon]="'notValidate'"
-      />
+      <app-svg-icon *ngIf="isContactPhoneValid()" [iconClass]="'icon-26'" [type]="'form'" [icon]="'validate'" />
+      <app-svg-icon *ngIf="isContactPhoneNotValid()" [iconClass]="'icon-26'" [type]="'form'" [icon]="'notValidate'" />
     </div>
   </div>
 </form>
diff --git a/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.ts b/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.ts
index f20d2f468..0bfe25eec 100644
--- a/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.ts
+++ b/src/app/form/form-view/structure-form/structure-contact/structure-contact.component.ts
@@ -21,6 +21,41 @@ export class StructureContactComponent implements OnInit {
   public setValidationsForm(): void {
     this.validateForm.emit();
   }
+
+  public isRequirePhoneOrMailNotValid(): boolean {
+    return this.structureForm.errors?.['requirePhoneOrMail'] ?? false;
+  }
+
+  public isContactMailValid(): boolean {
+    return (
+      !this.isRequirePhoneOrMailNotValid() &&
+      this.structureForm.get('contactMail').valid &&
+      this.structureForm.get('contactMail').value
+    );
+  }
+
+  public isContactMailNotValid(): boolean {
+    return (
+      this.isRequirePhoneOrMailNotValid() ||
+      (this.structureForm.get('contactMail').invalid && this.structureForm.get('contactMail').value !== null)
+    );
+  }
+
+  public isContactPhoneValid(): boolean {
+    return (
+      !this.isRequirePhoneOrMailNotValid() &&
+      this.structureForm.get('contactPhone').valid &&
+      this.structureForm.get('contactPhone').value
+    );
+  }
+
+  public isContactPhoneNotValid(): boolean {
+    return (
+      this.isRequirePhoneOrMailNotValid() ||
+      (this.structureForm.get('contactPhone').invalid && this.structureForm.get('contactPhone').value)
+    );
+  }
+
   public goBack(): void {
     history.back();
   }
diff --git a/src/app/form/form-view/structure-form/structure-form.component.ts b/src/app/form/form-view/structure-form/structure-form.component.ts
index cbb6c7daa..fbd9b34fd 100644
--- a/src/app/form/form-view/structure-form/structure-form.component.ts
+++ b/src/app/form/form-view/structure-form/structure-form.component.ts
@@ -158,7 +158,10 @@ export class StructureFormComponent implements OnChanges, OnInit {
         valid: this.structureForm.get('structureName').valid && this.structureForm.get('address').valid,
       };
       this.pagesValidation[structureFormStep.structureContact] = {
-        valid: this.structureForm.get('contactMail').valid || this.structureForm.get('contactPhone').valid,
+        valid:
+          !this.structureForm.hasError('requirePhoneOrMail') &&
+          this.structureForm.get('contactMail').valid &&
+          this.structureForm.get('contactPhone').valid,
       };
       this.pagesValidation[structureFormStep.structureAccompanimentChoice] = {
         valid: this.structureForm.get('placeOfReception').valid,
diff --git a/src/app/profile/structure-edition-summary/structure-edition-summary.component.html b/src/app/profile/structure-edition-summary/structure-edition-summary.component.html
index 4984c9981..5b6997023 100644
--- a/src/app/profile/structure-edition-summary/structure-edition-summary.component.html
+++ b/src/app/profile/structure-edition-summary/structure-edition-summary.component.html
@@ -64,8 +64,9 @@
       <div class="content">
         <app-missing-information *ngIf="!isFieldValid('structureType')" />
         <p *ngIf="isFieldValid('structureType')">
-          <p>{{ structure.structureType?.category }} - {{ structure.getLabelTypeStructure() }}</p>
-        </div>
+          {{ structure.structureType?.category }} - {{ structure.getLabelTypeStructure() }}
+        </p>
+      </div>
     </div>
 
     <div class="section phoneAndMail">
@@ -86,7 +87,7 @@
         />
       </div>
       <div class="content">
-        <app-missing-information *ngIf="!isFieldValid('contactPhone') && !isFieldValid('contactMail')" />
+        <app-missing-information *ngIf="requiredPhoneOrMailError()" />
         <p *ngIf="isFieldValid('contactPhone')">
           {{ structure.contactPhone }}
         </p>
diff --git a/src/app/profile/structure-edition-summary/structure-edition-summary.component.ts b/src/app/profile/structure-edition-summary/structure-edition-summary.component.ts
index 695642504..d0ab70c02 100644
--- a/src/app/profile/structure-edition-summary/structure-edition-summary.component.ts
+++ b/src/app/profile/structure-edition-summary/structure-edition-summary.component.ts
@@ -126,6 +126,10 @@ export class StructureEditionSummaryComponent implements OnInit {
     return this.structureForm.get([field]).valid;
   }
 
+  public requiredPhoneOrMailError(): boolean {
+    return this.structureForm.hasError('requirePhoneOrMail');
+  }
+
   public hasSocialNetworks(): boolean {
     return this.utils.hasSocialNetwork(this.structure);
   }
diff --git a/src/app/utils/formUtils.ts b/src/app/utils/formUtils.ts
index a9decacb9..ed9bef319 100644
--- a/src/app/utils/formUtils.ts
+++ b/src/app/utils/formUtils.ts
@@ -5,6 +5,7 @@ import { Structure } from '../models/structure.model';
 import { Time } from '../models/time.model';
 import { Week } from '../models/week.model';
 import { CustomRegExp } from './CustomRegExp';
+import { FormValidators } from './formValidators';
 
 export interface IStructureSummary {
   step: structureFormStep;
@@ -68,97 +69,96 @@ export class formUtils {
    * @returns
    */
   public createStructureForm(structure: Structure, isEditMode?: boolean): UntypedFormGroup {
-    return new UntypedFormGroup({
-      _id: new UntypedFormControl(structure._id, Validators.required),
-      coord: new UntypedFormControl(structure.coord),
-      structureType: new UntypedFormControl(structure.structureType?._id, Validators.required),
-      structureName: new UntypedFormControl(structure.structureName, Validators.required),
-      description: new UntypedFormControl(structure.description),
-      lockdownActivity: new UntypedFormControl(structure.lockdownActivity),
-      address: new UntypedFormGroup({
-        numero: new UntypedFormControl(structure.address.numero),
-        street: new UntypedFormControl(structure.address.street, Validators.required),
-        commune: new UntypedFormControl(structure.address.commune, Validators.required),
-      }),
-      contactMail: new UntypedFormControl(structure.contactMail === '' ? null : structure.contactMail, [
-        Validators.required,
-        Validators.pattern(CustomRegExp.EMAIL),
-      ]),
-      contactPhone: new UntypedFormControl(structure.contactPhone, [
-        Validators.required,
-        Validators.pattern(CustomRegExp.PHONE),
-      ]),
-      contactPersonFirstname: new UntypedFormControl(
-        structure.contactPersonLastName,
-        !isEditMode && Validators.required
-      ),
-      contactPersonLastname: new UntypedFormControl(
-        structure.contactPersonLastName,
-        !isEditMode && Validators.required
-      ),
-      contactPersonEmail: new UntypedFormControl(
-        structure.contactPersonEmail,
-        !isEditMode && [Validators.pattern(CustomRegExp.EMAIL), Validators.required]
-      ),
-      website: new UntypedFormControl(structure.website, Validators.pattern(CustomRegExp.WEBSITE)),
-      facebook: new UntypedFormControl(structure.facebook, Validators.pattern(CustomRegExp.FACEBOOK)),
-      twitter: new UntypedFormControl(structure.twitter, Validators.pattern(CustomRegExp.TWITTER)),
-      instagram: new UntypedFormControl(structure.instagram, Validators.pattern(CustomRegExp.INSTAGRAM)),
-      linkedin: new UntypedFormControl(structure.linkedin, Validators.pattern(CustomRegExp.LINKEDIN)),
-      hours: new UntypedFormGroup({}),
-      pmrAccess: new UntypedFormControl(structure.pmrAccess, Validators.required),
-      placeOfReception: new UntypedFormControl(structure.placeOfReception, !isEditMode && Validators.required),
-      choiceCompletion: new UntypedFormControl(structure.choiceCompletion, !isEditMode && Validators.required),
-      exceptionalClosures: new UntypedFormControl(structure.exceptionalClosures),
-      categories: new UntypedFormGroup({
-        labelsQualifications: this.loadArrayForCheckbox(structure.categories?.labelsQualifications, false),
-        accessModality: this.loadArrayForCheckbox(structure.categories?.accessModality, true),
-        publicsAccompaniment: this.loadArrayForCheckbox(structure.categories?.age, false),
-        onlineProcedures: this.loadArrayForCheckbox(structure.categories?.onlineProcedures, false),
-        handicaps: this.loadArrayForCheckbox(structure.categories?.handicaps, false),
-        age: this.loadArrayForCheckbox(structure.categories?.age, true),
-        languageAndIlliteracy: this.loadArrayForCheckbox(structure.categories?.languageAndIlliteracy, false),
-        selfServiceMaterial: this.loadArrayForCheckbox(structure.categories?.selfServiceMaterial, false),
-        genre: this.loadArrayForCheckbox(structure.categories?.genre, false),
-        baseSkills: new UntypedFormControl(structure.categories?.baseSkills),
-        advancedSkills: new UntypedFormControl(structure.categories?.advancedSkills),
-        solidarityMaterial: this.loadArrayForCheckbox(structure.categories?.solidarityMaterial, false),
-      }),
-      //TODO: remettre ou migrer les données de accompagnements à distance
-      remoteAccompaniment: new UntypedFormControl(false),
-      otherDescription: new UntypedFormControl(structure.otherDescription),
-      nbComputers: new UntypedFormControl(
-        structure.categories.selfServiceMaterial.includes('computer') ? structure.nbComputers : 0,
-        [
-          Validators.required,
-          Validators.pattern(CustomRegExp.NO_NEGATIVE_NUMBER),
-          Validators.min(0),
-          Validators.max(1000),
-        ]
-      ),
-      nbPrinters: new UntypedFormControl(
-        structure.categories.selfServiceMaterial.includes('printer') ? structure.nbPrinters : 0,
-        [
-          Validators.required,
-          Validators.pattern(CustomRegExp.NO_NEGATIVE_NUMBER),
-          Validators.min(0),
-          Validators.max(1000),
-        ]
-      ),
-      nbScanners: new UntypedFormControl(
-        structure.categories.selfServiceMaterial.includes('scanner') ? structure.nbScanners : 0,
-        [
-          Validators.required,
-          Validators.pattern(CustomRegExp.NO_NEGATIVE_NUMBER),
-          Validators.min(0),
-          Validators.max(1000),
-        ]
-      ),
-      freeWorkShop: new UntypedFormControl(structure.freeWorkShop, [Validators.required]),
-      freeWifi: new UntypedFormControl(null, isEditMode ? [] : [Validators.required]), // Field used has a pivot, not sent in final form.
-      dataShareConsentDate: new UntypedFormControl(structure.dataShareConsentDate),
-      personalOffers: new UntypedFormControl(structure.personalOffers),
-    });
+    return new UntypedFormGroup(
+      {
+        _id: new UntypedFormControl(structure._id, Validators.required),
+        coord: new UntypedFormControl(structure.coord),
+        structureType: new UntypedFormControl(structure.structureType?._id, Validators.required),
+        structureName: new UntypedFormControl(structure.structureName, Validators.required),
+        description: new UntypedFormControl(structure.description),
+        lockdownActivity: new UntypedFormControl(structure.lockdownActivity),
+        address: new UntypedFormGroup({
+          numero: new UntypedFormControl(structure.address.numero),
+          street: new UntypedFormControl(structure.address.street, Validators.required),
+          commune: new UntypedFormControl(structure.address.commune, Validators.required),
+        }),
+        contactMail: new UntypedFormControl(structure.contactMail === '' ? null : structure.contactMail, [
+          Validators.pattern(CustomRegExp.EMAIL),
+        ]),
+        contactPhone: new UntypedFormControl(structure.contactPhone, [Validators.pattern(CustomRegExp.PHONE)]),
+        contactPersonFirstname: new UntypedFormControl(
+          structure.contactPersonLastName,
+          !isEditMode && Validators.required
+        ),
+        contactPersonLastname: new UntypedFormControl(
+          structure.contactPersonLastName,
+          !isEditMode && Validators.required
+        ),
+        contactPersonEmail: new UntypedFormControl(
+          structure.contactPersonEmail,
+          !isEditMode && [Validators.pattern(CustomRegExp.EMAIL), Validators.required]
+        ),
+        website: new UntypedFormControl(structure.website, Validators.pattern(CustomRegExp.WEBSITE)),
+        facebook: new UntypedFormControl(structure.facebook, Validators.pattern(CustomRegExp.FACEBOOK)),
+        twitter: new UntypedFormControl(structure.twitter, Validators.pattern(CustomRegExp.TWITTER)),
+        instagram: new UntypedFormControl(structure.instagram, Validators.pattern(CustomRegExp.INSTAGRAM)),
+        linkedin: new UntypedFormControl(structure.linkedin, Validators.pattern(CustomRegExp.LINKEDIN)),
+        hours: new UntypedFormGroup({}),
+        pmrAccess: new UntypedFormControl(structure.pmrAccess, Validators.required),
+        placeOfReception: new UntypedFormControl(structure.placeOfReception, !isEditMode && Validators.required),
+        choiceCompletion: new UntypedFormControl(structure.choiceCompletion, !isEditMode && Validators.required),
+        exceptionalClosures: new UntypedFormControl(structure.exceptionalClosures),
+        categories: new UntypedFormGroup({
+          labelsQualifications: this.loadArrayForCheckbox(structure.categories?.labelsQualifications, false),
+          accessModality: this.loadArrayForCheckbox(structure.categories?.accessModality, true),
+          publicsAccompaniment: this.loadArrayForCheckbox(structure.categories?.age, false),
+          onlineProcedures: this.loadArrayForCheckbox(structure.categories?.onlineProcedures, false),
+          handicaps: this.loadArrayForCheckbox(structure.categories?.handicaps, false),
+          age: this.loadArrayForCheckbox(structure.categories?.age, true),
+          languageAndIlliteracy: this.loadArrayForCheckbox(structure.categories?.languageAndIlliteracy, false),
+          selfServiceMaterial: this.loadArrayForCheckbox(structure.categories?.selfServiceMaterial, false),
+          genre: this.loadArrayForCheckbox(structure.categories?.genre, false),
+          baseSkills: new UntypedFormControl(structure.categories?.baseSkills),
+          advancedSkills: new UntypedFormControl(structure.categories?.advancedSkills),
+          solidarityMaterial: this.loadArrayForCheckbox(structure.categories?.solidarityMaterial, false),
+        }),
+        //TODO: remettre ou migrer les données de accompagnements à distance
+        remoteAccompaniment: new UntypedFormControl(false),
+        otherDescription: new UntypedFormControl(structure.otherDescription),
+        nbComputers: new UntypedFormControl(
+          structure.categories.selfServiceMaterial.includes('computer') ? structure.nbComputers : 0,
+          [
+            Validators.required,
+            Validators.pattern(CustomRegExp.NO_NEGATIVE_NUMBER),
+            Validators.min(0),
+            Validators.max(1000),
+          ]
+        ),
+        nbPrinters: new UntypedFormControl(
+          structure.categories.selfServiceMaterial.includes('printer') ? structure.nbPrinters : 0,
+          [
+            Validators.required,
+            Validators.pattern(CustomRegExp.NO_NEGATIVE_NUMBER),
+            Validators.min(0),
+            Validators.max(1000),
+          ]
+        ),
+        nbScanners: new UntypedFormControl(
+          structure.categories.selfServiceMaterial.includes('scanner') ? structure.nbScanners : 0,
+          [
+            Validators.required,
+            Validators.pattern(CustomRegExp.NO_NEGATIVE_NUMBER),
+            Validators.min(0),
+            Validators.max(1000),
+          ]
+        ),
+        freeWorkShop: new UntypedFormControl(structure.freeWorkShop, [Validators.required]),
+        freeWifi: new UntypedFormControl(null, isEditMode ? [] : [Validators.required]), // Field used has a pivot, not sent in final form.
+        dataShareConsentDate: new UntypedFormControl(structure.dataShareConsentDate),
+        personalOffers: new UntypedFormControl(structure.personalOffers),
+      },
+      FormValidators.requirePhoneOrMail(['contactPhone', 'contactMail'])
+    );
   }
 
   public loadArrayForCheckbox(array: string[], isRequired: boolean): UntypedFormArray {
diff --git a/src/app/utils/formValidators.ts b/src/app/utils/formValidators.ts
new file mode 100644
index 000000000..53a2cf674
--- /dev/null
+++ b/src/app/utils/formValidators.ts
@@ -0,0 +1,14 @@
+import { FormGroup, ValidationErrors } from '@angular/forms';
+
+export class FormValidators {
+  public static requirePhoneOrMail(controls: string[] = null) {
+    return (group: FormGroup): ValidationErrors | null => {
+      if (!controls) {
+        controls = Object.keys(group.controls);
+      }
+
+      const hasAtLeastOne = controls.some((k) => group.controls[k].valid && group.controls[k].value);
+      return hasAtLeastOne ? null : { requirePhoneOrMail: true };
+    };
+  }
+}
-- 
GitLab


From 941323544f8c6201daae0b3be63d653a1401339f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marl=C3=A8ne=20SIMONDANT?= <msimondant@grandlyon.com>
Date: Tue, 8 Aug 2023 13:03:42 +0000
Subject: [PATCH 08/19] feat(profile): appointment choice

---
 src/app/form/form-view/form-view.component.ts | 13 +++--
 ...ffer-other-structure-choice.component.html |  2 +-
 .../profile-form/profile-form.component.ts    |  6 ++-
 .../profile-job-selection.component.html      |  6 +++
 .../profile-job-selection.component.ts        | 12 ++++-
 src/app/models/user.model.ts                  |  1 +
 src/app/profile/edit/edit.component.html      | 14 +++++
 src/app/profile/edit/edit.component.scss      |  5 +-
 src/app/profile/edit/edit.component.ts        | 51 +++++++++++++++----
 src/app/profile/profile-routing.module.ts     |  2 +
 src/app/profile/services/profile.service.ts   |  4 +-
 .../appointment-choice.component.html         |  9 ++++
 .../appointment-choice.component.scss         | 10 ++++
 .../appointment-choice.component.ts           | 19 +++++++
 src/app/shared/components/index.ts            | 27 +++++-----
 src/app/shared/shared.module.ts               | 12 +++--
 16 files changed, 157 insertions(+), 36 deletions(-)
 create mode 100644 src/app/shared/components/appointment-choice/appointment-choice.component.html
 create mode 100644 src/app/shared/components/appointment-choice/appointment-choice.component.scss
 create mode 100644 src/app/shared/components/appointment-choice/appointment-choice.component.ts

diff --git a/src/app/form/form-view/form-view.component.ts b/src/app/form/form-view/form-view.component.ts
index 452c7e074..89a5de766 100644
--- a/src/app/form/form-view/form-view.component.ts
+++ b/src/app/form/form-view/form-view.component.ts
@@ -226,6 +226,7 @@ export class FormViewComponent implements OnInit, AfterViewInit {
         validated: new UntypedFormControl(true, [Validators.required]),
         hasPersonalOffer: new UntypedFormControl(true, [Validators.required]),
       }),
+      withAppointment: new UntypedFormControl('', [Validators.required]),
       structure: new UntypedFormControl('', [Validators.required]),
     });
   }
@@ -297,7 +298,7 @@ export class FormViewComponent implements OnInit, AfterViewInit {
       case formType.structure:
         if (type.formStep === structureFormStep.mailSentInfo) {
           const user = await this.profileService.getProfile();
-          if (user.job && user.job.hasPersonalOffer) {
+          if (user.job?.hasPersonalOffer) {
             this.router.navigateByUrl('form/personaloffer');
           } else {
             this.router.navigateByUrl('/');
@@ -336,7 +337,13 @@ export class FormViewComponent implements OnInit, AfterViewInit {
         catchError(() => of(this.profileForm.get('job').value))
       ),
       profile: this.profileService
-        .updateProfile(this.profileForm.get('employer').value.name, this.profileForm.get('job').value.name)
+        .updateProfile(
+          this.profileForm.get('employer').value.name,
+          this.profileForm.get('job').value.name,
+          this.profileForm.get('withAppointment')?.value !== ''
+            ? this.profileForm.get('withAppointment').value
+            : undefined
+        )
         .pipe(
           map((res) => (this.profile = res)),
           catchError(() => of())
@@ -375,7 +382,7 @@ export class FormViewComponent implements OnInit, AfterViewInit {
     const newStructure = new Structure(this.structureForm.value);
     newStructure.hours = this.hoursForm.value;
     this.structureService.createStructure(newStructure, this.profile).subscribe((struct) => {
-      if (user.job && user.job.hasPersonalOffer) {
+      if (user.job?.hasPersonalOffer) {
         this.structure = struct;
         this.router.navigateByUrl('form/personaloffer');
       } else {
diff --git a/src/app/form/form-view/personal-offer-form/personal-offer-other-structure-choice/personal-offer-other-structure-choice.component.html b/src/app/form/form-view/personal-offer-form/personal-offer-other-structure-choice/personal-offer-other-structure-choice.component.html
index ff5a8e5e1..368ece9b0 100644
--- a/src/app/form/form-view/personal-offer-form/personal-offer-other-structure-choice/personal-offer-other-structure-choice.component.html
+++ b/src/app/form/form-view/personal-offer-form/personal-offer-other-structure-choice/personal-offer-other-structure-choice.component.html
@@ -4,5 +4,5 @@
     <h3>Intervenez-vous dans une autre structure&nbsp;?</h3>
   </div>
 
-  <app-radio-form [selectedOption]="" (selectedEvent)="onRadioChange($event)"> </app-radio-form>
+  <app-radio-form [selectedOption]="null" (selectedEvent)="onRadioChange($event)"> </app-radio-form>
 </form>
diff --git a/src/app/form/form-view/profile-form/profile-form.component.ts b/src/app/form/form-view/profile-form/profile-form.component.ts
index e767edf4d..0317791e6 100644
--- a/src/app/form/form-view/profile-form/profile-form.component.ts
+++ b/src/app/form/form-view/profile-form/profile-form.component.ts
@@ -28,7 +28,11 @@ export class ProfileFormComponent {
       valid: this.profileForm.get('employer').valid,
     };
     this.pagesValidation[profileFormStep.profileJobSelection] = {
-      valid: this.profileForm.get('job').get('name').valid,
+      valid:
+        (this.profileForm.get('job').get('name').valid && !this.profileForm.get('job').value.hasPersonalOffer) ||
+        (this.profileForm.get('job').get('name').valid &&
+          this.profileForm.get('job').value.hasPersonalOffer === true &&
+          this.profileForm.get('withAppointment').valid),
     };
     this.updatePageValid();
   }
diff --git a/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.html b/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.html
index 7d7136c6d..4f5a0d940 100644
--- a/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.html
+++ b/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.html
@@ -20,4 +20,10 @@
       <input type="text" class="form-input" autocomplete="off" (input)="newJob($event.target)" />
     </div>
   </div>
+
+  <app-appointment-choice
+    *ngIf="hasPersonalOffer"
+    [selectedRdvChoice]="selectedRdvChoice === undefined ? null : selectedRdvChoice"
+    (rdvChoice)="onRdvRadioChange($event)"
+  ></app-appointment-choice>
 </form>
diff --git a/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.ts b/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.ts
index cdfa6f817..d5069af9d 100644
--- a/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.ts
+++ b/src/app/form/form-view/profile-form/profile-job-selection/profile-job-selection.component.ts
@@ -12,9 +12,12 @@ import { ButtonType } from '../../../../shared/components/button/buttonType.enum
 export class ProfileJobSelectionComponent implements OnInit {
   @Input() profileForm: UntypedFormGroup;
   @Output() validateForm = new EventEmitter<Job>();
+
   public jobs: Job[];
   public selectedJob: Job;
+  public selectedRdvChoice: boolean;
   public buttonTypeEnum = ButtonType;
+  public hasPersonalOffer: boolean = false;
 
   constructor(private profileService: ProfileService) {}
 
@@ -40,11 +43,12 @@ export class ProfileJobSelectionComponent implements OnInit {
         hasPersonalOffer: true,
       });
     }
+    this.hasPersonalOffer = job.hasPersonalOffer;
     this.validateForm.emit();
   }
 
   public isSelectedJob(job: Job): boolean {
-    if (this.selectedJob && this.selectedJob.name === job.name) return true;
+    if (this.selectedJob?.name === job.name) return true;
     return false;
   }
 
@@ -60,4 +64,10 @@ export class ProfileJobSelectionComponent implements OnInit {
     });
     this.validateForm.emit();
   }
+
+  public onRdvRadioChange(value: boolean): void {
+    this.selectedRdvChoice = value;
+    this.profileForm.get('withAppointment').setValue(this.selectedRdvChoice);
+    this.validateForm.emit();
+  }
 }
diff --git a/src/app/models/user.model.ts b/src/app/models/user.model.ts
index d1a07e3f8..b4b1cd129 100644
--- a/src/app/models/user.model.ts
+++ b/src/app/models/user.model.ts
@@ -20,6 +20,7 @@ export class User {
   job: Job;
   employer: Employer;
   description?: string;
+  withAppointment?: boolean;
   constructor(obj?: any) {
     Object.assign(this, obj);
     this.surname = this.surname.toUpperCase();
diff --git a/src/app/profile/edit/edit.component.html b/src/app/profile/edit/edit.component.html
index 154bf772d..aefb46b00 100644
--- a/src/app/profile/edit/edit.component.html
+++ b/src/app/profile/edit/edit.component.html
@@ -171,7 +171,21 @@
             />
           </div>
         </div>
+        <app-appointment-choice
+          *ngIf="hasPersonalOffer"
+          [selectedRdvChoice]="selectedRdvChoice === undefined ? null : selectedRdvChoice"
+          (rdvChoice)="onRdvRadioChange($event)"
+          (validateForm)="isPageValid()"
+        ></app-appointment-choice>
       </div>
+      <app-custom-modal
+        customValidationButton="OK"
+        [opened]="showConfirmationModal"
+        [content]="
+          'Veuillez indiquer si vous souhaitez proposer la fonctionnalité \'être rappelé\' dans l\'onglet \'Employeur et fonction\'.'
+        "
+        (closed)="closeExitModal()"
+      />
 
       <div *ngIf="currentTab === tabsEnum.description" class="descriptionTab">
         <p class="subTitle">Description</p>
diff --git a/src/app/profile/edit/edit.component.scss b/src/app/profile/edit/edit.component.scss
index 19ad102f2..223f0844f 100644
--- a/src/app/profile/edit/edit.component.scss
+++ b/src/app/profile/edit/edit.component.scss
@@ -95,7 +95,7 @@
   }
 
   .content {
-    padding-top: 24px;
+    padding: 24px 0;
     flex: 1;
     max-width: 600px;
     p.subTitle {
@@ -126,6 +126,9 @@
     .credentialsTab ::ng-deep .secondary .text {
       place-content: center center !important;
     }
+    .btn-grid {
+      margin-bottom: 1em;
+    }
 
     .descriptionTab {
       p.descriptionLength {
diff --git a/src/app/profile/edit/edit.component.ts b/src/app/profile/edit/edit.component.ts
index 3e7790eed..7a15626dd 100644
--- a/src/app/profile/edit/edit.component.ts
+++ b/src/app/profile/edit/edit.component.ts
@@ -56,9 +56,15 @@ export class EditComponent implements OnInit {
   private selectedJob: Job;
   public employers: Employer[];
   private selectedEmployer: Employer;
+  public selectedRdvChoice: boolean;
   public isAlreadySearching = false;
   public isNewUser = false;
   public isNewEmployer: boolean;
+  public hasPersonalOffer: boolean = false;
+
+  // Modal canExit var
+  public showConfirmationModal = false;
+
   @ViewChild('searchEmployer') searchEmployer: ElementRef;
   @ViewChild('newJobInput') newJobInput: ElementRef;
 
@@ -76,9 +82,11 @@ export class EditComponent implements OnInit {
     }
 
     this.profileService.getProfile().then((profile) => {
+      if (profile.hasOwnProperty('withAppointment')) this.selectedRdvChoice = profile.withAppointment;
       this.userProfile = new User(profile);
       this.initialUserProfile = new User({ ...profile });
       this.selectedEmployer = { ...profile.employer };
+      this.hasPersonalOffer = profile.job?.hasPersonalOffer;
       if (!profile.employer || !profile.job) {
         this.isNewUser = true;
       }
@@ -173,7 +181,8 @@ export class EditComponent implements OnInit {
         return true;
       } else if (
         this.selectedEmployer?.name !== this.userProfile.employer?.name ||
-        this.selectedJob?.name !== this.userProfile.job?.name
+        (this.selectedJob?.name !== this.userProfile.job?.name && !this.hasPersonalOffer) ||
+        (this.hasPersonalOffer && this.selectedRdvChoice !== null)
       ) {
         return true;
       }
@@ -235,15 +244,21 @@ export class EditComponent implements OnInit {
       });
     }
 
-    this.profileService.updateProfile(this.selectedEmployer.name, this.selectedJob.name).subscribe({
-      next: () => {
-        this.router.navigate(['/profile']);
-        this.notificationService.showSuccess('Vos informations ont bien été enregistrées');
-      },
-      error: () => {
-        this.notificationService.showError("Vos informations n'ont pas été enregistrées", 'Une erreur est survenue');
-      },
-    });
+    this.profileService
+      .updateProfile(this.selectedEmployer.name, this.selectedJob.name, this.selectedRdvChoice)
+      .subscribe({
+        next: () => {
+          this.router.navigate(['/profile']);
+          this.notificationService.showSuccess('Vos informations ont bien été enregistrées');
+        },
+        error: () => {
+          this.notificationService.showError("Vos informations n'ont pas été enregistrées", 'Une erreur est survenue');
+        },
+      });
+  }
+
+  public onRdvRadioChange(value: boolean): void {
+    this.selectedRdvChoice = value;
   }
 
   public confirmDescription(): void {
@@ -311,8 +326,10 @@ export class EditComponent implements OnInit {
   public selectJob(job: Job): void {
     this.selectedJob = job;
     this.newJob = null;
+    this.hasPersonalOffer = job.hasPersonalOffer;
   }
   public isSelectedJob(job: Job): boolean {
+    if (this.selectedJob?.name === job.name) this.hasPersonalOffer = job.hasPersonalOffer;
     return this.selectedJob && this.selectedJob.name === job.name;
   }
   public isUnexistingJob(): boolean {
@@ -352,4 +369,18 @@ export class EditComponent implements OnInit {
       });
     }
   }
+
+  public canExit(): Promise<boolean> {
+    if (this.hasPersonalOffer && this.selectedRdvChoice == undefined) {
+      return new Promise((resolve) => this.showModal(resolve));
+    }
+  }
+
+  private showModal(resolve: Function): void {
+    this.showConfirmationModal = true;
+  }
+
+  public closeExitModal(): void {
+    this.showConfirmationModal = false;
+  }
 }
diff --git a/src/app/profile/profile-routing.module.ts b/src/app/profile/profile-routing.module.ts
index 0037e2709..ecd292897 100644
--- a/src/app/profile/profile-routing.module.ts
+++ b/src/app/profile/profile-routing.module.ts
@@ -2,6 +2,7 @@ import { NgModule } from '@angular/core';
 import { Route, RouterModule, Routes } from '@angular/router';
 import { FooterComponent } from '../footer/footer.component';
 import { AuthGuard } from '../guards/auth.guard';
+import { DeactivateGuard } from '../guards/deactivate.guard';
 import { IsPersonalOfferOwnerGuard } from '../guards/isPersonalOfferOwner.guard';
 import { RoleGuard } from '../guards/role.guard';
 import { PersonalOfferResolver } from '../resolvers/personal-offer.resolver';
@@ -24,6 +25,7 @@ const routes: Routes = [
   {
     path: 'edit',
     canActivate: [AuthGuard],
+    canDeactivate: [DeactivateGuard],
     component: EditComponent,
   },
   {
diff --git a/src/app/profile/services/profile.service.ts b/src/app/profile/services/profile.service.ts
index a7dea50d1..9ef856481 100644
--- a/src/app/profile/services/profile.service.ts
+++ b/src/app/profile/services/profile.service.ts
@@ -102,8 +102,8 @@ export class ProfileService {
     return this.http.post<Employer>(`api/employer`, value);
   }
 
-  public updateProfile(employerName: string, jobName: string): Observable<User> {
-    return this.http.post<User>(`${this.baseUrl}/profile`, { employerName, jobName });
+  public updateProfile(employerName: string, jobName: string, withAppointment?: boolean): Observable<User> {
+    return this.http.post<User>(`${this.baseUrl}/profile`, { employerName, jobName, withAppointment });
   }
 
   public updateDetails(newDetails: { name: string; surname: string; phone: string }): Observable<User | Error> {
diff --git a/src/app/shared/components/appointment-choice/appointment-choice.component.html b/src/app/shared/components/appointment-choice/appointment-choice.component.html
new file mode 100644
index 000000000..0c83bc27d
--- /dev/null
+++ b/src/app/shared/components/appointment-choice/appointment-choice.component.html
@@ -0,0 +1,9 @@
+<div>
+  <p class="subtitle">Souhaitez-vous proposer la fonctionnalité "être rappelé" ?</p>
+  <p class="details">
+    Si vous l'activez, les professionnels (travailleurs sociaux, conseillers emploi...) pourront vous transmettre les
+    coordonnées d'une personne en situation de fragilité numérique afin de convenir d'un rendez-vous.
+  </p>
+  <app-radio-form [selectedOption]="selectedRdvChoice" [horizontal]="true" (selectedEvent)="onRdvRadioChange($event)">
+  </app-radio-form>
+</div>
diff --git a/src/app/shared/components/appointment-choice/appointment-choice.component.scss b/src/app/shared/components/appointment-choice/appointment-choice.component.scss
new file mode 100644
index 000000000..7d4777cd2
--- /dev/null
+++ b/src/app/shared/components/appointment-choice/appointment-choice.component.scss
@@ -0,0 +1,10 @@
+@import 'typography';
+@import 'color';
+
+.subtitle {
+  @include lato-regular-18;
+  font-weight: 500;
+}
+.details {
+  color: $grey-3;
+}
diff --git a/src/app/shared/components/appointment-choice/appointment-choice.component.ts b/src/app/shared/components/appointment-choice/appointment-choice.component.ts
new file mode 100644
index 000000000..632061ab5
--- /dev/null
+++ b/src/app/shared/components/appointment-choice/appointment-choice.component.ts
@@ -0,0 +1,19 @@
+import { Component, EventEmitter, Input, Output } from '@angular/core';
+import { Job } from '../../../models/job.model';
+
+@Component({
+  selector: 'app-appointment-choice',
+  templateUrl: './appointment-choice.component.html',
+  styleUrls: ['./appointment-choice.component.scss'],
+})
+export class AppointmentChoiceComponent {
+  @Input() selectedRdvChoice: boolean;
+  @Output() validateForm = new EventEmitter<Job>();
+  @Output() rdvChoice = new EventEmitter<boolean>();
+
+  public onRdvRadioChange(value: boolean): void {
+    this.selectedRdvChoice = value;
+    this.rdvChoice.emit(this.selectedRdvChoice);
+    this.validateForm.emit();
+  }
+}
diff --git a/src/app/shared/components/index.ts b/src/app/shared/components/index.ts
index 83d568ae7..f2037d7b5 100644
--- a/src/app/shared/components/index.ts
+++ b/src/app/shared/components/index.ts
@@ -3,6 +3,7 @@ import { ProgressBarComponent } from '../../form/form-view/global-components/pro
 import { StructurePublicTargetComponent } from '../../form/form-view/structure-form/structure-public-target/structure-public-target.component';
 import { AccompanimentPickerComponent } from './accompaniment-picker/accompaniment-picker.component';
 import { AddressAutocompleteComponent } from './address-autocomplete/address-autocomplete.component';
+import { AppointmentChoiceComponent } from './appointment-choice/appointment-choice.component';
 import { ButtonComponent } from './button/button.component';
 import { CheckboxFormComponent } from './checkbox-form/checkbox-form.component';
 import { CustomModalComponent } from './custom-modal/custom-modal.component';
@@ -23,25 +24,26 @@ import { TrainingTypePickerComponent } from './training-type-picker/training-typ
 // tslint:disable-next-line: max-line-length
 export {
   AccompanimentPickerComponent,
-  LogoCardComponent,
-  SvgIconComponent,
-  ButtonComponent,
   AddressAutocompleteComponent,
-  StructureTypePickerComponent,
+  AppointmentChoiceComponent,
+  ButtonComponent,
   CheckboxFormComponent,
+  CustomModalComponent,
   HourPickerComponent,
-  RadioFormComponent,
+  InformationStepComponent,
+  LogoCardComponent,
   ModalConfirmationComponent,
-  CustomModalComponent,
-  TextInputModalComponent,
   PasswordFormComponent,
-  TrainingTypePickerComponent,
-  InformationStepComponent,
-  StructurePmrComponent,
-  StructureListPrintComponent,
-  StructureDetailPrintComponent,
   ProgressBarComponent,
+  RadioFormComponent,
+  StructureDetailPrintComponent,
+  StructureListPrintComponent,
+  StructurePmrComponent,
   StructurePublicTargetComponent,
+  StructureTypePickerComponent,
+  SvgIconComponent,
+  TextInputModalComponent,
+  TrainingTypePickerComponent,
 };
 
 // tslint:disable-next-line:variable-name
@@ -54,6 +56,7 @@ export const SharedComponents = [
   StructureTypePickerComponent,
   CheckboxFormComponent,
   HourPickerComponent,
+  AppointmentChoiceComponent,
   RadioFormComponent,
   ModalConfirmationComponent,
   CustomModalComponent,
diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts
index c0829cf6b..e6051cdfe 100644
--- a/src/app/shared/shared.module.ts
+++ b/src/app/shared/shared.module.ts
@@ -1,14 +1,15 @@
-import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
+import { NgModule } from '@angular/core';
+import { FlexLayoutModule } from '@angular/flex-layout';
 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
 import { RouterModule } from '@angular/router';
-import { FlexLayoutModule } from '@angular/flex-layout';
 import { SharedComponents } from './components';
-import { SharedPipes } from './pipes';
-import { SharedDirectives } from './directives';
-import { SvgIconComponent } from './components/svg-icon/svg-icon.component';
 import { AddressAutocompleteComponent } from './components/address-autocomplete/address-autocomplete.component';
+import { AppointmentChoiceComponent } from './components/appointment-choice/appointment-choice.component';
 import { HourPickerComponent } from './components/hour-picker/hour-picker.component';
+import { SvgIconComponent } from './components/svg-icon/svg-icon.component';
+import { SharedDirectives } from './directives';
+import { SharedPipes } from './pipes';
 @NgModule({
   imports: [CommonModule, FormsModule, RouterModule, FlexLayoutModule, ReactiveFormsModule],
   declarations: [
@@ -18,6 +19,7 @@ import { HourPickerComponent } from './components/hour-picker/hour-picker.compon
     SvgIconComponent,
     AddressAutocompleteComponent,
     HourPickerComponent,
+    AppointmentChoiceComponent,
   ],
   exports: [
     ...SharedPipes,
-- 
GitLab


From 46603c3e6a37cd5bd55712475ca6bdac571a10ef Mon Sep 17 00:00:00 2001
From: Etienne LOUPIAS <eloupias@grandlyon.com>
Date: Thu, 10 Aug 2023 09:06:26 +0000
Subject: [PATCH 09/19] =?UTF-8?q?Resolve=20"[5]=20-=20[Fiche=20structure,?=
 =?UTF-8?q?=20orientation,=20=C3=A9dition=20des=20fiches=20structures]=20-?=
 =?UTF-8?q?=20Offre=20du=20CNFS"?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../form/form-view/form-view.component.scss   |  3 ++
 ...gital-helping-accompaniment.component.html |  1 +
 .../structure-training-type.component.html    |  1 +
 .../structure-details.component.html          |  6 +--
 .../structure-details.component.ts            | 50 ++++++++++++-------
 5 files changed, 39 insertions(+), 22 deletions(-)

diff --git a/src/app/form/form-view/form-view.component.scss b/src/app/form/form-view/form-view.component.scss
index 9836ac435..201db3b1a 100644
--- a/src/app/form/form-view/form-view.component.scss
+++ b/src/app/form/form-view/form-view.component.scss
@@ -73,6 +73,9 @@
     font-style: italic;
     margin-top: 4px;
   }
+  .info {
+    @include lato-regular-14;
+  }
   .backArrow {
     cursor: pointer;
   }
diff --git a/src/app/form/form-view/structure-form/structure-digital-helping-accompaniment/structure-digital-helping-accompaniment.component.html b/src/app/form/form-view/structure-form/structure-digital-helping-accompaniment/structure-digital-helping-accompaniment.component.html
index 8a44acb5c..5ae9e0e6d 100644
--- a/src/app/form/form-view/structure-form/structure-digital-helping-accompaniment/structure-digital-helping-accompaniment.component.html
+++ b/src/app/form/form-view/structure-form/structure-digital-helping-accompaniment/structure-digital-helping-accompaniment.component.html
@@ -12,6 +12,7 @@
     <div class="titleContent">
       <h3>Quelles aides aux démarches en ligne votre structure propose-t-elle&nbsp;?</h3>
       <p>Facultatif</p>
+      <p class="info">L'offre des accompagnants numériques est éditable sur le profil de l'accompagnant numérique</p>
     </div>
   </div>
   <div class="btn-grid">
diff --git a/src/app/form/form-view/structure-form/structure-training-type/structure-training-type.component.html b/src/app/form/form-view/structure-form/structure-training-type/structure-training-type.component.html
index 316faf3eb..f52f5b96d 100644
--- a/src/app/form/form-view/structure-form/structure-training-type/structure-training-type.component.html
+++ b/src/app/form/form-view/structure-form/structure-training-type/structure-training-type.component.html
@@ -12,6 +12,7 @@
     <div class="titleContent">
       <h3>Quels accompagnements au numérique votre structure propose-t-elle&nbsp;?</h3>
       <p>Facultatif</p>
+      <p class="info">L'offre des accompagnants numériques est éditable sur le profil de l'accompagnant numérique</p>
     </div>
   </div>
   <app-training-type-picker
diff --git a/src/app/structure-list/components/structure-details/structure-details.component.html b/src/app/structure-list/components/structure-details/structure-details.component.html
index f2a9beee4..b966e5af9 100644
--- a/src/app/structure-list/components/structure-details/structure-details.component.html
+++ b/src/app/structure-list/components/structure-details/structure-details.component.html
@@ -18,7 +18,7 @@
       <img class="loader-gif" src="/assets/gif/loader_circle.gif" alt />
     </div>
     <!-- Content -->
-    <div *ngIf="!isLoading && structure.categories && structure.categoriesDisplay" class="structure-details-content">
+    <div *ngIf="!isLoading && structure.categoriesDisplay" class="structure-details-content">
       <!-- Action buttons bar -->
       <div class="structure-buttons hide-on-print" fxLayout="row" fxLayoutAlign="space-evenly">
         <!-- Voir le conseiller numérique - Hidden until functionnality is developed -->
@@ -339,7 +339,7 @@
       <!-- Démarches en lignes -->
       <div
         *ngIf="
-          (structure.categories.onlineProcedures && structure.categories.onlineProcedures.length) ||
+          (structure.categoriesDisplay.onlineProcedures && structure.categoriesDisplay.onlineProcedures.length) ||
           structure.otherDescription
         "
         fxLayout="column"
@@ -435,7 +435,7 @@
 
       <!-- Vente de matériel -->
       <div
-        *ngIf="structure.categories.solidarityMaterial && structure.categories.solidarityMaterial.length"
+        *ngIf="structure.categoriesDisplay.solidarityMaterial && structure.categoriesDisplay.solidarityMaterial.length"
         fxLayout="column"
         class="structure-details-block"
         fxLayoutAlign="baseline baseline"
diff --git a/src/app/structure-list/components/structure-details/structure-details.component.ts b/src/app/structure-list/components/structure-details/structure-details.component.ts
index 8879911f4..ca2bed832 100644
--- a/src/app/structure-list/components/structure-details/structure-details.component.ts
+++ b/src/app/structure-list/components/structure-details/structure-details.component.ts
@@ -2,8 +2,10 @@ import { animate, style, transition, trigger } from '@angular/animations';
 import { Location } from '@angular/common';
 import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
 import { ActivatedRoute, Router } from '@angular/router';
+import * as _ from 'lodash';
 import { ParametersService } from '../../../admin/services/parameters.service';
 import { Owner } from '../../../models/owner.model';
+import { PersonalOffer } from '../../../models/personalOffer.model';
 import { Structure } from '../../../models/structure.model';
 import { TclStopPoint } from '../../../models/tclStopPoint.model';
 import { User } from '../../../models/user.model';
@@ -14,10 +16,12 @@ import { TclService } from '../../../services/tcl.service';
 import { UserService } from '../../../services/user.service';
 import { PrintService } from '../../../shared/service/print.service';
 import { FreeWorkshop } from '../../../structure/enums/freeWorkshop.enum';
+import { Utils } from '../../../utils/utils';
 import { AccessModality } from '../../enum/access-modality.enum';
 import { Equipment } from '../../enum/equipment.enum';
 import { Category } from '../../models/category.model';
 import { SearchService } from '../../services/search.service';
+
 @Component({
   selector: 'app-structure-details',
   templateUrl: './structure-details.component.html',
@@ -68,6 +72,7 @@ export class StructureDetailsComponent implements OnInit {
     private route: ActivatedRoute,
     private location: Location,
     private router: Router,
+    private utils: Utils,
     private usersService: UserService
   ) {
     this.route.url.subscribe((url) => {
@@ -241,30 +246,34 @@ export class StructureDetailsComponent implements OnInit {
    * Map categories ids to there real names
    */
   public setServiceCategories(): void {
-    this.categories.forEach((category) => {
-      const structureModuleIds = this.structure.categories[category.id];
-      if (structureModuleIds) {
-        const moduleNames = category.modules
-          .map((module) => {
-            if (structureModuleIds.includes(module.id)) {
-              return module.name;
-            }
-          })
-          .filter((value) => value !== undefined)
-          .filter((value) => value !== 'Autres'); // Filter other categories
-        this.structure.categoriesDisplay = {
-          ...this.structure.categoriesDisplay,
-          [category.id]: moduleNames,
-        };
-      }
+    // Set category names in this.structure.categoriesDisplay
+    this.utils.setServiceCategories(this.categories, this.structure);
+
+    // Merge the structure offer with the personal offers of all members of the structure
+    this.structure.personalOffers.forEach((personalOffer: PersonalOffer) => {
+      const personalOfferDisplay = this.utils.setServiceCategories(this.categories, personalOffer);
+
+      // use lodash _.union fonction to concat array without duplicates
+      this.structure.categoriesDisplay.onlineProcedures = _.union(
+        this.structure.categoriesDisplay.onlineProcedures,
+        personalOfferDisplay.categoriesDisplay.onlineProcedures
+      );
+      this.structure.categoriesDisplay.baseSkills = _.union(
+        this.structure.categoriesDisplay.baseSkills,
+        personalOfferDisplay.categoriesDisplay.baseSkills
+      );
+      this.structure.categoriesDisplay.advancedSkills = _.union(
+        this.structure.categoriesDisplay.advancedSkills,
+        personalOfferDisplay.categoriesDisplay.advancedSkills
+      );
     });
   }
 
   public hasBaseSkills(): boolean {
-    return this.structure.categories.baseSkills?.length > 0;
+    return this.structure.categoriesDisplay.baseSkills?.length > 0;
   }
   public hasAdvancedSkills(): boolean {
-    return this.structure.categories.advancedSkills?.length > 0;
+    return this.structure.categoriesDisplay.advancedSkills?.length > 0;
   }
 
   public getTclStopPoints(): void {
@@ -285,7 +294,10 @@ export class StructureDetailsComponent implements OnInit {
   }
 
   public multipleWorkshop(): boolean {
-    if (this.structure.categories.baseSkills.length + this.structure.categories.advancedSkills.length > 1) {
+    if (
+      this.structure.categoriesDisplay.baseSkills.length + this.structure.categoriesDisplay.advancedSkills.length >
+      1
+    ) {
       return true;
     }
     return false;
-- 
GitLab


From a3bdb2128082ba73ae755b8b01d04a64baad8c00 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marl=C3=A8ne=20SIMONDANT?= <msimondant@grandlyon.com>
Date: Thu, 10 Aug 2023 14:40:03 +0000
Subject: [PATCH 10/19] feat(structureDetails): make an appointement from a
 structure (RDV en ligne V2)

---
 .../needs-selection.component.ts              | 15 ++++-
 .../appointment-end.component.html            |  2 +-
 .../appointment-end.component.ts              |  2 +-
 .../make-appointment.component.html           | 28 +++++++-
 .../make-appointment.component.scss           | 20 ++++++
 .../make-appointment.component.ts             | 53 ++++++++++++++-
 .../onlineDemarch-form.component.html         |  5 +-
 .../onlineDemarch-form.component.ts           | 16 +++--
 .../orientation-form-view.component.html      |  1 +
 .../orientation-form-view.component.ts        | 64 +++++++++++++++++--
 src/app/models/owner.model.ts                 |  2 +
 src/app/models/structure.model.ts             |  1 +
 src/app/services/orientation.service.ts       |  8 +++
 .../components/card/card.component.html       |  5 +-
 .../structure-details.component.html          |  6 +-
 .../structure-details.component.ts            | 10 +--
 16 files changed, 202 insertions(+), 36 deletions(-)

diff --git a/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.ts b/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.ts
index abfabedf2..a725d7b14 100644
--- a/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.ts
+++ b/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.ts
@@ -1,4 +1,5 @@
-import { Component, EventEmitter, Input, Output } from '@angular/core';
+import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
+import { OrientationService } from '../../../../services/orientation.service';
 import { INeedItem, OrientationUtils } from '../../../../utils/orientationUtils';
 import { NeedsType } from '../../enums/needs.enum';
 
@@ -6,12 +7,22 @@ import { NeedsType } from '../../enums/needs.enum';
   selector: 'app-needs-selection',
   templateUrl: './needs-selection.component.html',
 })
-export class NeedsSelectionComponent {
+export class NeedsSelectionComponent implements OnInit {
   @Input() currentNeed: NeedsType;
   @Output() setNeedType = new EventEmitter<any>();
   @Output() validate = new EventEmitter<any>();
   public needsList: INeedItem[] = new OrientationUtils().needsList;
 
+  constructor(public orientationService: OrientationService) {}
+
+  ngOnInit() {
+    if (this.orientationService.rdvUser || this.orientationService.rdvStructure) {
+      this.needsList = this.needsList.filter(
+        (item: INeedItem) => item.key == NeedsType.onlineDemarch || item.key == NeedsType.learnSkills
+      );
+    }
+  }
+
   public selectNeed(event: NeedsType) {
     this.setNeedType.emit(event);
   }
diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.html b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.html
index 4d4d6a997..d04bcb090 100644
--- a/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.html
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.html
@@ -3,7 +3,7 @@
   <h2>Votre demande de RDV a été transmise !</h2>
   <p>
     La demande de <b>rendez-vous auprès d’un conseiller ou une conseillère numérique</b> a bien été transmise à
-    <b>{{ socialWorkerName.name | userName }} {{ socialWorkerName.surname | uppercase }}</b> au sein de la structure
+    <b>{{ socialWorker.name | userName }} {{ socialWorker.surname | uppercase }}</b> au sein de la structure
     <b>{{ structureRDV.structureName }}</b>
   </p>
 </div>
diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.ts b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.ts
index bfe24100d..98129e7c6 100644
--- a/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.ts
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.ts
@@ -12,7 +12,7 @@ import { NotificationService } from '../../../../../services/notification.servic
 export class AppointmentEndComponent implements OnInit {
   @Input() form: UntypedFormGroup;
   @Input() structureRDV: Structure;
-  @Input() socialWorkerName: Owner;
+  @Input() socialWorker: Owner;
   @Output() setResetOrientation = new EventEmitter();
   @Output() checkValidation = new EventEmitter<any>();
 
diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html
index 12291aefe..130932882 100644
--- a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html
@@ -1,4 +1,4 @@
-<form [formGroup]="form">
+<form *ngIf="owners?.length > 0" [formGroup]="form">
   <div class="title">
     <h3>Vous allez prendre rendez-vous avec la structure :</h3>
   </div>
@@ -61,3 +61,29 @@
     </div>
   </div>
 </form>
+<div *ngIf="owners?.length === 0" class="noOwner">
+  <img src="../../../../../../assets/img/joinRefused.svg" alt="" />
+  <span *ngIf="isBaseskills" class="info">
+    <h2>
+      Aucun accompagnant·e numérique de cette structure ne peut répondre à
+      <span [ngPlural]="needsList.length"
+        ><ng-template ngPluralCase="1">votre besoin</ng-template
+        ><ng-template ngPluralCase="other">l'ensemble de ces besoins</ng-template>
+      </span>
+      :
+    </h2>
+    <span *ngFor="let item of needsList; last as isLast">{{ item }}<span *ngIf="!isLast">, </span> </span>
+  </span>
+  <span *ngIf="isOnlineProcedures" class="info">
+    <h2>
+      Aucun accompagnant·e numérique de cette structure ne peut accompagner pour
+      <span [ngPlural]="needsList.length"
+        ><ng-template ngPluralCase="1">cette démarche</ng-template
+        ><ng-template ngPluralCase="other">l'ensemble de ces démarches</ng-template>
+      </span>
+      en ligne :
+    </h2>
+    <span *ngFor="let item of needsList; last as isLast">{{ item }}<span *ngIf="!isLast">, </span> </span>
+  </span>
+  <p>Renouvelez votre recherche avec des critères différents ou accédez à la cartographie</p>
+</div>
diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.scss b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.scss
index d668532e2..57ed7ab47 100644
--- a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.scss
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.scss
@@ -62,6 +62,7 @@
   }
   label {
     display: flex;
+    flex: 1;
     flex-direction: row;
     cursor: pointer;
   }
@@ -77,3 +78,22 @@
     margin-top: 8px;
   }
 }
+.noOwner,
+.noOwner > span {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  text-align: center;
+  justify-content: center;
+  height: 90%;
+  h2 {
+    margin-top: 2rem;
+    margin-bottom: 0.5rem;
+    max-width: 600px;
+    font-weight: 600px;
+  }
+  p {
+    text-align: center;
+    max-width: 600px;
+  }
+}
diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.ts b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.ts
index 639e6af71..c11c2abe0 100644
--- a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.ts
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.ts
@@ -15,18 +15,65 @@ export class MakeAppointmentComponent implements OnInit {
   @Input() form: UntypedFormGroup;
   @Input() structureRDV: Structure;
   @Output() checkValidation = new EventEmitter<any>();
-  @Output() socialWorkerName = new EventEmitter<Owner>();
+  @Output() socialWorker = new EventEmitter<Owner>();
+  @Output() setResetOrientation = new EventEmitter();
 
   public owners: Owner[];
-  //public selectedOption: string;
+  public isBaseskills: boolean = false;
+  public isOnlineProcedures: boolean = false;
+  public needsList = [];
 
   constructor(private structureService: StructureService) {}
 
   ngOnInit(): void {
     this.checkValidation.emit();
 
+    // Filters owners that accept appointments, have personal offers in the selected structure and match the needs previously selected
     this.findOwners(this.structureRDV._id).subscribe((owners) => {
+      let filteredOwners = [];
       this.owners = owners.filter((owner) => owner.withAppointment && owner.job?.hasPersonalOffer);
+      const onlineDemarcheType = this.form.get('onlineDemarcheType').value;
+      const filtersOnOffers = { onlineProcedures: [], baseSkills: [] };
+      // build arrays containing the needs the user selected in the form
+      onlineDemarcheType.forEach((filter) => {
+        if (filter.name === 'onlineProcedures') {
+          filtersOnOffers.onlineProcedures.push(filter.value);
+          this.isOnlineProcedures = true;
+        }
+        if (filter.name === 'baseSkills') {
+          filtersOnOffers.baseSkills.push(filter.value);
+          this.isBaseskills = true;
+        }
+      });
+      // make an array with the IDs of the structure's personalOffers
+      const structurePersonalOffersId = this.structureRDV.personalOffers.map((spo) => spo._id);
+      // for each owner
+      this.owners.forEach((owner) => {
+        // check each of its personnalOffers
+        owner.personalOffers?.forEach((po) => {
+          // if this personalOffer matches one of the structure's personalOffers
+          if (structurePersonalOffersId.includes(po._id)) {
+            // and if the needs the user selected are all part of the personalOffer, keep the owner for display
+            if (
+              filtersOnOffers.onlineProcedures.every((offer) => po.categories.onlineProcedures.includes(offer)) &&
+              filtersOnOffers.baseSkills.every((offer) => po.categories.baseSkills.includes(offer))
+            ) {
+              if (!filteredOwners.includes(owner)) {
+                filteredOwners.push(owner);
+              }
+            }
+          }
+        });
+      });
+
+      this.owners = filteredOwners;
+
+      if (this.owners.length === 0) {
+        this.form.get('onlineDemarcheType')?.value.forEach((element) => {
+          this.needsList.push(element.text);
+        });
+        this.setResetOrientation.emit();
+      }
     });
   }
 
@@ -39,7 +86,7 @@ export class MakeAppointmentComponent implements OnInit {
   }
 
   public onRadioChange(socialWorker: Owner): void {
-    this.socialWorkerName.emit(socialWorker);
+    this.socialWorker.emit(socialWorker);
     this.checkValidation.emit();
   }
 
diff --git a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html
index c520d08a9..953cb6e13 100644
--- a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html
+++ b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html
@@ -49,7 +49,8 @@
     [form]="form"
     [structureRDV]="structureRDV"
     (checkValidation)="checkValidation()"
-    (socialWorkerName)="getSocialWorkerName($event)"
+    (socialWorker)="getSocialWorker($event)"
+    (setResetOrientation)="showResetOrientation()"
   />
   <app-mediation-beneficiary-info
     *ngIf="currentStep === onlineDemarchesAppointmentSteps.mediationBeneficiaryInfo"
@@ -61,7 +62,7 @@
     *ngIf="currentStep === onlineDemarchesAppointmentSteps.rdvEnd"
     [form]="form"
     [structureRDV]="structureRDV"
-    [socialWorkerName]="socialWorkerName"
+    [socialWorker]="socialWorker"
     (checkValidation)="checkValidation()"
     (setResetOrientation)="showResetOrientation()"
   />
diff --git a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts
index 139e79bf2..06f60f701 100644
--- a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts
+++ b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts
@@ -3,6 +3,7 @@ import { UntypedFormArray, UntypedFormControl, UntypedFormGroup } from '@angular
 import { Owner } from '../../../models/owner.model';
 import { Structure } from '../../../models/structure.model';
 import { User } from '../../../models/user.model';
+import { OrientationService } from '../../../services/orientation.service';
 import { Category } from '../../../structure-list/models/category.model';
 import { Filter } from '../../../structure-list/models/filter.model';
 import { OrientationUtils } from '../../../utils/orientationUtils';
@@ -27,14 +28,14 @@ export class OnlineDemarchFormComponent {
   @Input() filters: Filter[] = [];
   @Input() profile: User;
   @Input() categories: { [key: string]: Category };
+  @Input() structureRDV: Structure;
   @Output() validatePage = new EventEmitter<any>();
   @Output() validateStructureRDV = new EventEmitter<Structure>();
   @Output() setResetOrientation = new EventEmitter<any>();
 
   public orientationUtils = new OrientationUtils();
   public pagesValidation: any[] = [];
-  public structureRDV: Structure = null;
-  public socialWorkerName: Owner;
+  public socialWorker: Owner;
 
   // Enums
   public HotlineMediationStepsEnum = HotlineMediationSteps;
@@ -44,6 +45,8 @@ export class OnlineDemarchFormComponent {
   public onlineDemarchesAppointmentSteps = AppointmentSteps;
   public recapsType = RecapsType;
 
+  constructor(public orientationService: OrientationService) {}
+
   public checkValidation(event?: any): void {
     switch (this.currentType) {
       case OnlineDemarche.onlineMediation:
@@ -72,7 +75,8 @@ export class OnlineDemarchFormComponent {
         break;
       case OnlineDemarche.appointment:
         if (this.currentStep === AppointmentSteps.carto - 1) {
-          this.structureRDV = null;
+          // if rdv from structure details, don't reinit the structureRDV variable
+          if (!this.orientationService.rdvStructure) this.structureRDV = null;
         }
         if (this.currentStep === AppointmentSteps.carto) {
           this.structureRDV = event;
@@ -91,9 +95,9 @@ export class OnlineDemarchFormComponent {
     }
   }
 
-  /* Get socialWorkerName from makeAppointment to display it in rdvEnd */
-  public getSocialWorkerName(item: Owner) {
-    this.socialWorkerName = item;
+  /* Get socialWorker from makeAppointment to display it in rdvEnd */
+  public getSocialWorker(item: Owner) {
+    this.socialWorker = item;
   }
 
   public updatePublicChoice({ formControlName, choice }: { formControlName: string; choice: string }): void {
diff --git a/src/app/form/orientation-form-view/orientation-form-view.component.html b/src/app/form/orientation-form-view/orientation-form-view.component.html
index 2be04ecc3..43e0afe1e 100644
--- a/src/app/form/orientation-form-view/orientation-form-view.component.html
+++ b/src/app/form/orientation-form-view/orientation-form-view.component.html
@@ -37,6 +37,7 @@
         [filters]="filters"
         [profile]="profile"
         [categories]="categories"
+        [structureRDV]="orientationService.rdvStructure"
         (validatePage)="validatePage($event)"
         (validateStructureRDV)="validateStructureRDV($event)"
         (setResetOrientation)="setResetOrientation()"
diff --git a/src/app/form/orientation-form-view/orientation-form-view.component.ts b/src/app/form/orientation-form-view/orientation-form-view.component.ts
index c5e78d4ec..6f460d1ef 100644
--- a/src/app/form/orientation-form-view/orientation-form-view.component.ts
+++ b/src/app/form/orientation-form-view/orientation-form-view.component.ts
@@ -106,7 +106,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
   private resolve: Function;
 
   constructor(
-    private orientationService: OrientationService,
+    public orientationService: OrientationService,
     private notificationService: NotificationService,
     private authService: AuthService,
     private profileService: ProfileService,
@@ -118,6 +118,17 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
     this.setCategories();
   }
   async ngOnInit() {
+    this.orientationService.rdvUser = null;
+    if (history.state.rdvUser) {
+      this.orientationService.rdvUser = new User(history.state.rdvUser);
+    }
+
+    this.orientationService.rdvStructure = null;
+    if (history.state.rdvStructure) {
+      // Create new Structure object to call Structure functions (getTypeStructureIcon,...)
+      this.orientationService.rdvStructure = new Structure(history.state.rdvStructure);
+    }
+
     if (!this.authService.isLoggedIn()) {
       this.showLoginModal = true;
     } else {
@@ -236,6 +247,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
     window.print();
     setTimeout(() => {
       this.canDeactivate = true;
+      history.pushState({ rdvStructure: null, userStructure: null }, '', '/orientation');
       window.location.reload();
     }, 100);
   }
@@ -345,24 +357,38 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
           this.setFilters('selfServiceMaterial');
           // Switch to structure list form
           this.setOnlineEquipmentsForm();
-          break;
+          return;
         case NeedsType.equipmentBuy:
           this.previousNeedType = NeedsType.equipmentBuy;
           this.setFilters('solidarityMaterial');
           // Switch to structure list form
           this.setOnlineEquipmentsForm();
-          break;
+          return;
         case NeedsType.learnSkills:
           this.previousNeedType = NeedsType.learnSkills;
           this.setFilters('baseSkills');
           this.needType = NeedsType.onlineDemarch;
-          this.currentStep = OnlineDemarchesCommonSteps.accompanimentType;
+          if (this.orientationService.rdvStructure || this.orientationService.rdvUser) {
+            // if rdv from structure details or user, continue function below to skip accompanimentType and init onlineDemarcheForm
+            this.currentStep = OnlineDemarchesCommonSteps.accompanimentType - 1;
+          } else {
+            this.currentStep = OnlineDemarchesCommonSteps.accompanimentType;
+            return;
+          }
           break;
       }
-      return;
     }
     // Online demarches
     if (this.needType === NeedsType.onlineDemarch) {
+      if (
+        this.currentType === OnlineDemarche.common &&
+        this.currentStep === OnlineDemarchesCommonSteps.accompanimentType - 1 &&
+        (this.orientationService.rdvStructure || this.orientationService.rdvUser)
+      ) {
+        this.onlineDemarcheForm.get('accompanimentType').patchValue(OnlineDemarche.appointment);
+        this.currentStep++;
+      }
+
       if (
         this.currentType === OnlineDemarche.common &&
         this.currentStep === OnlineDemarchesCommonSteps.accompanimentType
@@ -441,11 +467,22 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
 
       // after last page, go to new orientation
       if (this.currentStep === AppointmentSteps.rdvEnd) {
+        history.pushState({ rdvStructure: null, userStructure: null }, '', '/orientation');
         window.location.reload();
         return;
       }
     }
 
+    if (
+      this.currentType === OnlineDemarche.appointment &&
+      this.currentStep === AppointmentSteps.pmrAccess - 1 &&
+      this.orientationService.rdvStructure
+    ) {
+      this.onlineDemarcheForm.get('structureRDV').patchValue(this.orientationService.rdvStructure._id);
+      // skip pmrAccess, location and carto
+      this.currentStep += 3;
+    }
+
     // Default case
     if (this.currentStep === null) {
       // handle the form start
@@ -476,6 +513,12 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
 
     // Appointment previous page
     if (this.currentType === OnlineDemarche.appointment) {
+      if (
+        this.currentStep === AppointmentSteps.pmrAccess + 1 &&
+        (this.orientationService.rdvStructure || this.orientationService.rdvUser)
+      ) {
+        this.currentStep--;
+      }
       if (this.currentStep === AppointmentSteps.structureOrientator + 1) {
         this.skipStructureOrientator(false);
       }
@@ -485,6 +528,14 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
       if (this.currentStep === AppointmentSteps.makeAppointment) {
         this.fullScreen = true;
       }
+      if (
+        this.currentStep === AppointmentSteps.makeAppointment &&
+        (this.orientationService.rdvStructure || this.orientationService.rdvUser)
+      ) {
+        this.fullScreen = false;
+        this.currentStep -= 3;
+        this.skipStructureOrientator(false);
+      }
     }
 
     // Default case for first form step. If there was a previous form (like filterForm) we go back to this form
@@ -495,6 +546,9 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
           this.currentStep = OnlineDemarchesCommonSteps.accompanimentType;
           this.onlineDemarcheForm = this.orientationUtils.createOnlineDemarchesForm();
           this.previousNeedType = null;
+          if (this.orientationService.rdvStructure || this.orientationService.rdvUser) {
+            this.currentStep--;
+          }
           return;
         case NeedsType.learnSkills:
         case NeedsType.equipmentAccess:
diff --git a/src/app/models/owner.model.ts b/src/app/models/owner.model.ts
index f80b5913b..89c4226c1 100644
--- a/src/app/models/owner.model.ts
+++ b/src/app/models/owner.model.ts
@@ -1,5 +1,6 @@
 import { Employer } from './employer.model';
 import { Job } from './job.model';
+import { PersonalOffer } from './personalOffer.model';
 
 export class Owner {
   email: string;
@@ -9,4 +10,5 @@ export class Owner {
   job?: Job;
   employer?: Employer;
   withAppointment?: boolean;
+  personalOffers: PersonalOffer[];
 }
diff --git a/src/app/models/structure.model.ts b/src/app/models/structure.model.ts
index 6a66593ca..f8a5ac537 100644
--- a/src/app/models/structure.model.ts
+++ b/src/app/models/structure.model.ts
@@ -79,6 +79,7 @@ export class Structure {
         genre: obj?.categories?.genre || [],
         selfServiceMaterial: obj?.categories?.selfServiceMaterial || [],
         solidarityMaterial: obj?.categories?.solidarityMaterial || [],
+        withAppointment: obj?.withAppointment,
       },
     });
   }
diff --git a/src/app/services/orientation.service.ts b/src/app/services/orientation.service.ts
index a3b63ac74..aedbef8a9 100644
--- a/src/app/services/orientation.service.ts
+++ b/src/app/services/orientation.service.ts
@@ -3,6 +3,8 @@ import { Injectable } from '@angular/core';
 import { Observable } from 'rxjs';
 import { IAppointment } from '../form/orientation-form-view/interfaces/appointment.interface';
 import { IOnlineMediation } from '../form/orientation-form-view/interfaces/onlineMediation.interface';
+import { Structure } from '../models/structure.model';
+import { User } from '../models/user.model';
 
 @Injectable({
   providedIn: 'root',
@@ -10,6 +12,12 @@ import { IOnlineMediation } from '../form/orientation-form-view/interfaces/onlin
 export class OrientationService {
   constructor(private http: HttpClient) {}
 
+  // User for rdv from annuaire
+  public rdvUser: User;
+
+  // Structure for rdv from structure-details
+  public rdvStructure: Structure;
+
   /**
    * Send appointment to server
    */
diff --git a/src/app/structure-list/components/card/card.component.html b/src/app/structure-list/components/card/card.component.html
index eab17fada..26c94a554 100644
--- a/src/app/structure-list/components/card/card.component.html
+++ b/src/app/structure-list/components/card/card.component.html
@@ -14,11 +14,10 @@
         <div fxLayout="column" fxLayoutAlign="end">
           <div fxLayout="row" class="structure-name-container">
             <span class="structure-name" [ngClass]="{ notClaimed: !isClaimed }">{{ structure.structureName }}</span>
-            <!-- rdv disabled waiting for reworking -->
-            <span *ngIf="structure.idCNFS && !isOrientation" class="rdv">
+            <!-- rdv -->
+            <span *ngIf="structure.withAppointment && !isOrientation" class="rdv">
               <app-svg-icon [type]="'ico'" [icon]="'rdv'" [iconColor]="'black'" [iconClass]="'icon-22'"></app-svg-icon>
             </span>
-            <!-- End-->
           </div>
           <span class="typeStructure" [ngClass]="{ typeStructureOrientation: isOrientation }">{{
             structure.getLabelTypeStructure()
diff --git a/src/app/structure-list/components/structure-details/structure-details.component.html b/src/app/structure-list/components/structure-details/structure-details.component.html
index b966e5af9..def04e1ed 100644
--- a/src/app/structure-list/components/structure-details/structure-details.component.html
+++ b/src/app/structure-list/components/structure-details/structure-details.component.html
@@ -33,12 +33,12 @@
         <div class="iconTitle">Voir le conseiller numérique</div>
       </div-->
         <div
-          *ngIf="structure.idCNFS && showRdv"
+          *ngIf="structure.withAppointment"
           class="clickableDiv"
           role="button"
           tabindex="0"
-          (click)="goToRDVS()"
-          (keyup.enter)="goToRDVS()"
+          [routerLink]="['/orientation']"
+          [state]="{ rdvStructure: structure }"
         >
           <app-svg-icon class="icon" [type]="'ico'" [icon]="'rdvDetail'" [iconClass]="'icon-32'"></app-svg-icon>
           <div class="iconTitle">Prendre rdv</div>
diff --git a/src/app/structure-list/components/structure-details/structure-details.component.ts b/src/app/structure-list/components/structure-details/structure-details.component.ts
index ca2bed832..f2f13c521 100644
--- a/src/app/structure-list/components/structure-details/structure-details.component.ts
+++ b/src/app/structure-list/components/structure-details/structure-details.component.ts
@@ -43,7 +43,6 @@ import { SearchService } from '../../services/search.service';
 export class StructureDetailsComponent implements OnInit {
   @Input() public structure: Structure;
   @Output() public closeDetails: EventEmitter<boolean> = new EventEmitter<boolean>();
-  public showRdv = true;
   public accessModality = AccessModality;
   public categories: Category[] = [];
   public tclStopPoints: TclStopPoint[] = [];
@@ -102,9 +101,6 @@ export class StructureDetailsComponent implements OnInit {
       if (data.fullScreen) {
         this.fullScreen = true;
       }
-      if (data.meeting == false) {
-        this.showRdv = data.meeting;
-      }
     });
   }
 
@@ -243,7 +239,7 @@ export class StructureDetailsComponent implements OnInit {
   }
 
   /**
-   * Map categories ids to there real names
+   * Map categories ids to their real names
    */
   public setServiceCategories(): void {
     // Set category names in this.structure.categoriesDisplay
@@ -311,10 +307,6 @@ export class StructureDetailsComponent implements OnInit {
     window.open(url, '_blank');
   }
 
-  public goToRDVS(): void {
-    //this.rdvsService.goToRDVS(this.structure.idCNFS);
-  }
-
   public displayTrainings(): boolean {
     if (this.structure.categoriesDisplay === undefined) return false;
 
-- 
GitLab


From e6619f2ddbaf275cadf9993beb085da7a436dae2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marl=C3=A8ne=20SIMONDANT?= <msimondant@grandlyon.com>
Date: Fri, 11 Aug 2023 08:12:35 +0000
Subject: [PATCH 11/19] feat(annuaire) : make an appointment from the registry
 (rdv en ligne V2)

---
 .../appointment-end.component.html            |  12 +-
 .../appointment-end.component.ts              |   7 +-
 .../make-appointment.component.html           | 137 ++++++++++++------
 .../make-appointment.component.scss           |  40 ++---
 .../make-appointment.component.ts             | 136 ++++++++++++-----
 .../onlineDemarch-form.component.html         |   2 +
 .../onlineDemarch-form.component.ts           |   5 +-
 .../orientation-form-view.component.ts        |   6 +-
 src/app/models/structure.model.ts             |   1 -
 src/app/profile/profile.component.html        |  11 ++
 src/app/profile/profile.component.scss        |   4 +
 .../components/button/button.component.scss   |  14 --
 .../components/card/card.component.ts         |  29 ++--
 src/app/utils/orientationUtils.ts             |   2 +-
 src/assets/scss/_color.scss                   |   1 -
 15 files changed, 271 insertions(+), 136 deletions(-)

diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.html b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.html
index d04bcb090..e863fbfa7 100644
--- a/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.html
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.html
@@ -1,13 +1,17 @@
-<div *ngIf="structureRDV" class="container">
+<div *ngIf="hasStructure" class="container">
   <img src="../../../../../../assets/form/structureCreated.svg" alt="rdv illustration" />
   <h2>Votre demande de RDV a été transmise !</h2>
   <p>
     La demande de <b>rendez-vous auprès d’un conseiller ou une conseillère numérique</b> a bien été transmise à
-    <b>{{ socialWorker.name | userName }} {{ socialWorker.surname | uppercase }}</b> au sein de la structure
-    <b>{{ structureRDV.structureName }}</b>
+    <b
+      >{{ socialWorker?.name || orientationService.rdvUser?.name | userName }}
+      {{ socialWorker?.surname || orientationService.rdvUser?.surname | uppercase }}</b
+    >
+    au sein de la structure
+    <b>{{ structureRDV?.structureName || selectedStructureRDV?.structureName }}</b>
   </p>
 </div>
-<div *ngIf="!structureRDV" class="container">
+<div *ngIf="!hasStructure" class="container">
   <img src="../../../../../../assets/img/joinRefused.svg" alt="rdv illustration" />
   <h2>Aucune structure correspondant à votre recherche ne propose de rendez-vous</h2>
   <p>Renouvelez votre recherche avec des critères différents ou accédez à la cartographie</p>
diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.ts b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.ts
index 98129e7c6..d00146647 100644
--- a/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.ts
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/appointment-end/appointment-end.component.ts
@@ -3,6 +3,7 @@ import { UntypedFormGroup } from '@angular/forms';
 import { Owner } from '../../../../../models/owner.model';
 import { Structure } from '../../../../../models/structure.model';
 import { NotificationService } from '../../../../../services/notification.service';
+import { OrientationService } from '../../../../../services/orientation.service';
 
 @Component({
   selector: 'app-appointment-end',
@@ -13,13 +14,17 @@ export class AppointmentEndComponent implements OnInit {
   @Input() form: UntypedFormGroup;
   @Input() structureRDV: Structure;
   @Input() socialWorker: Owner;
+  @Input() selectedStructureRDV: Structure;
   @Output() setResetOrientation = new EventEmitter();
   @Output() checkValidation = new EventEmitter<any>();
 
-  constructor(private notificationService: NotificationService) {}
+  public hasStructure: boolean = false;
+
+  constructor(private notificationService: NotificationService, public orientationService: OrientationService) {}
 
   async ngOnInit(): Promise<void> {
     this.checkValidation.emit();
+    if (this.form.get('structureRDV').value || this.structureRDV) this.hasStructure = true;
     try {
       if (!this.structureRDV) {
         this.setResetOrientation.emit();
diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html
index 130932882..99492b121 100644
--- a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html
@@ -1,52 +1,100 @@
-<form *ngIf="owners?.length > 0" [formGroup]="form">
+<form *ngIf="owners?.length > 0 || (structures?.length > 0 && structuresListReady)" [formGroup]="form">
   <div class="title">
     <h3>Vous allez prendre rendez-vous avec la structure :</h3>
   </div>
 
-  <div class="structure" tabindex="0" fxLayout="column">
-    <div fxLayout="row" fxLayoutAlign="space-between center" fxLayoutGap="16px">
-      <div fxLayout="row" fxLayoutAlign="center center" fxLayoutGap="8px">
-        <app-svg-icon [type]="'ico'" [icon]="structureRDV?.getTypeStructureIcon()" [iconClass]="'icon-52'" />
-        <div fxLayout="column" fxLayoutAlign="end">
-          <div fxLayout="row" class="structure-name-container">
-            <span class="structure-name">{{ structureRDV.structureName }}</span>
+  <div *ngIf="owners?.length > 0">
+    <div class="header" tabindex="0" fxLayout="column">
+      <app-card
+        class="structure-card"
+        role="listitem"
+        [noDetails]="true"
+        [structure]="structureRDV"
+        [isOrientation]="false"
+        [isOrientationRdv]="false"
+      ></app-card>
+    </div>
+    <div class="selectList">
+      <h4>Sélectionnez un·e accompagnant·e numérique</h4>
+      <div
+        *ngFor="let owner of owners"
+        class="card-single selected"
+        fxLayout="row"
+        fxLayoutAlign="left center"
+        fxLayoutGap="16px"
+        [ngClass]="{ selected: this.form.get('socialWorkerId')?.value === owner._id }"
+      >
+        <input
+          type="radio"
+          formControlName="socialWorkerId"
+          id="{{ owner._id }}"
+          value="{{ owner._id }}"
+          (change)="onSocialWorkerRadioChange(owner)"
+        />
+        <label for="{{ owner._id }}">
+          <app-svg-icon class="" [type]="'avatar'" [icon]="'defaultAvatar'" [iconClass]="'icon-40'" />
+          <div fxLayout="column" fxLayoutAlign="start">
+            <div fxLayout="row" class="selectListNameContainer">
+              <span class="selectListName">{{ owner.name | userName }} {{ owner.surname | uppercase }}</span>
+            </div>
+            <span class="selectListJob">{{ owner.job?.name }}</span>
           </div>
-          <span class="structure-type">{{ structureRDV.getLabelTypeStructure() }}</span>
-        </div>
-      </div>
-      <div fxLayout="column" fxLayoutAlign="none end">
-        <div class="structure-place">{{ structureRDV.address.commune }}</div>
+        </label>
       </div>
     </div>
   </div>
-  <div class="profile">
-    <h4>Sélectionnez un·e accompagnant·e numérique</h4>
-    <div
-      *ngFor="let owner of owners"
-      class="profile-single selected"
-      fxLayout="row"
-      fxLayoutAlign="left center"
-      fxLayoutGap="16px"
-      [ngClass]="{ selected: this.form.get('socialWorkerId')?.value === owner._id }"
-    >
-      <input
-        type="radio"
-        formControlName="socialWorkerId"
-        id="{{ owner._id }}"
-        value="{{ owner._id }}"
-        (change)="onRadioChange(owner)"
-      />
-      <label for="{{ owner._id }}">
-        <app-svg-icon class="avatar" [type]="'avatar'" [icon]="'defaultAvatar'" [iconClass]="'icon-40'" />
-        <div fxLayout="column" fxLayoutAlign="start">
-          <div fxLayout="row" class="profile-name-container">
-            <span class="profile-name">{{ owner.name | userName }} {{ owner.surname | uppercase }}</span>
+
+  <div *ngIf="structures?.length > 0">
+    <div class="header" tabindex="0" fxLayout="column">
+      <div fxLayout="row" fxLayoutAlign="space-between center" fxLayoutGap="16px">
+        <div fxLayout="row" fxLayoutAlign="center center" fxLayoutGap="8px">
+          <app-svg-icon class="avatar" [type]="'avatar'" [icon]="'defaultAvatar'" [iconClass]="'icon-40'" />
+          <div fxLayout="column" fxLayoutAlign="end">
+            <div fxLayout="row" class="headerNameContainer">
+              <span class="headerName"
+                >{{ orientationService.rdvUser.name | userName }}
+                {{ orientationService.rdvUser.surname | uppercase }}</span
+              >
+            </div>
+            <span class="headerType">{{ orientationService.rdvUser.job.name }}</span>
           </div>
-          <span class="profile-job">{{ owner.job?.name }}</span>
         </div>
-      </label>
+      </div>
+    </div>
+    <div class="selectList">
+      <h4>Sélectionnez la structure de votre choix</h4>
+      <div
+        *ngFor="let structure of structures"
+        class="card-single structure-single selected"
+        fxLayout="row"
+        fxLayoutAlign="left center"
+        fxLayoutGap="16px"
+        [ngClass]="{ selected: selectedOption === structure._id }"
+      >
+        <input
+          type="radio"
+          formControlName="structureRDV"
+          id="{{ structure._id }}"
+          value="{{ structure._id }}"
+          (click)="onStructureRadioChange(structure)"
+          (keyup.enter)="onStructureRadioChange(structure)"
+        />
+        <label class="listCards" for="{{ structure._id }}">
+          <app-card
+            class="structure-card"
+            role="listitem"
+            [noDetails]="true"
+            [structure]="structure"
+            [isOrientation]="false"
+            [isOrientationRdv]="false"
+            (click)="onStructureRadioChange(structure)"
+            (keyup.enter)="onStructureRadioChange(structure)"
+          ></app-card>
+        </label>
+      </div>
     </div>
   </div>
+
   <div class="details">
     <label for="details-field">Précisez les besoins de la personne (disponibilités...) :</label>
     <div fxLayout="row" fxLayoutAlign="left center" fxLayoutGap="16px">
@@ -61,29 +109,34 @@
     </div>
   </div>
 </form>
-<div *ngIf="owners?.length === 0" class="noOwner">
+
+<div *ngIf="owners?.length === 0 || (structures?.length === 0 && structuresListReady)" class="noResult">
   <img src="../../../../../../assets/img/joinRefused.svg" alt="" />
   <span *ngIf="isBaseskills" class="info">
     <h2>
       Aucun accompagnant·e numérique de cette structure ne peut répondre à
-      <span [ngPlural]="needsList.length"
+      <span [ngPlural]="this.form.get('onlineDemarcheType')?.value.length"
         ><ng-template ngPluralCase="1">votre besoin</ng-template
         ><ng-template ngPluralCase="other">l'ensemble de ces besoins</ng-template>
       </span>
       :
     </h2>
-    <span *ngFor="let item of needsList; last as isLast">{{ item }}<span *ngIf="!isLast">, </span> </span>
+    <span *ngFor="let item of this.form.get('onlineDemarcheType')?.value; last as isLast"
+      >{{ item.text }}<span *ngIf="!isLast">, </span>
+    </span>
   </span>
   <span *ngIf="isOnlineProcedures" class="info">
     <h2>
       Aucun accompagnant·e numérique de cette structure ne peut accompagner pour
-      <span [ngPlural]="needsList.length"
+      <span [ngPlural]="this.form.get('onlineDemarcheType')?.value.length"
         ><ng-template ngPluralCase="1">cette démarche</ng-template
         ><ng-template ngPluralCase="other">l'ensemble de ces démarches</ng-template>
       </span>
       en ligne :
     </h2>
-    <span *ngFor="let item of needsList; last as isLast">{{ item }}<span *ngIf="!isLast">, </span> </span>
+    <span *ngFor="let item of this.form.get('onlineDemarcheType')?.value; last as isLast"
+      >{{ item.text }}<span *ngIf="!isLast">, </span>
+    </span>
   </span>
   <p>Renouvelez votre recherche avec des critères différents ou accédez à la cartographie</p>
 </div>
diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.scss b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.scss
index 57ed7ab47..d472f3ba7 100644
--- a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.scss
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.scss
@@ -1,32 +1,32 @@
 @import 'color';
 @import 'typography';
 
-.structure {
+.header {
   margin-top: 24px;
-  padding: 24px 32px 24px 48px;
+  padding: 0 48px;
   border: 2px solid $grey-6;
   border-radius: 8px 8px 0 0;
   min-height: 110px;
   display: flex;
   justify-content: center;
-  .typeStructure {
+  ::ng-deep .avatar svg {
+    top: -0.125em;
+  }
+  .headerType {
     color: $grey-3;
     @include lato-regular-16;
     font-style: italic;
   }
-  .structure-name-container {
+  .headerNameContainer {
     align-items: center;
   }
-  .structure-name {
+  .headerName {
     @include lato-bold-18;
     color: $grey-1;
     width: 100%;
   }
-  .structure-place {
-    color: $grey-3;
-  }
 }
-.profile {
+.selectList {
   padding: 0 32px 24px 48px;
   border: 2px solid $grey-6;
   border-top: none;
@@ -34,22 +34,25 @@
   display: flex;
   justify-content: center;
   flex-direction: column;
-  .profile-single {
+  .card-single {
     padding: 16px 8px;
     border: 1px solid transparent;
     &.selected {
       border-color: black;
     }
+    &.structure-single {
+      padding: 0 12px;
+    }
   }
-  .profile-job {
+  .selectListJob {
     color: $grey-3;
     @include lato-regular-16;
     font-style: italic;
   }
-  .profile-name-container {
+  .selectListNameContainer {
     align-items: center;
   }
-  .profile-name {
+  .selectListName {
     @include lato-bold-18;
     color: $grey-1;
     width: 100%;
@@ -65,6 +68,10 @@
     flex: 1;
     flex-direction: row;
     cursor: pointer;
+    width: 100%;
+    &.listCards {
+      display: block;
+    }
   }
 }
 .details {
@@ -78,14 +85,12 @@
     margin-top: 8px;
   }
 }
-.noOwner,
-.noOwner > span {
+.noResult,
+.noResult > span {
   display: flex;
   flex-direction: column;
   align-items: center;
   text-align: center;
-  justify-content: center;
-  height: 90%;
   h2 {
     margin-top: 2rem;
     margin-bottom: 0.5rem;
@@ -95,5 +100,6 @@
   p {
     text-align: center;
     max-width: 600px;
+    margin: 2em 0 0 0;
   }
 }
diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.ts b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.ts
index c11c2abe0..577a07b0d 100644
--- a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.ts
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.ts
@@ -1,9 +1,10 @@
 import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
 import { AbstractControl, UntypedFormGroup } from '@angular/forms';
-import { Observable } from 'rxjs';
-import { map } from 'rxjs/operators';
+import { Observable, forkJoin } from 'rxjs';
+import { map, tap } from 'rxjs/operators';
 import { Owner } from '../../../../../models/owner.model';
 import { Structure } from '../../../../../models/structure.model';
+import { OrientationService } from '../../../../../services/orientation.service';
 import { StructureService } from '../../../../../services/structure.service';
 
 @Component({
@@ -17,64 +18,114 @@ export class MakeAppointmentComponent implements OnInit {
   @Output() checkValidation = new EventEmitter<any>();
   @Output() socialWorker = new EventEmitter<Owner>();
   @Output() setResetOrientation = new EventEmitter();
+  @Output() selectedStructureRDV = new EventEmitter<Structure>();
 
   public owners: Owner[];
+  public structures: Structure[] = [];
   public isBaseskills: boolean = false;
   public isOnlineProcedures: boolean = false;
-  public needsList = [];
+  public selectedOption: string;
+  public structuresListReady: boolean;
 
-  constructor(private structureService: StructureService) {}
+  private onlineDemarcheType;
+  private filtersOnOffers;
+
+  constructor(private structureService: StructureService, public orientationService: OrientationService) {}
 
   ngOnInit(): void {
     this.checkValidation.emit();
 
-    // Filters owners that accept appointments, have personal offers in the selected structure and match the needs previously selected
-    this.findOwners(this.structureRDV._id).subscribe((owners) => {
-      let filteredOwners = [];
-      this.owners = owners.filter((owner) => owner.withAppointment && owner.job?.hasPersonalOffer);
-      const onlineDemarcheType = this.form.get('onlineDemarcheType').value;
-      const filtersOnOffers = { onlineProcedures: [], baseSkills: [] };
-      // build arrays containing the needs the user selected in the form
-      onlineDemarcheType.forEach((filter) => {
+    // build arrays containing the needs the user selected in the form
+    if (this.structureRDV?._id || this.orientationService.rdvUser) {
+      this.onlineDemarcheType = this.form.get('onlineDemarcheType').value;
+      this.filtersOnOffers = { onlineProcedures: [], baseSkills: [] };
+      this.onlineDemarcheType.forEach((filter) => {
         if (filter.name === 'onlineProcedures') {
-          filtersOnOffers.onlineProcedures.push(filter.value);
+          this.filtersOnOffers.onlineProcedures.push(filter.value);
           this.isOnlineProcedures = true;
         }
         if (filter.name === 'baseSkills') {
-          filtersOnOffers.baseSkills.push(filter.value);
+          this.filtersOnOffers.baseSkills.push(filter.value);
           this.isBaseskills = true;
         }
       });
-      // make an array with the IDs of the structure's personalOffers
-      const structurePersonalOffersId = this.structureRDV.personalOffers.map((spo) => spo._id);
-      // for each owner
-      this.owners.forEach((owner) => {
-        // check each of its personnalOffers
-        owner.personalOffers?.forEach((po) => {
-          // if this personalOffer matches one of the structure's personalOffers
-          if (structurePersonalOffersId.includes(po._id)) {
-            // and if the needs the user selected are all part of the personalOffer, keep the owner for display
-            if (
-              filtersOnOffers.onlineProcedures.every((offer) => po.categories.onlineProcedures.includes(offer)) &&
-              filtersOnOffers.baseSkills.every((offer) => po.categories.baseSkills.includes(offer))
-            ) {
-              if (!filteredOwners.includes(owner)) {
-                filteredOwners.push(owner);
+    }
+
+    // Filters owners that accept appointments, have personal offers in the selected structure and match the needs previously selected
+    if (this.structureRDV?._id) {
+      this.findOwners(this.structureRDV._id).subscribe((owners) => {
+        let filteredOwners = [];
+        this.owners = owners.filter((owner) => owner.withAppointment && owner.job?.hasPersonalOffer);
+        // make an array with the IDs of the structure's personalOffers
+        const structurePersonalOffersId = this.structureRDV.personalOffers.map((spo) => spo._id);
+        // for each owner
+        this.owners.forEach((owner) => {
+          // check each of its personnalOffers
+          owner.personalOffers?.forEach((po) => {
+            // if this personalOffer matches one of the structure's personalOffers
+            if (structurePersonalOffersId.includes(po._id)) {
+              // and if the needs the user selected are all part of the personalOffer, keep the owner for display
+              if (
+                this.filtersOnOffers.onlineProcedures.every((offer) =>
+                  po.categories.onlineProcedures.includes(offer)
+                ) &&
+                this.filtersOnOffers.baseSkills.every((offer) => po.categories.baseSkills.includes(offer))
+              ) {
+                if (!filteredOwners.includes(owner)) {
+                  filteredOwners.push(owner);
+                }
               }
             }
-          }
+          });
         });
-      });
 
-      this.owners = filteredOwners;
+        this.owners = filteredOwners;
+
+        if (this.owners.length === 0) {
+          this.setResetOrientation.emit();
+        }
+      });
+    } else if (this.orientationService.rdvUser) {
+      // else if we come from the registry, list the registry's user's structures
+      this.selectedOption = this.form.get('structureRDV').value;
+      const structures$: Observable<any>[] = [];
+      this.structures = [];
+      this.orientationService.rdvUser.structuresLink.forEach((structureId) => {
+        structures$.push(
+          this.structureService.getStructure(structureId).pipe(
+            tap((structure) => {
+              this.structures.push(new Structure(structure));
+            })
+          )
+        );
+      });
+      forkJoin(structures$).subscribe(() => {
+        this.structures.sort((a, b) => a.structureName.localeCompare(b.structureName));
 
-      if (this.owners.length === 0) {
-        this.form.get('onlineDemarcheType')?.value.forEach((element) => {
-          this.needsList.push(element.text);
+        // filter structures that match selected needs
+        let filteredStructures = [];
+        // for each structure
+        this.structures.forEach((structure) => {
+          // check each of its personnalOffers
+          structure.personalOffers?.forEach((po) => {
+            //if the needs the user selected are all part of the personalOffer, keep the structure for display
+            if (
+              this.filtersOnOffers.onlineProcedures.every((offer) => po.categories.onlineProcedures.includes(offer)) &&
+              this.filtersOnOffers.baseSkills.every((offer) => po.categories.baseSkills.includes(offer))
+            ) {
+              filteredStructures.push(structure);
+            }
+          });
         });
-        this.setResetOrientation.emit();
-      }
-    });
+
+        this.structures = filteredStructures;
+
+        if (this.structures.length === 0) {
+          this.setResetOrientation.emit();
+        }
+        this.structuresListReady = true;
+      });
+    }
   }
 
   private findOwners(structureId: string): Observable<Owner[]> {
@@ -85,11 +136,18 @@ export class MakeAppointmentComponent implements OnInit {
     return this.form.get(nameControl);
   }
 
-  public onRadioChange(socialWorker: Owner): void {
+  public onSocialWorkerRadioChange(socialWorker: Owner): void {
     this.socialWorker.emit(socialWorker);
     this.checkValidation.emit();
   }
 
+  public onStructureRadioChange(structure: Structure): void {
+    this.selectedOption = structure._id;
+    this.form.get('socialWorkerId').setValue(this.orientationService.rdvUser._id);
+    this.selectedStructureRDV.emit(structure);
+    this.checkValidation.emit(structure);
+  }
+
   public onDetailsChange(): void {
     this.checkValidation.emit();
   }
diff --git a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html
index 953cb6e13..8633fb67c 100644
--- a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html
+++ b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html
@@ -50,6 +50,7 @@
     [structureRDV]="structureRDV"
     (checkValidation)="checkValidation()"
     (socialWorker)="getSocialWorker($event)"
+    (selectedStructureRDV)="getSelectedStructureRDV($event)"
     (setResetOrientation)="showResetOrientation()"
   />
   <app-mediation-beneficiary-info
@@ -62,6 +63,7 @@
     *ngIf="currentStep === onlineDemarchesAppointmentSteps.rdvEnd"
     [form]="form"
     [structureRDV]="structureRDV"
+    [selectedStructureRDV]="selectedStructureRDV"
     [socialWorker]="socialWorker"
     (checkValidation)="checkValidation()"
     (setResetOrientation)="showResetOrientation()"
diff --git a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts
index 06f60f701..1a18fd45a 100644
--- a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts
+++ b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts
@@ -29,6 +29,7 @@ export class OnlineDemarchFormComponent {
   @Input() profile: User;
   @Input() categories: { [key: string]: Category };
   @Input() structureRDV: Structure;
+  @Input() selectedStructureRDV: Structure;
   @Output() validatePage = new EventEmitter<any>();
   @Output() validateStructureRDV = new EventEmitter<Structure>();
   @Output() setResetOrientation = new EventEmitter<any>();
@@ -95,10 +96,12 @@ export class OnlineDemarchFormComponent {
     }
   }
 
-  /* Get socialWorker from makeAppointment to display it in rdvEnd */
   public getSocialWorker(item: Owner) {
     this.socialWorker = item;
   }
+  public getSelectedStructureRDV(structure: Structure) {
+    this.selectedStructureRDV = structure;
+  }
 
   public updatePublicChoice({ formControlName, choice }: { formControlName: string; choice: string }): void {
     const event = !this.isInArray({ formControlName, term: choice });
diff --git a/src/app/form/orientation-form-view/orientation-form-view.component.ts b/src/app/form/orientation-form-view/orientation-form-view.component.ts
index 6f460d1ef..2284205aa 100644
--- a/src/app/form/orientation-form-view/orientation-form-view.component.ts
+++ b/src/app/form/orientation-form-view/orientation-form-view.component.ts
@@ -476,9 +476,11 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
     if (
       this.currentType === OnlineDemarche.appointment &&
       this.currentStep === AppointmentSteps.pmrAccess - 1 &&
-      this.orientationService.rdvStructure
+      (this.orientationService.rdvStructure || this.orientationService.rdvUser)
     ) {
-      this.onlineDemarcheForm.get('structureRDV').patchValue(this.orientationService.rdvStructure._id);
+      if (this.orientationService.rdvStructure) {
+        this.onlineDemarcheForm.get('structureRDV').patchValue(this.orientationService.rdvStructure._id);
+      }
       // skip pmrAccess, location and carto
       this.currentStep += 3;
     }
diff --git a/src/app/models/structure.model.ts b/src/app/models/structure.model.ts
index f8a5ac537..142ef69a6 100644
--- a/src/app/models/structure.model.ts
+++ b/src/app/models/structure.model.ts
@@ -61,7 +61,6 @@ export class Structure {
 
   public alreadySelected? = false;
   public isClaimed?: boolean = null;
-  public idCNFS?: string;
   public withAppointment?: boolean = null;
 
   constructor(obj?: any) {
diff --git a/src/app/profile/profile.component.html b/src/app/profile/profile.component.html
index e64bdb5f7..b8b4e41e1 100644
--- a/src/app/profile/profile.component.html
+++ b/src/app/profile/profile.component.html
@@ -12,6 +12,17 @@
         (keyup.enter)="goBack()"
       />
       <h1>Profil</h1>
+      <app-button
+        *ngIf="isPublic && userProfile.withAppointment"
+        class="hide-on-mobile rdv"
+        tabindex="none"
+        [routerLink]="['/orientation']"
+        [state]="{ rdvUser: userProfile }"
+        [iconBtn]="'rdv'"
+        [text]="'Prendre rendez-vous'"
+        [style]="buttonTypeEnum.SecondaryWide"
+        [routerLinkActive]="'active'"
+      />
       <app-button
         *ngIf="!isPublic"
         class="hide-on-mobile"
diff --git a/src/app/profile/profile.component.scss b/src/app/profile/profile.component.scss
index 1ba97cd12..ac86e1701 100644
--- a/src/app/profile/profile.component.scss
+++ b/src/app/profile/profile.component.scss
@@ -104,3 +104,7 @@ section {
 .addStructure {
   margin: auto;
 }
+
+::ng-deep .rdv svg {
+  top: 0.3em;
+}
diff --git a/src/app/shared/components/button/button.component.scss b/src/app/shared/components/button/button.component.scss
index fcfdc6592..056791fe3 100644
--- a/src/app/shared/components/button/button.component.scss
+++ b/src/app/shared/components/button/button.component.scss
@@ -317,17 +317,3 @@ button:disabled {
   opacity: 0.4;
   cursor: not-allowed;
 }
-.btn-rdvs {
-  background: $blueRdvs;
-  width: 140px;
-
-  height: 36px;
-  span {
-    color: white;
-  }
-  ::ng-deep svg {
-    stroke: none !important;
-    top: 3px;
-    left: 3px;
-  }
-}
diff --git a/src/app/structure-list/components/card/card.component.ts b/src/app/structure-list/components/card/card.component.ts
index 0a63fd6de..a81a5cfd5 100644
--- a/src/app/structure-list/components/card/card.component.ts
+++ b/src/app/structure-list/components/card/card.component.ts
@@ -15,6 +15,7 @@ export class CardComponent implements OnInit {
   @Input() public isSelected: boolean;
   @Input() public isOrientation: boolean = false;
   @Input() public isOrientationRdv: boolean = false;
+  @Input() public noDetails: boolean = false;
   @Output() public showDetails: EventEmitter<Structure> = new EventEmitter<Structure>();
   @Output() public addToList: EventEmitter<Structure> = new EventEmitter<Structure>();
   @Output() public selectRDV: EventEmitter<Structure> = new EventEmitter<Structure>();
@@ -51,19 +52,21 @@ export class CardComponent implements OnInit {
   }
 
   public cardClicked(): void {
-    this.showDetails.emit(this.structure);
-    const queryString = this.route.snapshot.queryParamMap.get('search');
-    this.router.navigate([], {
-      relativeTo: this.route,
-      queryParams: queryString
-        ? {
-            id: this.structure._id,
-            search: queryString,
-          }
-        : {
-            id: this.structure._id,
-          },
-    });
+    if (!this.noDetails) {
+      this.showDetails.emit(this.structure);
+      const queryString = this.route.snapshot.queryParamMap.get('search');
+      this.router.navigate([], {
+        relativeTo: this.route,
+        queryParams: queryString
+          ? {
+              id: this.structure._id,
+              search: queryString,
+            }
+          : {
+              id: this.structure._id,
+            },
+      });
+    }
   }
 
   public cardHover(): void {
diff --git a/src/app/utils/orientationUtils.ts b/src/app/utils/orientationUtils.ts
index 950de9423..dc63baa32 100644
--- a/src/app/utils/orientationUtils.ts
+++ b/src/app/utils/orientationUtils.ts
@@ -233,7 +233,7 @@ export class OrientationUtils {
       valid: true,
     };
     pagesValidation[AppointmentSteps.makeAppointment] = {
-      valid: form.get('socialWorkerId').valid,
+      valid: form.get('socialWorkerId').valid || form.get('structureRDV').valid,
     };
     pagesValidation[AppointmentSteps.mediationBeneficiaryInfo] = {
       valid:
diff --git a/src/assets/scss/_color.scss b/src/assets/scss/_color.scss
index 50916eea6..71341a6b1 100644
--- a/src/assets/scss/_color.scss
+++ b/src/assets/scss/_color.scss
@@ -25,7 +25,6 @@ $orange-warning: #da6c2e;
 /* OTHERS */
 $blue: #348899;
 $blue-light: #c9ecf3;
-$blueRdvs: #1f2952;
 /* APP COLORS */
 $primary-color: $red;
 $primary-color-dark: $red-dark;
-- 
GitLab


From 917c574673eece1ab109cb93a75dab242291aead Mon Sep 17 00:00:00 2001
From: Etienne LOUPIAS <eloupias@grandlyon.com>
Date: Fri, 11 Aug 2023 08:57:30 +0000
Subject: [PATCH 12/19] feat(structure): update structure CNFS label from user
 job

---
 .../claim-structure.component.ts              |   3 -
 src/app/carto/carto.component.ts              |  10 +-
 .../form/footer-form/footer-form.component.ts |   1 -
 .../account-form/account-form.component.html  |   7 +-
 .../account-form/account-form.component.ts    |   1 -
 .../account-info/account-info.component.ts    |   1 -
 src/app/form/form-view/form-view.component.ts |  22 +--
 .../structure-form.component.html             |   2 +-
 .../structure-form.component.ts               | 186 +++++++++---------
 .../orientation-form-view.component.ts        |   2 +-
 src/app/models/structure.model.ts             |   4 +-
 src/app/services/structure.service.ts         |   4 -
 .../components/card/card.component.html       |   8 +-
 .../components/card/card.component.ts         |  23 +--
 .../structure-details.component.html          |   9 +-
 .../structure-details.component.ts            |  29 ++-
 16 files changed, 130 insertions(+), 182 deletions(-)

diff --git a/src/app/admin/components/claim-structure/claim-structure.component.ts b/src/app/admin/components/claim-structure/claim-structure.component.ts
index 3dd2a7f23..ca49f70f5 100644
--- a/src/app/admin/components/claim-structure/claim-structure.component.ts
+++ b/src/app/admin/components/claim-structure/claim-structure.component.ts
@@ -12,9 +12,6 @@ import { AdminService } from '../../services/admin.service';
 })
 export class ClaimStructureComponent implements OnInit {
   public demandsAttachment: StructureAdminInfo[];
-  public structuresUnclaimed: StructureAdminInfo[];
-  public isClaimedStructure: boolean = true;
-  public isUnclaimedStructure: boolean = false;
 
   constructor(
     private adminService: AdminService,
diff --git a/src/app/carto/carto.component.ts b/src/app/carto/carto.component.ts
index 2bd0e98b9..8a2cd0813 100644
--- a/src/app/carto/carto.component.ts
+++ b/src/app/carto/carto.component.ts
@@ -2,7 +2,6 @@ import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
 import { Meta } from '@angular/platform-browser';
 import { ActivatedRoute } from '@angular/router';
 import * as _ from 'lodash';
-import { Observable, firstValueFrom } from 'rxjs';
 import { GeoJson } from '../map/models/geojson.model';
 import { Structure } from '../models/structure.model';
 import { ProfileService } from '../profile/services/profile.service';
@@ -100,7 +99,7 @@ export class CartoComponent implements OnInit {
     if (mustLoadStructures) {
       this.structureService.getStructures(filters).subscribe((structures) => {
         if (structures) {
-          if (this.isOrientationRdv) structures = structures.filter((structure) => structure.withAppointment);
+          if (this.isOrientationRdv) structures = structures.filter((structure) => structure.hasUserWithAppointmentDN);
           this.updateStructuresDistance(structures, this.userLongitude, this.userLatitude, sortByDistance);
         } else {
           this.structures = [];
@@ -128,9 +127,6 @@ export class CartoComponent implements OnInit {
         if (lon && lat) {
           structure = this.getStructurePosition(structure, lon, lat);
         }
-        if (this.isAdmin) {
-          firstValueFrom(this.isClaimed(structure)).then((isClaimed) => (isClaimed = structure.isClaimed));
-        }
         return structure;
       })
     ).then((structureList) => {
@@ -226,10 +222,6 @@ export class CartoComponent implements OnInit {
     return this.profileService.isAdmin();
   }
 
-  public isClaimed(structure: Structure): Observable<boolean> {
-    return this.structureService.isClaimed(structure._id, null);
-  }
-
   public selectStructure(structures: Structure[]): void {
     this.structuresSelected = structures;
     this.structureSelection.emit(this.structuresSelected);
diff --git a/src/app/form/footer-form/footer-form.component.ts b/src/app/form/footer-form/footer-form.component.ts
index a4de65a11..38c500434 100644
--- a/src/app/form/footer-form/footer-form.component.ts
+++ b/src/app/form/footer-form/footer-form.component.ts
@@ -23,7 +23,6 @@ import { stepType } from '../step.type';
 export class FooterFormComponent implements OnChanges {
   @Input() currentForm: formType;
   @Input() isValid: boolean;
-  @Input() isClaimMode: boolean;
   @Input() btnName: string[];
   @Input() nbPagesForm: number;
   @Input() form: UntypedFormGroup;
diff --git a/src/app/form/form-view/account-form/account-form.component.html b/src/app/form/form-view/account-form/account-form.component.html
index f658d9a78..c6d69a41d 100644
--- a/src/app/form/form-view/account-form/account-form.component.html
+++ b/src/app/form/form-view/account-form/account-form.component.html
@@ -1,11 +1,6 @@
 <div class="no-max-width">
   <ng-container *ngIf="currentStep === accountFormStepEnum.accountInfo">
-    <app-account-info
-      [accountForm]="accountForm"
-      [isClaimMode]="isClaimMode"
-      [profile]="profile"
-      (validateForm)="setValidationsForm()"
-    />
+    <app-account-info [accountForm]="accountForm" [profile]="profile" (validateForm)="setValidationsForm()" />
   </ng-container>
   <ng-container *ngIf="currentStep === accountFormStepEnum.accountCredentials">
     <app-account-credentials
diff --git a/src/app/form/form-view/account-form/account-form.component.ts b/src/app/form/form-view/account-form/account-form.component.ts
index bfdabcec9..7d430b390 100644
--- a/src/app/form/form-view/account-form/account-form.component.ts
+++ b/src/app/form/form-view/account-form/account-form.component.ts
@@ -16,7 +16,6 @@ export class AccountFormComponent implements OnChanges {
   @Input() currentStep: stepType;
   @Input() accountForm: UntypedFormGroup;
   @Input() isAccountMode: boolean;
-  public isClaimMode = false;
   public pagesValidation = [];
   public userAcceptSavedDate = false;
   public isPageValid: boolean;
diff --git a/src/app/form/form-view/account-form/account-info/account-info.component.ts b/src/app/form/form-view/account-form/account-info/account-info.component.ts
index b1d6ef936..baea5a57f 100644
--- a/src/app/form/form-view/account-form/account-info/account-info.component.ts
+++ b/src/app/form/form-view/account-form/account-info/account-info.component.ts
@@ -9,7 +9,6 @@ import { Utils } from '../../../../utils/utils';
 })
 export class AccountInfoComponent {
   @Input() accountForm: UntypedFormGroup;
-  @Input() isClaimMode: boolean;
   @Input() profile: User;
 
   @Output() validateForm = new EventEmitter<any>();
diff --git a/src/app/form/form-view/form-view.component.ts b/src/app/form/form-view/form-view.component.ts
index 89a5de766..076e17698 100644
--- a/src/app/form/form-view/form-view.component.ts
+++ b/src/app/form/form-view/form-view.component.ts
@@ -70,7 +70,6 @@ export class FormViewComponent implements OnInit, AfterViewInit {
 
   public profile: User;
   public isAccountMode: boolean = false;
-  public isClaimMode: boolean = false;
   public isJoinMode: boolean = false;
   public claimStructure: boolean = false;
   public linkedStructureId;
@@ -274,18 +273,15 @@ export class FormViewComponent implements OnInit, AfterViewInit {
     this.structure._id = this.structureForm.value._id;
     this.structure.structureName = this.structureForm.value.structureName;
 
-    this.structureService.isClaimed(this.structure._id, this.profile).subscribe((isClaimed) => {
-      this.structure.isClaimed = isClaimed;
-      if (isClaimed) {
-        this.usersService.joinStructure(this.structureForm.value._id, this.profile.email).subscribe(() => {
-          this.currentPage = structureFormStep.mailSentInfo;
-        });
-      } else {
-        this.structureService.claimStructureWithAccount(this.structure._id, this.profile.email).subscribe(() => {
-          this.currentPage = structureFormStep.mailSentInfo;
-        });
-      }
-    });
+    if (this.structure.hasNoUserDN) {
+      this.structureService.claimStructureWithAccount(this.structure._id, this.profile.email).subscribe(() => {
+        this.currentPage = structureFormStep.mailSentInfo;
+      });
+    } else {
+      this.usersService.joinStructure(this.structureForm.value._id, this.profile.email).subscribe(() => {
+        this.currentPage = structureFormStep.mailSentInfo;
+      });
+    }
   }
 
   public async endForm(type: { formType: formType; formStep?: stepType }): Promise<void> {
diff --git a/src/app/form/form-view/structure-form/structure-form.component.html b/src/app/form/form-view/structure-form/structure-form.component.html
index 9bb4424a8..bcc6a8c26 100644
--- a/src/app/form/form-view/structure-form/structure-form.component.html
+++ b/src/app/form/form-view/structure-form/structure-form.component.html
@@ -18,7 +18,7 @@
       [step]="currentStep"
       [structureName]="structureForm.value.structureName"
       [formType]="formTypeEnum.structure"
-      [isClaimed]="structure.isClaimed"
+      [isClaimed]="!structure.hasNoUserDN"
       (goNext)="setValidationsForm()"
     />
   </ng-container>
diff --git a/src/app/form/form-view/structure-form/structure-form.component.ts b/src/app/form/form-view/structure-form/structure-form.component.ts
index fbd9b34fd..e6a3e1b6f 100644
--- a/src/app/form/form-view/structure-form/structure-form.component.ts
+++ b/src/app/form/form-view/structure-form/structure-form.component.ts
@@ -40,7 +40,6 @@ export class StructureFormComponent implements OnChanges, OnInit {
   public showSocialNetwork: boolean = false;
 
   // Condition form
-  public isClaimMode = false;
   public isAccountMode: boolean = false;
   public userAcceptSavedDate = false;
 
@@ -143,103 +142,94 @@ export class StructureFormComponent implements OnChanges, OnInit {
   }
 
   public setValidationsForm(): void {
-    if (this.isClaimMode) {
-      //TODO: check claim mode
-      //   this.pagesValidation[structureFormStep.structureConsent] = { valid: this.userAcceptSavedDate };
-      //   this.updatePageValid();
-      // } else if (this.isAccountMode) {
-      //   this.pagesValidation[structureFormStep.structureConsent] = { valid: this.userAcceptSavedDate };
-      //   this.updatePageValid();
-    } else {
-      this.pagesValidation[structureFormStep.structureChoice] = {
-        valid: this.structureForm.get('_id').valid,
-      };
-      this.pagesValidation[structureFormStep.structureNameAndAddress] = {
-        valid: this.structureForm.get('structureName').valid && this.structureForm.get('address').valid,
-      };
-      this.pagesValidation[structureFormStep.structureContact] = {
-        valid:
-          !this.structureForm.hasError('requirePhoneOrMail') &&
-          this.structureForm.get('contactMail').valid &&
-          this.structureForm.get('contactPhone').valid,
-      };
-      this.pagesValidation[structureFormStep.structureAccompanimentChoice] = {
-        valid: this.structureForm.get('placeOfReception').valid,
-      };
-      this.pagesValidation[structureFormStep.structureContactCompletion] = {
-        valid: this.isEditMode
-          ? true
-          : this.structureForm.get('contactPersonFirstname').valid &&
-            this.structureForm.get('contactPersonLastname').valid &&
-            this.structureForm.get('contactPersonEmail').valid,
-      };
-      this.pagesValidation[structureFormStep.structureType] = {
-        valid: this.structureForm.get('structureType').valid,
-      };
-      this.pagesValidation[structureFormStep.structureAccessModality] = {
-        valid: this.structureForm.get('categories').get('accessModality').valid,
-      };
-      this.pagesValidation[structureFormStep.structureHours] = {
-        valid: this.hoursForm.valid && this.structureForm.get('exceptionalClosures').valid,
-      };
-      this.pagesValidation[structureFormStep.structurePmr] = {
-        valid: this.structureForm.get('pmrAccess').valid,
-      };
-      this.pagesValidation[structureFormStep.structureWebAndSocialNetwork] = {
-        valid:
-          (this.structureForm.get('website').valid || !this.showWebsite) &&
-          ((this.structureForm.get('facebook').valid &&
-            this.structureForm.get('twitter').valid &&
-            this.structureForm.get('instagram').valid) ||
-            !this.showSocialNetwork),
-      };
-      this.pagesValidation[structureFormStep.structurePublicTarget] = {
-        valid: this.structureForm.get('categories').get('age').valid,
-      };
-      this.pagesValidation[structureFormStep.structurePublicTargetOptional] = {
-        valid: true,
-      };
-      this.pagesValidation[structureFormStep.structureDigitalHelpingAccompanimentOther] = {
-        valid: this.structureForm.get('otherDescription').valid,
-      };
-      this.pagesValidation[structureFormStep.structureDigitalHelpingAccompaniment] = {
-        valid: this.structureForm.get('categories').get('onlineProcedures').valid,
-      };
+    this.pagesValidation[structureFormStep.structureChoice] = {
+      valid: this.structureForm.get('_id').valid,
+    };
+    this.pagesValidation[structureFormStep.structureNameAndAddress] = {
+      valid: this.structureForm.get('structureName').valid && this.structureForm.get('address').valid,
+    };
+    this.pagesValidation[structureFormStep.structureContact] = {
+      valid:
+        !this.structureForm.hasError('requirePhoneOrMail') &&
+        this.structureForm.get('contactMail').valid &&
+        this.structureForm.get('contactPhone').valid,
+    };
+    this.pagesValidation[structureFormStep.structureAccompanimentChoice] = {
+      valid: this.structureForm.get('placeOfReception').valid,
+    };
+    this.pagesValidation[structureFormStep.structureContactCompletion] = {
+      valid: this.isEditMode
+        ? true
+        : this.structureForm.get('contactPersonFirstname').valid &&
+          this.structureForm.get('contactPersonLastname').valid &&
+          this.structureForm.get('contactPersonEmail').valid,
+    };
+    this.pagesValidation[structureFormStep.structureType] = {
+      valid: this.structureForm.get('structureType').valid,
+    };
+    this.pagesValidation[structureFormStep.structureAccessModality] = {
+      valid: this.structureForm.get('categories').get('accessModality').valid,
+    };
+    this.pagesValidation[structureFormStep.structureHours] = {
+      valid: this.hoursForm.valid && this.structureForm.get('exceptionalClosures').valid,
+    };
+    this.pagesValidation[structureFormStep.structurePmr] = {
+      valid: this.structureForm.get('pmrAccess').valid,
+    };
+    this.pagesValidation[structureFormStep.structureWebAndSocialNetwork] = {
+      valid:
+        (this.structureForm.get('website').valid || !this.showWebsite) &&
+        ((this.structureForm.get('facebook').valid &&
+          this.structureForm.get('twitter').valid &&
+          this.structureForm.get('instagram').valid) ||
+          !this.showSocialNetwork),
+    };
+    this.pagesValidation[structureFormStep.structurePublicTarget] = {
+      valid: this.structureForm.get('categories').get('age').valid,
+    };
+    this.pagesValidation[structureFormStep.structurePublicTargetOptional] = {
+      valid: true,
+    };
+    this.pagesValidation[structureFormStep.structureDigitalHelpingAccompanimentOther] = {
+      valid: this.structureForm.get('otherDescription').valid,
+    };
+    this.pagesValidation[structureFormStep.structureDigitalHelpingAccompaniment] = {
+      valid: this.structureForm.get('categories').get('onlineProcedures').valid,
+    };
 
-      this.pagesValidation[structureFormStep.structureTrainingType] = {
-        valid: true,
-      };
-      this.pagesValidation[structureFormStep.structureTrainingPrice] = {
-        valid: this.structureForm.get('freeWorkShop').valid,
-      };
-      this.pagesValidation[structureFormStep.structureWifi] = {
-        valid: this.structureForm.get('categories').get('selfServiceMaterial').valid,
-      };
-      this.pagesValidation[structureFormStep.structureEquipments] = {
-        valid:
-          this.structureForm.get('nbComputers').valid &&
-          this.structureForm.get('nbPrinters').valid &&
-          this.structureForm.get('nbScanners').valid,
-        name: 'Equipements mis à disposition',
-      };
-      this.pagesValidation[structureFormStep.structureLabels] = {
-        valid: true,
-      };
-      this.pagesValidation[structureFormStep.structureSolidarityMaterial] = {
-        valid: true,
-      };
-      this.pagesValidation[structureFormStep.structureDescription] = {
-        valid: true,
-      };
-      this.pagesValidation[structureFormStep.structureCovidInfo] = {
-        valid: true,
-      };
+    this.pagesValidation[structureFormStep.structureTrainingType] = {
+      valid: true,
+    };
+    this.pagesValidation[structureFormStep.structureTrainingPrice] = {
+      valid: this.structureForm.get('freeWorkShop').valid,
+    };
+    this.pagesValidation[structureFormStep.structureWifi] = {
+      valid: this.structureForm.get('categories').get('selfServiceMaterial').valid,
+    };
+    this.pagesValidation[structureFormStep.structureEquipments] = {
+      valid:
+        this.structureForm.get('nbComputers').valid &&
+        this.structureForm.get('nbPrinters').valid &&
+        this.structureForm.get('nbScanners').valid,
+      name: 'Equipements mis à disposition',
+    };
+    this.pagesValidation[structureFormStep.structureLabels] = {
+      valid: true,
+    };
+    this.pagesValidation[structureFormStep.structureSolidarityMaterial] = {
+      valid: true,
+    };
+    this.pagesValidation[structureFormStep.structureDescription] = {
+      valid: true,
+    };
+    this.pagesValidation[structureFormStep.structureCovidInfo] = {
+      valid: true,
+    };
 
-      this.pagesValidation[structureFormStep.structureConsent] = {
-        valid: !this.isEditMode ? this.userAcceptSavedDate : true,
-      };
-      this.updatePageValid();
-    }
+    this.pagesValidation[structureFormStep.structureConsent] = {
+      valid: !this.isEditMode ? this.userAcceptSavedDate : true,
+    };
+    this.updatePageValid();
   }
 
   async setCategories(): Promise<void> {
@@ -267,6 +257,10 @@ export class StructureFormComponent implements OnChanges, OnInit {
         }
         case CategoryEnum.labelsQualifications: {
           this.labelsQualifications = categ;
+          // label conseillerNumFranceServices is removed from the list since it will now be automatically added when a structure's owner is a CNFS
+          this.labelsQualifications.modules = this.labelsQualifications.modules.filter(
+            (module) => module.id !== 'conseillerNumFranceServices'
+          );
           break;
         }
         case CategoryEnum.age: {
diff --git a/src/app/form/orientation-form-view/orientation-form-view.component.ts b/src/app/form/orientation-form-view/orientation-form-view.component.ts
index 2284205aa..d6435e57b 100644
--- a/src/app/form/orientation-form-view/orientation-form-view.component.ts
+++ b/src/app/form/orientation-form-view/orientation-form-view.component.ts
@@ -448,7 +448,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
       if (this.currentStep === AppointmentSteps.pmrAccess) {
         if (
           (await lastValueFrom(this.structureService.getStructures(this.filters))).filter(
-            (structure) => structure.withAppointment
+            (structure) => structure.hasUserWithAppointmentDN
           ).length == 0
         ) {
           this.currentStep = AppointmentSteps.rdvEnd - 1;
diff --git a/src/app/models/structure.model.ts b/src/app/models/structure.model.ts
index 142ef69a6..ad5e54fa0 100644
--- a/src/app/models/structure.model.ts
+++ b/src/app/models/structure.model.ts
@@ -60,8 +60,8 @@ export class Structure {
   public personalOffers: PersonalOffer[] = [];
 
   public alreadySelected? = false;
-  public isClaimed?: boolean = null;
-  public withAppointment?: boolean = null;
+  public hasNoUserDN?: boolean = null;
+  public hasUserWithAppointmentDN?: boolean = null;
 
   constructor(obj?: any) {
     Object.assign(this, obj, {
diff --git a/src/app/services/structure.service.ts b/src/app/services/structure.service.ts
index 7625427eb..55df43802 100644
--- a/src/app/services/structure.service.ts
+++ b/src/app/services/structure.service.ts
@@ -38,10 +38,6 @@ export class StructureService {
       .pipe(map((item: Structure) => new Structure(item)));
   }
 
-  public isClaimed(id: string, profile: User): Observable<boolean> {
-    return this.http.post<boolean>(`${this.baseUrl}/${id}/isClaimed`, profile);
-  }
-
   public claimStructureWithAccount(id: string, email: string): Observable<string[]> {
     return this.http.post<any>(`${this.baseUrl}/${id}/claim`, { email });
   }
diff --git a/src/app/structure-list/components/card/card.component.html b/src/app/structure-list/components/card/card.component.html
index 26c94a554..39017ebc9 100644
--- a/src/app/structure-list/components/card/card.component.html
+++ b/src/app/structure-list/components/card/card.component.html
@@ -13,9 +13,13 @@
         <app-svg-icon [type]="'ico'" [icon]="structure?.getTypeStructureIcon()" [iconClass]="'icon-52'" />
         <div fxLayout="column" fxLayoutAlign="end">
           <div fxLayout="row" class="structure-name-container">
-            <span class="structure-name" [ngClass]="{ notClaimed: !isClaimed }">{{ structure.structureName }}</span>
+            <span
+              class="structure-name"
+              [ngClass]="{ notClaimed: structure.hasNoUserDN && profileService.isAdmin() }"
+              >{{ structure.structureName }}</span
+            >
             <!-- rdv -->
-            <span *ngIf="structure.withAppointment && !isOrientation" class="rdv">
+            <span *ngIf="structure.hasUserWithAppointmentDN && !isOrientation" class="rdv">
               <app-svg-icon [type]="'ico'" [icon]="'rdv'" [iconColor]="'black'" [iconClass]="'icon-22'"></app-svg-icon>
             </span>
           </div>
diff --git a/src/app/structure-list/components/card/card.component.ts b/src/app/structure-list/components/card/card.component.ts
index a81a5cfd5..c311fa1e0 100644
--- a/src/app/structure-list/components/card/card.component.ts
+++ b/src/app/structure-list/components/card/card.component.ts
@@ -1,8 +1,7 @@
-import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
+import { Component, EventEmitter, Input, Output } from '@angular/core';
 import { ActivatedRoute, Router } from '@angular/router';
 import { Structure } from '../../../models/structure.model';
 import { ProfileService } from '../../../profile/services/profile.service';
-import { StructureService } from '../../../services/structure.service';
 import { ButtonType } from '../../../shared/components/button/buttonType.enum';
 
 @Component({
@@ -10,7 +9,7 @@ import { ButtonType } from '../../../shared/components/button/buttonType.enum';
   templateUrl: './card.component.html',
   styleUrls: ['./card.component.scss'],
 })
-export class CardComponent implements OnInit {
+export class CardComponent {
   @Input() public structure: Structure;
   @Input() public isSelected: boolean;
   @Input() public isOrientation: boolean = false;
@@ -20,25 +19,9 @@ export class CardComponent implements OnInit {
   @Output() public addToList: EventEmitter<Structure> = new EventEmitter<Structure>();
   @Output() public selectRDV: EventEmitter<Structure> = new EventEmitter<Structure>();
   @Output() public hover: EventEmitter<Structure> = new EventEmitter<Structure>();
-  public isClaimed = true;
   public buttonTypeEnum = ButtonType;
 
-  constructor(
-    private route: ActivatedRoute,
-    private router: Router,
-    private profileService: ProfileService,
-    private structureService: StructureService
-  ) {}
-  ngOnInit(): void {
-    if (this.profileService.isAdmin()) {
-      this.setClaimIndicator();
-    }
-  }
-
-  // Check if structure haven't owners to help admin vision.
-  async setClaimIndicator() {
-    this.isClaimed = await this.structureService.isClaimed(this.structure._id, null).toPromise();
-  }
+  constructor(private route: ActivatedRoute, private router: Router, public profileService: ProfileService) {}
 
   /**
    * Display distance in m or km according to value
diff --git a/src/app/structure-list/components/structure-details/structure-details.component.html b/src/app/structure-list/components/structure-details/structure-details.component.html
index def04e1ed..e4b5cacb8 100644
--- a/src/app/structure-list/components/structure-details/structure-details.component.html
+++ b/src/app/structure-list/components/structure-details/structure-details.component.html
@@ -33,7 +33,7 @@
         <div class="iconTitle">Voir le conseiller numérique</div>
       </div-->
         <div
-          *ngIf="structure.withAppointment"
+          *ngIf="structure.hasUserWithAppointmentDN"
           class="clickableDiv"
           role="button"
           tabindex="0"
@@ -78,10 +78,7 @@
         </div>
         <!-- Je travaille ici -->
         <div
-          *ngIf="
-            !profileService.isLinkedToStructure(structure._id) &&
-            !profileService.isPendingLinkedToStructure(structure._id)
-          "
+          *ngIf="!profileService.isLinkedToStructure(structure._id)"
           class="clickableDiv"
           role="button"
           tabindex="0"
@@ -513,7 +510,7 @@
   [opened]="pendingModalOpened"
   [title]="'Travaillez-vous ici&nbsp;?'"
   [primaryContent]="
-    'Un message a déjà été envoyé aux administrateurs Rés\'IN pour validation, vous recevrez un email quand votre compte sera rattaché à la structure'
+    'Un message a déjà été envoyé pour validation, vous recevrez un email quand votre compte sera rattaché à la structure'
   "
   [secondaryContent]="structure?.structureName"
   [customConfirmationText]="'OK'"
diff --git a/src/app/structure-list/components/structure-details/structure-details.component.ts b/src/app/structure-list/components/structure-details/structure-details.component.ts
index f2f13c521..f5e17d5cc 100644
--- a/src/app/structure-list/components/structure-details/structure-details.component.ts
+++ b/src/app/structure-list/components/structure-details/structure-details.component.ts
@@ -111,9 +111,6 @@ export class StructureDetailsComponent implements OnInit {
         this.structureAdmins = res.owners;
       });
     }
-    this.structure.isClaimed = await this.structureService
-      .isClaimed(this.structure._id, this.currentProfile)
-      .toPromise();
 
     // GetTclStopPoints
     this.getTclStopPoints();
@@ -188,20 +185,20 @@ export class StructureDetailsComponent implements OnInit {
   }
 
   public handleJoin(): void {
-    if (this.userIsLoggedIn()) {
-      if (this.structure.isClaimed) {
-        if (this.profileService.isPendingLinkedToStructure(this.structure._id)) {
-          this.togglePendingModal();
-        } else {
-          this.toggleJoinModal();
-        }
-      } else {
-        this.toggleClaimModal();
-      }
-    } else {
+    if (!this.userIsLoggedIn()) {
       this.router.navigate(['login'], { queryParams: { returnUrl: `acteurs?id=${this.structure._id}` } });
+      return;
+    }
+
+    if (this.profileService.isPendingLinkedToStructure(this.structure._id)) {
+      this.togglePendingModal();
+    } else if (this.structure.hasNoUserDN) {
+      this.toggleClaimModal();
+    } else {
+      this.toggleJoinModal();
     }
   }
+
   public handleModify(): void {
     this.router.navigateByUrl(`/profile/edit-structure/${this.structure._id}`);
   }
@@ -226,7 +223,7 @@ export class StructureDetailsComponent implements OnInit {
       this.structureService
         .claimStructureWithAccount(this.structure._id, this.authService.userValue.username)
         .subscribe();
-      this.router.navigate(['join-request', this.structure._id], { state: { isClaimed: this.structure.isClaimed } });
+      this.router.navigate(['join-request', this.structure._id], { state: { isClaimed: !this.structure.hasNoUserDN } });
     }
   }
 
@@ -234,7 +231,7 @@ export class StructureDetailsComponent implements OnInit {
     this.toggleJoinModal();
     if (shouldJoin) {
       this.usersService.joinStructure(this.structure._id, this.authService.userValue.username).subscribe();
-      this.router.navigate(['join-request', this.structure._id], { state: { isClaimed: this.structure.isClaimed } });
+      this.router.navigate(['join-request', this.structure._id], { state: { isClaimed: !this.structure.hasNoUserDN } });
     }
   }
 
-- 
GitLab


From 1fb592791042ebf25cf55808bbe979243ccb4642 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marl=C3=A8ne=20SIMONDANT?= <msimondant@grandlyon.com>
Date: Fri, 11 Aug 2023 10:22:22 +0000
Subject: [PATCH 13/19] fix(structureDetails) : display members with jobs with
 personal offer only

---
 .../profile-structure/profile-structure.component.html      | 6 +++---
 .../profile-structure/profile-structure.component.scss      | 1 +
 .../profile-structure/profile-structure.component.ts        | 6 ++----
 .../structure-details/structure-details.component.html      | 6 +++---
 .../structure-details/structure-details.component.ts        | 2 ++
 5 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/app/profile/profile-structure/profile-structure.component.html b/src/app/profile/profile-structure/profile-structure.component.html
index 82acb1444..8a0ed24d1 100644
--- a/src/app/profile/profile-structure/profile-structure.component.html
+++ b/src/app/profile/profile-structure/profile-structure.component.html
@@ -108,9 +108,9 @@
       [isPublic]="isPublic"
     >
     </app-personal-offer>
-    <div *ngIf="members.length > 0" class="section">
+    <div *ngIf="membersWithJobWithPO.length > 0" class="section">
       <div class="sectionHeader">
-        <p class="sectionTitle">membres</p>
+        <p class="sectionTitle">Accompagnant·es numériques</p>
         <app-button
           *ngIf="!isPublic && !isPending"
           class="hide-on-mobile"
@@ -130,7 +130,7 @@
         />
       </div>
       <div class="sectionContent members">
-        <app-profile-structure-member *ngFor="let member of members; let i = index" [member]="member" />
+        <app-profile-structure-member *ngFor="let member of membersWithJobWithPO; let i = index" [member]="member" />
       </div>
     </div>
     <div
diff --git a/src/app/profile/profile-structure/profile-structure.component.scss b/src/app/profile/profile-structure/profile-structure.component.scss
index 0b23a41c4..7399e19ad 100644
--- a/src/app/profile/profile-structure/profile-structure.component.scss
+++ b/src/app/profile/profile-structure/profile-structure.component.scss
@@ -82,6 +82,7 @@
         display: flex;
         justify-content: space-between;
         align-items: center;
+        min-height: 2.25em;
 
         .sectionTitle {
           text-transform: uppercase;
diff --git a/src/app/profile/profile-structure/profile-structure.component.ts b/src/app/profile/profile-structure/profile-structure.component.ts
index 89c924064..f79f395a4 100644
--- a/src/app/profile/profile-structure/profile-structure.component.ts
+++ b/src/app/profile/profile-structure/profile-structure.component.ts
@@ -6,7 +6,6 @@ import { DateTime } from 'luxon';
 import { structureFormStep } from '../../form/form-view/structure-form/structureFormStep.enum';
 import { Structure } from '../../models/structure.model';
 import { StructureWithOwners } from '../../models/structureWithOwners.model';
-import { StructureService } from '../../services/structure.service';
 import { ButtonType } from '../../shared/components/button/buttonType.enum';
 import { SearchService } from '../../structure-list/services/search.service';
 import { formUtils } from '../../utils/formUtils';
@@ -37,7 +36,7 @@ export class ProfileStructureComponent implements OnInit {
   @Input() public joinRequestDate: string | null;
   @Output() cancelJoin = new EventEmitter<any>();
 
-  public members: User[] = [];
+  public membersWithJobWithPO: User[] = [];
   public structureForm: FormGroup;
   public buttonTypeEnum = ButtonType;
   public showDetails: boolean = false;
@@ -49,7 +48,6 @@ export class ProfileStructureComponent implements OnInit {
     private router: Router,
     private userService: UserService,
     private searchService: SearchService,
-    private structureService: StructureService,
     public utils: Utils
   ) {}
 
@@ -57,7 +55,7 @@ export class ProfileStructureComponent implements OnInit {
     this.structureForm = new formUtils().createStructureForm(this.structureWithOwners.structure, true);
     this.structureWithOwners.owners.forEach((owner) => {
       this.userService.getUser(owner._id).subscribe((user) => {
-        this.members.push(user);
+        if (user.job?.hasPersonalOffer) this.membersWithJobWithPO.push(user);
       });
     });
     this.structure = new Structure(this.structureWithOwners.structure);
diff --git a/src/app/structure-list/components/structure-details/structure-details.component.html b/src/app/structure-list/components/structure-details/structure-details.component.html
index e4b5cacb8..74a675ef1 100644
--- a/src/app/structure-list/components/structure-details/structure-details.component.html
+++ b/src/app/structure-list/components/structure-details/structure-details.component.html
@@ -313,15 +313,15 @@
 
       <!-- Members -->
       <div
-        *ngIf="userIsLoggedIn() && structureAdmins.length"
+        *ngIf="userIsLoggedIn() && membersWithJobWithPO.length"
         fxLayout="column"
         class="structure-details-block"
         fxLayoutAlign="baseline baseline"
         fxLayoutGap="8px"
       >
-        <h2>Membres</h2>
+        <h2>Accompagnant·es numériques</h2>
         <div fxLayout="column" fxLayoutGap="8px" fxLayoutAlign="baseline baseline">
-          <div *ngFor="let member of structureAdmins" class="member-card">
+          <div *ngFor="let member of membersWithJobWithPO" class="member-card">
             <app-svg-icon class="avatar" [type]="'avatar'" [icon]="'defaultAvatar'" [iconClass]="'icon-40'" />
             <div class="info-member">
               <a class="member" routerLink="/profile/{{ member._id }}">
diff --git a/src/app/structure-list/components/structure-details/structure-details.component.ts b/src/app/structure-list/components/structure-details/structure-details.component.ts
index f5e17d5cc..bbcf78bb5 100644
--- a/src/app/structure-list/components/structure-details/structure-details.component.ts
+++ b/src/app/structure-list/components/structure-details/structure-details.component.ts
@@ -56,6 +56,7 @@ export class StructureDetailsComponent implements OnInit {
   public joinModalOpened = false;
   public pendingModalOpened = false;
   public structureAdmins: Owner[] = [];
+  public membersWithJobWithPO: Owner[] = [];
   public fullScreen = false;
   public Equipment = Equipment;
   public FreeWorkshop = FreeWorkshop;
@@ -109,6 +110,7 @@ export class StructureDetailsComponent implements OnInit {
       this.currentProfile = await this.profileService.getProfile();
       this.structureService.getStructureWithOwners(this.structure._id).subscribe((res) => {
         this.structureAdmins = res.owners;
+        this.membersWithJobWithPO = res.owners.filter((owner) => owner.job?.hasPersonalOffer);
       });
     }
 
-- 
GitLab


From 86be06449b936e4897f7e804ca9cb29057a811fd Mon Sep 17 00:00:00 2001
From: Etienne LOUPIAS <eloupias@grandlyon.com>
Date: Fri, 11 Aug 2023 16:20:20 +0200
Subject: [PATCH 14/19] feat(structure): add structure types

---
 src/app/shared/enum/structureType.enum.ts | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/app/shared/enum/structureType.enum.ts b/src/app/shared/enum/structureType.enum.ts
index 2a32ad6cf..a43e115ae 100644
--- a/src/app/shared/enum/structureType.enum.ts
+++ b/src/app/shared/enum/structureType.enum.ts
@@ -24,6 +24,9 @@ export enum StructureTypeEnum {
   laPoste = 'La Poste',
   espaceEmploi = 'Espace emploi',
   CPAM = 'CPAM',
+  AFPA = 'AFPA',
+  centreDeGestion = 'Centre de gestion',
+  EPIC = 'EPIC',
   autre = 'Autre',
 
   // Privée à but non lucratif
-- 
GitLab


From f228c4a20cc003d8d726204c48f440db00b16e96 Mon Sep 17 00:00:00 2001
From: Etienne LOUPIAS <eloupias@grandlyon.com>
Date: Thu, 17 Aug 2023 15:17:47 +0200
Subject: [PATCH 15/19] feat(onboarding): sort structure types

---
 .../structure-type-picker/structure-type-picker.component.ts     | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/app/shared/components/structure-type-picker/structure-type-picker.component.ts b/src/app/shared/components/structure-type-picker/structure-type-picker.component.ts
index a0782ecb4..690178cfd 100644
--- a/src/app/shared/components/structure-type-picker/structure-type-picker.component.ts
+++ b/src/app/shared/components/structure-type-picker/structure-type-picker.component.ts
@@ -34,6 +34,7 @@ export class StructureTypePickerComponent implements OnInit {
     this.structureTypeService.getStructureTypes().subscribe((types) => {
       // Filter "other" structure type
       types = types.filter((type) => type.selectable);
+      types = types.sort((a, b) => a.value.localeCompare(b.value));
       this.publicTypes = types.filter((type) => type.category === this.structureTypeCategoryEnum.public);
       this.privateTypes = types.filter((type) => type.category === this.structureTypeCategoryEnum.private);
       this.privateLucrativeTypes = types.filter(
-- 
GitLab


From 6346e6d2a2edba8633b6c71786ab2118e69b3845 Mon Sep 17 00:00:00 2001
From: Etienne LOUPIAS <eloupias@grandlyon.com>
Date: Fri, 18 Aug 2023 10:36:57 +0200
Subject: [PATCH 16/19] fix(rdv): disable next button before socialWorkerId is
 selected

---
 .../make-appointment/make-appointment.component.html        | 6 ++----
 src/app/utils/orientationUtils.ts                           | 2 +-
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html
index 99492b121..992fa3648 100644
--- a/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html
+++ b/src/app/form/orientation-form-view/online-demarch/appointment/make-appointment/make-appointment.component.html
@@ -76,8 +76,7 @@
           formControlName="structureRDV"
           id="{{ structure._id }}"
           value="{{ structure._id }}"
-          (click)="onStructureRadioChange(structure)"
-          (keyup.enter)="onStructureRadioChange(structure)"
+          (change)="onStructureRadioChange(structure)"
         />
         <label class="listCards" for="{{ structure._id }}">
           <app-card
@@ -87,8 +86,7 @@
             [structure]="structure"
             [isOrientation]="false"
             [isOrientationRdv]="false"
-            (click)="onStructureRadioChange(structure)"
-            (keyup.enter)="onStructureRadioChange(structure)"
+            (change)="onStructureRadioChange(structure)"
           ></app-card>
         </label>
       </div>
diff --git a/src/app/utils/orientationUtils.ts b/src/app/utils/orientationUtils.ts
index dc63baa32..28acb745e 100644
--- a/src/app/utils/orientationUtils.ts
+++ b/src/app/utils/orientationUtils.ts
@@ -233,7 +233,7 @@ export class OrientationUtils {
       valid: true,
     };
     pagesValidation[AppointmentSteps.makeAppointment] = {
-      valid: form.get('socialWorkerId').valid || form.get('structureRDV').valid,
+      valid: form.get('socialWorkerId').valid && form.get('structureRDV').valid,
     };
     pagesValidation[AppointmentSteps.mediationBeneficiaryInfo] = {
       valid:
-- 
GitLab


From 67675a6a8d3e2d139e8b31793c0881ea6860d8ff Mon Sep 17 00:00:00 2001
From: Etienne LOUPIAS <eloupias@grandlyon.com>
Date: Mon, 21 Aug 2023 12:05:51 +0200
Subject: [PATCH 17/19] fix(orientation): reset rdv

---
 .../navigation/navigation.component.ts                 | 10 ++--------
 .../needs-selection/needs-selection.component.html     |  2 +-
 .../orientation-form-view.component.html               |  1 +
 .../orientation-form-view.component.ts                 |  6 ++++--
 4 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/src/app/form/orientation-form-view/global-components/navigation/navigation.component.ts b/src/app/form/orientation-form-view/global-components/navigation/navigation.component.ts
index 43385e348..339854554 100644
--- a/src/app/form/orientation-form-view/global-components/navigation/navigation.component.ts
+++ b/src/app/form/orientation-form-view/global-components/navigation/navigation.component.ts
@@ -23,6 +23,7 @@ export class NavigationComponent {
 
   @Output() goNext = new EventEmitter<any>();
   @Output() goPrev = new EventEmitter<any>();
+  @Output() goReset = new EventEmitter<any>();
 
   public buttonTypeEnum = ButtonType;
   public NeedsTypeEnum = NeedsType;
@@ -38,13 +39,6 @@ export class NavigationComponent {
     this.router.navigateByUrl('/acteurs');
   }
   public resetOrientation(): void {
-    this.router.routeReuseStrategy.shouldReuseRoute = () => false;
-    this.router.onSameUrlNavigation = 'reload';
-    this.router.navigate(['./'], { relativeTo: this.route });
-
-    // avoid blocking the main thread and freezing the app
-    setTimeout(() => {
-      location.reload();
-    }, 0);
+    this.goReset.emit();
   }
 }
diff --git a/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.html b/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.html
index c04c4fb2b..17d5d99ed 100644
--- a/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.html
+++ b/src/app/form/orientation-form-view/global-components/needs-selection/needs-selection.component.html
@@ -1,4 +1,4 @@
-<h2>Quels sont les besoins de la personnne ?</h2>
+<h2>Quels sont les besoins de la personne ?</h2>
 <app-multi-radio-form
   [items]="needsList"
   [displayIcon]="true"
diff --git a/src/app/form/orientation-form-view/orientation-form-view.component.html b/src/app/form/orientation-form-view/orientation-form-view.component.html
index 43e0afe1e..ac7d832aa 100644
--- a/src/app/form/orientation-form-view/orientation-form-view.component.html
+++ b/src/app/form/orientation-form-view/orientation-form-view.component.html
@@ -62,6 +62,7 @@
       [shouldResetOrientation]="shouldResetOrientation"
       (goNext)="nextPage()"
       (goPrev)="prevPage()"
+      (goReset)="reset()"
     />
   </div>
   <app-modal-confirmation
diff --git a/src/app/form/orientation-form-view/orientation-form-view.component.ts b/src/app/form/orientation-form-view/orientation-form-view.component.ts
index d6435e57b..aceaf7529 100644
--- a/src/app/form/orientation-form-view/orientation-form-view.component.ts
+++ b/src/app/form/orientation-form-view/orientation-form-view.component.ts
@@ -247,7 +247,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
     window.print();
     setTimeout(() => {
       this.canDeactivate = true;
-      history.pushState({ rdvStructure: null, userStructure: null }, '', '/orientation');
+      history.pushState({ rdvStructure: null, rdvUser: null }, '', '/orientation');
       window.location.reload();
     }, 100);
   }
@@ -467,7 +467,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
 
       // after last page, go to new orientation
       if (this.currentStep === AppointmentSteps.rdvEnd) {
-        history.pushState({ rdvStructure: null, userStructure: null }, '', '/orientation');
+        history.pushState({ rdvStructure: null, rdvUser: null }, '', '/orientation');
         window.location.reload();
         return;
       }
@@ -588,6 +588,8 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
     this.filtersForm = undefined;
     this.currentStep = null;
     this.currentType = OnlineDemarche.common;
+    this.isLastStep = false;
+    this.shouldResetOrientation = false;
     this.nbSteps = OrientationFormViewComponent.MAX_STEP;
     this.isPageValid = false;
     this.needType = undefined;
-- 
GitLab


From 04b5dbf58c470df0b8ecb4c16e264d98c233d6ee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20PAILHAREY?= <rpailharey@grandlyon.com>
Date: Mon, 21 Aug 2023 12:57:23 +0000
Subject: [PATCH 18/19] feat(indicators): introduce new orientation and user
 activity endpoints

---
 .vscode/launch.json                           |  35 ++---
 .../structure-orientator.component.html       |   2 +-
 .../orientationIndicator.interface.ts         |  23 +++
 .../onlineDemarch-form.component.html         |   9 +-
 .../onlineDemarch-form.component.ts           |  29 +++-
 .../orientation-form-view.component.html      |  11 +-
 .../orientation-form-view.component.ts        | 143 +++++++++++++-----
 .../orientation-structure-list.component.ts   |   3 +-
 src/app/models/structure.model.ts             |   2 +-
 src/app/services/auth.service.ts              |  18 +--
 src/app/services/indicator.service.ts         |  18 +++
 src/app/utils/orientationUtils.ts             |  23 +++
 12 files changed, 224 insertions(+), 92 deletions(-)
 create mode 100644 src/app/form/orientation-form-view/interfaces/orientationIndicator.interface.ts
 create mode 100644 src/app/services/indicator.service.ts

diff --git a/.vscode/launch.json b/.vscode/launch.json
index 0225cccac..85f2c7e2f 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -1,22 +1,15 @@
 {
-    // Use IntelliSense to learn about possible attributes.
-    // Hover to view descriptions of existing attributes.
-    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
-    "version": "0.2.0",
-    "configurations": [
-        {
-            "name": "npm start",
-            "type": "chrome",
-            "request": "launch",
-            "url": "http://localhost:4200/#",
-            "webRoot": "${workspaceFolder}",
-            "sourceMapPathOverrides": {
-              "webpack:/*": "${webRoot}/*",
-              "/./*": "${webRoot}/*",
-              "/src/*": "${webRoot}/*",
-              "/*": "*",
-              "/./~/*": "${webRoot}/node_modules/*"
-            }
-          }
-    ]
-}
\ No newline at end of file
+  // Use IntelliSense to learn about possible attributes.
+  // Hover to view descriptions of existing attributes.
+  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+  "version": "0.2.0",
+  "configurations": [
+    {
+      "name": "Debug Chrome",
+      "type": "chrome",
+      "request": "launch",
+      "url": "http://localhost:4200",
+      "webRoot": "${workspaceFolder}"
+    }
+  ]
+}
diff --git a/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html b/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html
index 4eccefa90..900f88917 100644
--- a/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html
+++ b/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html
@@ -1,4 +1,4 @@
-<h2>Quelle structure oriente la personne ?</h2>
+<h2>Quelle structure oriente la personne&nbsp;?</h2>
 <div *ngIf="hasStructures && structuresLinked.length >= 2" class="select-structure border">
   <div class="number">{{ structuresLinked.length }} structures sont associées à votre compte</div>
   <div
diff --git a/src/app/form/orientation-form-view/interfaces/orientationIndicator.interface.ts b/src/app/form/orientation-form-view/interfaces/orientationIndicator.interface.ts
new file mode 100644
index 000000000..129ef0727
--- /dev/null
+++ b/src/app/form/orientation-form-view/interfaces/orientationIndicator.interface.ts
@@ -0,0 +1,23 @@
+import { Address } from '../../../models/address.model';
+import { MediationType } from '../types/mediation.type';
+
+export interface OrientationIndicatorStructure {
+  nom: string;
+  adresse: Address;
+  zoneCTM?: string;
+  distance?: number;
+}
+
+export interface OrientationIndicatorType {
+  typeOrientation: string;
+  filtres: string[];
+  typeAccompagnement: MediationType;
+}
+export interface IOrientationIndicator {
+  origin: OrientationIndicatorStructure;
+  target: OrientationIndicatorStructure[];
+  type: OrientationIndicatorType;
+  connected: boolean;
+  completed: boolean;
+  progress: number;
+}
diff --git a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html
index 8633fb67c..f361b712e 100644
--- a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html
+++ b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.html
@@ -1,7 +1,7 @@
 <!-- COMMON FORM -->
 <ng-container *ngIf="currentType === onlineDemarcheTypeEnum.common">
   <app-online-demarch
-    *ngIf="currentStep === onlineDemarchesCommonStepsEnum.onlineDemarche"
+    *ngIf="needType === needEnum.onlineDemarch && currentStep === onlineDemarchesCommonStepsEnum.onlineDemarche"
     [form]="form"
     (checkValidation)="checkValidation()"
   />
@@ -10,6 +10,13 @@
     [form]="form"
     (checkValidation)="checkValidation()"
   />
+  <app-base-skills
+    *ngIf="needType === needEnum.learnSkills && currentStep === onlineDemarchesCommonStepsEnum.onlineDemarche"
+    [currentStep]="currentStep"
+    [currentType]="currentType"
+    [form]="filtersForm"
+    (validatePage)="checkValidation()"
+  />
 </ng-container>
 <!-- APPOINTMENT FORM -->
 <ng-container *ngIf="currentType === onlineDemarcheTypeEnum.appointment">
diff --git a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts
index 1a18fd45a..c1e9227b9 100644
--- a/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts
+++ b/src/app/form/orientation-form-view/online-demarch/onlineDemarch-form.component.ts
@@ -1,5 +1,5 @@
 import { Component, EventEmitter, Input, Output } from '@angular/core';
-import { UntypedFormArray, UntypedFormControl, UntypedFormGroup } from '@angular/forms';
+import { FormGroup, UntypedFormArray, UntypedFormControl, UntypedFormGroup } from '@angular/forms';
 import { Owner } from '../../../models/owner.model';
 import { Structure } from '../../../models/structure.model';
 import { User } from '../../../models/user.model';
@@ -9,10 +9,12 @@ import { Filter } from '../../../structure-list/models/filter.model';
 import { OrientationUtils } from '../../../utils/orientationUtils';
 import { AppointmentSteps } from '../enums/AppointmentSteps.enum';
 import { HotlineMediationSteps } from '../enums/hotlineMediationSteps.enum';
+import { NeedsType } from '../enums/needs.enum';
 import { OnlineDemarche } from '../enums/onlineDemarche.enum';
 import { OnlineDemarchesCommonSteps } from '../enums/onlineDemarchesCommonSteps.enum';
 import { RecapsType } from '../enums/recapsType.enum';
 import { StructuresListSteps } from '../enums/structuresListSteps.enum';
+import { FiltersForm } from '../interfaces/filtersForm.interface';
 import { MediationType } from '../types/mediation.type';
 import { MediationStepType } from '../types/mediationStep.type';
 import { OnlineMediationSteps } from '../types/onlineDemarcheStep.type';
@@ -22,10 +24,12 @@ import { OnlineMediationSteps } from '../types/onlineDemarcheStep.type';
   templateUrl: './onlineDemarch-form.component.html',
 })
 export class OnlineDemarchFormComponent {
+  @Input() needType: NeedsType;
   @Input() currentStep: OnlineMediationSteps | StructuresListSteps | AppointmentSteps | MediationStepType;
   @Input() currentType: OnlineDemarche | MediationType;
   @Input() form: UntypedFormGroup;
   @Input() filters: Filter[] = [];
+  @Input() filtersForm: FormGroup<FiltersForm>;
   @Input() profile: User;
   @Input() categories: { [key: string]: Category };
   @Input() structureRDV: Structure;
@@ -44,6 +48,7 @@ export class OnlineDemarchFormComponent {
   public structuresListStepsEnum = StructuresListSteps;
   public onlineDemarcheTypeEnum = OnlineDemarche;
   public onlineDemarchesAppointmentSteps = AppointmentSteps;
+  public needEnum = NeedsType;
   public recapsType = RecapsType;
 
   constructor(public orientationService: OrientationService) {}
@@ -67,12 +72,22 @@ export class OnlineDemarchFormComponent {
         );
         break;
       case OnlineDemarche.common:
-        this.orientationUtils.setValidationsOnlineDemarchesForm(
-          this.pagesValidation,
-          this.form,
-          (isValid) => this.validatePage.emit(isValid),
-          this.currentStep as OnlineDemarchesCommonSteps
-        );
+        if (this.needType === NeedsType.learnSkills) {
+          this.orientationUtils.setValidationsLearnSkillsForm(
+            this.pagesValidation,
+            this.filtersForm,
+            this.form,
+            (isValid) => this.validatePage.emit(isValid),
+            this.currentStep as OnlineDemarchesCommonSteps
+          );
+        } else {
+          this.orientationUtils.setValidationsOnlineDemarchesForm(
+            this.pagesValidation,
+            this.form,
+            (isValid) => this.validatePage.emit(isValid),
+            this.currentStep as OnlineDemarchesCommonSteps
+          );
+        }
         break;
       case OnlineDemarche.appointment:
         if (this.currentStep === AppointmentSteps.carto - 1) {
diff --git a/src/app/form/orientation-form-view/orientation-form-view.component.html b/src/app/form/orientation-form-view/orientation-form-view.component.html
index ac7d832aa..db70064d3 100644
--- a/src/app/form/orientation-form-view/orientation-form-view.component.html
+++ b/src/app/form/orientation-form-view/orientation-form-view.component.html
@@ -30,11 +30,13 @@
         (validatePage)="validatePage($event)"
       ></app-equipment-buy>
       <app-online-demarch-form
-        *ngIf="needType === needEnum.onlineDemarch"
+        *ngIf="needType === needEnum.onlineDemarch || needType === needEnum.learnSkills"
+        [needType]="needType"
         [currentStep]="currentStep"
         [currentType]="currentType"
         [form]="onlineDemarcheForm"
         [filters]="filters"
+        [filtersForm]="filtersForm"
         [profile]="profile"
         [categories]="categories"
         [structureRDV]="orientationService.rdvStructure"
@@ -42,13 +44,6 @@
         (validateStructureRDV)="validateStructureRDV($event)"
         (setResetOrientation)="setResetOrientation()"
       />
-      <app-base-skills
-        *ngIf="needType === needEnum.learnSkills"
-        [currentStep]="currentStep"
-        [currentType]="currentType"
-        [form]="filtersForm"
-        (validatePage)="validatePage($event)"
-      />
     </ng-container>
   </div>
   <div class="navButtons">
diff --git a/src/app/form/orientation-form-view/orientation-form-view.component.ts b/src/app/form/orientation-form-view/orientation-form-view.component.ts
index aceaf7529..de82fa49e 100644
--- a/src/app/form/orientation-form-view/orientation-form-view.component.ts
+++ b/src/app/form/orientation-form-view/orientation-form-view.component.ts
@@ -1,11 +1,11 @@
 import { AfterContentChecked, ChangeDetectorRef, Component, OnInit } from '@angular/core';
-import { FormGroup, UntypedFormGroup } from '@angular/forms';
-import { Router } from '@angular/router';
+import { AbstractControl, FormGroup, UntypedFormGroup } from '@angular/forms';
 import { lastValueFrom } from 'rxjs';
 import { Structure } from '../../models/structure.model';
 import { User } from '../../models/user.model';
 import { ProfileService } from '../../profile/services/profile.service';
 import { AuthService } from '../../services/auth.service';
+import { IndicatorService } from '../../services/indicator.service';
 import { NotificationService } from '../../services/notification.service';
 import { OrientationService } from '../../services/orientation.service';
 import { StructureService } from '../../services/structure.service';
@@ -27,6 +27,11 @@ import { StructuresListSteps } from './enums/structuresListSteps.enum';
 import { IAppointment } from './interfaces/appointment.interface';
 import { FiltersForm } from './interfaces/filtersForm.interface';
 import { IOnlineMediation } from './interfaces/onlineMediation.interface';
+import {
+  IOrientationIndicator,
+  OrientationIndicatorStructure,
+  OrientationIndicatorType,
+} from './interfaces/orientationIndicator.interface';
 import { StructureOrientationForm } from './interfaces/structureOrientationForm.interface';
 import { StructureOrientator } from './interfaces/structureOrientator.interface';
 import { MediationType } from './types/mediation.type';
@@ -60,6 +65,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
   public needEnum = NeedsType;
   // Global
   public needType: NeedsType;
+  public indicatorNeedType: NeedsType;
   public previousNeedType: NeedsType;
   public currentType: MediationType = OnlineDemarche.common;
   public currentStep: MediationStepType = null;
@@ -113,7 +119,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
     private searchService: SearchService,
     private structureService: StructureService,
     private cdref: ChangeDetectorRef,
-    private router: Router
+    private indicatorService: IndicatorService
   ) {
     this.setCategories();
   }
@@ -192,21 +198,19 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
   }
 
   public checkLastStep(): void {
-    if (
-      this.needType === NeedsType.onlineDemarch &&
+    const isOnlineDemarcheOrLearnSkills =
+      this.needType === NeedsType.onlineDemarch || this.needType === NeedsType.learnSkills;
+    const isOnlineMediationOrientationRecap =
+      isOnlineDemarcheOrLearnSkills &&
       this.currentType === OnlineDemarche.onlineMediation &&
-      this.currentStep === HotlineMediationSteps.orientationRecap
-    ) {
-      this.isLastStep = true;
-    } else if (this.isStructureListForm() && this.currentStep === StructuresListSteps.orientationRecap) {
-      this.isLastStep = true;
-    } else if (
-      this.needType === NeedsType.onlineDemarch &&
+      this.currentStep === HotlineMediationSteps.orientationRecap;
+    const isStructureListOrientationRecap =
+      this.currentType === OnlineDemarche.structureList && this.currentStep === StructuresListSteps.orientationRecap;
+    const isAppointmentRdvEnd =
+      isOnlineDemarcheOrLearnSkills &&
       this.currentType === OnlineDemarche.appointment &&
-      this.currentStep === AppointmentSteps.rdvEnd
-    ) {
-      this.isLastStep = true;
-    } else this.isLastStep = false;
+      this.currentStep === AppointmentSteps.rdvEnd;
+    this.isLastStep = isOnlineMediationOrientationRecap || isStructureListOrientationRecap || isAppointmentRdvEnd;
   }
 
   /**
@@ -244,6 +248,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
   }
 
   public printForm(): void {
+    this.sendOrientationIndicator(this.structureOrientationForm ?? this.onlineDemarcheForm);
     window.print();
     setTimeout(() => {
       this.canDeactivate = true;
@@ -351,6 +356,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
       this.currentType === GenericOrientationSteps.common &&
       this.currentStep === FiltersSteps.filterChoice
     ) {
+      this.indicatorNeedType = this.needType;
       switch (this.needType) {
         case NeedsType.equipmentAccess:
           this.previousNeedType = NeedsType.equipmentAccess;
@@ -368,6 +374,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
           this.previousNeedType = NeedsType.learnSkills;
           this.setFilters('baseSkills');
           this.needType = NeedsType.onlineDemarch;
+          this.indicatorNeedType = NeedsType.learnSkills; // ugly but would need a big refacto to stop changing needtype to fit onlinedemarch form
           if (this.orientationService.rdvStructure || this.orientationService.rdvUser) {
             // if rdv from structure details or user, continue function below to skip accompanimentType and init onlineDemarcheForm
             this.currentStep = OnlineDemarchesCommonSteps.accompanimentType - 1;
@@ -378,8 +385,8 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
           break;
       }
     }
-    // Online demarches
-    if (this.needType === NeedsType.onlineDemarch) {
+    // Online demarches or learn skills
+    if (this.needType === NeedsType.onlineDemarch || this.needType === NeedsType.learnSkills) {
       if (
         this.currentType === OnlineDemarche.common &&
         this.currentStep === OnlineDemarchesCommonSteps.accompanimentType - 1 &&
@@ -395,7 +402,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
       ) {
         this.setOnlineProcedureFilters();
         this.setOnlineProceduresForm();
-        this.previousNeedType = NeedsType.onlineDemarch;
+        this.previousNeedType = this.needType;
         return;
       }
       // Handle last screen Online appointment and print
@@ -420,7 +427,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
     }
 
     // Structure list handling
-    if (this.isStructureListForm()) {
+    if (this.currentType === OnlineDemarche.structureList) {
       // Print last screen
       if (this.currentStep === StructuresListSteps.orientationRecap) {
         this.printForm();
@@ -451,6 +458,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
             (structure) => structure.hasUserWithAppointmentDN
           ).length == 0
         ) {
+          this.sendOrientationIndicator(this.structureOrientationForm ?? this.onlineDemarcheForm);
           this.currentStep = AppointmentSteps.rdvEnd - 1;
         }
       }
@@ -467,6 +475,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
 
       // after last page, go to new orientation
       if (this.currentStep === AppointmentSteps.rdvEnd) {
+        this.sendOrientationIndicator(this.structureOrientationForm ?? this.onlineDemarcheForm);
         history.pushState({ rdvStructure: null, rdvUser: null }, '', '/orientation');
         window.location.reload();
         return;
@@ -501,7 +510,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
   public prevPage(): void {
     this.hideNavButtons = false;
     // Structure list previous page
-    if (this.isStructureListForm()) {
+    if (this.currentType === OnlineDemarche.structureList) {
       if (this.currentStep === StructuresListSteps.structureChoice) {
         this.fullScreen = false;
       }
@@ -543,6 +552,7 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
     // Default case for first form step. If there was a previous form (like filterForm) we go back to this form
     if (this.currentStep === 0) {
       switch (this.previousNeedType) {
+        case NeedsType.learnSkills:
         case NeedsType.onlineDemarch:
           this.currentType = OnlineDemarche.common;
           this.currentStep = OnlineDemarchesCommonSteps.accompanimentType;
@@ -552,7 +562,6 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
             this.currentStep--;
           }
           return;
-        case NeedsType.learnSkills:
         case NeedsType.equipmentAccess:
         case NeedsType.equipmentBuy:
           this.needType = this.previousNeedType;
@@ -569,13 +578,6 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
       // handle the form start
     }
     if (this.currentStep > 0) {
-      // Special case for learnSkills
-      if (this.previousNeedType === NeedsType.learnSkills && this.currentStep === 1) {
-        this.needType = this.previousNeedType;
-        this.currentType = OnlineDemarche.common;
-        this.currentStep = OnlineDemarchesCommonSteps.accompanimentType;
-        this.previousNeedType = null;
-      }
       this.currentStep--;
       this.checkLastStep();
       this.checkHideNavButtons();
@@ -596,18 +598,6 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
     this.filters = [];
   }
 
-  /**
-   * Return if it's a Structure List form
-   * @returns
-   */
-  private isStructureListForm(): boolean {
-    return (
-      (this.needType === NeedsType.onlineDemarch ||
-        this.needType === NeedsType.equipmentAccess ||
-        this.needType === NeedsType.equipmentBuy) &&
-      this.currentType === OnlineDemarche.structureList
-    );
-  }
   /**
    * Return if it's a filter form
    * @returns
@@ -634,11 +624,80 @@ export class OrientationFormViewComponent implements OnInit, AfterContentChecked
   }
   public hasRedirectionAccepted(hasAccept: boolean): void {
     this.resolve(hasAccept);
+    if (hasAccept) {
+      this.sendOrientationIndicator(this.structureOrientationForm ?? this.onlineDemarcheForm);
+    }
     this.showConfirmationModal = false;
   }
+
+  private targetStructures(structureChoice: AbstractControl): OrientationIndicatorStructure[] {
+    const targetStructures: OrientationIndicatorStructure[] = [];
+    if (structureChoice && structureChoice.value) {
+      structureChoice.value.forEach((structure: Structure) => {
+        targetStructures.push({
+          nom: structure.structureName,
+          adresse: structure.address,
+          zoneCTM: structure.categories.ctm?.join(',') ?? null,
+          distance: structure.distance ?? null,
+        });
+      });
+    }
+    return targetStructures;
+  }
+
+  private displayTextNeedType(needType: NeedsType): string {
+    switch (needType) {
+      case NeedsType.equipmentAccess:
+        return 'accès matériel';
+      case NeedsType.equipmentBuy:
+        return 'achat matériel';
+      case NeedsType.learnSkills:
+        return 'compétences';
+      case NeedsType.onlineDemarch:
+        return 'démarche en ligne';
+      default:
+        return '';
+    }
+  }
+
+  private orientationType(filters: Filter[]): OrientationIndicatorType {
+    const orientationType: OrientationIndicatorType = {
+      typeOrientation: this.displayTextNeedType(this.indicatorNeedType ?? this.needType),
+      filtres: [],
+      typeAccompagnement: this.currentType,
+    };
+    filters.forEach((filter: Filter) => {
+      orientationType.filtres.push(filter.text);
+    });
+    return orientationType;
+  }
+
+  private getProgress(): number {
+    if (this.isLastStep) {
+      return 100;
+    }
+    return Math.round((this.currentStep / this.nbSteps) * 100);
+  }
+
+  private sendOrientationIndicator(orientationForm: FormGroup): void {
+    const orientationCompleted: boolean = this.isLastStep;
+    const orientationIndicator: IOrientationIndicator = {
+      origin: {
+        nom: orientationForm?.get('structureOrientator')?.value.structureName ?? null,
+        adresse: orientationForm?.get('address')?.value ?? null,
+      },
+      target: this.targetStructures(orientationForm.get('structureChoice')) ?? null,
+      type: this.orientationType(this.filters),
+      connected: this.authService.isLoggedIn(),
+      completed: orientationCompleted,
+      progress: this.getProgress(),
+    };
+
+    this.indicatorService.createOrientationIndicator(orientationIndicator).subscribe();
+  }
   public checkHideNavButtons(): void {
     if (
-      this.needType === NeedsType.onlineDemarch &&
+      (this.needType === NeedsType.onlineDemarch || this.needType === NeedsType.learnSkills) &&
       this.currentType === OnlineDemarche.appointment &&
       this.currentStep === AppointmentSteps.carto
     ) {
diff --git a/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.ts b/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.ts
index 5190c6c95..52dd66647 100644
--- a/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.ts
+++ b/src/app/form/orientation-form-view/orientation-structure-list/orientation-structure-list.component.ts
@@ -5,6 +5,7 @@ import { User } from '../../../models/user.model';
 import { Filter } from '../../../structure-list/models/filter.model';
 import { OrientationUtils } from '../../../utils/orientationUtils';
 import { FiltersSteps } from '../enums/filtersSteps.enum';
+import { NeedsType } from '../enums/needs.enum';
 import { RecapsType } from '../enums/recapsType.enum';
 import { StructuresListSteps } from '../enums/structuresListSteps.enum';
 import { MediationStepType } from '../types/mediationStep.type';
@@ -14,7 +15,7 @@ import { MediationStepType } from '../types/mediationStep.type';
   templateUrl: './orientation-structure-list.component.html',
 })
 export class OrientationStructureListComponent implements OnChanges {
-  @Input() currentStep: StructuresListSteps | FiltersSteps | MediationStepType;
+  @Input() currentStep: StructuresListSteps | FiltersSteps | MediationStepType | NeedsType;
   @Input() profile: User;
   @Input() form: UntypedFormGroup;
   @Input() filters: Filter[] = [];
diff --git a/src/app/models/structure.model.ts b/src/app/models/structure.model.ts
index ad5e54fa0..1e4cd5c61 100644
--- a/src/app/models/structure.model.ts
+++ b/src/app/models/structure.model.ts
@@ -78,7 +78,7 @@ export class Structure {
         genre: obj?.categories?.genre || [],
         selfServiceMaterial: obj?.categories?.selfServiceMaterial || [],
         solidarityMaterial: obj?.categories?.solidarityMaterial || [],
-        withAppointment: obj?.withAppointment,
+        ctm: obj?.categories?.ctm || [],
       },
     });
   }
diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts
index 924bdb3cd..ccde5794d 100644
--- a/src/app/services/auth.service.ts
+++ b/src/app/services/auth.service.ts
@@ -68,16 +68,14 @@ export class AuthService {
   }
 
   public login(email: string, password: string): Observable<any> {
-    return this.http
-      .post<UserAuth>('api/auth/login', { email, password })
-      .pipe(
-        map((user) => {
-          // store user details and jwt token in local storage to keep user logged in between page refreshes
-          localStorage.setItem('user', JSON.stringify(user));
-          this.userSubject.next(user);
-          return user;
-        })
-      );
+    return this.http.post<UserAuth>('api/auth/login', { email, password }).pipe(
+      map((user) => {
+        // store user details and jwt token in local storage to keep user logged in between page refreshes
+        localStorage.setItem('user', JSON.stringify(user));
+        this.userSubject.next(user);
+        return user;
+      })
+    );
   }
 
   public verifyUser(userId: string, token: string): Observable<any> {
diff --git a/src/app/services/indicator.service.ts b/src/app/services/indicator.service.ts
new file mode 100644
index 000000000..40bd90d66
--- /dev/null
+++ b/src/app/services/indicator.service.ts
@@ -0,0 +1,18 @@
+import { HttpClient } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { Observable } from 'rxjs';
+import { IOrientationIndicator } from '../form/orientation-form-view/interfaces/orientationIndicator.interface';
+
+@Injectable({
+  providedIn: 'root',
+})
+export class IndicatorService {
+  constructor(private http: HttpClient) {}
+
+  /**
+   * Send orientation indicator to server
+   */
+  public createOrientationIndicator(newOrientationIndicator: IOrientationIndicator): Observable<IOrientationIndicator> {
+    return this.http.post<IOrientationIndicator>('/api/indicator/orientation', newOrientationIndicator);
+  }
+}
diff --git a/src/app/utils/orientationUtils.ts b/src/app/utils/orientationUtils.ts
index 28acb745e..e17c8fee0 100644
--- a/src/app/utils/orientationUtils.ts
+++ b/src/app/utils/orientationUtils.ts
@@ -120,6 +120,29 @@ export class OrientationUtils {
       phone: new UntypedFormControl('', [Validators.required, Validators.pattern(CustomRegExp.PHONE)]),
     });
   }
+  /**
+   *
+   * @param pagesValidation
+   * @param filterForm
+   * @param form
+   * @param updatePageValid
+   * @param step
+   */
+  public setValidationsLearnSkillsForm(
+    pagesValidation: any[],
+    filterForm: FormGroup<FiltersForm>,
+    form: UntypedFormGroup,
+    updatePageValid: (isValid: boolean) => void,
+    step: OnlineDemarchesCommonSteps
+  ): void {
+    pagesValidation[OnlineDemarchesCommonSteps.onlineDemarche] = {
+      valid: filterForm.get('filters').value.length > 0,
+    };
+    pagesValidation[OnlineDemarchesCommonSteps.accompanimentType] = {
+      valid: form.get('accompanimentType')?.value !== null,
+    };
+    updatePageValid(pagesValidation[step].valid);
+  }
   /**
    *
    * @param pagesValidation
-- 
GitLab


From 85fcf5602b0d09a101f12666c4ebd0d23af8333f Mon Sep 17 00:00:00 2001
From: Etienne LOUPIAS <eloupias@grandlyon.com>
Date: Mon, 21 Aug 2023 17:20:52 +0200
Subject: [PATCH 19/19] chore(release): 2.4.0

---
 CHANGELOG.md | 22 ++++++++++++++++++++++
 package.json |  2 +-
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 66315f884..a2a659edd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,28 @@
 
 All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
 
+## [2.4.0](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/compare/v2.3.3...v2.4.0) (2023-08-21)
+
+
+### Features
+
+* **indicators:** introduce new orientation and user activity endpoints ([04b5dbf](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/04b5dbf58c470df0b8ecb4c16e264d98c233d6ee))
+* **onboarding:** sort structure types ([f228c4a](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/f228c4a20cc003d8d726204c48f440db00b16e96))
+* **profile:** appointment choice ([9413235](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/941323544f8c6201daae0b3be63d653a1401339f))
+* **profile:** manage newsletter subscription ([70937f1](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/70937f127c1b174c5decae453d9dc0ce83565f00))
+* **structure:** add structure types ([86be064](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/86be06449b936e4897f7e804ca9cb29057a811fd))
+* **structureDetails:** make an appointement from a structure (RDV en ligne V2) ([a3bdb21](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/a3bdb2128082ba73ae755b8b01d04a64baad8c00))
+* **structure:** update structure CNFS label from user job ([917c574](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/917c574673eece1ab109cb93a75dab242291aead))
+
+
+### Bug Fixes
+
+* **edit-structure:** warning when structureType field is missing ([e0411d9](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/e0411d926ce0239918504ec3f275c3d89d250673))
+* **onboarding:** personal information step title ([f144431](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/f144431603bae37bfa4985f811456cec3804e79a))
+* **orientation:** reset rdv ([67675a6](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/67675a6a8d3e2d139e8b31793c0881ea6860d8ff))
+* **phone-mail validators:** add a cross check validation to this fields ([c758ea2](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/c758ea2eb3bd55d50ebe9b8810751bcf99f5d914))
+* **rdv:** disable next button before socialWorkerId is selected ([6346e6d](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/commit/6346e6d2a2edba8633b6c71786ab2118e69b3845))
+
 ### [2.3.3](https://forge.grandlyon.com/web-et-numerique/factory/pamn_plateforme-des-acteurs-de-la-mediation-numerique/pamn_client/compare/v2.3.2...v2.3.3) (2023-06-23)
 
 
diff --git a/package.json b/package.json
index 2e39497bb..fda56ebe7 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "pamn",
-  "version": "2.3.3",
+  "version": "2.4.0",
   "scripts": {
     "ng": "ng",
     "start": "ng serve --configuration=local,fr --proxy-config proxy.conf.json",
-- 
GitLab