Documentation API

Cette application mobile a été développée avec Flutter selon les maquettes disponibles sur Figma.

Champ Lexical

Champ Lexical

Bilan

Un premier bilan est obligatoire pour tous les utilisateurs chez HTC Santé. Ce bilan initial marque le début du parcours utilisateur et permet d'évaluer l'état de santé, définir les objectifs et recommander une cure adaptée. Tous les utilisateurs de l'application ont obligatoirement réalisé ce premier bilan avant d'accéder aux autres services.

Assessment

A first assessment is mandatory for all HTC Santé users. This initial assessment is the starting point of the user journey, evaluating health status, defining goals, and recommending a suitable treatment plan. All users in the application must have completed this assessment before accessing other services.

Cure

Un programme de santé personnalisé comprenant plusieurs séances. Les cures visent des objectifs spécifiques, comme la perte de poids ou l'amélioration des performances physiques. Chaque cure est structurée autour d'un nombre défini de séances.

Treatment Plan

A personalized health program consisting of several sessions. Treatment plans target specific goals, such as weight loss or improved physical performance. Each treatment plan is structured with a defined number of sessions.

Rendez-vous Flash

Un type de rendez-vous rapide, indépendant des bilans et des cures. Ce rendez-vous est souvent utilisé pour des besoins ponctuels. Il est payant, non annulable et non replanifiable, et son paiement est traité via Stripe en frontend.

Flash Appointment

A quick type of appointment, independent of assessments and treatment plans. This appointment is often used for specific needs. It is paid, non-cancelable, and non-reschedulable, with payments processed via Stripe in the frontend.

Séance

Une consultation individuelle qui fait partie d'une cure spécifique. Une séance est exclusivement liée à une cure et ne peut pas être réservée indépendamment.

Session

An individual consultation that is part of a specific treatment plan. A session is exclusively linked to a treatment plan and cannot be booked independently.

Pôle utilisateur

Le pôle représente le centre ou la région de référence auquel un utilisateur est associé (exemple : "Epinal"). Chaque utilisateur est attaché à un pôle fixe dès son inscription, et cette information ne peut pas être modifiée par l'utilisateur. Ce pôle sert à personnaliser les services et à déterminer les disponibilités pour les rendez-vous.

User Pole

The pole represents the center or region of reference to which a user is linked (e.g., "Epinal"). Each user is associated with a fixed pole at the time of registration, and this information cannot be modified by the user. The pole personalizes services and determines appointment availabilities.

Profil utilisateur

Les informations personnelles de l'utilisateur, comme le nom, prénom, pôle, date de naissance. Ces informations sont utilisées pour personnaliser l'expérience dans l'application.

User Profile

Personal information about the user, such as name, first name, pole, and date of birth. This information is used to personalize the user experience within the application.

Statistiques

Données relatives à l'évolution de l'utilisateur, comme le poids, l'IMC, la masse musculaire, etc. Elles permettent de suivre l'impact des cures et des programmes dans le temps.

Statistics

Data related to the user's progress, such as weight, BMI, muscle mass, etc. They allow tracking the impact of treatment plans and programs over time.

Programme

Une série d'objectifs ou de documents PDF attribués à l'utilisateur pour un suivi personnalisé. Chaque programme est accompagné d'un fichier PDF consultable et est conçu pour compléter les séances et les bilans.

Program

A series of goals or PDF documents assigned to the user for personalized follow-up. Each program comes with a viewable PDF file designed to complement sessions and assessments.

1. Authentification et gestion des comptes

POST
/api/auth/login

1.1 Connexion Email

Permet à un utilisateur de se connecter en utilisant son e-mail et son mot de passe.

Corps de la requête

{
  "adresse_email": "",
  "mot_de_passe": ""
}

Réponse

{
  "statut": true,
  "message": "Connexion réussie",
  "id_utilisateur": "12345"
}
POST
/api/auth/login/sms

1.2 Connexion SMS

Connexion via un numéro de téléphone en recevant un OTP via Octopush.

Corps de la requête

{
  "numero_telephone": ""
}

Réponse

