1.74 – juin 2025
Les horaires sont une sous-donnée du noeud ouverture.periodesOuvertures[]
. Leur composition se trouve sur la page horaires (consultation) : ce format est identique en écriture.
Champ facultatif
La présence du noeud horaires
dans une periodesOuvertures[]
est facultative : c’est un comportement inhabituel des API d’écriture.
Habituellement, un sous-champ manquant en écriture est considéré comme vide, et une donnée présente sur une offre existante est alors supprimée lors de l’écriture.
Par exemple, si un offre existante possède des periodesOuvertures[0].ouverturesExceptionnelles=[{"dateOuverture":"2025-01-01"}]
, un payload d’écriture de modification de periodesOuvertures[0]
sans ouverturesExceptionnelles
entraîne la perte des données d’ouvertures exceptionnelles.
Le champ horaires est en revanche facultatif, de façon à assurer une rétrocompatibilité des écritures lors de sa mise en place sans perte de données : une écriture sans la sous-donnée horaires (passerelle, formulaire de modification externe…) n’entraîne donc pas la perte des données horaires qui auraient pu être saisies par ailleurs (IHM…).
En synthèse, lors de la modification de la période d’ouverture d’une offre existante, et possédant des horaires :
{
"dateDebut": "2025-01-01",
"dateFin": "2025-02-01",
"horaires": [
{
"type": { "elementReferenceType": "HoraireType", "id": 7487 },
"timePeriods": [
{
"closed": false,
"weekdays": ["MON", "TUE", "WED", "THU", "FRI"],
"timeFrames": [
{ "startTime": "08:00", "endTime": "12:00" },
{ "startTime": "14:00", "endTime": "18:00" }
]
}
]
}
]
}
- Absence de
periodesOuvertures[].horaires
: les données horaires sont conservées periodesOuvertures[].horaires=null
: les données sont suppriméesperiodesOuvertures[].horaires=[]
: les données sont suppriméesperiodesOuvertures[].horaires=[...Nouvelles données ou données identiques...]
: les données sont écrasées
Réutilisation d’horaires d’une période à l’autre
Les mêmes horaires peuvent être utilisés sur plusieurs horaires (ex: saisie d’horaires « vacances scolaires » sur la première période en février, et réutilisation sur les autres périodes de vacances).
Cette fonctionnalité permet à l’utilisateur de ne pas avoir à saisir plusieurs fois les mêmes horaires, avec les risques d’erreur associés.
Lorsqu’on veut utiliser les mêmes horaires sur plusieurs périodes, l’une des périodes est déclarée comme « source » par l’ajout d’un ouverture.periodesOuvertures[].nom
, et les périodes qui réutilisent ces horaires la référencent à partir de ouverture.periodesOuvertures[].sourceHoraireId
(l’identifiant de la période d’origine, celle qui a un nom).
Cas d’une période source existante
Si la période d’origine (« source ») existe déjà sur l’offre (donc forcément sur une modification d’offre), la période « cible » peut réutiliser ses horaires en ajoutant un sourceHoraireId=identifiantSource
Offre existante :
"periodesOuvertures" : [
{
"identifiant": 12345678,
"nom": "Vacances scolaires",
"dateDebut": "2026-02-07",
"dateFin": "2026-02-23",
"horaires": [
{
"type": {
"elementReferenceType": "HoraireType",
"id": 7487
},
"timePeriods": [
{
"closed": false,
"weekdays": ["MON", "TUE", "WED", "THU", "FRI"],
"timeFrames": [
{ "startTime": "08:00", "endTime": "12:00" },
{ "startTime": "14:00", "endTime": "18:00" }
]
}
]
}
]
}
]
Payload d’écriture pour créer une période en avril réutilisant les mêmes horaires :
"periodesOuvertures" : [
{
"identifiant": 12345678,
"nom": "Vacances scolaires",
"dateDebut": "2026-02-07",
"dateFin": "2026-02-23",
"horaires": [
{
"type": {
"elementReferenceType": "HoraireType",
"id": 7487
},
"timePeriods": [
{
"closed": false,
"weekdays": ["MON", "TUE", "WED", "THU", "FRI"],
"timeFrames": [
{ "startTime": "08:00", "endTime": "12:00" },
{ "startTime": "14:00", "endTime": "18:00" }
]
}
]
}
]
},
{
"dateDebut": "2026-04-04",
"dateFin": "2026-04-20",
"sourceHoraireId": 12345678
}
]
Cas d’une période source créée en même temps que la cible
Lors de la création de nouvelles périodes, l’identifiant n’existe pas encore : dans ce cas vous pouvez ajouter un identifiantTemporaire
fictif sur la période source, puis l’utiliser dans sourceHoraireId
dans les périodes réutilisantes.
Exemple ici avec une création d’offre et l’utilisation d’un identifiantTemporaire=99
:
{
"type": "PATRIMOINE_CULTUREL",
"nom": {
"libelleFr": "Test"
},
"localisation": {
"adresse": { "commune": { "id": 14707 } }
},
"ouverture": {
"periodesOuvertures": [
{
"nom": "Vacances scolaires",
"identifiantTemporaire": 99,
"dateDebut": "2025-01-01",
"dateFin": "2025-12-31",
"horaires": [
{
"type": {
"elementReferenceType": "HoraireType",
"id": 7487
},
"timePeriods": [
{
"closed": false,
"weekdays": ["MON","TUE","WED","THU","FRI"],
"timeFrames": [
{"startTime": "08:00","endTime": "12:00"},
{"startTime": "14:00","endTime": "18:00"}
]
},
{
"closed": false,
"weekdays": ["SAT"],
"timeFrames": [
{"startTime": "08:00","endTime": "19:00"}
]
}
]
}
]
},
{
"dateDebut": "2026-01-01",
"dateFin": "2026-12-31",
"sourceHoraireId": 99
}
]
}
}