vaccin.click icon indicating copy to clipboard operation
vaccin.click copied to clipboard

Utiliser l'API interne de Doctolib

Open DavidLibeau opened this issue 3 years ago • 5 comments

Pour améliorer la stabilité de l'extension, il est proposé d'utiliser l'API interne de Doctolib.

Voici une documentation rapide du truc :

{urlCompleteDuCentre}.json

Permet d'obtenir des métadonnées qui peuvent être utilises mais pas essentielles

Exemple : https://www.doctolib.fr/pharmacie/paris/pharmacie-faidherbe.json

Exemple de réponse :

{
    "data": {
        "profile": {
            "is_directory": false,
            "organization": true,
            "subtitle": "Pharmacie",
            "id": 237135,
            "name": "Pharmacie Faidherbe ",
            "name_with_title": "Pharmacie Faidherbe",
            "name_with_title_and_determiner": "Pharmacie Faidherbe",
            "bio": "Votre pharmacie vous propose des TESTS antigéniques pour le Covid19 sur RDV\n\nLes tests antigéniques peuvent réalisés sur toutes les personnes asymptomatiques, \nsi personnes asymptomatiques de moins de 4 jours et ayant entre 18 et 65 ans",
            "website_url": "",
            "country": "fr",
            "covid_profile_message": null,
            "freemium": false,
            "pictures": [{
                "public_id": "mlrbb0iffkl24xsgttip"
            }, {
                "public_id": "vihwppoa1dowxloacfxv"
            }, {
                "public_id": "pwlol0e5a2ebmbhgmfp5"
            }],
            "cover_picture": {
                "public_id": "vihwppoa1dowxloacfxv"
            },
            "avatar_picture": {
                "public_id": "mlrbb0iffkl24xsgttip"
            },
            "agendas_with_covid_vaccination_for_general_practitioners": [],
            "vaccination_or_gp_speciality": false,
            "all_organizations_without_vaccination_feature": true,
            "vaccination_center_with_pfizer_moderna": false
        },
        "details": [{
            "insurance_card": null,
            "practice_id": 159640,
            "regulation_sector": null,
            "third_party_payer": null,
            "display_payment_means": false,
            "payment_means": {
                "cash": false,
                "check": false,
                "credit_card": false
            }
        }],
        "practitioners": [],
        "fees": [],
        "places": [{
            "id": "practice-159640",
            "address": "43 Rue Faidherbe",
            "zipcode": "75011",
            "city": "Paris",
            "floor": null,
            "latitude": 48.8537132,
            "longitude": 2.3821604,
            "elevator": false,
            "handicap": false,
            "formal_name": "Pharmacie Faidherbe",
            "reception_info": null,
            "full_address": "43 Rue Faidherbe, 75011 Paris",
            "opening_hours": [{
                "day": 1,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 2,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 3,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 4,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 5,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 6,
                "ranges": [["09:30", "19:30"]],
                "enabled": true
            }],
            "practice_ids": [159640],
            "is_aphp": false,
            "aphp_url": "http://www.aphp.fr/contenu/combien-ca-coute",
            "name": "Pharmacie Faidherbe",
            "short_name": null,
            "parking": {
                "name": "Ledru Rollin Parking SA",
                "full_address": "121 Avenue Ledru-Rollin, Paris"
            },
            "emergency_number_details": {
                "number": "15",
                "type": "Samu",
                "display_title": false
            },
            "stations": [{
                "transport_type": "metro",
                "lines": ["9"],
                "name": "Charonne"
            }, {
                "transport_type": "rer",
                "lines": ["A", "D"],
                "name": "Paris - Gare De Lyon"
            }, {
                "transport_type": "rer",
                "lines": ["A"],
                "name": "Nation"
            }]
        }]
    },
    "jsonld": {
        "profile": {
            "@context": "http://schema.org/",
            "@type": "Hospital",
            "name": "Pharmacie Faidherbe ",
            "description": "Votre pharmacie vous propose des TESTS antigéniques pour le Covid19 sur RDV\n\nLes tests antigéniques peuvent réalisés sur toutes les personnes asymptomatiques, \nsi personnes asymptomatiques de moins de 4 jours et ayant entre 18 et 65 ans",
            "medicalSpecialty": "Pharmacie",
            "legalName": null,
            "url": "/pharmacie/paris/pharmacie-faidherbe",
            "image": "//res.cloudinary.com/doctolib/image/upload/q_auto:eco,f_auto/mlrbb0iffkl24xsgttip.jpg",
            "address": {
                "@type": "PostalAddress",
                "name": "Pharmacie Faidherbe",
                "streetAddress": "43 Rue Faidherbe",
                "postalCode": "75011",
                "addressLocality": "Paris"
            },
            "paymentAccepted": "",
            "availableService": [],
            "telephone": null,
            "openingHours": ["Mo 09:00-20:00", "Tu 09:00-20:00", "We 09:00-20:00", "Th 09:00-20:00", "Fr 09:00-20:00", "Sa 09:30-19:30"]
        },
        "breadcrumbs": {
            "@context": "http://schema.org/",
            "@type": "BreadcrumbList",
            "itemListElement": [{
                "@type": "ListItem",
                "position": 1,
                "item": {
                    "@type": "Thing",
                    "name": "Doctolib",
                    "id": "Doctolib",
                    "url": null
                }
            }, {
                "@type": "ListItem",
                "position": 2,
                "item": {
                    "@type": "Thing",
                    "name": "Pharmacie",
                    "id": "Pharmacie",
                    "url": "/pharmacie"
                }
            }, {
                "@type": "ListItem",
                "position": 3,
                "item": {
                    "@type": "Thing",
                    "name": "Paris",
                    "id": "Paris",
                    "url": "/pharmacie/ile-de-france-departement-de-paris-paris"
                }
            }]
        }
    },
    "meta": {
        "title": "Pharmacie Faidherbe, Pharmacie à Paris : Prenez rendez-vous en ligne",
        "description": "Prenez RDV en ligne avec Pharmacie Faidherbe: Pharmacie. Adresse : 43 Rue Faidherbe, 75011 Paris.\n",
        "page_type": "establishmentsProfiles"
    },
    "seo": {
        "about_doctolib": {
            "title": "À propos de Doctolib",
            "links": [{
                "name": "Vaccination COVID-19",
                "url": "/vaccination-covid-19",
                "encoded": false,
                "target": "_blank",
                "hidden": false,
                "key": "vaccination_covid"
            }, {
                "name": "Test COVID - Depistage",
                "url": "/centre-depistage-covid",
                "encoded": false,
                "target": "_blank",
                "hidden": false,
                "key": "test_covid"
            }, {
                "name": "Test PCR",
                "url": "/depistage-covid-19-pcr-prelevement-naso-pharynge",
                "encoded": false,
                "target": "_blank",
                "hidden": false,
                "key": "test_pcr"
            }, {
                "name": "Consultation vidéo - Téléconsultation",
                "url": "/video_consultation",
                "encoded": false,
                "target": "_blank",
                "key": "video_consultation"
            }, {
                "name": "À propos de nous",
                "url": "https://about.doctolib.fr",
                "target": "_self",
                "encoded": true,
                "key": "about_us"
            }, {
                "name": "Carrières",
                "url": "https://careers.doctolib.fr?origin=footer",
                "target": "_blank",
                "encoded": true,
                "key": "jobs"
            }, {
                "name": "Presse",
                "url": "https://about.doctolib.fr/presse",
                "target": "_self",
                "encoded": true,
                "key": "press"
            }, {
                "name": "Besoin d'aide ?",
                "url": "/help?origin=help-desktop",
                "target": "_self",
                "encoded": true,
                "key": "help"
            }, {
                "name": "Notifications frauduleuses (tentatives de phishing)",
                "url": "/help?origin=help-desktop#section=6\u0026article=4",
                "target": "_self",
                "encoded": false,
                "key": "phishing"
            }, {
                "name": "Doctolib Deutschland",
                "url": "https://www.doctolib.de",
                "target": "_self",
                "encoded": true,
                "key": "doctolib_de"
            }]
        },
        "about_doctolib_pro": {
            "title": "Pour les professionnels de santé",
            "links": [{
                "name": "Logiciel de gestion Doctolib Pro",
                "url": "https://info.doctolib.fr?origin=home-footer\u0026utm_button=footer\u0026utm_content-group=other\u0026utm_page-url=https%3A%2F%2Fwww.doctolib.fr%2Fpharmacie%2Fparis%2Fpharmacie-faidherbe.json\u0026utm_website=doctolib_patients",
                "target": "_blank",
                "encoded": true,
                "key": "bms"
            }, {
                "name": "Doctolib Community",
                "url": "https://community.doctolib.com/",
                "target": "_blank",
                "encoded": true,
                "key": "community"
            }]
        },
        "popular_links": {
            "title": "Recherches fréquentes",
            "links": [{
                "name": "Cabinet médical Paris",
                "url": "/cabinet-medical/paris"
            }, {
                "name": "Cabinet dentaire Paris",
                "url": "/cabinet-dentaire/paris"
            }, {
                "name": "Centre de santé Paris",
                "url": "/centre-de-sante/paris"
            }, {
                "name": "Clinique privée Paris",
                "url": "/clinique-privee/paris"
            }, {
                "name": "Hôpital public Paris",
                "url": "/hopital-public/paris"
            }, {
                "name": "Établissement de Santé Privé d'Intérêt Collectif (ESPIC) Paris",
                "url": "/espic-etablissement-de-sante-prive-d-interet-collectif/paris"
            }, {
                "name": "Centre médical et dentaire Paris",
                "url": "/centre-medical-et-dentaire/paris"
            }, {
                "name": "Maison de santé Paris",
                "url": "/maison-de-sante/paris"
            }, {
                "name": "Cabinet paramédical Paris",
                "url": "/cabinet-paramedical/paris"
            }, {
                "name": "Centre laser et esthétique Paris",
                "url": "/centre-laser-et-esthetique/paris"
            }]
        },
        "similar_links": {
            "title": "Recherches associées",
            "links": [{
                "name": "Pharmacie Saint-Mandé",
                "url": "/pharmacie/saint-mande"
            }, {
                "name": "Pharmacie Le Kremlin-Bicêtre",
                "url": "/pharmacie/le-kremlin-bicetre"
            }, {
                "name": "Pharmacie Bagnolet",
                "url": "/pharmacie/bagnolet"
            }, {
                "name": "Pharmacie Ivry-sur-Seine",
                "url": "/pharmacie/ivry-sur-seine"
            }, {
                "name": "Pharmacie Levallois-Perret",
                "url": "/pharmacie/levallois-perret"
            }, {
                "name": "Pharmacie Vincennes",
                "url": "/pharmacie/vincennes"
            }, {
                "name": "Pharmacie Aubervilliers",
                "url": "/pharmacie/aubervilliers"
            }, {
                "name": "Pharmacie Issy-les-Moulineaux",
                "url": "/pharmacie/issy-les-moulineaux"
            }, {
                "name": "Pharmacie Montreuil",
                "url": "/pharmacie/montreuil"
            }, {
                "name": "Pharmacie Paris",
                "url": "/pharmacie/paris"
            }]
        }
    }
}