{
  "statut": true,
  "message": "OTP envoyé avec succès",
  "id_utilisateur": "12345"
}
POST
/api/auth/reset-password

1.3 Réinitialisation MDP

Réinitialisation du mot de passe via un lien sécurisé ou un mot de passe temporaire envoyé par e-mail ou SMS.

Corps de la requête

{
  "adresse_email": "",
  "numero_telephone": ""
}

Réponse

{
  "statut": true,
  "message": "Lien de réinitialisation envoyé ou mot de passe temporaire attribué"
}

2. Gestion du profil utilisateur

GET
/api/users/{id_utilisateur}

2.1 Récupérer Profil

Récupère les détails du profil utilisateur incluant la date d'inscription.

Réponse

{
  "id_utilisateur": "12345",
  "prenom": "John",
  "nom": "Doe",
  "date_naissance": "1990-01-01",
  "genre": "Homme",
  "photo_profil": "https://example.com/image.jpg",
  "pole": "Epinal",
  "date_inscription": "2024-01-15"
}
PATCH
/api/users/{id_utilisateur}

2.2 Mettre à jour Profil

Met à jour les informations du profil utilisateur (sauf le pôle). Permet également de changer le mot de passe sans vérification de l'ancien mot de passe.

Corps de la requête

{
  "prenom": "John",
  "nom": "Smith",
  "date_naissance": "1989-12-31",
  "genre": "Homme",
  "photo_profil": "https://example.com/image.jpg",
  "nouveau_mot_de_passe": "nouveau_mdp_123"
}

Réponse

{
  "statut": true,
  "message": "Profil mis à jour avec succès"
}

3. Gestion des rendez-vous

GET
/api/users/{id_utilisateur}/appointments

3.1 Liste des RDV

Récupère la liste des rendez-vous en cours de l'utilisateur.

Réponse

{
  "rendez_vous": [
    {
      "id_rendezvous": "12345",
      "date": "2024-02-15",
      "heure": "14:30",
      "type": "cure",
      "id_cure": "789",
      "praticien": {
        "nom": "Dr. Smith",
        "photo": "https://example.com/photo.jpg"
      },
      "annulable": true,
      "replanifiable": true
    }
  ]
}
GET
/api/appointments/availability

3.2 Disponibilités

Récupère les disponibilités sur une période de 30 jours pour une cure ou un bilan.

Corps de la requête

{
  "type": "cure",
  "pole": "Epinal",
  "id_cure": "789"
}

Réponse

{
  "disponibilites": [
    {
      "date": "2025-01-15",
      "heure": "10:00"
    }
  ],
  "details_cure": {
    "id_cure": "789",
    "nom": "Programme perte de poids",
    "seances_realisees": 5,
    "seances_restantes": 3
  }
}
POST
/api/cures/{id_cure}/appointments

3.3 RDV Cure

Planifie un rendez-vous pour une cure en cours.

Corps de la requête

{
  "date": "2025-01-15",
  "heure": "10:00",
  "pole": "Epinal"
}

Réponse

{
  "id_rendezvous": "67890",
  "message": "Rendez-vous confirmé"
}
POST
/api/appointments/bilan

3.4 RDV Bilan

Prend un rendez-vous pour un bilan si aucune cure n'est active.

Corps de la requête

{
  "date": "2025-01-20",
  "heure": "14:00",
  "pole": "Epinal",
  "type": "HTC"
}

Réponse

{
  "id_rendezvous": "67891",
  "message": "Rendez-vous bilan confirmé"
}
GET
/api/appointments/{id_rendezvous}/modification

3.5 Vérifier Modification

Vérifie si un rendez-vous est modifiable.

Réponse

{
  "annulable": true,
  "replanifiable": true,
  "message": "Rendez-vous modifiable"
}
PATCH
/api/appointments/{id_rendezvous}

3.6 Modifier RDV

Modifie un rendez-vous si celui-ci est modifiable.

Corps de la requête

{
  "nouvelle_date": "2025-01-16",
  "nouvelle_heure": "11:00",
  "pole": "Epinal"
}

Réponse

{
  "statut": true,
  "message": "Rendez-vous reprogrammé avec succès"
}
POST
/api/appointments/flash

