Quatre types de message portent l'ARI du PMS vers Bridg_. Tous sont envoyés sur
POST …/messages (API Reference XML) et acquittés par un RESULT
en file. Chaque message est traduit en items indépendants (voir
ARI item).
| Type | Nature | Granularité |
|---|---|---|
RTAV |
disponibilité | type de chambre × nuit |
RATE |
prix | plan tarifaire × type(s) de chambre × plage |
RAVL |
restrictions | plan tarifaire × plage |
RESTRICTION |
restrictions | plan tarifaire × type de chambre × plage |
RTAV — disponibilité
Schéma rtav.fidelio.4.0. C'est le message de disponibilité (paramètre OXI
Change_To_Inventory_Generates = RTAV). INVENTORY ne porte que hors-service et limites de vente
et n'est pas traduit.
Request
<?xml version="1.0" encoding="UTF-8"?>
<?Label ATLALG|RTAV|2841178|NEW?>
<RtavMessage xmlns="rtav.fidelio.4.0">
<HotelReference hotelCode="ATLALG"/>
<DailyInventories>
<DailyInventory datum="2026-10-10" physicalRooms="60" outOfOrder="2">
<RoomTypeInventories>
<RoomTypeInventory roomType="DLX" physicalRooms="20" outOfOrder="1" available="12" roomTypeOverbook="2">
<Definite count="7" resvCount="7"/>
</RoomTypeInventory>
<RoomTypeInventory roomType="SUP" physicalRooms="40" outOfOrder="1" available="25"/>
</RoomTypeInventories>
</DailyInventory>
<DailyInventory datum="2026-10-11">
<RoomTypeInventories>
<RoomTypeInventory roomType="DLX" physicalRooms="20" outOfOrder="0">
<Definite count="5"/>
</RoomTypeInventory>
</RoomTypeInventories>
</DailyInventory>
</DailyInventories>
</RtavMessage>Fields
| Élément / attribut | Requis | Traduction |
|---|---|---|
DailyInventory/@datum |
oui | la nuit (AAAA-MM-JJ). Un message sans DailyInventories est valide (rien à synchroniser). |
RoomTypeInventory/@roomType |
oui | unitTypeCode (mapping UNIT_TYPE) |
@available |
recommandé | availability — fait foi s'il est présent (borné à 0) |
@physicalRooms, @outOfOrder, Definite/@count |
si @available absent |
availability = physicalRooms − outOfOrder − Definite/@count. Definite/@count est l'agrégat (blocs + réservations) ; Tentative n'est jamais déduit. |
@roomTypeOverbook |
non | overbookingAllowance (marge de survente, stockée à part) |
@allowance |
— | ignoré (limite de vente, pas une marge) |
@generic="true" |
— | pseudo-type agrégat : ignoré |
RoomClassInventories |
— | ignorés (agrégats par classe) |
Returns
RESULTSUCCESS quand tous les types sont mappés.RESULTFAILEDUNMAPPED_UNIT_TYPEpour les types non mappés (les autres sont appliqués).- Un compteur négatif (
physicalRooms,outOfOrder,Definite/@count) est un message corrompu :NEGATIVE_COUNT, rien n'est appliqué.
RATE — prix
Schéma rate.fidelio.6.0. L'attribut rateMessageType distingue la définition du plan (HEADER)
des prix (DETAIL, HEADERWITHDETAIL).
Request
<?xml version="1.0" encoding="UTF-8"?>
<?Label ATLALG|RATE|2841190|NEW?>
<RateHeader xmlns="rate.fidelio.6.0" rateStatus="ACTIVE" rateMessageType="DETAIL">
<hotelCode>ATLALG</hotelCode>
<rateCode>BAR1</rateCode>
<RateDetails>
<RateDetail>
<rateCode>BAR1</rateCode>
<startDate>2026-10-10</startDate>
<endDate>2026-10-12</endDate>
<roomTypeList>DLX</roomTypeList>
<roomTypeList>SUP</roomTypeList>
<rate1>10000</rate1>
<rate2>12000</rate2>
<rate3>14000</rate3>
<RateDaysOfWeek>
<monday>1</monday><tuesday>1</tuesday><wednesday>1</wednesday><thursday>1</thursday>
<friday>1</friday><saturday>1</saturday><sunday>1</sunday>
</RateDaysOfWeek>
</RateDetail>
</RateDetails>
</RateHeader>Fields
| Élément / attribut | Requis | Traduction |
|---|---|---|
RateHeader/@rateMessageType |
oui | DETAIL ou HEADERWITHDETAIL : prix appliqués. HEADER : catalogue, acquitté SUCCESS sans effet. |
RateHeader/@rateStatus |
oui | INACTIVE : acquitté sans effet (les prix d'un tarif inactif ne sont pas appliqués). |
RateDetail/rateCode (ou RateHeader/rateCode) |
oui | ratePlanCode (mapping RATE_PLAN) |
startDate, endDate |
oui | plage ; endDate inclusive par défaut (réglage rateEndDateInclusive de la connexion — à vérifier en recette) |
roomTypeList (répétable) |
oui | un unitTypeCode par élément (une liste séparée par virgules/espaces dans un seul élément est tolérée) |
rate1 … rate5 |
au moins rate2 |
prix pour 1 à 5 occupants → byOccupancy. Une valeur ≤ 0 est ignorée. rate2 est obligatoire (prix de référence). |
RateDaysOfWeek |
non | masque jour-de-semaine |
RateDetail/@mfInactiveDate |
— | détail désactivé : ignoré |
| devise | — | aucune dans le schéma : les prix sont dans la devise de l'établissement Bridg_ |
Le montant reçu est enregistré tel quel comme prix TTC ou HT selon le paramétrage du tarif
Bridg_ (taxIncluded) — le message RATE ne porte pas l'information.
Returns
RESULTSUCCESS ; FAILEDUNMAPPED_RATE_PLAN/UNMAPPED_UNIT_TYPEpar item ; FAILEDPRICE_DROP_REJECTEDsi une baisse de plus de 50 % est détectée sur une date.- Refusés explicitement (
RESULTFAILED, rien d'appliqué) : tarifs par durée de séjour (rateTiered="true",tierMinLos/tierMaxLos→UNSUPPORTED_TIERED_RATE), prix week-end (weekendRate1..5→UNSUPPORTED_WEEKEND_RATE),rateMessageTypeinconnu (UNSUPPORTED_RATE_MESSAGE).
RAVL — restrictions par tarif
Schéma ravl.fidelio.2.0. Restriction par code tarifaire, sans type de chambre — c'est la
granularité native de Bridg_ et le chemin recommandé pour les restrictions.
Request
<?xml version="1.0" encoding="UTF-8"?>
<?Label ATLALG|RAVL|2841200|NEW?>
<Ravl xmlns="ravl.fidelio.2.0" rateCriteria="RATECODE">
<HotelReference>
<hotelCode>ATLALG</hotelCode>
</HotelReference>
<rateCode>BAR1</rateCode>
<days>3</days>
<DaysOfWeek>
<monday>1</monday><tuesday>1</tuesday><wednesday>1</wednesday><thursday>1</thursday>
<friday>1</friday><saturday>1</saturday><sunday>1</sunday>
</DaysOfWeek>
<RavlDetails>
<RavlDetail>
<TimeSpan timeUnitType="DAY">
<startTime>2026-12-24T00:00:00.000</startTime>
<numberOfTimeUnits>8</numberOfTimeUnits>
</TimeSpan>
<currentRestrictionCode>S_MINLOS</currentRestrictionCode>
</RavlDetail>
<RavlDetail>
<TimeSpan timeUnitType="DAY">
<startTime>2026-12-31T00:00:00.000</startTime>
<numberOfTimeUnits>1</numberOfTimeUnits>
</TimeSpan>
<currentRestrictionCode>A_CLOSE</currentRestrictionCode>
</RavlDetail>
</RavlDetails>
</Ravl>Fields
| Élément / attribut | Requis | Traduction |
|---|---|---|
Ravl/@rateCriteria |
non (RATECODE) |
seul RATECODE est traduit ; RATECLASS / RATECATEGORY → UNSUPPORTED_RATE_CATEGORY |
Ravl/@blockCriteria |
non | BLOCKCODE → UNSUPPORTED_BLOCK_RESTRICTION |
Ravl/rateCode |
oui | ratePlanCode. Absent = restriction à l'échelle de l'hôtel → UNSUPPORTED_SCOPE |
Ravl/days |
pour les LOS | valeur de minLos / maxLos (0 = pas de valeur) |
Ravl/DaysOfWeek |
non | masque appliqué à chaque RavlDetail |
RavlDetail/TimeSpan |
oui | plage ; numberOfTimeUnits absent = 1 nuit ; timeUnitType ≠ DAY → UNSUPPORTED_TIME_UNIT |
RavlDetail/currentRestrictionCode |
oui | code de restriction (table ci-dessous) |
RavlDetail/@mfInactiveDate |
— | détail désactivé : ignoré |
Codes de restriction
| Code OXI | Traduction | Remarque |
|---|---|---|
S_OPEN, OPEN |
closed: false |
rouvre le tarif (stop-sell levé) |
S_CLOSE, CLOSED |
closed: true |
stop-sell |
A_OPEN / A_CLOSE |
closedToArrival: false / true |
|
D_OPEN / D_CLOSE |
closedToDeparture: false / true |
|
S_MINLOS, A_MINLOS |
closed: false, minLos: <days> |
une LOS « à l'arrivée » est traitée comme une LOS de séjour |
S_MAXLOS, A_MAXLOS |
closed: false, maxLos: <days> |
idem |
ADVBOOK_MIN, ADVBOOK_MAX, autres |
— | UNSUPPORTED_RESTRICTION : message refusé plutôt qu'appliqué à moitié |
Seuls les champs portés par le code sont écrits : un S_MINLOS ne touche ni CTA ni CTD.
RESTRICTION — restrictions par tarif × type
Schéma restriction.opera.4.0. Plusieurs plages, chacune avec son masque de jours et ses cibles.
Request
<?xml version="1.0" encoding="UTF-8"?>
<?Label ATLALG|RESTRICTION|2841210|NEW?>
<Restriction xmlns="restriction.opera.4.0" actionType="CHANGE" blockCriteria="NA">
<HotelReference>
<hotelCode>ATLALG</hotelCode>
</HotelReference>
<RangeDetails>
<RangeDetail>
<TimeSpan timeUnitType="DAY">
<startTime>2026-11-01T00:00:00.000</startTime>
<numberOfTimeUnits>30</numberOfTimeUnits>
</TimeSpan>
<DaysOfWeek>
<monday>0</monday><tuesday>0</tuesday><wednesday>0</wednesday><thursday>0</thursday>
<friday>1</friday><saturday>1</saturday><sunday>0</sunday>
</DaysOfWeek>
<RestrictionDetails>
<RestrictionDetail restrictionType="S_MINLOS" rateCriteria="RATECODE" roomCriteria="ROOMTYPE">
<roomType>DLX</roomType>
<rateCode>BAR1</rateCode>
<los>2</los>
</RestrictionDetail>
</RestrictionDetails>
</RangeDetail>
</RangeDetails>
</Restriction>Fields
| Élément / attribut | Requis | Traduction |
|---|---|---|
Restriction/@actionType |
oui | CHANGE et SYNC sont traités de la même façon (écrasement par tarif × type × date) |
Restriction/@blockCriteria |
oui | NA ; BLOCKCODE → UNSUPPORTED_BLOCK_RESTRICTION |
RangeDetail/TimeSpan |
oui | plage |
RangeDetail/DaysOfWeek |
non | masque jour-de-semaine (le masque ci-dessus produit une plage par week-end vendredi–samedi) |
RestrictionDetail/@restrictionType |
oui | code de restriction (table RAVL) |
RestrictionDetail/@roomCriteria |
non | ROOMTYPE ; ROOMCLASS → UNSUPPORTED_ROOM_CLASS |
RestrictionDetail/@rateCriteria |
non | RATECATEGORY → UNSUPPORTED_RATE_CATEGORY |
RestrictionDetail/roomType |
oui | unitTypeCode. Absent = portée hôtel → UNSUPPORTED_SCOPE |
rateCode (détail, plage ou racine) |
oui pour Bridg_ | ratePlanCode — une restriction sans tarif est refusée par item (VALIDATION_ERROR) |
los (days toléré) |
pour les LOS | valeur de minLos / maxLos |
Returns
RESULTSUCCESS, ou FAILED avec le détail par item (UNMAPPED_RATE_PLAN,UNMAPPED_UNIT_TYPE).- Le message entier est refusé (
RESULTFAILED, rien d'appliqué) sur : classe de chambre, catégorie de tarif, portée hôtel, bloc, code de restriction inconnu.
Rappel : RAVR n'est pas traduit
RAVR (restriction par type de chambre sans tarif) est refusé avec
RESTRICTION_GRANULARITY_MISMATCH : Bridg_ stocke les restrictions par tarif. Paramétrez le PMS
pour émettre RAVL (par code tarifaire) ou RESTRICTION (tarif × type).