How Financial Recurring Campaigns Work
Financial recurring campaigns in DPC send automated messages to Responsible Parties (RPs) when their account balance is past due. These campaigns are organized by aging buckets (Event Triggers) based on how long the balance has been outstanding.
Unlike recall or appointment campaigns, financial campaigns rely on a nightly balance calculation to determine which RPs qualify, and they send messages to the Responsible Party — not individual patients.
Aging Buckets (Event Triggers)
Each aging bucket (Campaign Event Trigger) represents a range of days past due. Each bucket is a separate campaign, and an RP can only be in one bucket at a time.
| Bucket | Days Past Due | Window Size |
|---|---|---|
| 0–30 | 1–30 days | 30 days |
| 31–60 | 31–60 days | 30 days |
| 61–90 | 61–90 days | 30 days |
| 91–120 | 91–120 days | 30 days |
| 121–180 | 121–180 days | 60 days |
| 181+ | 181+ days | No limit |
How the Campaign Determines Who Gets a Message
Step 1: Nightly Balance Calculation
Every night at 11:00 PM PST, a scheduled job runs that:
- Calculates each RP's total account balance across all offices in the practice group
- Determines which aging bucket the balance falls into
- Stores the result for DPC to use the next day
This nightly job determines who qualifies for the campaign — it decides which RPs are in which bucket.
This means DPC always uses last night's balance — not real-time ledger data. If an RP makes a payment during the day, it won't be reflected until tonight's calc runs.
Step 2: Campaign Execution
The next day, at 10:00 AM office local time, DPC executes the campaign:
- Checks which RPs are in the aging bucket that matches the campaign
- Checks which touch points are due for today
- Resolves the data tags (balance amounts) from a cache that refreshes every 15 minutes. Data Tags examples: #RP_TOTAL_BAL#, #RP_PAT_BAL#, #RP_INS_BAL#.
- Sends the messages
Step 3: Message Delivery
| Delivery Type | Time | Timezone |
|---|---|---|
| SMS | 10:00 AM | Office local time |
| 10:00 AM | Office local time |
Both SMS and Email deliver at the same time for financial campaigns.
Touch Points and Timing
Each campaign can have up to 10 touch points. Each touch point is set to fire a certain number of days after the RP enters the aging bucket.
Touch Point Timing (examples only)
| Bucket | TP1 | TP2 | TP3 | Recommended Max (with 2-day buffer) |
|---|---|---|---|---|
| 0–30 Days | 1 Day After | 14 Days After | 28 Days After | 28 Days After |
| 31–60 Days | 1 Day After | 14 Days After | 27 Days After | 27 Days After |
| 61–90 Days | 1 Day After | 14 Days After | 27 Days After | 27 Days After |
| 91–120 Days | 1 Day After | 14 Days After | 27 Days After | 27 Days After |
| 121–180 Days | 1 Day After | 21 Days After | 57 Days After | 57 Days After |
| 181+ Days | 1 Day After | 30 Days After | 60 Days After | No limit |
Why Timing Matters — The Bucket Rollover Problem
When an RP's balance ages past the bucket boundary, the nightly calculation moves them to the next bucket. Any remaining touch points in the old bucket's campaign will never fire.
Example — Touch Point Set Beyond the Bucket Window:
A practice sets up a 0–30 Days Past Due campaign with TP3 set to 40 Days After.
| Day | What Happens |
|---|---|
| Day 1 (June 1) | RP's $500 balance goes past due. Nightly calc assigns RP to the 0–30 bucket. |
| Day 2 (June 2) | TP1 (1 Day After) fires → ✅ Message sent at 10:00 AM |
| Day 14 (June 15) | TP2 (14 Days After) fires → ✅ Message sent at 10:00 AM |
| Day 30 (July 1) | TP3 (40 Days After): Not yet — only 30 days. RP is still in 0–30 bucket (last day). |
| Night of Day 30 (July 1, 11 PM PST) | Nightly calc runs → RP's balance is now 31 days past due → RP moves to the 31–60 bucket. RP no longer exists in the 0–30 bucket. |
| Days 31–40 (July 2–11) | DPC checks the 0–30 campaign → RP is no longer in the 0–30 bucket → TP3 is never evaluated → ❌ TP3 never fires. No message. No error. No log. |
DPC does not caution about this at campaign setup. It saves the 40-day setting without validation.
The fix: If the practice wants to reach the RP on day 40 of their overall past due balance, they should set it up on the 31–60 Days Past Due campaign as a touch point at 10 Days After (day 31 + 10 = day 41, approximately day 40).
How Balances Work with Multiple Family Members
Financial campaigns use Responsible Party mailing lists — not Patient mailing lists. This means:
- One message per RP per touch point, regardless of how many patients are under that RP
- The balance tags show combined totals across all patients under the RP
- The message goes to the RP's phone number and email address, not the individual patients' contact info
- There is no per-patient breakdown available in the message
Example: The Smith Family
Responsible Party: Jane Smith (Mom)
Jane has 3 family members under her account:
| Patient | Charges | Adjustments | Insurance Paid | Insurance Expected | Patient Paid | Patient Owes |
|---|---|---|---|---|---|---|
| Jane Smith (self) | $800 | −$100 | −$300 | −$50 | −$100 | $250 |
| Tom Smith (husband) | $500 | −$50 | −$200 | −$75 | −$25 | $150 |
| Lily Smith (daughter) | $300 | −$25 | −$100 | −$25 | $0 | $150 |
| Totals | $1,600 | −$175 | −$600 | −$150 | −$125 | $550 |
What the Data Tags Resolve To
| Tag | What It Shows | Value |
|---|---|---|
#RP_PAT_BAL# | Estimated patient portion (what Jane actually owes out of pocket) | $550.00 |
#RP_INS_BAL# | Insurance portion (what insurance still owes) | $150.00 |
#RP_TOTAL_BAL# | Full remaining balance (patient + insurance) | $700.00 |
What the Messages Look Like
SMS Example (using #RP_PAT_BAL#)
Hi Jane, this is a reminder from Bright Smile Dental that your account has an estimated patient balance of $550.00. Please call us at (555) 123-4567 or visit our office to make a payment. Thank you!
Email Example (using #RP_TOTAL_BAL#) Of course you can also use the #RP_PAT_BAL# data tag.
Subject: Account Balance Reminder — Bright Smile Dental
Dear Jane,
Our records show that your account has a remaining balance of $700.00. This includes any outstanding patient and insurance portions.
Please contact our office at (555) 123-4567 to discuss payment options or to verify your insurance coverage.
Thank you,
Bright Smile Dental
Which Tag Should Practices Use?
| If the template uses... | Jane sees... | What she actually owes | Result |
|---|---|---|---|
#RP_TOTAL_BAL# | $700.00 | $550.00 | ❌ Confusing — Jane thinks she owes $700 |
#RP_PAT_BAL# | $550.00 | $550.00 | ✅ Accurate to what she personally owes |
Recommendation: Use #RP_PAT_BAL# in patient-facing messages to show the RP what they actually owe out of pocket. Using #RP_TOTAL_BAL# includes the insurance expected portion, which often confuses RPs into thinking they owe more than they do.
Data Tag Freshness
The balance amounts shown in the message do not come from the nightly job. They come from a separate cache that refreshes every 15 minutes.
| What | Source | Refresh Frequency |
|---|---|---|
| Which RPs get the message (bucket assignment) | Nightly job | Once per night at 11 PM PST |
| What balance appears in the message (tag values) | 15-minute cache | Every 15 minutes |
This means the balance shown in the message is at most 15 minutes old at the time of delivery. If an RP makes a payment at 9:45 AM and the campaign sends at 10:00 AM, the tag might still show the old balance — but the window is only 15 minutes.
All Available Financial Data Tags
| Tag | UI Label | What It Shows |
|---|---|---|
#RP_TOTAL_BAL# | Resp. Party Total Balance | Full remaining balance (patient + insurance) |
#RP_PAT_BAL# | Resp. Party Est. Pat Balance | Estimated patient portion only |
#RP_INS_BAL# | Resp. Party Est. Ins Balance | Insurance expected portion only |
#RP_CURR_BAL# | Resp. Party Current Balance | Balance from transactions aged 0–30 days |
#RP_Over30_BAL# | Resp. Party Over 30 Balance | Balance from transactions aged 31–60 days |
#RP_Over60_BAL# | Resp. Party Over 60 Balance | Balance from transactions aged 61–90 days |
#RP_Over90_BAL# | Resp. Party Over 90 Balance | Balance from transactions aged 91–120 days |
#RP_Over120_BAL# | Resp. Party Over 120 Balance | Balance from transactions aged 121–180 days |
#RP_Over180_BAL# | Resp. Party Over 180 Balance | Balance from transactions aged 181+ days |
Important: The bucket-specific tags (#RP_CURR_BAL#, #RP_Over30_BAL#, etc.) are based on the age of the ledger transaction, not the aging bucket the RP is assigned to for campaign purposes. An RP in the 61–90 campaign bucket can still have charges showing in #RP_CURR_BAL# if some of their transactions are less than 30 days old.
Remember Step 1 'Nightly Balance Calculation': Calculates each RP's total account balance across all offices in the practice group and Determines which respective aging bucket the balance falls into (only one bucket).
The data tags balances are calculated completely separate, every 15 minutes. So the Campaign Event Trigger and data tags balances are caculated separately.
Quick Reference Summary
| Item | Detail |
|---|---|
| Mailing list type | Responsible Party (not Patient) |
| Messages per RP | One per touch point. Even if an RP has multiple family members, DPC will combine all balances to populate a data tag. Example #RP_PAT_BAL# |
| Nightly job | 11 PM PST — Determines balance of each RP, which RP's qualify to be included in the campaign, and determines which aging bucket (Event Trigger) their respective balance falls into |
| Message delivery | 10:00 AM office local time (both SMS and Email) |
| Tag data freshness | 15-minute cache (not nightly job like the Event Trigger) |
| Bucket rollover | When an RP moves to the next bucket → The remaining TPs in old campaign never fire |
| TP validation | None — DPC allows settings beyond the bucket window without a caution |
| Recommended tag for messages | #RP_PAT_BAL# (shows what the RP actually owes out of pocket) |