Tarif yang dikirim melalui <OTA_HotelRateAmountNotifRQ>
dapat
diubah untuk memperhitungkan tamu dewasa dan anak-anak selain jumlah tamu
asli tarif. Pesan ExtraGuestCharges
memungkinkan
spesifikasi cara penghitungan tarif untuk tamu tambahan ini dan
kamar, paket tarif, serta tanggal inap yang akan dikenai tagihan.
Persyaratan Kapasitas
Harga yang dihitung dari pesan ExtraGuestCharges
hanya valid jika semua
persyaratan kapasitas terpenuhi. Lihat Transaksi (Data Properti)
untuk mengetahui informasi selengkapnya.
Permintaan
Sintaksis
Pesan ExtraGuestCharges
menggunakan sintaksis berikut:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges partner="partner_account_name"
id="message_ID"
timestamp="timestamp">
<HotelExtraGuestCharges hotel_id="HotelID" action="[overlay]">
<ExtraGuestCharge>
<RatePlans>
<RatePlan id="PackageID_1"/>
<RatePlan id="PackageID_2"/>
</RatePlans>
<RoomTypes>
<RoomType id="RoomID_1"/>
<RoomType id="RoomID_2"/>
</RoomTypes>
<StayDates>
<DateRange start="YYYY-MM-DD" end="YYYY-MM-DD"
days_of_week="MTWHFSU_or_subset"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="float"/>
<ChildAgeBrackets>
<!-- The following are different ways child charges can be specified.
Use the option that matches your system. -->
<ChildAgeBracket max_age="integer" amount="float"
exclude_from_capacity="[true|false]"/>
<ChildAgeBracket max_age="integer" percentage="float"
exclude_from_capacity="[true|false]"
counts_as_base_occupant="[never|preferred|always]"/>
<ChildAgeBracket max_age="integer" discount_amount="float"
exclude_from_capacity="[true|false]"
counts_as_base_occupant="[never|preferred|always]"/>
</ChildAgeBrackets>
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Elemen & Atribut
Pesan ExtraGuestCharges
memiliki elemen dan
atribut berikut:
Elemen / @Atribut | Kejadian | Jenis | Deskripsi |
---|---|---|---|
ExtraGuestCharges | 1 | Complex element | Elemen root pesan ini. |
ExtraGuestCharges / @partner | 1 | string | Akun partner untuk pesan ini. Nilai string ini adalah nilai Partner key yang tercantum di
halaman Setelan akun di Pusat Pengelolaan Hotel.
Catatan: Jika Anda memiliki backend yang menyediakan feed untuk beberapa akun, nilai ini harus cocok dengan nilai atribut |
ExtraGuestCharges / @id | 1 | string | ID unik untuk pesan permintaan ini. Nilai ini ditampilkan di pesan respons. Karakter yang diizinkan adalah a-z ,
A-Z , 0-9 , _ (garis bawah), dan
- (tanda hubung). |
ExtraGuestCharges / @timestamp | 1 | DateTime | Tanggal dan waktu pembuatan pesan ini. |
ExtraGuestCharges / HotelExtraGuestCharges | 0..n | HotelExtraGuestCharges | Penampung untuk tagihan satu properti. |
ExtraGuestCharges / HotelExtraGuestCharges / @hotel_id | 1 | string | ID unik untuk properti. Nilai ini harus cocok dengan ID Hotel yang ditentukan menggunakan
<id> di elemen <listing> di Feed Daftar Hotel. ID Hotel juga tercantum di Pusat Pengelolaan Hotel. |
ExtraGuestCharges / HotelExtraGuestCharges / @action | 0..1 | enum | Menentukan cara update diterapkan. Hanya overlay yang
didukung, dan default-nya adalah overlay. Semua tagihan sebelumnya untuk properti ini akan dihapus sebelum pembaruan diterapkan. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge | 0..99 | ExtraGuestCharge | Satu kumpulan tagihan untuk properti. Hal ini dapat berisi batasan tentang cara tagihan dapat diterapkan dan cara tagihan dihitung berdasarkan usia atau kategori tamu. Setiap |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets | 1 | AgeBrackets | Penampung kelompok usia yang digunakan untuk menghitung tagihan berdasarkan usia atau kategori tamu. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / AdultCharge | 0..1 | AdultCharge | Penampung untuk biaya tambahan dewasa. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / AdultCharge / @amount | 0..1 | float | Nilai desimal positif yang menentukan jumlah tetap yang akan dikenakan untuk tamu dewasa tambahan. Tagihan ini menggunakan mata uang yang sama dengan yang ditentukan untuk tarif per malam. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets | 0..1 | ChildAgeBrackets | Penampung untuk biaya tambahan anak. Rentang usia ini hanya boleh mencakup rentang usia 0-17 tahun inklusif. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket | 1..99 | ChildAgeBracket | Biaya yang berlaku untuk anak-anak dalam rentang usia tertentu. Ini
harus diurutkan dari max_age terendah ke max_age
tertinggi. Jumlah yang akan ditagih dapat ditentukan menggunakan
amount , percentage , atau
discount_amount . Tepat satu dari atribut tersebut harus ditentukan untuk setiap <ChildAgeBracket> .
|
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @max_age | 1 | integer | Usia maksimum yang dapat dikenai biaya yang ditentukan dalam
<ChildAgeBracket> . Usia minimum adalah nol
jika tidak ada <ChildAgeBracket> lain yang ditentukan
sebelum <ChildAgeBracket> ini. Jika tidak, usianya satu tahun lebih besar dari usia maksimum
kelompok sebelumnya. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @exclude_from_capacity | 1 | boolean | Boolean yang menunjukkan apakah anak dalam rentang usia ini harus dihitung dalam total kapasitas kamar dan kapasitas anak. Kapasitas ini dapat ditetapkan dengan Transaksi(Data Properti). Misalnya, bayi di bawah usia tertentu mungkin tidak perlu dihitung dalam kapasitas anak. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @amount | 0..1 | float | Nilai desimal non-negatif yang menentukan jumlah tetap yang akan ditagih untuk anak tambahan dalam kelompok ini. Tagihan ini menggunakan mata uang yang sama dengan yang ditentukan untuk tarif per malam. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @percentage | 0..1 | float | Nilai desimal dari 1-99 yang menentukan persentase harga dewasa yang harus ditagih untuk anak tambahan dalam kelompok ini. Tagihan ini menggunakan mata uang yang sama dengan yang ditentukan untuk tarif per malam. Lihat diskusi di bagian |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @discount_amount | 0..1 | float | Nilai desimal positif yang menentukan jumlah diskon flat dari harga dewasa untuk anak tambahan dalam kelompok ini. Tagihan ini menggunakan mata uang yang sama dengan yang ditentukan untuk tarif per malam. Secara umum, tagihan untuk anak dalam kelompok ini dihitung dengan
mengurangi jumlah tetap dari "harga satuan". Harga unit
dibahas secara lebih mendetail di bagian atribut
|
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @counts_as_base_occupant | 0..1 | string | Jika atribut Tujuannya di sini adalah untuk mendapatkan "harga satuan" yang dapat digunakan untuk menghitung tagihan sebenarnya.
Nilai atribut ini harus berupa salah satu dari
|
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RoomTypes | 0..1 | RoomTypes | Container untuk daftar jenis kamar yang dikenai biaya.
Biaya berlaku untuk setiap <RoomType> yang ditentukan. Jika <RoomTypes> tidak ditentukan, biaya akan berlaku untuk semua kamar dalam properti yang ditentukan. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RoomTypes / RoomType | 1..n | RoomType | Menentukan jenis kamar. Jenis kamar ditentukan di elemen <RoomData> dalam pesan Transaksi (Data Properti) dan direferensikan menggunakan nilai <RoomID> -nya. (Nilai <RoomID> -nya juga direferensikan oleh atribut InvTypeCode dalam pesan OTA_HotelRateAmountNotifRQ.) |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RoomTypes / RoomType / @id | 1 | string | ID unik untuk inventaris (jenis kamar). Nilai ini dipetakan ke <RoomID> dalam pesan Transaksi (Data Properti).
Jumlah karakter maksimum yang diizinkan adalah 50. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RatePlans | 0..1 | RatePlans | Container untuk daftar paket tarif yang dikenai biaya.
Jika <RatePlans> tidak ditentukan, tagihan
akan berlaku untuk semua paket tarif. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RatePlans / RatePlan | 1..n | RatePlan | Menentukan paket tarif. Paket tarif ditentukan oleh kombinasi paket, tarif, dan ketersediaan, seperti yang didefinisikan di pesan Transaksi (Data Properti), OTA_HotelRateAmountNotifRQ, dan OTA_HotelAvailNotifRQ, serta seperti yang diidentifikasi oleh PackageID. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RatePlans / RatePlan / @id | 1 | string | ID unik untuk paket tarif. Nilai ini dipetakan ke nilai PackageID di <PackageData> dalam pesan Transaksi (Data Properti), dan di atribut RatePlanCode di <StatusApplicationControl> dalam pesan <OTA_HotelRateAmountNotifRQ> serta <OTA_HotelAvailNotifRQ> .
Jumlah karakter maksimum yang diizinkan adalah 50. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates | 0..1 | StayDates | Container untuk satu atau beberapa rentang tanggal yang menentukan cara tagihan diterapkan. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange | 1..99 | DateRange | Rentang tanggal yang menentukan tanggal promosi diterapkan. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange / @start | 0..1 | Date | Tanggal mulai (berdasarkan zona waktu properti), inklusif, dari rentang tanggal. Tanggal ini harus sebelum atau sama dengan tanggal end . Jika start tidak ditentukan, maka tanggal mulai dari rentang tanggal menjadi tidak terbatas. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange / @end | 0..1 | Date | Tanggal akhir (berdasarkan zona waktu properti), inklusif, dari rentang tanggal. Tanggal ini harus sama dengan, atau setelah, tanggal start . Jika end tidak ditentukan, maka tanggal akhir dari rentang tanggal menjadi tidak terbatas. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange / @days_of_week | 0..1 | string | Hari yang diizinkan dalam rentang tanggal. Jika tidak ditentukan, maka semua hari diizinkan dalam rentang tanggal. Setiap karakter dalam string menentukan hari. Misalnya, "MTWHF" menentukan bahwa hari kerja diizinkan dalam rentang tanggal. Karakter yang valid adalah:
Kombinasi karakter apa pun valid. |
Contoh
Tarif Dewasa
Biaya untuk orang dewasa tambahan hanya dapat dinyatakan sebagai jumlah tetap. Contoh
berikut menunjukkan pesan ExtraGuestCharges
yang menentukan biaya
dewasa:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<StayDates />
<AgeBrackets>
<AdultCharge amount="50" />
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Berikut adalah tarif yang sesuai:
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05"
EchoToken="12345678"
TimeStamp="2020-05-19T20:50:37-05:00"
Version="3.0">
<RateAmountMessages HotelCode="ABC">
<RateAmountMessage>
<StatusApplicationControl Start="2020-05-18"
End="2020-05-23"
InvTypeCode="RoomID_1"
RatePlanCode="PackageID_1"/>
<Rates>
<Rate>
<BaseByGuestAmts>
<BaseByGuestAmt AmountAfterTax="100.00"
CurrencyCode="USD"
NumberOfGuests="1"/>
<BaseByGuestAmt AmountAfterTax="110.00"
CurrencyCode="USD"
NumberOfGuests="2"/>
<BaseByGuestAmt AmountAfterTax="120.00"
CurrencyCode="USD"
NumberOfGuests="3"/>
</BaseByGuestAmts>
</Rate>
</Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
Saat pengguna menelusuri empat orang dewasa di Google, tarif totalnya adalah 170 = 120 + 50.
120 berasal dari tarif <BaseByGuestAmt>
dengan NumberOfGuests="3"
dan 50
berasal dari AdultCharge amount="50"
.
Tagihan Turunan
Biaya untuk anak-anak dinyatakan dalam rentang usia hingga 17 tahun dan dapat dinyatakan dalam jumlah tetap, persentase, atau diskon.
Contoh berikut menunjukkan pesan ExtraGuestCharges
yang menentukan
biaya anak:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<AgeBrackets>
<ChildAgeBrackets>
<ChildAgeBracket max_age="3" percentage="10"
counts_as_base_occupant="never" />
<ChildAgeBracket max_age="10" percentage="30"
counts_as_base_occupant="preferred"/>
<ChildAgeBracket max_age="17" discount_amount="10"
counts_as_base_occupant="always" />
</ChildAgeBrackets>
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Berikut adalah tarif yang sesuai:
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05"
EchoToken="12345678"
TimeStamp="2020-05-19T20:50:37-05:00"
Version="3.0">
<RateAmountMessages HotelCode="ABC">
<RateAmountMessage>
<StatusApplicationControl Start="2020-05-18"
End="2020-05-23"
InvTypeCode="RoomID_1"
RatePlanCode="PackageID_1"/>
<Rates>
<Rate>
<BaseByGuestAmts>
<BaseByGuestAmt AmountAfterTax="100.00"
CurrencyCode="USD"
NumberOfGuests="1"/>
<BaseByGuestAmt AmountAfterTax="110.00"
CurrencyCode="USD"
NumberOfGuests="2"/>
</BaseByGuestAmts>
</Rate>
</Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
```
1. Suppose you want the total price for 2 adults and 1 child of 2 years
of age.
Children aged 0-3 are never included in the rate's occupancy,
so here you should take the double occupancy rate and divide by 2 to
get the unit price. Then, multiply by the percentage rate and sum
with the rate to get the total price.
`unit price ` = 110 / 2 = 55
`total price` = 110 + 55 * 0.1 = 115.5
1. Suppose you want the total price for 1 adult and 2 children, both of 5
years of age.
Children aged 4-10 are preferably included in the rate's
occupancy. you should start by looking for a 3 adult rate since both
children are preferably included in the rate's occupancy. Since
that doesn't exist you should fall back to the 2 adult rate and then,
take this rate and divide by two to get the unit price. Finally,
multiply by the percentage rate and sum with the scaled rate to
get the total price.
`unit price` = 110 / 2 = 55
`total price` = 55 + 55 * 0.3 + 55 * 0.3 = 88
1. Suppose you want the total price for 1 adult and 1 child of 17
years of age.
Children aged 11-17 are always included in the rate's occupancy, so,
in this case, take the double occupancy rate and divide by 2 to get
the unit price. Then, deduct it by the discount amount and sum with
the scaled rate to get the total price.
`unit price` = 110 / 2 = 55
`total price` = 55 + (55 - 10) = 100
Batasan Penagihan
Semua jenis pembatasan bersifat opsional dan kombinasi apa pun darinya dapat digunakan.
Contoh berikut menunjukkan pesan ExtraGuestCharges
yang menentukan
batasan:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<RoomTypes>
<RoomType id="queen" />
<RoomType id="king" />
</RoomTypes>
<RatePlans>
<RatePlan id="free-wifi" />
<RatePlan id="hot-breakfast" />
</RatePlans>
<StayDates>
<DateRange start="2020-09-01" end="2020-09-14"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="50" />
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Pesan di atas menentukan bahwa orang dewasa harus ditagih untuk produk apa pun yang memiliki jenis kamar "queen" atau "king" dengan paket tarif "free-wifi" atau "hot-breakfast" untuk tanggal 1 September 2020 hingga 14 September 2020.
Tagihan yang Tumpang-Tindih
Bagian ini menunjukkan contoh pesan tidak valid yang menentukan biaya yang berbeda untuk kombinasi tanggal dan produk yang sama.
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<RoomTypes>
<RoomType id="queen" />
</RoomTypes>
<RatePlans>
<RatePlan id="free-wifi" />
</RatePlans>
<StayDates>
<DateRange start="2020-09-01" end="2020-09-14"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="50" />
</AgeBrackets>
</ExtraGuestCharge>
<ExtraGuestCharge>
<RoomTypes>
<RoomType id="queen" />
<RoomType id="king" />
</RoomTypes>
<RatePlans>
<RatePlan id="free-wifi" />
<RatePlan id="hot-breakfast" />
</RatePlans>
<StayDates>
<DateRange start="2020-09-01" end="2020-09-05"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="20" />
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Pesan di atas tidak valid karena <ExtraGuestCharge>
pertama
menentukan bahwa "queen" dan "free-wifi" untuk 1 hingga 14 September harus mengenakan biaya
tambahan dewasa 50. <ExtraGuestCharge>
kedua
menentukan bahwa "queen" atau "king" dengan "free-wifi" atau
"hot-breakfast" untuk 1 hingga 5 September harus mengenakan biaya tambahan untuk orang dewasa sebesar 20.
Ada tagihan yang tumpang-tindih untuk "queen" dan "free-wifi" untuk 1 hingga
5 September dan konflik antara apakah akan mengenakan biaya 20 atau 50 untuk orang dewasa tambahan.
Respons
Sintaksis
Pesan ExtraGuestChargesResponse
menggunakan sintaksis
berikut:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestChargesResponse timestamp="timestamp"
id="message_ID"
partner="partner_key">
<!-- Either Success or Issues will be populated. -->
<Success/>
<Issues>
<Issue code="issue_code" status="issue_type">issue_description</Issue>
</Issues>
</ExtraGuestChargesResponse>
Elemen & Atribut
Pesan ExtraGuestChargesResponse
memiliki elemen dan atribut berikut:
Elemen / @Atribut | Kejadian | Jenis | Deskripsi |
---|---|---|---|
ExtraGuestChargesResponse | 1 | Complex element | Elemen root yang menunjukkan keberhasilan atau masalah untuk pesan permintaan
ExtraGuestCharges yang diterima. |
ExtraGuestChargesResponse / @timestamp | 1 | DateTime | Tanggal dan waktu pembuatan pesan ini. |
ExtraGuestChargesResponse / @id | 1 | string | ID unik dari pesan ExtraGuestCharges terkait. |
ExtraGuestChargesResponse / @partner | 1 | string | Akun partner untuk pesan ini. |
ExtraGuestChargesResponse / Success | 0..1 | Success | Menunjukkan bahwa pesan ExtraGuestCharges berhasil diproses tanpa peringatan, error, atau kegagalan.
|
ExtraGuestChargesResponse / Issues | 0..1 | Issues | Container untuk satu atau beberapa masalah yang ditemukan saat memproses pesan ExtraGuestCharges .
|
ExtraGuestChargesResponse / Issues / Issue | 1..n | Issue | Deskripsi peringatan, error, atau kegagalan yang dialami saat
memproses pesan ExtraGuestCharges . Detail tentang masalah ini dapat ditemukan di Pesan Error Status Feed. |
ExtraGuestChargesResponse / Issues / Issue / @code | 1 | integer | ID untuk masalah. |
ExtraGuestChargesResponse / Issues / Issue / @status | 1 | enum | Jenis masalah yang dialami. Nilai yang valid adalah |
Contoh
Berhasil
Berikut adalah respons terhadap pesan ExtraGuestCharges
yang berhasil diproses.
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestChargesResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Success/>
</ExtraGuestChargesResponse>
Masalah
Berikut adalah respons terhadap pesan ExtraGuestCharges
yang tidak diproses
karena error.
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestChargesResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Issues>
<Issue code="1001" status="error">Example</Issue>
</Issues>
</ExtraGuestChargesResponse>