Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The The New Delta Pre-Invoice Generation feature ensures that your invoicing process is accurate and up-to-date by comparing the latest invoiced amounts with new amounts and creating delta pre-invoice items for any differences. This feature handles various aspects of invoicing, including timesheet activities, flexible payment plans, packages, and invoice contacts, making your invoicing more efficient and reliable.

...

How it works

When delta invoicing is activated,

...

the generation of pre-invoices is based on comparing the latest invoiced amounts with the new amounts, which include the changes. When you generate a new pre-invoice, the system will fetch the latest invoiced items and compare them with the new campaign amounts to identify any differences. The system will create delta pre-invoice items for any differences found between the latest invoiced amounts and the new amounts.

...

Assigning Timesheet Activities:

  • The system automatically assigns the latest invoice items to the relevant timesheet activities.

...

Flexible Payment Plans:

  • Pre-invoice items related to flexible payment plans are assigned to their respective plans and recalculated if any campaign item amounts change​​.

  • Flexible payment plan pre-invoice items are merged with normal and/or delta pre-invoice items if their invoice date matches the accounting period.

  • Multiple flexible payment plans can be merged if they belong to the same accounting period.

  • The feature ensures that flexible payment plan invoice items are handled correctly within the Delta Invoicing system. These items will not create technical reversals or delta invoice items. Instead, new flexible payment plans need to be created if the campaign item amount changes to cover the remaining balance. (AD-10938)

  • The flexible payment plan for delta work exactly the same way as that of version 2.170

    The delta preinvoice are assigned to the flexible payment plan and percentage is recalculated if the campaign item amount has changed.

...

Managing Packages:

  • For campaigns involving packages, the system will display the package header and all included components, along with any changes. This ensures that all components are correctly invoiced​​.(Not part of beta)

...

Handling Invoice Contacts:

  • The system creates and updates invoice contacts based on the configured campaign contacts. If any contacts are no longer needed, they will be deleted.

...

Assigning Accounting Periods:

  • The Delta Pre-Invoice Generation process ensures that all pre-invoices have an assigned accounting period. If accounting periods are not yet created when the pre-invoices are generated, the accounting period field will remain empty and will be updated during the next pre-invoice generation once the accounting periods are created.

...

Threshold Feature

  • The threshold feature allows users to define a minimum percentage change in the calculated amounts which triggers the creation of a delta invoice item.

Pre invoice Status

The Delta Pre-Invoice Generation process now includes pre invoices with status "Reviewed." This ensures that reviewed pre-invoices are treated according to specific rules to prevent unwanted creation of additional delta pre-invoices.

  1. Functionality of Status “Reviewed”:

    • Reviewed pre-invoices are not updated, similar to invoiced invoices.

    • Draft pre-invoices can be updated or reassigned as needed.

  2. Resetting Status to Draft:

    • If any amounts (B3 → N3) change or new pre-invoice items match a reviewed pre-invoice, the status is reset to Draft.

    • Prevents creation of unnecessary additional delta pre-invoices.

  3. Invoice Assignment Rules:

    • Ensures that pre-invoice assignments are managed efficiently without creating duplicate pre-invoices.

Batch Job Processing with Delta

When the delta invoicing is enabled on the Admin settings the new delta pre invoice generation is called during the following batch processes:

  • LWC pre-invoice generation wizard

  • Visual force pre-invoice generation wizard

  • Scheduled Pre-Invoice Batch Job

  • the global invocable method that calls the batch job → GenerateInvoiceBatch.doGenerateInvoice (can be called from everywhere, custom apex code and flows)

  • the end campaign item feature for items based on actuals (triggered my the media campaign trigger)

  • the end campaign item feature for items based on linear distribution (triggered by the end campaign item feature)

  • the FlowInvocableProcess for flow executions (“CreateInvoicesBatchJob")

  • the optimizer activation triggered Process Builder flow → ProcessCompleteEventOptimizingVersion.flow

Rounding of during delta preinvoice generation

All the following values during the Pre-Invoice Generation are rounded off before the invoice items are saved to the database.

  • InvoiceAmount__c

  • GrossAmountB3__c

  • GrossAmountB2__c

  • GrossAmountB1__c

  • InvoicedAmountNet1__c

  • InvoicedAmountNet2__c

  • InvoicedAmountNet3__c

  • InvoiceSurchargeB3Abs__c

  • InvoiceSurchargeB2Abs__c

  • RateDiscount1AbsCustom__c

  • RateDiscount2AbsCustom__c

  • RateDiscount3AbsCustom__c

  • RateDiscount4AbsCustom__c

  • InvoicedQuantity__c

  • SalesPrice__c

Validations relevant to Pre invoice Generation

Following validations are in place for Media champaign and Champaign items for when pre invoice generation is triggered

Media Champaign Conditions

 Error Message

MediaCampaign__c.PaymentInterval__c
==
null

Missing fields: Payment Interval, Payment Start, ...

(field label list depends on which fields are not set)

MediaCampaign__c.PaymentStart__c
==
null

MediaCampaign__c.PaymentDueDate__c
==
null

MediaCampaign__c.Campaign_Start_Date__c
==
null

MediaCampaign__c.Campaign_End_Date__c
==
null

MediaCampaign__c.PaymentInterval__c
==
'weekly (1 week)'

AND

EnableCustomFiscalPeriods__c
==
true

Payment interval weekly (1 week) is not supported when fiscal periods are activated.

...

Champaign item Condition

...

Error Message

...

Campaign_Item__c.BillMe__c
==
false

...

items without bill me set will be ignored

...

/

...

PacketItem__r.BillMe__c
==
false

...

package components with bill me set will be ignored if the related package header doesn’t have bill me set

Note

Package are not supported yet in the delta pre-invoice generation.

...

/

...

MediaCampaign__c.PaymentInterval__c
==
'weekly (1 week)'

AND

Campaign_Item__c.Billing_category__c
==
Budget'

...

First encountered budget item related to a weekly media campaign will throw an error

...

Info

Using the media campaign button with standard pre-invoice generation:
Weekly invoicing is not supported for Media Buying.

Important: Customers can change unlimited invoicing to true/false when the campaign items are partially or fully invoiced for the purpose of delta invoicing.

Info

The visualforce page on Preinvoice generation button on the Media Campaign has been deactivated when Delta is enabled on the admin settings

<<Add UI>>

...

Delta pre-invoices are generated and invoice items are created when the delta optimization version is activated or after the Delta Preinvoice generation when the campaign item is adjusted.

The delta changes are made in the pre-invoice of their respective period or, if the period is closed for invoicing, the adjustments are made in the next open period.

How to call Delta Preinvoice generation

When the delta invoicing is enabled on the Admin settings the new delta pre-invoice generation is called during the following processes:

  • New PreInvoice generation button on the Media Campaign

  • Pre-invoice wizard (to be deprecated)

  • Pre-Invoice wizard (Lightening)

  • Scheduled Pre-Invoice Batch Job

  • the global invocable method that calls the batch job → GenerateInvoiceBatch.doGenerateInvoice (can be called from everywhere, custom apex code and flows)

  • The end campaign item feature for items based on actuals (triggered by the media campaign trigger)

  • The end campaign item feature for items based on linear distribution (triggered by the end campaign item feature)

  • The FlowInvocableProcess for flow executions (“CreateInvoicesBatchJob")

  • The optimizer activation triggered Process Builder flow → ProcessCompleteEventOptimizingVersion.flow - this action can be disabled since PreInvoice generation is triggered with optimizing version activation

  • Invoice Wizard (Lightening) - The pre-invoice update stage is included

  • Invoice Wizard (To be deprecated) - The pre-invoice update stage is included

Financial Changes

Only financial changes are considered by the pre-invoice generation and the following items are compared to evaluate if it is a financial change or not.

  • Invoice Item Amount Comparison:

    • comparison of invoice item amounts already invoiced with those that would be calculated by the next pre-invoice generation, for each specified payment interval (total, yearly, half-yearly, quarterly, monthly, weekly).

    • This comparison is done at the invoice item level, considering amounts B3, B2, B1, N1, N2, and N3

  • Invoicing Based on Linear Distribution vs. Actual Delivery

    • There are two types of invoicing: based on the linear distribution and based on actual delivery data (utilizing actual delivery from Revenue Schedules).

    • For linear distribution, amounts are calculated based on the runtime of the campaign item across payment intervals.

    • For actual delivery, amounts are calculated based on delivery data in the Revenue Schedule, for billing categories such as CPM, CPC, vCPM, CPCV, and Budget

      • Weekly payment interval is using Revenue Schedules Daily and has to be enabled through the admin setting

New Delta Pre-Invoice generation will delete and not create any 0 amount pre-invoice items when the campaign items are fully invoiced. This is also relevant for Already invoiced campaign items, where only the runtime is switched.

New Invoice and invoice item fields

A new invoice item fields have been created to improve the handling of the Delta Invoicing:

Delta Change Reason

API Name: DeltaChangeReason__c

During the optimization, the reason for the change for every single Campaign item can be added and it is mapped to the invoice item to use it in the Invoice PDF to show the reason for the change.

Referenced Invoice Number

API Name: ReferencedInvoiceNumber__c

This field stores the original invoice number which was adjusted and will be shown on the Invoice PDF as a reference.

Position Reference

API Name: PositionReference__c

This is a reference to the previous version of the invoice item related to this campaign item

Invoice Item Creation Type

API Name: CreationType__c.

A new picklist field has been created to identify an invoice item creation type. This field is preset automatically and should not be changed by the user.

Following are the picklist values:

  • None - This creation type is the same as the related invoice. Nothing will change when it comes to displaying this item

  • Flexible Payment Plan - Invoice items created based on the Flexible Payment Plan

  • Technical Reversal -This is the negative clone of the previous version

  • Delta Adjustment - This is a new version of the Invoice item after the change. This item would display the new Delta fields

The following new fields for delta invoicing are created which will calculate the outstanding amount based on changes done for Campaigns and what was already invoiced.

Invoice API Name

Invoice Field Label

Invoice Item API Name + Logic

GrossAmountB3Outstanding__c

Outstanding Gross Amount B3

GrossAmountB3delta__c

Additional Condition:
NonMedia__c is not set

GrossAmountB2Outstanding__c

Outstanding Gross Amount B2

GrossAmountB2delta__c

Additional Condition:
NonMedia__c is false

GrossAmountB1Outstanding__c

Outstanding Gross Amount B1

GrossAmountB1delta__c

Additional Condition:
NonMedia__c is false

InvoicedAmountNet1Outstanding__c

Outstanding Invoiced Amount N1

InvoicedAmountNet1delta__c

Additional Condition:
NonMedia__c is false

InvoicedAmountNet2Outstanding__c

Outstanding Invoiced Amount N2

InvoicedAmountNet2delta__c

Additional Condition:
NonMedia__c is false

InvoicedAmountNet3Outstanding__c

Outstanding Invoiced Amount N3

InvoicedAmountNet3delta__c

Additional Condition:
NonMedia__c is false

NonMediaAmountOutstanding__c

Outstanding Non-Media Amount

InvoicedAmountNet3delta__c

Additional Condition:
NonMedia__c is true

DstAmountOutstanding__c

Outstanding DST Amount

DstAmountdelta__c

Additional Condition:
DstRelevant__c == true && DstExempt__c is false

NonTaxableAmountDstOutstanding__c

Outstanding Nontaxable Amount (DST)

Based on TaxableAmountType__c:
InvoicedAmountNet2delta__c
or
InvoicedAmountNet3delta__c

Additional Condition:
DstRelevant__c is false || DstExempt__c is true

TaxableAmountDstOutstanding__c

Outstanding Taxable Amount (DST)

Based on TaxableAmountType__c:
InvoicedAmountNet2delta__c
or
InvoicedAmountNet3delta__c

Additional Condition:
DstRelevant__c is true && DstExempt__c is false

VATAmount1Outstanding__c

Outstanding VAT Amount (Type 1 (A))

VATAmountdelta__c

Additional Condition:
VATExempt__c is false && VATType__c is '1'

VATAmount1BOutstanding__c

Outstanding VAT Amount (Type 1 (B))

VATAmountBdelta__c

Additional Condition:
VATExempt__c is false && VATType__c is '1'

VATAmount2Outstanding__c

Outstanding VAT Amount (Type 2 (A))

VATAmountdelta__c

Additional Condition:
VATExempt__c is false && VATType__c is '2'

VATAmount2BOutstanding__c

Outstanding VAT Amount (Type 2 (B))

VATAmountBdelta__c

Additional Condition:
VATExempt__c is false && VATType__c is '2'

TaxableAmountVatType1Outstanding__c

Outstanding Taxable Amount (VAT Type 1)

Based on TaxableAmountType__c:
InvoicedAmountNet2Delta__c + DstAmountDelta__c
or
InvoicedAmountNet3Delta__c + DstAmountDelta__c

Additional Condition:
VATExempt__c is false && VATType__c is '1'

TaxableAmountVatType2Outstanding__c

Outstanding Taxable Amount (VAT Type 2)

Based on TaxableAmountType__c:
InvoicedAmountNet2Delta__c + DstAmountDelta__c
or
InvoicedAmountNet3Delta__c + DstAmountDelta__c

Additional Condition:
VATExempt__c is false && VATType__c is '2'

NonTaxableAmountTotalOutstanding__c

Outstanding Nontaxable Amount (VAT Total)

Based on TaxableAmountType__c:
InvoicedAmountNet2delta__c + DstAmountDelta__c
or
InvoicedAmountNet3delta__c + DstAmountDelta__c

Additional Condition:
VATExempt__c is true or TaxableAmountType__c not supported or VATType__c not supported

(warning) QR code feature users should map the correct amount to the ESR reference.

The following invoice fields will calculate the outstanding + the already paid amount:

Invoice Field API Name

Invoice Field Label

Invoice Item API Name + Logic

GrossAmountB3__c

Gross Amount B3

GrossAmountB3__c

Additional Condition:
NonMedia__c is false

GrossAmountB2__c

Gross Amount B2

GrossAmountB2__c

Additional Condition:
NonMedia__c is false

GrossAmountB1__c

Gross Amount B1

GrossAmountB1__c

Additional Condition:
NonMedia__c is false

InvoicedAmountNet1__c

Invoiced Amount N1

InvoicedAmountNet1__c

Additional Condition:
NonMedia__c is false

InvoicedAmountNet2__c

Invoiced Amount N2

InvoicedAmountNet2__c

Additional Condition:
NonMedia__c is false

InvoicedAmountNet3__c

Invoiced Amount N3

InvoicedAmountNet3__c

Additional Condition:
NonMedia__c is false

NonMediaAmount__c

Non-Media Amount

InvoicedAmountNet3__c

Additional Condition:
NonMedia__c is true

DstAmount__c

DST Amount

DstAmount__c

Additional Condition:
DstRelevant__c is true && DstExempt__c is false

NonTaxableAmountDst__c

Nontaxable Amount (DST)

Based on TaxableAmountType__c:
InvoicedAmountNet2__c
or
InvoicedAmountNet3__c

Additional Condition:
DstRelevant__c is false || DstExempt__c is true

TaxableAmountDst__c

Taxable Amount (DST)

Based on TaxableAmountType__c:
InvoicedAmountNet2__c
or
InvoicedAmountNet3__c

Additional Condition:
DstRelevant__c is true && DstExempt__c is false

VATAmount1__c

VAT Amount (Type 1 (A))

VATAmount__c

Additional Condition:
VATExempt__c is false && VATType__c = '1'

VATAmount1B__c

VAT Amount (Type 1 (B))

VATAmountB__c

Additional Condition:
VATExempt__c is false && VATType__c = '1'

VATAmount2__c

VAT Amount (Type 2 (A))

VATAmount__c

Additional Condition:
VATExempt__c is false && VATType__c is '2'

VATAmount2B__c

VAT Amount (Type 2 (B))

VATAmountB__c

Additional Condition:
VATExempt__c is false && VATType__c is '2'

TaxableAmountVatType1__c

Taxable Amount (VAT Type 1)

Based on TaxableAmountType__c:
InvoicedAmountNet2__c + DstAmount__c
or
InvoicedAmountNet3__c + DstAmount__c

Additional Condition:
VATExempt__c is false && VATType__c is '1'

TaxableAmountVatType2__c

Taxable Amount (VAT Type 2)

Based on TaxableAmountType__c:
InvoicedAmountNet2__c + DstAmount__c
or
InvoicedAmountNet3__c + DstAmount__c

Additional Condition:
VATExempt__c is false && VATType__c is '2'

NonTaxableAmountTotal__c

Nontaxable Amount (VAT Total)

Based on TaxableAmountType__c:
InvoicedAmountNet2__c + DstAmount__c
or
InvoicedAmountNet3__c + DstAmount__c

Additional Condition:
VATExempt__c == true or TaxableAmountType__c not supported or VATType__c not supported

The general amount calculation is described here: 4.2.6.2 Amount Calculation and Discounts

Following Invoice Formula fields are not created for Delta, however, they can be created as custom fields if needed.

Formula

Delta API Name

Delta Label

Normal Formula API Name (can be taken as reference)

NonTaxableAmountDstDelta__c + TaxableAmountDstOutstanding__c + DstAmountOutstanding__c

InvoicedAmountDstOutstanding__c

Outstanding Invoiced Amount Gross (DST)

InvoicedAmountDst__c

VATAmount1Outstanding__c + VATAmount1BOutstanding__c

VatTotalType1Outstanding__c

Outstanding VAT Total (Type 1)

VatTotalType1__c

VATAmount2Outstanding__c + VATAmount2BOutstanding__c

VatTotalType2Outstanding__c

Outstanding VAT Total (Type 2)

VatTotalType2__c

TaxableAmountVatType1Outstanding__c + TaxableAmountVatType2Outstanding__c

TaxableAmountTotalOutstanding__c

Outstanding Taxable Amount (VAT Total)

TaxableAmountTotal__c

VatTotalType1Outstanding__c + VatTotalType2Outstanding__c

VatTotalOutstanding__c

Outstanding VAT Total

VatTotal__c

TaxableAmountTotalOutstanding__c + VatTotalOutstanding__c + NonTaxableAmountTotalOutstanding__c

InvoicedAmountTotalOutstanding__c

Outstanding Invoiced Amount Gross (Total)

InvoicedAmountTotal__c

ROUND(InvoicedAmountTotalOutstanding__c * Early_Payment_Discount__c,2)

EarlyPaymentDiscountAbsOutstanding__c

Outstanding Early Payment Discount abs.

EarlyPaymentDiscountAbs__c

InvoicedAmountTotaOutstanding__c - EarlyPaymentDiscountAbsOutstanding__c

InvoicedAmountGrossInclEpdOutstanding__c

Outstanding Invoiced Amount Gross (incl. EPD)

InvoicedAmountGrossInclEpd__c

Assigning Accounting Periods

Each legal entity has associated accounting periods, typically structured on a monthly basis. In the updated feature, accounting periods play a crucial role in assigning and calculating invoice dates for pre-invoices.

The Delta Pre-Invoice Generation process ensures that all pre-invoices have an assigned accounting period. If the invoice date matches an open accounting period, that period will be assigned to the pre-invoice. If no matching accounting period is found, the system will search for the next open accounting period.

Supposing accounting periods are not yet created when the pre-invoices are generated. In that case, the accounting period field will remain empty and will be updated during the next pre-invoice generation once the accounting periods are created.

If there is an open accounting period before the latest closed accounting period (ordered by until date), we will ignore those open accounting periods. No accounting period will be assigned to related pre invoices until new period is open after the latest closed.

Example: Open matching accounting period in the past, with NO gap between latest closed and earliest next open

Code Block
Campaign Item runs in June 2024
Accounting Period July 2024 is closed but Accounting Period June 2024 is still open (somehow)
The next (open) Accounting Period is in August 2024

Start Delta Pre-Invoice Generation

-> Pre-Invoice with Accounting Period August 2024 assigned will be created

If there is a gap between the latest closed accounting period and the next open accounting period, no invoice item related to a closed accounting period will be assigned.

Pre-Invoice Items that match a certain open Accounting Period in the future will still be assigned to that Accounting Period, even if gaps in between Accounting Periods exist.

Info

“Invoice Merging Exception”

When the accounting periods are already there and the current accounting period is closed the invoice items of the current month will merge into the pre-invoice of the next open period as a separate line item. This is true for all cases except, when the payment of the Media Campaign is due at the “end of the interval” the invoice items of the closed month do not get merge into the pre-invoice of the next open period instead it generates two separate invoice in the same period.

In order to close the accounting period all Pre-invoice within this accounting period should be invoiced or deleted, otherwise the validation will trow an error.

Code Block
breakoutModewide

Change Accounting Period of created Pre-Invoice to September 2024 (keep Invoice Date July 1st)

Close Accounting Period July 2024

Run Delta Pre-Invoice Generation

-> pre-invoice Invoice Date changed to August 1st and Accounting Period did not change (September 2024)!
-> pre-invoice item related to CI #1 was update (LastModifiedDate)

Example 2: Invoice Date (Manual) of Pre-Invoice was set to a future month

Code Block
breakoutModewide
Create Campaign Item #1
Runtime July

Run Delta Pre-Invoice Generation

-> one pre-invoice and one pre-invoice item got created  
-> pre-invoice with Invoice Date July 1st and Accounting Period July 2024 was created
-> pre-invoice item related to CI #1 was created

Set Invoice Date (Manual) of created Pre-Invoice to August 10th

-> Invoice Date changed to August 10th

Run Delta Pre-Invoice Generation

-> pre-invoice was update (LastModifiedDate), Invoice Date (August 10th) and Accounting Period (July 2024) did not change!
-> pre-invoice item related to CI #1 was update (LastModifiedDate)

Example 3: Invoice Date of Pre-Invoice was changed manually or by some process

Code Block
breakoutModewide
Create Campaign Item #1
Runtime July

Run Delta Pre-Invoice Generation

-> one pre-invoice and one pre-invoice item got created  
-> pre-invoice with Invoice Date July 1st and Accounting Period July 2024 was created
-> pre-invoice item related to CI #1 was created

Change Invoice Date of created Pre-Invoice to July 15th

Run Delta Pre-Invoice Generation

-> pre-invoice Invoice Date was updated (back) to (July 1st) and Accounting Period (July 2024) did not change!
-> pre-invoice item related to CI #1 was update (LastModifiedDate)

  • Important❗ the payment start after Billingperiod will be treated as before / during Billingperiod for the invoice date calculation for case where the initial matching accounting period is closed, this makes sure that the pre-invoice items related to the past get quicker invoiced rather than waiting for a later date only because the after Billingperiod in combination with the dates from the earliest open accounting period from the future. See the example below:

Have following accounting periods created for the following cases:

  • July 2024 (closed)

  • August 2024 (closed)

  • September 2024 (closed)

  • October 2024 (open)

All Media Campaigns are set up with…

  • Payment Interval: "monthly"

  • Payment Start: "after Billingperiod"

  • Payment Due To: "due to beginning of interval"

Code Block
breakoutModewide
Create Campaign Item #1
Runtime July -> September

Run Delta Pre-Invoice Generation

-> pre-invoice #1 is created with Invoice Date 1st October and Accounting Period October 2024
-> pre-invoice item related to CI #1 July created
-> pre-invoice item related to CI #1 August created
-> pre-invoice item related to CI #1 September created

Setting the Invoice date

The invoice date for a pre-invoice is calculated using three key fields: payment interval, payment due, and payment start. The system then checks if this invoice date matches the start and end dates of the relevant accounting period.

Invoice date will always be consistent with the assigned accounting period. If there is no matching accounting period, the Invoice Date will be always the first day of the next open accounting period.

We get the earliest possible InvoiceItemAccountingDate__c based on the runtime of the earliest open accounting period by legal entity and use this earliest possible InvoiceItemAccountingDate__c to calculate the earliest possible invoice date for each invoice item.

Info

With delta patch 2.172.2 we implemented that already existing and newly created pre-invoices will always have an Invoice Date updates/set related to an open Accounting Period.

This gives you the possibility to overwrite Invoice Date logic by setting the InvoiceDateManual__c field. This field will overwrite the InvoiceDate__c, so in the end both fields have the same value.

If InvoiceDateManual__c is already set, we will not update the invoice date.

Invoice date is always consistent with the assigned accounting period. If there is no matching accounting period, the Invoice Date will be always the first day of the next open accounting period

Examples below:

Example 1: Accounting Period of Pre-Invoice was changed manually or by some process to a later month because the previous one needs to be closed

Code Block
breakoutModewide
Create Campaign Item #1
Runtime July

Run Delta Pre-Invoice Generation
 
-> pre-invoice with Invoice Date July 1st and Accounting Period July 2024 was created
-> pre-invoice item related to CI #1 was created

Pre Invoice Status

The Delta Pre-Invoice Generation process now includes pre-invoices with the status "Reviewed." This ensures that reviewed pre-invoices are treated according to specific rules to prevent unwanted creation of additional delta pre-invoices.

  1. Functionality of Status “Reviewed”:

    • Reviewed pre-invoices are not updated, similar to invoiced invoices.

    • Draft pre-invoices can be updated or reassigned as needed.

  2. Resetting Status to Draft:

    • If any amounts (B3 → N3) change or new pre-invoice items match a reviewed pre-invoice or pre-invoice item get deleted, the status is reset to Draft and the pre-invoice and pre-invoice items will be updated.

    • Prevents creation of unnecessary additional delta pre-invoices.

  3. Invoice Assignment Rules:

    • Ensures that pre-invoice assignments are managed efficiently without creating duplicate pre-invoices.

Validations relevant to Pre-invoice Generation

Following validations are in place for Media campaign and Campaign items for when the pre-invoice generation is triggered

Media Campaign Conditions

 Error Message

MediaCampaign__c.PaymentInterval__c is not set

Missing fields: Payment Interval, Payment Start, ...

MediaCampaign__c.PaymentStart__c is not set

MediaCampaign__c.PaymentDueDate__c is not set

MediaCampaign__c.Campaign_Start_Date__c is not set

MediaCampaign__c.Campaign_End_Date__c is not set

MediaCampaign__c.PaymentInterval__c
is weekly in combination with Custom Fiscal Period enabled on Admin Settings

A payment interval weekly (1 week) is not supported when fiscal periods are activated.

Campaign Item Condition

Error Message

Campaign_Item__c.BillMe__c
is not set

items without bill me set will be ignored

/

PacketItem__r.BillMe__c
is not set

package components with bill me set will be ignored if the related package header doesn’t have bill me set

/

MediaCampaign__c.PaymentInterval__c is weekly and the Billing category is Budget

The first encountered budget item related to a weekly media campaign will throw an error

Pre-invoice generation is not supported for the Budget billing category with a weekly payment interval.

Info

Using the media campaign button with standard pre-invoice generation:
Weekly invoicing is not supported for Media Buying.

Customers can change unlimited invoicing to true/false when the campaign items are partially or fully invoiced for delta invoicing.

Info

The “Update delivery data” button has been removed from the Invoice object. Updating the delivered quantity is included in the PreInvoice generation and the Pre-invoice update stage in the old billing run. We strongly advise removing all the custom flows or actions related to this button.

When the pre-invoices are generated for the media campaign with weekly payment interval when the Admin Setting “Enable calculation of Revenue Schedules Daily“ is disabled it will create Pre-Invoices with a 0 as invoice item InvoicedQuantity__c and QuantityDelivered__c. Kindly report if it gives a null pointer error.

If the campaign item is changed/edited without optimizer the changes will not be reflected automatically in the pre-invoices and the run pre-invoices button has to be triggered to have the change reflected in the pre-invoice. With the optimizer, the pre-invoice gets updated automatically

Absolute Surcharges and Discount

A new rounding-off logic is in place for the calculation of absolute surcharges and discounts

  • Positive absolute surcharges make use of the rounding mode HALF_DOWN

  • Negative absolute surcharges make use of the rounding mode HALF_UP

  • Absolute discounts make use of the rounding mode FLOOR

  • Amounts based on actuals make use of the rounding mode HALF_UP

  • For Linear, positive Invoiced Quantity make use of the rounding mode HALF_DOWN

  • For Linear, negative Invoiced Quantity make use of the rounding mode HALF_UP

Due to the new absolute surcharges and absolute discount rounding logic, the user may notice a cent difference between periods.

In cases where the campaign item amounts do not match the invoice item amounts combined, delta invoice items will still be created.

The amounts of Absolute discounts and absolute surcharges in case of unlimited invoicing are capped at the amount of Sales Price

Info

The new logic in place would produce a one-cent difference in version 2.171 and 2.172

To avoid this difference in 2.171 users can limit MC where the pre-invoice generation is run (Setting on the admin settings)

The numbers in the table are just for an example

 

 Version 171 or lower

Version 172+

Surcharge B3 Abs used for amount calculation

16.66499999999999999999999999999999560010000000

16.665

Calculation used for Surcharge B3 Abs

Campaign Surcharge B3 / Campaign Item Sales Price * (capped) invoice item sales price

Campaign Item Surcharge B3 * invoice item distribution ratio

Amount B2 before rounding

1683.33499999999999999999999999999999560010000000

1683.335

Rounding Mode

HALF_UP

HALF_UP

Amount B2 rounded

1683.33

1683.34

Rounding during delta preinvoice generation

All the following values during the Pre-Invoice Generation are rounded off before the invoice items are saved to the database.

  • InvoiceAmount__c

  • GrossAmountB3__c

  • GrossAmountB2__c

  • GrossAmountB1__c

  • InvoicedAmountNet1__c

  • InvoicedAmountNet2__c

  • InvoicedAmountNet3__c

  • InvoiceSurchargeB3Abs__c

  • InvoiceSurchargeB2Abs__c

  • RateDiscount1AbsCustom__c

  • RateDiscount2AbsCustom__c

  • RateDiscount3AbsCustom__c

  • RateDiscount4AbsCustom__c

  • InvoicedQuantity__c

  • SalesPrice__c

Commitments

With delta invoicing enabled, the user can apply commitments / re-apply commitments to the campaign items that are partially or fully invoiced. That is, Media Campaign Action “Apply Commitments“ can be used to apply the new commitment conditions to the invoiced campaign items.

Apply commitments action button on media champaign is able to apply commitments to partially cancelled or partially/fully invoiced champaign item even when preventfieldchanges is enabled

The delta invoices will only be issued when the apply commitment button is triggered at the Media Campaign level or during optimization. Application using Commitment API or flow is not supported.

Threshold Feature

OUT OF SCOPE FOR DELTA VERSION I & II

The threshold feature allows users to define a minimum percentage change in the calculated amounts which triggers the creation of a delta invoice item.

Assigning Timesheet Activities

If your campaign item is supposed to be invoice-based on the timesheet activities, you need to ensure that your ADspec has a CPH billing category and that your campaign item should have Linear Distribution checked as false and Time Tracking should be true.

The change in the Delta release is that users do not need to press “Update delivered quantity” on the Invoice, since the revenue schedule data is updated automatically in the preinvoice generation.

When the timesheet activity-based campaign item is adjusted and with the delta invoicing, we can have multiple invoice items for the same campaign item with the same InvoiceItemStartDate__c and InvoiceItemEndDate__c. We assign the “latest“ invoice item to the timesheet activity. The latest invoice item is always the one that gets created or updated.

Flexible Payment Plans

With the enhancements in the last version, we enabled the possibility to edit or delete the Flexible payment plans that are not related to the Invoiced Invoice item. To achieve this we have created a relationship between Flexible Payment Plan and PreInvoice/Invoice Item to be more transparent about which of those records belong to each other. One Flexible Payment Plan can only have one Preinvoice/Invoice Item related to it. This relation is generated by the Preinvoice generation and can not be set or changed manually.

When an Invoice/invoice item is canceled we do not remove the relation, however, next preinvoice generation will relate the new correct preInvoice item to the flexible payment plan. When the Campaign Item is canceled the relation stays.

The Pre-Invoice Generation validates if the total of all Flexible Payment Plans matches the amount of the Campaign Item. When the total amount or percentage does not match, Preinvoice generation will show the error. During optimization activation when Flexible Payment Plan related Campaign item has been adjusted, we will also show the warning. It means that the user should do into a campaign item and either create new Flexible Payment Plan or adjust the existing one/s.

Flexible Payment Plan invoice items will never create technical reversal or delta invoice items. If the campaign item amount changes for those campaign items, new flexible payment plans should created by the user to cover the remaining.

(warning) Preinvoice generation will not be automatically triggered by the optimizing version activation and should be called after the Flexible payment plan is adjusted.

With the Beta II version Flexible payment plan-related pre-invoice items are not merged with normal and/or delta pre-invoice items unless unless the Invoice date matches the standard pre invoice invoice date OR if the accounting period of the FPP invoice date is closed and we merge it into the next available open period.

A Flexible Payment Plan Invoice Items have always following (additional) field setting logic

Field

Value

Notes

DistributionRatio__c

See Notes

Is calculated based on related Flexible Payment Plan and related Campaign Item

for PercentageAmount__c != null
PercentageAmount__c / 100

for Amount__c != null
Amount__c / Campaign Item Amount

Which “Campaign Item Amount” is used can be configured in the Admin Settings.
Default is Amount_net_net__c

FlexiblePaymentAmount__c

A “Campaign Item Amount”

Which “Campaign Item Amount” is used can be configured in the Admin Settings.
Default is Amount_net_net__c

LinearDistribution__c

false

 

DeliveryAutoImport__c

false

 

DistributionUnit__c

Amount

 

InvoiceItemAccountingDate__c

InvoiceDate__c of related Flexible Payment Plan

 

InvoiceItemAccountingEndDate__c

Campaign_End_Date__c of related Media Campaign

 

InvoiceItemStartDate__c

from_Date__c of related Campaign Item

 

InvoiceItemEndDate__c

until_Date__c of related Campaign Item

 

CreationType__c

Flexible Payment Plan

 

We strongly suggest using the standard Salesforce features to track the change history of the Flexible Payment plans to see which users have performed the change.

Amount-based Flexible Payment Plan

When the amount-based FPP-related campaign item is optimized or adjusted, the user needs to adjust the amounts in the NOT invoiced Flexible payment plan or add a new one to get the amount matching to the Campaign item.

Percentage-based Flexible Payment Plan

When Percentage based FPP related campaign item is optimized or adjusted, ADvendio will recalculate % of the existing Flexible Payment plan, to represent the ratio or invoiced, where the user needs to adjust the % in the NOT invoiced Flexible Payment plan or add a new one to get 100% of FPP.

We have adjusted the Flexible payment plan field PercentageAmount up to 5 numbers and 2 decimals

Publication Dates Additions

Flexible Payment Plans created by selected Publication Dates are created as percentage-based flexible payment plans.

In cases of adding more selected publication dates, it does not recalculate the % for invoiced or reviewed Flexible Payment Plans because the amount of the campaign item has not changed. Only adjust open Flexible Payment Plans linearly based on the outstanding %.

We also do not allow the deletion of Selected Publication Dates with a relationship to a Flexible Payment Plan where a related Invoice item is invoiced.

Info

Deleting a publication date related to a flexible payment plan that relates to a reviewed pre-invoice item, will delete the related flexible payment plan and the next pre-invoice generation will delete the reviewed pre-invoice.

Invoice at Start / End of Runtime Additions

Flexible Payment Plans created by the Invoice at the Start / End of Runtime Checkboxes are created as percentage-based flexible payment plans.

Invoice Assignment

Flexible Payment Plan Pre-Invoice Items will be merged with normal and/or delta pre-invoice items when the Invoice Date of the flexible payment plan matches the same accounting period or if the initial accounting period is already closed.
This also means that multiple different flexible payment plans are merged if they belong to the same accounting period.

The invoice accounting date, accounting end date (technical fields) and invoice date depend on which invoice item is created first:

Type

Invoice Accounting Date

Invoice Accounting End Date

Invoice Date

based on Flexible Payment Plan

InvoiceDate__c of related Flexible Payment Plan

Campaign_End_Date__c of related Media Campaign

InvoiceDate__c of related Flexible Payment Plan

based on Media Campaign Payment Interval

first of period

last of period

Either first of period, first of next period, end of period or end of next period.

Based on PaymentStart__c and PaymentDueDate__c in combination with the PaymentInterval__c

Managing Packages

The Packages feature allows users to group multiple items together under a single package, consisting of a package header and its associated package components (the individual items within the package).

With the DELTA Beta Version II (2.172.2) we have enabled the Delta invoicing for package related campaign items and impact on the Preinvoice generation.

When Delta Invoicing disabled:

If changes were needed for a package component, users would have to cancel all related invoice items for that package, even if only one component changed.

When Delta Invoicing enabled:

You can now modify an individual campaign item (which is tied to invoice items) without canceling previous invoices or related items.

Handling the Package Changes

When there is an adjustments to any component within the package Delta Invoicing we will create a delta item for every component and header irrespectively the change. However if there is a financial change we show the outstanding amount for header and the component where the change is. And for the component with no financial change we keep the outstanding amount at 0. To trigger delta invoicing at least one component has to have a financial change.

We create a technical reversal for unchanged components. This will help us from the technical perspective to always have the latest change and all components with it. All the other features relevant to packages and its components would work exactly like they do now.

There is an exception when NO delta pre-invoice item will be created even if one of the amounts changed - if the campaign item was already fully invoiced before and the total amount of the newly generated pre-invoice items results into the same fully invoiced amount.

Changes done only in delta pre-invoice generation

  • Now the InvoicedQuantity__c in case of Fixed Package Header is always 1.

  • The AC__c of the components is mapped from the campaign items and if one of the components has AC__c set to true, the package header is also set to true, is otherwise false.

Handling Invoice Contacts

The system creates and updates invoice contacts based on the configured campaign contacts. If any contacts are no longer needed, they will be deleted.