/booking/{urlUnique}.json ou /booking/{id}.json

Permet d'obtenir les spécifications d'un centre

  • {urlUnique} est la fin de l'url complète. Exemple : https://www.doctolib.fr/booking/pharmacie-faidherbe.json
  • {id}est l'id dispo sous data.profile.id dans le {urlCompleteDuCentre}.json. Exemple : https://www.doctolib.fr/booking/237135.json

Exemple de réponse :

{
    "data": {
        "profile": {
            "id": 237135,
            "name_with_title_and_determiner": "Pharmacie Faidherbe",
            "name_with_title": "Pharmacie Faidherbe",
            "speciality": null,
            "organization": true,
            "redirect_url": null,
            "language_list": "Français"
        },
        "specialities": [{
            "id": 3097,
            "name": "Pharmacien",
            "kind": "medical"
        }],
        "visit_motive_categories": [],
        "visit_motives": [{
            "id": 2607211,
            "name": "Dépistage COVID-19 test antigénique (prélèvement naso-pharyngé)",
            "visit_motive_category_id": null,
            "organization_id": 128541,
            "speciality_id": 3097,
            "ref_visit_motive_id": 6236,
            "position": 2,
            "telehealth": false,
            "vaccination_days_range": 0,
            "vaccination_motive": false,
            "covid_vaccination_set_appointment_organization": false,
            "first_shot_motive": false,
            "allow_new_patients": true,
            "allow_new_patients_on_insurance_sector": null,
            "configurations": null
        }, {
            "id": 2764585,
            "name": "1ère injection vaccin COVID-19 (AstraZeneca)",
            "visit_motive_category_id": null,
            "organization_id": 128541,
            "speciality_id": 3097,
            "ref_visit_motive_id": 7107,
            "position": 3,
            "telehealth": false,
            "vaccination_days_range": 80,
            "vaccination_motive": true,
            "covid_vaccination_set_appointment_organization": false,
            "first_shot_motive": false,
            "allow_new_patients": true,
            "allow_new_patients_on_insurance_sector": null,
            "configurations": null
        }, {
            "id": 2848143,
            "name": "2de injection vaccin COVID-19 (AstraZeneca)",
            "visit_motive_category_id": null,
            "organization_id": 128541,
            "speciality_id": 3097,
            "ref_visit_motive_id": 7108,
            "position": 4,
            "telehealth": false,
            "vaccination_days_range": 0,
            "vaccination_motive": true,
            "covid_vaccination_set_appointment_organization": false,
            "first_shot_motive": false,
            "allow_new_patients": true,
            "allow_new_patients_on_insurance_sector": null,
            "configurations": null
        }, {
            "id": 2848144,
            "name": "Injection unique vaccin COVID-19 (Janssen)",
            "visit_motive_category_id": null,
            "organization_id": 128541,
            "speciality_id": 3097,
            "ref_visit_motive_id": 7945,
            "position": 5,
            "telehealth": false,
            "vaccination_days_range": 0,
            "vaccination_motive": true,
            "covid_vaccination_set_appointment_organization": false,
            "first_shot_motive": false,
            "allow_new_patients": true,
            "allow_new_patients_on_insurance_sector": null,
            "configurations": null
        }],
        "agendas": [{
            "id": 400342,
            "booking_disabled": false,
            "booking_temporary_disabled": false,
            "landline_number": "01 43 71 41 40",
            "anonymous": true,
            "organization_id": 128541,
            "visit_motive_ids_by_practice_id": {
                "159640": [2607211, 2764585, 2848143, 2848144]
            },
            "visit_motive_ids": [2607211, 2764585, 2848143, 2848144],
            "visit_motive_ids_only_for_doctors": null,
            "practice_id": 159640,
            "speciality_id": 3097,
            "practitioner_id": null,
            "insurance_sector_enabled": false,
            "equipment_agendas_required": false
        }],
        "places": [{
            "id": "practice-159640",
            "address": "43 Rue Faidherbe",
            "zipcode": "75011",
            "city": "Paris",
            "floor": null,
            "latitude": 48.8537132,
            "longitude": 2.3821604,
            "elevator": false,
            "handicap": false,
            "formal_name": "Pharmacie Faidherbe",
            "reception_info": null,
            "full_address": "43 Rue Faidherbe, 75011 Paris",
            "opening_hours": [{
                "day": 1,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 2,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 3,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 4,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 5,
                "ranges": [["09:00", "20:00"]],
                "enabled": true
            }, {
                "day": 6,
                "ranges": [["09:30", "19:30"]],
                "enabled": true
            }, {
                "day": 0,
                "ranges": [["09:00", "13:00"]],
                "enabled": false
            }],
            "name": "Pharmacie Faidherbe",
            "practice_ids": [159640],
            "is_aphp": false,
            "aphp_url": "http://www.aphp.fr/contenu/combien-ca-coute",
            "payment_means": null,
            "regulation_sector": null,
            "insurance_card": null
        }],
        "practitioners": [],
        "availabilities_preview_compatible": false,
        "vaccination_center": false,
        "number_future_vaccinations": 0,
        "has_new_patient_rule": false
    }
}

