Merged PR 5429: Rework Booking Source in int_core__bookings

# Description

This PR creates a proper Booking Source in `int_core__bookings` table. This mostly refers to ensure that whenever we do data requests tickets on this regards we have a proper logic in place (as last time we had issues because of this). Logic follows Gus recommendation on applying:

```
case
  when upper(coalesce(bsrc.booking_source, 'UNKNOWN')) = 'UNKNOWN'
  then b.raw_booking_source
  else bsrc.booking_source
end
```

where b. is Booking table and bsrc. is Booking Source table.

Things to note:
* A new `stg_core__booking_source` table is created, full-refreshed from the backend (less than 10 records)
* I added a unique test for `stg_core__booking` that was not in there. I don't document the rest of the model though.
* I remove the previous `id_booking_source` as it wasn't used and the logic in place should be far more accurate.
* I do NOT remove the existing `verification_request_booking_source`. I don't remember what's this but I see this is in use specially on Guest Insights (CSAT) and the legacy Truvi reporting (Bookings, PMS, etc.). Not the scope of this ticket to change it.
* I don't do further propagation, but potentially, this could be extended to New Dash Booking Summary as this source is being shown in the dashboard itself.

# Checklist

- [X] The edited models and dependants run properly with production data.
- [X] The edited models are sufficiently documented.
- [X] The edited models contain PK tests, and I've ran and passed them.
- [X] I have checked for DRY opportunities with other models and docs.
- [X] I've picked the right materialization for the affected models.

# Other

- [ ] Check if a full-refresh is required after this PR is merged.

Related work items: #30415
This commit is contained in:
Oriol Roqué Paniagua 2025-06-10 14:38:35 +00:00
parent 47c51dd18d
commit 0021827368
6 changed files with 56 additions and 6 deletions

View file

@ -2,6 +2,7 @@
with
stg_core__booking as (select * from {{ ref("stg_core__booking") }}),
stg_core__booking_state as (select * from {{ ref("stg_core__booking_state") }}),
stg_core__booking_source as (select * from {{ ref("stg_core__booking_source") }}),
int_core__duplicate_bookings as (
select id_booking, is_duplicate_booking, is_duplicating_booking_with_id
from {{ ref("int_core__duplicate_bookings") }}
@ -23,7 +24,13 @@ select
b.id_user_host,
b.id_integration,
b.id_accommodation,
b.id_booking_source,
upper(
case
when upper(coalesce(bsrc.booking_source, 'UNKNOWN')) = 'UNKNOWN'
then b.raw_booking_source
else bsrc.booking_source
end
) as booking_source,
b.id_verification_request,
vrbs.verification_request_booking_source,
coalesce(db.is_duplicate_booking, false) as is_duplicate_booking,
@ -54,6 +61,7 @@ from stg_core__booking b
-- which in turn ensures the removal of test accounts.
inner join int_core__user_host uh on b.id_user_host = uh.id_user_host
left join stg_core__booking_state bs on b.id_booking_state = bs.id_booking_state
left join stg_core__booking_source bsrc on b.id_booking_source = bsrc.id_booking_source
left join int_core__duplicate_bookings db on b.id_booking = db.id_booking
left join int_core__booking_charge_events bce on b.id_booking = bce.id_booking
left join

View file

@ -1263,13 +1263,22 @@ models:
data_type: bigint
description: "Id value for the verification request, there can be more than 1 record for each verification request since they can be associated to more than 1 booking"
- name: booking_source
data_type: character varying
description: |
The source of the booking according to Booking data.
This should be preferred over the verification_request_booking_source.
- name: verification_request_booking_source
data_type: text
description: Source type of host of the booking, this could be either;
- PMS
- OSL
- API/MANUAL
- null (bookings without verification request)
description: |
Source type of host of the booking according to the Verification Request.
Prefer booking_source over this field.
This could be either;
- PMS
- OSL
- API/MANUAL
- null (bookings without verification request)
data_tests:
- accepted_values:
values: