Budgets and Expenses
This module uses the following objects:
Configuring a Budget Hierarchy
Budgets in Veeva Events Management can be one-off or part of a budget hierarchy. An example of a budget hierarchy is splitting a budget from a high level (brand, region, or both) down to a low level. For Example, a country-level budget can be broken down to the territory level.
In this example, the National budget is broken into East and West budgets. The East and West budgets can be further broken down to however many levels are needed.
Budget Identifier is a text field that can be used to give users additional information to select the right budget. For example, the Budget Identifier can be a cost center code, or text instructions that help the user decide when this budget is appropriate.
Estimated, Committed, and Actual Expenses
To keep track of expenses, Veeva Events Management uses a concept of three expense stages – estimated, committed, and actual.
These values are stored on:
- Event Budgets
- Expense Estimates
- Expense Headers
- Expense Lines
There is only one entry point for each value. All other locations displaying estimates, committed, and actual expenses should display these values as read-only.
- Estimate values are only entered on an Expense Estimate record
- Committed and actual expense values are only entered on an Expense Line record
- When entered in these places, the values roll up to all budgets above them
For example, when entering an estimate for travel for $500, the estimate rolls into the estimate field on a selected Event Budget. This value then rolls up to the budget associated with the Event Budget, and all other budgets up to the top of the hierarchy. The same is true of committed and actual expense values entered on an expense line, which can be associated with an Event Budget to begin the roll up.
- Other entry points for these values are not supported by automatic roll-ups
When selecting a budget to use for an event, the Estimated Remaining value displays because this value offers the most conservative look at the value remaining. This value is calculated by subtracting the actual expenses from closed events, and the estimated expenses from planned events.
Setting up Expense Types
Expense types are stored in the Expense_Type_vod table. Each row in this table represents a single expense type.
Key attributes of an expense type are:
- Expense Code
- Active flag – must be selected for users to select this expense type
- Expense Type Identifier – used to help the user select the correct expense type
- Parent Expense Type – used to set up types and sub-types. If this field is blank, an expense type is at the top level. If it is populated, the expense type is a sub-type. Only two levels are supported.
- Country – used for setting up sharing of expense types by country
Expense Types can also be designated as counting toward a speaker cap, or being a meal-type expense. This designation is based on the following two check box fields:
The meal expense flag is used so multiple expense types can be included toward meal calculations. For example, you can select the meal expense flag on one expense type called Food, and another called Beverage.
Veeva Events Management automatically calculates the average meal cost per attendee. The formula used is the sum of all actual expense lines with a meal type expense divided by the total count of attendees with status attended or signed.
The speaker cap flag is used to keep track of the total transfer of value to an individual speaker over a calendar year. This value is tracked in the Year_to_Date_Spend_vod field on the EM_Speaker_vod object and automatically resets on January 1st. Expenses logged against an Event Speaker record or an Account record count toward this cap, since both Event Speaker and Account can be directly related to a speaker record.
A speaker cap is a limit on the total monetary value that can be transferred to an HCP over the course of a year. YTD Speaker Caps can be reset via a scheduled Apex class automatically on a date to accommodate customer needs. This also helps provide flexibility for multi-country implementations.
Two fields on the EM_Speaker_vod object, Year_to_Date_Reset_Month_vod and Year_to_Date_Reset_Day_vod, determine when the recalculation takes place. Recalculation updates the Year_to_Date_Spend_vod and Year_To_Date_Utilization_vod fields.
If no values are present in the reset fields, the default date is used to determine when the spend and utilization fields are updated.
- Grant admin users access to the Speaker_YTD_Caps_Reset Apex Class.
- Schedule the Speaker_YTD_Caps_Reset Apex class to run daily.
Grant admin users FLS permission to the following fields on the EM_Speaker_vod object:
Recalculation logic is as follows:
- Start_Time_vod field on the Event record related to the Expense_Header_vod object is greater or equal to the Year_to_Date_Reset_Month_vod and Year_to_Date_Reset_Day_vod and less than the next projected values for those fields
- Either the Speaker or the related Account is the person whom incurred the Expense
- The Expense Type is included in the Speaker Cap
Year_To_Date_Utilization_vod is recalculated by the count of EM_Event_Speaker_vod records where:
- Status_vod field value on the EM_Event_vod object is not Canceled_vod
- Start_Time_vod field on the EM_Event_vod object is greater or equal to the Year_to_Date_Reset_Month_vod and Year_to_Date_Reset_Day_vod and less than the next projected values for those fields
- Status_vod field on the EM_Event_Speaker_vod object matches a value defined in the SPEAKER_ROLLUP_STATUS_FILTER Veeva setting. If the setting is not populated, records with a value of Attended_vod or Signed_vod are counted
EM_Event_Budget_vod is an object used to associate a budget to an event. Events can have many Event Budget records. Each record represents a budget being used for the event. For example, if two sales representatives are cohosting an event, they may each choose to count a portion of the event to their individual budgets. Similarly, cross-brand events may also use multiple budgets to allocate a portion of the event expenses to each brand.
The Event Budget records act as a routing mechanism to determine which expenses go to which budgets. For example, if an event costs $1,000, there can be two Event Budget records – one directing $500 of the expenses to come out of Budget A, and another directing $500 of the expenses to come out of Budget B.
Example of budget selection:
- In order for a budget to be selected, the budget status must be Available_for_Use_vod.
- Budgets do not automatically disappear once the end date is reached. This is to allow for special handling of expenses when necessary. If you want to make a budget unavailable, you must change the status.
- When planning an event, users can only select budgets they have visibility to in the system. It is recommended to use the Private sharing model for EM_Budget_vod, and make the sales representatives the owner of their own territory budgets, thus giving them and their managers’ visibility to the budget. This prevents one sales representative from seeing the budget of another sales representative at the same level.
Expense Estimates are entered in the planning stages of an event. They serve four purposes:
- Allow field users to quickly and easily enter high-level estimates before actual costs are known
- Allow approvers to understand the anticipated costs of an event to decide whether it should move forward or not
- Give transparency to expected costs for events planned in the future
- Audit the differences between estimated costs and actual costs of events
To facilitate quick entry of expense estimates during event planning, iPad includes an Expense Estimate Creation Wizard. This wizard displays when selecting the + button if the user has edit permission to the Expense Type and Estimate fields on the Expense Estimate page layout. The page layout being considered is determined by the page layout engine (see: Defining Page Layouts).
An estimate can only be entered once per expense type.
In a multicurrency org, users can select a currency if it is on the Expense Header page layout. Expense lines automatically inherit currency from the Expense Header.
Selecting an event budget that the expense estimate rolls into:
If there is only one Event Budget record, that record is automatically selected. This association is used for budget roll ups. The estimated value entered rolls up to the top of the budget hierarchy for the budget selected.
Expense rollups are converted to the currency of the target record before rolling up. This is enabled by default for all platforms. This does not support Salesforce Advanced Currency Management.
Event expense entry is designed to mimic a physical invoice. To replicate these scenarios, each expense consists of a header and lines. The header contains basic information, such as the payee and the entity incurring the expense. The lines contain a breakdown for all of the individual service items included on the invoice. For example, an invoice from a logistics vendor has header details including the name of the vendor, the date of the invoice, and the payment due date. The expense lines indicate each service, such as equipment setup fees and travel booking fees.
To enter expense headers:
- The user must have create permissions on the expense header and expense line objects
- The expense header related list must be on the page layout of the event, and the New button must be on the expense header related list
- The expense line related list must be on the expense header page layout, and the New button must be on the expense line related list
- Click the new button on the expense header related list on the Event page and enter in the header details.
Expense headers have three main associations:
- The event that the expense is related to. This association will be defaulted if creating an expense header via an event. An expense header must be associated with an event in order to assure that the expense values roll up properly to any budgets.
- The payee entity for the expense
- The incurred expense entity can come from six different objects: EM_Event_Speaker_vod, EM_Venue_vod, EM_Attendee_vod, EM_Vendor_vod, Account, or EM_Event_Team_Member_vod
- Only a single payee should be entered
- The incurred expense entity for the expense
The payee entity can come from six different objects: EM_Event_Speaker_vod, EM_Venue_vod, EM_Attendee_vod, EM_Vendor_vod, Account, or EM_Event_Team_Member_vod
- Only a single payee should be entered
If Payee and Incurred Expense fields are editable on the expense header layout, the user is able to select a payee and incurred expense entity from any of the six entities associated to expense headers (event speakers, attendees, event team members, vendors, venues, or accounts). If a user is missing FLS to one of these relationships, that entity is not available for selection in the UI.
After an expense header is entered, individual expense lines can be entered for that expense header.
To enter expense lines, the expense line related list must be on the expense header detail page used by the page layout engine, and the New button must be on that rated list.
Expense lines have the following key attributes
- An expense type (and optional subtype)
- An association to an event. This is required to roll up expense line values to the event
- A required association to an expense header
- A committed value. This is used when receiving quotes for service, but funds have not been distributed and final invoice amounts may differ.
- An actual value
Expense Type Stamping
High level expense types can be selected when entering an expense estimate. For example, when creating an event, the user may enter an estimated cost for $500 for travel.
Granular expense types can be selected when entering an expense line. For example, a physician may submit an expense report with a $20 taxi expense.
In both cases, details of the expense type are stamped on the expense estimate and expense line. This action helps maintain historical accuracy of expense entry for reporting purposes. For example, if the name or expense code of the travel expense type is changed at any point, the $500 travel expense mentioned above maintains the existing expense code and expense name from the day it was created. When an expense type is selected on an expense estimate, the name and expense code from that expense type are stamped on the expense estimate record.
When an expense type is selected on an expense line, the name and expense code from that expense type, as well as the expense type’s parent type and parent type code are stamped on the expense line. For example, assuming Travel is the parent expense type of Taxi, the values “Travel” and “Taxi” are stamped on the expense line.
On Expense Lines, the Expense Type picklist displays the Expense Type Identifier after the Expense Type Name.
On Expense Estimates, the Expense Type picklist displays the Expense Type Code after the Expense Type Name.
Expenses for Canceled Events
When an event is closed or canceled, actual values replace any estimate and committed values in the EM_Event_Budget_vod record, which then updates any related EM_Budget_vod records.
Submitting Expenses to SAP Concur
Administrators can configure Veeva CRM to submit Events Management expenses to SAP Concur, eliminating the need for users to manually enter expenses in two systems. See SAP Concur Integration with Events Management Expenses for configuration steps.
Events Management comes with four default expense reports. These reports are located in the Events Management Reports folder. To use these reports, configure the Expense_Attribution_vod object.
- Expense by Event – List of all expenses for an event
- Expense by Event (All) – List of all event expenses in the system
- Expense by Person – List of all expenses for an event by person
- Expense by Person (All) – List of all event expenses in the system by person
The formula fields on the EM_Event_vod object enables users to create direct links to the Expense by Event and Expense by Person reports from the event detail page. To create these formulas:
- Navigate to the Expense by Event and Expense by Person reports.
- Copy the Salesforce ID of those reports from the URL.
Create new formula fields on the EM_Event_vod object using the following value format:
- HYPERLINK("/SALESFORCE REPORT ID?pv0=" & Id, "Click to view report")
- For example, if the Salesforce Report ID is 0Og00G5, the formula value is HYPERLINK("/0Og00G5?pv0=" & Id, "Click to view report")
- Add these new fields to the appropriate EM_Event_vod object page layout.