availabilities.json?start_date={date}&visit_motive_ids={visit_motive_ids}&agenda_ids={agenda_ids}&practice_ids={practice_ids}

Permet d'obtenir les prochains créneaux disponibles.

  • {date} est la date du jour au format 2021-05-20.
  • {visit_motive_ids} est la liste des visit_motive_id. Attention, il faut sélectionner les visit_motive pour les première injection uniquement. Perso je cherche "1ère injection vaccin COVID-19" || "1re injection vaccin COVID-19" dans le champ data.visit_motives.name du endpoint /booking.
  • {agenda_ids} est la liste de tout les agendas au format {idA}-{id2}-{id3} (parfois il n'y a qu'un agenda mais aprfois plusieurs, dans le doute, je les mets tous).
  • {practice_ids} (je sais plus trop ce que c'est mais en gros je mets la valeur de data.places[0].practice_ids[0] dedans).

Exemple : https://pro.doctolib.fr/availabilities.json?start_date=2021-05-20&visit_motive_ids=2764585&agenda_ids=400342&practice_ids=159640

Exemple de réponse :

{
    "availabilities": [{
        "date": "2021-05-20",
        "slots": [],
        "substitution": null
    }, {
        "date": "2021-05-21",
        "slots": ["2021-05-21T10:35:00.000+02:00", "2021-05-21T12:20:00.000+02:00", "2021-05-21T12:35:00.000+02:00", "2021-05-21T12:50:00.000+02:00", "2021-05-21T13:35:00.000+02:00", "2021-05-21T14:35:00.000+02:00", "2021-05-21T14:50:00.000+02:00", "2021-05-21T15:20:00.000+02:00", "2021-05-21T15:35:00.000+02:00", "2021-05-21T15:50:00.000+02:00", "2021-05-21T16:20:00.000+02:00", "2021-05-21T16:50:00.000+02:00", "2021-05-21T17:05:00.000+02:00", "2021-05-21T17:20:00.000+02:00", "2021-05-21T17:35:00.000+02:00"],
        "substitution": null
    }],
    "total": 15
}

Il y a d'autres trucs mais c'est déjà un bon début… :)

