Merged PR 4104: Refactor Invoiced Revenue from Account Code + New Revenue Streams

# Description

Changes:
* Major changes on int_kpis__metric_daily_invoiced_revenue. Now data is retrieved from the account codes, following the previous analysis. This actually reads from a work done on Accounting Codes, with the default aggregations set as a seed. I've also included here new revenue streams for new dash, and the split of guesty fees between resolutions and real API fees. However, New Dash services are still not visible as final metrics. I'll do this separately.
* Propagation of changes in intermediate models. This will affect currently displayed metrics, but not show any new metric.

Since this is quite dense, let's discuss.

# 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: #26531
This commit is contained in:
Oriol Roqué Paniagua 2025-01-20 14:18:05 +00:00
parent 151bb46182
commit d12a7233c9
7 changed files with 598 additions and 91 deletions

View file

@ -1,10 +1,5 @@
-- Document Status --
{% set relevant_document_statuses = "('PAID', 'AUTHORISED')" %}
{% set booking_fee_items = "('EU BOOKING FEE','ZAR BOOKINGS','BOOKING FEE - NON-UK','USD BOOKINGS','CAD BOOKINGS','BOOKING FEE - UK','AUD BOOKINGS')" %}
{% set listing_fee_items = "('USD LISTINGS','LISTING FEE - NON UK','ZAR LISTINGS','CAD LISTINGS','LISTING FEE - UK','AUD LISTINGS','EU LISTINGS')" %}
{% set waiver_items = "('DAMAGE WAVER', 'DAMAGE WAIVER')" %}
{% set verification_fee_items = "('VERIFICATION FEE')" %}
{% set e_deposit_account_name = "('E-DEPOSIT FEES')" %}
{% set guesty_account_name = "('GUESTY FEES', 'GUESTY ADMINISTRATION FEE')" %}
{{ config(materialized="table", unique_key=["date", "id_deal"]) }}
select
@ -21,79 +16,147 @@ select
-- Metrics --
sum(
case
when upper(ixsdm.item_code) in {{ booking_fee_items }}
when ixsdm.accounting_root_aggregation = 'Basic Protection'
then ixsdm.line_amount_wo_taxes_in_gbp
else null
else 0
end
) as xero_basic_protection_net_fees_in_gbp,
sum(
case
when ixsdm.accounting_root_aggregation = 'Waiver Pro'
then ixsdm.line_amount_wo_taxes_in_gbp
else 0
end
) as xero_waiver_pro_net_fees_in_gbp,
sum(
case
when ixsdm.accounting_root_aggregation = 'Id Verification'
then ixsdm.line_amount_wo_taxes_in_gbp
else 0
end
) as xero_id_verification_net_fees_in_gbp,
sum(
case
when ixsdm.accounting_root_aggregation = 'Protection Plus'
then ixsdm.line_amount_wo_taxes_in_gbp
else 0
end
) as xero_protection_plus_net_fees_in_gbp,
sum(
case
when ixsdm.accounting_root_aggregation = 'Screening Plus'
then ixsdm.line_amount_wo_taxes_in_gbp
else 0
end
) as xero_screening_plus_net_fees_in_gbp,
sum(
case
when ixsdm.accounting_root_aggregation = 'Sex Offenders Check'
then ixsdm.line_amount_wo_taxes_in_gbp
else 0
end
) as xero_sex_offenders_check_net_fees_in_gbp,
sum(
case
when ixsdm.accounting_root_aggregation = 'Protection Pro'
then ixsdm.line_amount_wo_taxes_in_gbp
else 0
end
) as xero_protection_pro_net_fees_in_gbp,
sum(
case
when ixsdm.accounting_root_aggregation = 'Basic Screening'
then ixsdm.line_amount_wo_taxes_in_gbp
else 0
end
) as xero_basic_screening_net_fees_in_gbp,
sum(
case
when ixsdm.accounting_root_aggregation = 'Booking Fees'
then ixsdm.line_amount_wo_taxes_in_gbp
else 0
end
) as xero_booking_net_fees_in_gbp,
sum(
case
when upper(ixsdm.item_code) in {{ listing_fee_items }}
when ixsdm.accounting_root_aggregation = 'Listing Fees'
then ixsdm.line_amount_wo_taxes_in_gbp
else null
else 0
end
) as xero_listing_net_fees_in_gbp,
sum(
case
when upper(ixsdm.item_code) in {{ verification_fee_items }}
when ixsdm.accounting_root_aggregation = 'Verification Fees'
then ixsdm.line_amount_wo_taxes_in_gbp
else null
else 0
end
) as xero_verification_net_fees_in_gbp,
sum(
case
when
upper(ixsdm.item_code) in {{ booking_fee_items }}
or upper(ixsdm.item_code) in {{ listing_fee_items }}
or upper(ixsdm.item_code) in {{ verification_fee_items }}
-- New Dash
ixsdm.accounting_kpis_aggregation = 'Invoiced Operator Revenue'
-- Prior to 1st January 2023 we didn't have the split of Booking
-- Fees, Listing Fees and Verification Fees. Everything is considered
-- as Other Invoiced Revenue.
or (
ixsdm.accounting_root_aggregation = 'Other Invoiced Revenue'
and date_trunc('year', ixsdm.document_issued_date_utc)::date
= '2022-01-01'::date
)
then ixsdm.line_amount_wo_taxes_in_gbp
else null
else 0
end
) as xero_operator_net_fees_in_gbp,
sum(
case
when upper(ixsdm.item_code) in {{ waiver_items }}
when ixsdm.accounting_root_aggregation = 'Damage Host-Waiver Payments'
then ixsdm.line_amount_wo_taxes_in_gbp
else null
else 0
end
) as xero_waiver_paid_back_to_host_in_gbp,
sum(
case
when upper(ixsdm.account_name) in {{ e_deposit_account_name }}
when ixsdm.accounting_root_aggregation = 'E-Deposit API'
then ixsdm.line_amount_wo_taxes_in_gbp
else null
else 0
end
) as xero_e_deposit_net_fees_in_gbp,
sum(
case
when upper(ixsdm.account_name) in {{ guesty_account_name }}
when ixsdm.accounting_root_aggregation = 'Athena API'
then ixsdm.line_amount_wo_taxes_in_gbp
else null
else 0
end
) as xero_guesty_net_fees_in_gbp,
) as xero_athena_net_fees_in_gbp,
sum(
case
when ixsdm.accounting_root_aggregation = 'Guesty Resolutions'
then ixsdm.line_amount_wo_taxes_in_gbp
else 0
end
) as xero_guesty_resolutions_net_fees_in_gbp,
sum(
case
when ixsdm.accounting_kpis_aggregation = 'Invoiced API Revenue'
then ixsdm.line_amount_wo_taxes_in_gbp
else 0
end
) as xero_apis_net_fees_in_gbp,
sum(
case
when
upper(ixsdm.account_name) in {{ e_deposit_account_name }}
or upper(ixsdm.account_name) in {{ guesty_account_name }}
ixsdm.accounting_root_aggregation = 'Guesty Resolutions'
or ixsdm.accounting_root_aggregation = 'Athena API'
then ixsdm.line_amount_wo_taxes_in_gbp
else null
else 0
end
) as xero_apis_net_fees_in_gbp
) as xero_guesty_net_fees_in_gbp
from {{ ref("int_xero__sales_denom_mart") }} as ixsdm
left join {{ ref("int_core__deal") }} as icd on ixsdm.id_deal = icd.id_deal
left join
{{ ref("int_kpis__dimension_daily_accommodation") }} as icmas
on ixsdm.id_deal = icmas.id_deal
and ixsdm.document_issued_date_utc = icmas.date
where
upper(ixsdm.document_status) in {{ relevant_document_statuses }}
and (
upper(ixsdm.item_code) in {{ booking_fee_items }}
or upper(ixsdm.item_code) in {{ listing_fee_items }}
or upper(ixsdm.item_code) in {{ verification_fee_items }}
or upper(ixsdm.item_code) in {{ waiver_items }}
or upper(ixsdm.account_name) in {{ e_deposit_account_name }}
or upper(ixsdm.account_name) in {{ guesty_account_name }}
)
where upper(ixsdm.document_status) in {{ relevant_document_statuses }}
group by 1, 2, 3, 4