3.7 RDV Flash

Permet de prendre un rendez-vous flash. Ce type de rendez-vous est indépendant des bilans et cures, non annulable et non replanifiable.

Corps de la requête

{
  "type": "HTC",
  "pole": "Epinal"
}

Réponse

{
  "options": [
    {
      "id": "flash_001",
      "date": "2025-01-21",
      "heure": "10:00",
      "prix": 50
    },
    {
      "id": "flash_002",
      "date": "2025-01-22",
      "heure": "14:00",
      "prix": 60
    }
  ]
}
POST
/api/appointments/flash/confirm

3.8 Confirmer Paiement

Confirme le paiement d'un rendez-vous flash via Stripe. Le statut peut être 'confirme' ou 'en_attente'.

Corps de la requête

{
  "options_id": [
    "flash_001",
    "flash_002"
  ],
  "statut_paiement": "en_attente"
}

Réponse

{
  "statut": true,
  "message": "Paiement en attente de confirmation",
  "details_paiement": {
    "statut": "en_attente",
    "montant_total": 110,
    "options_en_attente": [
      "flash_001",
      "flash_002"
    ]
  }
}

4. Gestion des cures

GET
/api/users/{id_utilisateur}/cures

4.1 Détails Cures

Récupère les informations sur les cures en cours et passées.

Réponse

{
  "cures": [
    {
      "id_cure": "001",
      "nom": "Programme perte de poids",
      "seances_realisees": 5,
      "seances_restantes": 3,
      "date_debut": "2025-01-01",
      "date_fin": "2025-03-01",
      "taux_observance": 85,
      "actif": true
    }
  ]
}

5. Gestion des programmes

GET
/api/users/{id_utilisateur}/programs

5.1 Programmes Assignés

Récupère la liste des programmes assignés à l'utilisateur.

Réponse

{
  "programmes": [
    {
      "id_programme": "001",
      "titre": "Programme perte de poids",
      "date_attribution": "2025-01-10",
      "image": "https://example.com/screenshot.jpg",
      "url_pdf": "https://example.com/program.pdf",
      "consultation_statut": false
    }
  ]
}
POST
/api/users/{id_utilisateur}/programs/{id_programme}/opened

5.2 Marquer Consulté

Enregistre que le programme a été consulté par l'utilisateur.

Réponse

{
  "statut": true,
  "message": "Programme marqué comme consulté"
}

6. Statistiques utilisateur

GET
/api/users/{id_utilisateur}/stats

6.1 Stats Utilisateur

Récupère les statistiques de santé de l'utilisateur, triées par date (plus récentes en premier).

Réponse

{
  "statistiques": [
    {
      "date": "2025-01-01",
      "poids_kg": 70,
      "imc": 22.5,
      "masse_grasse_kg": 15,
      "masse_musculaire_kg": 55,
      "masse_hydrique_kg": 50,
      "masse_extracellulaire_pourcentage": 45,
      "angle_phase_degre": 5.5,
      "graisse_viscerale": 12,
      "mesures": {
        "bras_cm": 32,
        "estomac_cm": 85,
        "taille_cm": 80,
        "nombril_cm": 82,
        "hanche_cm": 95,
        "cuisse_cm": 60,
        "genou_cm": 40,
        "mollet_cm": 38
      }
    }
  ]
}

7. Simplification des contraintes de sécurité

GET
/api/security

7. Contraintes de sécurité

Authentification via JWT avec des tokens qui n'expirent jamais.

Réponse

{
  "authentification": "JWT",
  "expiration": "none",
  "codes_erreur": {
    "200": "Requête réussie",
    "400": "Erreur dans la requête",
    "500": "Erreur serveur imprévue"
  }
}
HTC Santé

Équipe HTC Santé

Olivier DELABAS

PSG groupe HTC Santé

Baptiste Jamme

Responsable projet

WP Solution

Équipe de développement

Anthony Aiache

Responsable Client

Grabié Milo

Consultant

YumeSolution

ADIER Didier

Responsable API Backend

OpenInformatique

Dominique MORANO

PDG

OpenInformatique Backend