DavidLibeau avatar May 20 '21 16:05 DavidLibeau

Pour le profile il y a aussi : https://www.doctolib.fr/profiles/{profileId}.json si on connait l'id.

julienbornstein avatar May 20 '21 19:05 julienbornstein

Wow génial, effectivement il y a moyen d'améliorer pas mal les performances et la stabilité avec ça. Et sûrement de stresser moins les serveurs de Doctolib aussi.

dunglas avatar May 20 '21 20:05 dunglas

Super si c'est utile. Pour info/pour avoir des exemples plus complet, vous pouvez regarder ce que j'ai fait ici :

  • https://framagit.org/DavidLibeau/vaccin-covid19/-/blob/main/datagouv-importer/app.js
  • https://framagit.org/DavidLibeau/notification-vaccin/-/blob/main/desktop/preload.js#L48
  • https://framagit.org/DavidLibeau/notification-vaccin/-/blob/main/api.php (même faire des requêtes pour tester : https://dav.li/notification-vaccin/api.php?doctolib=pharmacie-faidherbe sachant que vous allez voir que l'endpoint availabilities.json a plus de protection Cloudflare que les autres et donc mon serveur est bloqué…).

DavidLibeau avatar May 20 '21 20:05 DavidLibeau

Pour /avaiabilities.json:

