diff --git a/models/intermediate/xero/int_xero__sales_denom_mart.sql b/models/intermediate/xero/int_xero__sales_denom_mart.sql index 27fab53..e7521cd 100644 --- a/models/intermediate/xero/int_xero__sales_denom_mart.sql +++ b/models/intermediate/xero/int_xero__sales_denom_mart.sql @@ -36,6 +36,20 @@ select i.invoice_number as document_number, i.invoice_issued_at_utc as document_issued_at_utc, i.invoice_issued_date_utc as document_issued_date_utc, + case + when i.is_invoice_posted_in_hyperline = true + -- If the invoice is posted in Hyperline, we want to use the last day of the + -- previous month + then (date_trunc('month', invoice_issued_date_utc) - interval '1 day')::date + -- If the invoice is not posted in Hyperline, we want to use the last day of + -- the current month + else + ( + date_trunc('month', invoice_issued_date_utc) + + interval '1 month' + - interval '1 day' + )::date + end as document_is_effective_at_end_of_month_utc, i.invoice_type as document_type, i.invoice_currency_iso_4217 as document_currency_iso_4217, i.exchange_rate_to_gbp as exchange_rate_to_gbp, @@ -95,6 +109,20 @@ select cn.credit_note_number, cn.credit_note_issued_at_utc, cn.credit_note_issued_date_utc, + case + when cn.is_credit_note_posted_in_hyperline = true + -- If the credit note is posted in Hyperline, we want to use the last day of the + -- previous month + then (date_trunc('month', credit_note_issued_date_utc) - interval '1 day')::date + -- If the credit note is not posted in Hyperline, we want to use the last day of + -- the current month + else + ( + date_trunc('month', credit_note_issued_date_utc) + + interval '1 month' + - interval '1 day' + )::date + end, cn.credit_note_type, cn.credit_note_currency_iso_4217, cn.exchange_rate_to_gbp, diff --git a/models/intermediate/xero/schema.yml b/models/intermediate/xero/schema.yml index 268e7c7..59e822b 100644 --- a/models/intermediate/xero/schema.yml +++ b/models/intermediate/xero/schema.yml @@ -204,6 +204,14 @@ models: data_type: date description: "" + - name: document_is_effective_at_end_of_month_utc + data_type: date + description: | + The last day of the month when the document is effective. + This is used to align the document with the correct invoicing cycle period. + For documents posted in Hyperline, this represents the last day of the previous + month to the issuing date. For documents not posted in Hyperline, this is the + last day of the month when the document was issued. - name: document_type data_type: character varying description: "" diff --git a/models/reporting/xero/schema.yml b/models/reporting/xero/schema.yml index 4c153e4..b5f58da 100644 --- a/models/reporting/xero/schema.yml +++ b/models/reporting/xero/schema.yml @@ -1310,6 +1310,15 @@ models: data_type: date description: "" + - name: document_is_effective_at_end_of_month_utc + data_type: date + description: | + The last day of the month when the document is effective. + This is used to align the document with the correct invoicing cycle period. + For documents posted in Hyperline, this represents the last day of the previous + month to the issuing date. For documents not posted in Hyperline, this is the + last day of the month when the document was issued. + - name: document_type data_type: character varying description: "" diff --git a/models/reporting/xero/xero__sales_denom_mart.sql b/models/reporting/xero/xero__sales_denom_mart.sql index 2351e02..db18fa9 100644 --- a/models/reporting/xero/xero__sales_denom_mart.sql +++ b/models/reporting/xero/xero__sales_denom_mart.sql @@ -25,6 +25,8 @@ select sdm.document_number as document_number, sdm.document_issued_at_utc as document_issued_at_utc, sdm.document_issued_date_utc as document_issued_date_utc, + sdm.document_is_effective_at_end_of_month_utc + as document_is_effective_at_end_of_month_utc, sdm.document_type as document_type, sdm.document_currency_iso_4217 as document_currency_iso_4217, sdm.exchange_rate_to_gbp as exchange_rate_to_gbp,