Le practice_ids doit contenir la liste du/des praticien(s). Dans les centres médicaux plusieurs médecins y travaillent, ce champ permet de filtrer par praticien.

exemple ici : https://www.doctolib.fr/centre-de-sante/paris/sante-plus-centre-victor-masse.json

{
  "data": {
    "profile": {
      "is_directory": false,
      "organization": true,
      "subtitle": "Centre de santé",
      "id": 8929,
      "name": "Santé PLUS - Centre Victor Massé",
      "name_with_title": "Santé PLUS - Centre Victor Massé",
      "name_with_title_and_determiner": "Santé PLUS - Centre Victor Massé",
      "bio": "Le centre médical du spectacle vous accueille rue Victor Massé à Paris 9, du lundi au vendredi. \n\nCe centre existe depuis 1956 et accueille tous les patients pour tous types de soins médicaux (médecine générale, cardiologie, dermatologie, gynécologie, gastro-entérologie et psychiatrie). Nous proposons aussi une offre dentaire élargie comprenant des soins, des prothèses et une radio panoramique dentaire. Le centre est en pleine mutation, un changement de direction avec des rénovations est attendu dans les plus brefs délais.\nLes médecins généralistes vous accueillent également sans rendez-vous à tout moment du lundi au jeudi de 8h30 à 19h et le vendredi de 8h30 à 18h.",
      "website_url": "https://www.sante-plus.com/",
      "country": "fr",
      "covid_profile_message": null,
      "freemium": false,
      "pictures": [
        {
          "public_id": "cjb7vbirdbgwdyp7m85m"
        }
      ],
      "cover_picture": {
        "public_id": "gnrh5fkg2q06hjk1xkjs"
      },
      "avatar_picture": {
        "public_id": "cjb7vbirdbgwdyp7m85m"
      },
      "agendas_with_covid_vaccination_for_general_practitioners": [],
      "vaccination_or_gp_speciality": false,
      "all_organizations_without_vaccination_feature": true,
      "vaccination_center_with_pfizer_moderna": false
    },
    "details": [
      {
        "insurance_card": true,
        "practice_id": 4920,
        "regulation_sector": "Etablissement conventionné",
        "third_party_payer": "national_and_additional",
        "display_payment_means": true,
        "temporary_message": "Retrouvez-vous sur notre site internet : https://www.sante-plus.com/.",
        "payment_means": {
          "cash": true,
          "check": true,
          "credit_card": true
        }
      }
    ],
    "practitioners": [
      {
        "id": 22973831,
        "profile_id": 200003,
        "name_with_title": "Dr Driss ABOULKARAM",
        "cloudinary_public_id": "mbkpkuupensbsquzor10",
        "speciality": "Gynécologue médical et obstétrique",
        "speciality_with_gender": "Gynécologue médical et obstétrique",
        "link": "/gynecologue/paris/driss-aboulkaram"
      },
      {
        "id": 19261651,
        "profile_id": 167524,
        "name_with_title": "Dr Mariam AHMEDOU",
        "cloudinary_public_id": "yy4tyvlt4asro4ykcb3y",
        "speciality": "Médecin généraliste",
        "speciality_with_gender": "Médecin généraliste",
        "link": "/medecin-generaliste/paris/mariam-ahmedou"
      },
      {
        "id": 27226155,
        "profile_id": 229950,
        "name_with_title": "Dr Marie BARON",
        "cloudinary_public_id": "qpwp60kd2j4qwjpckjre",
        "speciality": "Chirurgien-dentiste",
        "speciality_with_gender": "Chirurgien-dentiste",
        "link": "/dentiste/paris/marie-baron"
      }
    ],
    "fees": [],
    "places": [
      {
        "id": "establishment-5709",
        "address": "21 bis rue Victor Massé",
        "zipcode": "75009",
        "city": "PARIS",
        "floor": null,
        "latitude": 48.8806829,
        "longitude": 2.3382851,
        "elevator": false,
        "handicap": false,
        "formal_name": "Centre Médical du Spectacle",
        "landline_number": null,
        "reception_info": null,
        "full_address": "21 bis rue Victor Massé, 75009 PARIS",
        "opening_hours": null,
        "practice_ids": [
          9549,
          4920
        ],
        "is_aphp": false,
        "aphp_url": "http://www.aphp.fr/contenu/combien-ca-coute",
        "name": "Centre Médical du Spectacle",
        "short_name": null,
        "parking": {
          "name": "MILTON",
          "full_address": "33 Rue Milton, 75009 Paris"
        },
        "stations": [
          {
            "transport_type": "metro",
            "lines": [
              "12",
              "2"
            ],
            "name": "Pigalle"
          },
          {
            "transport_type": "metro",
            "lines": [
              "12"
            ],
            "name": "Saint-Georges"
          },
          {
            "transport_type": "rer",
            "lines": [
              "A"
            ],
            "name": "Auber"
          }
        ]
      }
    ]
  }
}

Pour visit_motive_ids il faut passer les refVisitMotiveIds ce sont les ids parents :

[
  {
    "id": 6970,
    "name": "1re injection vaccin COVID-19 (Pfizer-BioNTech)"
  },
  {
    "id": 7005,
    "name": "1re injection vaccin COVID-19 (Moderna)"
  },
  {
    "id": 7107,
    "name": "1ère injection vaccin COVID-19 (AstraZeneca)"
  },
  {
    "id": 7945,
    "name": "Injection unique vaccin COVID-19 (Janssen)"
  }
]

Et attention aux Slotqui dans certains cas comme ci-dessus sont un array de Date ISO 8601, mais parfois des objects plus complexes.

{
  "availabilities": [
    {
      "date": "2021-05-21",
      "slots": [
        {
          "agenda_id": 459768,
          "practitioner_agenda_id": null,
          "start_date": "2021-05-21T10:40:00.000+02:00",
          "end_date": "2021-05-21T10:50:00.000+02:00",
          "steps": [
            {
              "agenda_id": 459768,
              "practitioner_agenda_id": null,
              "start_date": "2021-05-21T10:40:00.000+02:00",
              "end_date": "2021-05-21T10:50:00.000+02:00",
              "visit_motive_id": 2782508
            },
            {
              "agenda_id": 459768,
              "practitioner_agenda_id": null,
              "start_date": "2021-08-09T10:10:00.000+02:00",
              "end_date": "2021-08-09T10:20:00.000+02:00",
              "visit_motive_id": 2782509
            }
          ]
        }
      ],
      "substitution": null
    }
  ],
  "total": 144
}

VS

{
  "availabilities": [
    {
      "date": "2021-05-21",
      "slots": [
        "2021-05-21T10:35:00.000+02:00",
        "2021-05-21T12:20:00.000+02:00",
        "2021-05-21T12:35:00.000+02:00",
        "2021-05-21T12:50:00.000+02:00",
        "2021-05-21T13:35:00.000+02:00",
        "2021-05-21T14:35:00.000+02:00",
        "2021-05-21T14:50:00.000+02:00"     
      ],
      "substitution": null
    }
  ],
  "total": 15
}

julienbornstein avatar May 21 '21 06:05 julienbornstein

Hello , Savez vous si il existe une API pour trouver tous les spécialistes dans une ville précise ?

Benjyben avatar Nov 27 '22 09:11 Benjyben