| Chargeback ChRM Training
Channel Revenue Mgmt · Ship & Debit
Training · Pharmaceutical Chargeback

Master the Chargeback Flow.
From Contract to Payment.

A pharmaceutical manufacturer negotiates a contract price with healthcare buyers, but they purchase through wholesalers at full list price. The wholesaler then bills back the difference — the chargeback. This is the Ship & Debit process, managed end-to-end on Salesforce Channel Revenue Management (ChRM).

The Business Story

Why Chargebacks Exist

Pharmaceutical manufacturers (Gilead) negotiate contract prices with healthcare buyers (hospitals, GPOs). But buyers purchase from wholesalers (Cardinal Health, Cencora) who stock the drugs at WAC (Wholesale Acquisition Cost — list price). The wholesaler sells at the contracted price, then bills the manufacturer for the difference. That difference is the chargeback.

1

Sales Sets the Contract

Every chargeback starts with a contract. Sales creates the Opportunity → Quote → Price Authorization → Special Pricing Term (PSPT) → Rebate Program. This chain defines what drug, which buyers, at what price, and for how long. Without this foundation, no claim can be paid.

2

Wholesalers File Claims

Wholesalers submit POS (Point of Sale) transactions as evidence and Rebate Claims as payment requests. The system validates: is the buyer eligible? Is the price correct? Is the quantity within the cap? Does the POS match the claim?

3

Shareback to Buyers

Some of the chargeback dollars flow back to buyer groups (GPOs) as admin fees (capped at 3% for safe harbor compliance), and then down to individual members based on their volume. Finance processes, Audit monitors, and everyone tracks their piece.

The Math

The Core Formula

Every chargeback calculation reduces to this. Memorize it — everything else builds on it.

Chargeback Formula
Chargeback per unit = WAC (at ship date) − Contract/Reference price
Claim amount = Chargeback per unit × Quantity
Example: Harvoni 90/400 mg
WAC $31,500 − Reference $19,845 = $11,655 per unit
15 units × $11,655 = $174,825 (single claim)
Why two documents? The manufacturer will only pay a chargeback it can prove. So the wholesaler sends: (1) a POS — the invoice showing what the buyer actually paid (the evidence), and (2) a Rebate Claim — the request for chargeback dollars, referencing that POS. The claim's resale price must match the POS sale price, or the claim is rejected.
Key Numbers

Reconciliation Anchors

These are the exact figures in the demo org. Use them to verify your understanding.

Metric Value Context
Wholesaler Processed Book $501,165 Cardinal Health / Harvoni 90/400 28ct (qty 43): H1 $174,825 + H2 $233,100 + H3 $93,240
Buyer Shareback (St. Mary) $52,000 Q2 2026, Vizient — Midwest Aggregation Group, 60.47% pro-rata share
Buyer Group (Sentinel) $73,744.40 9 members across the group
S&D Claim Book 49 claims 3 System Processed / 36 System Failed / 10 New
Contract Chain Multiple stages 30 Opportunities → 27 Quotes → 39 Price Authorizations → 118 Special Pricing Terms → 46 Rebate Programs
Who Does What

The Value Chain

The chargeback process involves seven personas, each with distinct responsibilities. Understanding who does what — and in what order — is essential to navigating the demo.

Critical Insight: The value chain is sequential. Sales must create the contract chain (Opportunity → Quote → Price Authorization → Rebate Program) FIRST. Without it, wholesalers have no authorized contracts to claim against, and no payments can be made. Think of Sales as the foundation — everything else is built on what they set up.

The Seven Personas

0

Chargeback Admin

Role: Internal system admin (Chargeback_Admin)

Owns: Medication catalog + packaging, Buyer Group setup + rosters, bulk data loading, org config (permsets, publishing, activation)

Sets up the data that Sales sells and everyone else consumes.

1

Sales Person

Role: Internal (SDO-Sales)

Owns: Contract origination — creates Opportunities, Quotes, assigns to Buyer Groups, generates Price Authorizations and Rebate Programs

Key Volume: 30 Opportunities → 27 Quotes → 39 Price Authorizations → 118 Special Pricing Terms → 46 Rebate Programs

2

Wholesaler (Wally)

Role: Portal user (Cardinal Health)

Owns: Files chargeback claims + POS evidence, tracks payouts, manages price authorizations

Key Pages: Claims Dashboard, My Payouts ($501,165), Submit POS, Upload Claims, Price Authorizations

3

Buyer Group (Benny)

Role: Portal user (Sentinel Health Alliance — GPO)

Owns: GPO/aggregation admin, earns via shareback, manages member roster

Key Metrics: 9 members, $73,744 total shareback

4

Buyer (Barbara)

Role: Portal user (St. Mary Regional — Hospital)

Owns: Consumes chargeback savings + shareback, signs Letter of Authorization (LOA)

Key Metric: $52,000 accrued shareback (60.47% pro-rata)

5

Finance Person

Role: Internal AP processing

Owns: Approval queues, payment runs, claim workbench, backlog charts

Key Tool: Finance AP Home (Finance Claims Workbench + Segmentation & Backlog charts)

6

Audit Person

Role: Internal Compliance/SOX

Owns: Monitors GPO admin-fee safe harbor (3% / 42 CFR §1001.952(j)), drills into claim calc detail

Key Tool: Compliance SOX Home (GPO Fee Workbench + Finance Claims drill-down)

The Sequential Flow

  1. 1 Sales creates the contract chain
    Opportunity → Quote → assign to Buyer Group → Price Authorization → Special Pricing Term → Rebate Program. Without this foundation, nothing else can happen.
  2. 2 Wholesaler submits POS + Claims
    Uploads Point of Sale transactions (evidence) and Rebate Claims (payment requests). The system validates eligibility, price, quantity, and POS-claim match.
  3. 3 Finance processes payments
    Reviews approved claims, runs payment batches, resolves exceptions. The wholesaler sees payouts in their portal.
  4. 4 Shareback flows to Buyer Groups
    GPO admin fees (≤3% for safe harbor) are calculated and distributed. Buyer Groups see their total; individual members see their pro-rata share (gated by LOA signature).
  5. 5 Audit monitors compliance
    Reviews GPO fee percentages (red flags if >3%), reconciles claim calculations, ensures proper authorization trails.
Objects & Relationships

The Data Model

Understanding the objects and how they relate is essential to navigating the system. Every object exists for a reason — this page explains why each one matters.

Object Plain-English Role Key Fields (Why They Matter)
RebateProgram The contract program between manufacturer and wholesaler for a customer Type=ShipAndDebit, ProgramReferenceNumber (claims cite this), StartDate/EndDate (claim ship dates must fall within), GracePeriodDayCount (late-arrival tolerance)
RebateProgramMember A wholesaler enrolled in that program AccountId (wholesaler), ShipToAccountId (BRE validates against this — must be set or claims fail)
RebatePartnerSpecialPrcTrm (PSPT) The per-product contract term (one per medication) ProductId, ProductQuantity (the cap — max units), ReferencePricePerUnit, Status=Active, Effective_Start__c/End__c
RebatePtnrSpclPrcTrmBnft The pricing tier under a term ReferencePricePerUnitthis is where the OOTB BRE reads the reference price from, NOT the term header (critical gotcha)
RebateClaim The wholesaler's request for chargeback dollars ProgramReferenceNumber, ClaimedByAccountId (wholesaler), ParticipatingAccountId (buyer), ProductId, Quantity, SalePricePerUnit (WAC), ShipDate, CalculatedAmount, ProcessingStatus
RebateMemberClaimAggregate Running total of claimed qty/$ per (member × product) TotalClaimedQuantity, TotalClaimedAmount — enforces the cap and drives payout. Once created, locks member/term editing
Resale_Transaction__c (POS) The invoice evidence Contract_Price__c, Quantity__c, Sale_Date__c, ship-to fields, Matched_Claim__c
PSPT_Roster_Member__c (custom) Per-medication eligible-buyer roster on a term Special_Pricing_Term__c, Member_Account__c, Buyer_Group__c, Active_From/To__c, Status__c
Roster_Change_Log__c (custom) Immutable audit of every roster change Change_Type__c, Source_Survey__c, Effective_Date__c — compliance/finance can trace authorization
Primary_Group_Survey__c / _Line__c The buyer's election of which GPO to use per medication _Line__c.Medication__c, Candidate_Buyer_Group__c, Selected__c — drives roster membership
Shareback_Distribution__c / _Line__c GPO admin fee allocation and member pro-rata shares Distribution header + lines per member; Accrued_Amount__c vs Pending_LOA__c (sign-to-unlock gate)
Buyer_Group__c / _Member__c GPO/aggregation entity and its member hospitals Group-level shareback totals; member-level volume tracking for pro-rata calc
GPO_Fee_Agreement__c Safe harbor admin-fee contract (≤3% compliance) Fee_Percentage__c, Compliance_Status__c (green/yellow/red flags for Audit)
Price_Authorization__c / _Line__c The contract wholesalers see (generated from Quote) Maps to Special Pricing Terms; wholesalers reference this when filing claims
Opportunity / Quote / QuoteLineItem Sales-originated contract chain Quote assigned to Buyer Group → generates Price Authorization → feeds Rebate Program. The foundation of everything downstream.
Why the aggregate is a separate object (not just a rollup): The platform enforces the cap and drives payout off it, and it carries a unique key per (member × product). Once an aggregate exists, the platform locks the member/term — you can't edit ShipTo or add benefit tiers. Remember this for troubleshooting.

The Contract Chain (Sales → Chargeback)

Opportunity
Quote
Quote → BG
Price Auth
PSPT
Rebate Program

Sales creates this chain. The Rebate Program (end of chain) is what wholesalers claim against. The Price Authorization is what wholesalers see in their portal. The PSPT defines the per-medication cap and reference price.

End-to-End Process

Chargeback Lifecycle & The Math

Follow a claim from submission to payment. Every step validates something — understanding what and why is key to troubleshooting.

The Pipeline

RebateClaim saved
  → RebateClaimValidation trigger → ChargebackValidationService (13 EDI-844 gates; sets Validation_Status__c=Passed)
  → Record-triggered Flow "Calculate Rebate Claim and Claim Aggregate for Ship and Debit" (v12, Active)
       entry gate: Validation_Status__c=Passed AND ProcessingStatus=New AND ClaimType=ShipAndDebit
       → Get Records: Program Member, Pricing Term, Benefit Tier, existing Claim Aggregate
       → Run Expression Set (BRE): "RebateClaimValidationRules"  ← the native rules engine
       → Decision on BRE output Claim_Status
            System Processed → InvokeRebateClaimBRE → RebateClaimBREQueueable (writes the aggregate)
            System Failed / In Review → stamp status + message
      
Why a BRE (Business Rules Engine) instead of code. The rules — term active-date, product/member match, reference-vs-discount pricing, cap check, status assignment — are business policy that should be configurable by an admin in a visual Rule Builder, not buried in Apex. Salesforce ships this exact logic as the "Validate and Calculate Rebate Claim and Claim Aggregate" BRE template (industries_mfg_rebates).

The Math: Worked Example

Harvoni 90/400 mg — Three Claims
WAC at ship: $31,500 per unit
Reference price: $19,845 per unit
Unit chargeback: $31,500 − $19,845 = $11,655

Claim H1: 15 units × $11,655 = $174,825
Claim H2: 20 units × $11,655 = $233,100
Claim H3: 8 units × $11,655 = $93,240

Aggregate: 43 units / $501,165 (≤ cap 45 units ✓)
Reconciliation rule: The aggregate Total Claimed Amount ALWAYS equals the sum of CalculatedAmount across all System Processed claims linked to it. If it doesn't, something double-wrote. This is how Finance verifies the ledger is clean.

Claim Evidence Modal: MATH VERIFIED

Every processed claim shows a MATH VERIFIED badge in its evidence modal. This means: the chargeback calculation reconciles from the FROZEN WAC_At_Txn (the WAC at ship date, captured on the claim). An informational "WAC drift since transaction" note shows if the current WAC list price has changed — this is not an error, just awareness. The claim was paid correctly against the frozen WAC.

The evidence modal also shows DUAL STATUS: Validation status (Passed/Failed — did it pass the 13 EDI-844 gates?) vs Processing status (System Processed / System Failed / New — did the BRE accept it and write the aggregate?). Both must be clean for payment.

LIVE Claim Evidence Modal — MATH VERIFIED + Dual Status
w-03-claim-evidence-modal.png
What to look at: Green "MATH VERIFIED" badge, Validation=Passed, Processing=System Processed, frozen WAC_At_Txn reconciliation. The informational "WAC drift" note is awareness-only — the claim was paid correctly.

Three Critical Data Requirements

These are the three things that make a claim pass instead of fail. Each is a real failure we hit and fixed. Teach these explicitly — they're the hardest-won lessons.

Requirement Why It Matters Fix
Reference price must live on a Benefit Tier, not the term header The BRE step SetReferencePricefromSpecialPricingTermBenefit copies the benefit's ReferencePricePerUnit into the calc. With no benefit tier, the reference is 0 → CalculatedAmount = 0 Create a RebatePtnrSpclPrcTrmBnft with ReferencePricePerUnit = 19,845 (reference-price only — the platform forbids setting both a reference price AND a discount on the same tier)
The program member's Ship To Account must be set The BRE ship-to gate rejects otherwise: "The ship to account on the rebate claim is not valid." Set ShipToAccountId on the RebateProgramMember, consistent with the claim's ParticipatingAccountId
Aggregate lock: once created, member/term are locked Once a RebateMemberClaimAggregate exists for a member/product, the platform LOCKS the member (can't change Ship To) and the term (can't add benefit tiers): "…because a Rebate Member Claim Aggregate has already been generated." To fix setup after claims have run: delete the aggregate first, then edit the member/term, then reprocess claims
Persona 0: The System Foundation

Chargeback Admin — Configuration & Data

Before Sales can sell, the Admin builds the catalog. The Chargeback Admin configures the medications and buyer groups that every other persona relies on, and acts as the system administrator for data loading (bulk import of accounts, contracts, POS, claims). Everything Sales, Wholesalers, and Buyers touch was first set up here.

Role & Responsibilities: Internal system admin (permission set Chargeback_Admin). Owns: (1) the Medication Catalog — defines Product2 records, packaging SKUs, WAC + contract pricing; (2) Buyer Group setup — parent GPO accounts, group rosters, multi-GPO overlap; (3) data loading — Data Import Wizard / Data Loader for accounts, price authorizations, POS transactions, and claim batches; (4) org configuration — permission-set assignment, Experience Cloud publishing, FlexiPage activation. The Admin does NOT process claims or approve payments — that is Finance. The Admin makes the data exist.

A. Build a Medication (Medication Catalog Builder)

  1. Open the builder. App Launcher → Chargeback app → Medication Catalog Builder tab (LWC medicationCatalogBuilder).
  2. Pick or define the medication. In the "Medication" field, search an existing Product2 or type a new name (e.g., "Biktarvy 50/200/25 mg"). Set the therapeutic area (links Therapeutic_Area_Ref__c).
  3. Expand packaging options (SKUs). Click Add Packaging to create each sellable unit — e.g., 30-count bottle, 90-count bottle. Each becomes its own Product2 SKU.
  4. Set the per-each price + discount. Enter the WAC (list) price and a discount %. It cascades to every packaging option, with a per-option override field if a SKU differs.
  5. Generate. Click Generate — the tool creates the Product2 + PricebookEntry records. These medications now appear for Sales (on Opportunities/Quotes) and for Buyers (contracted-medications view).
Admin: Medication Catalog Builder
adm-01-medication-catalog-builder.png
What to look at: The medication, its expanded packaging SKUs, and the per-each price/discount that cascades to each option.

B. Build a Buyer Group (Buyer Group Builder — guided 3 steps)

  1. Open the builder. Chargeback app → Buyer Group Builder tab (LWC buyerGroupBuilder).
  2. Step 1 — Parent Account. Find or create the parent GPO/aggregation account (e.g., "Vizient", "Sentinel Health Alliance").
  3. Step 2 — Create the Buyer Group. Name it, set the dependent picklists (type/tier), and toggle Singleton if it is a one-member group. Creates the Buyer_Group__c.
  4. Step 3 — Add roster members. Add member hospital accounts. Members already in another group show an "also in other Buyer Groups" badge that surfaces multi-GPO overlap (the thing the Roster Conflict Workbench later resolves). Creates Buyer_Group_Member__c rows — these drive the Buyer Group portal's member count + shareback rollup.
Admin: Buyer Group Builder
adm-02-buyer-group-builder.png
What to look at: The 3-step flow and the multi-GPO overlap badges on roster members.

C. Onboarding Review & Data Loading

  1. Review onboarding. Buyer Group Onboarding Review (buyerGroupOnboardingReview) — validate a new group's roster + eligibility before it goes live.
  2. Bulk data load. As system admin, use Setup → Data Import Wizard (or Data Loader) to load Accounts, Contacts, Price Authorizations, POS (Resale_Transaction__c), and claim (RebateClaim) batches. Demo data is also created idempotently by seed classes (e.g., ChargebackSharebackDemoSeed, PrimaryGroupSurveySeed) run via anonymous Apex.
  3. Activate surfaces. Publish the Experience site and activate FlexiPage AppPages (Setup → Lightning App Builder) so persona home pages + charts render.
Admin: Buyer Group Onboarding Review
adm-03-buyer-group-onboarding.png
What to look at: Roster + eligibility validation before a group goes live.
Admin: Data Loading
adm-04-data-load.png
What to look at: The bulk-load path (Data Import Wizard / Data Loader) the admin uses to populate accounts, contracts, POS, and claims.
Persona 1: The Foundation

Sales Person — Contract Origination

THE HEAVIEST PERSONA. Sales originates the entire contract chain that every other persona depends on. Without Sales setting up Opportunity → Quote → Price Authorization → Rebate Program, wholesalers have no authorized contracts to claim against, and no payments can be made.

Role & Responsibilities: Internal (SDO-Sales). Creates the Opportunity for each deal → generates the Quote with medication line items + contract net price → assigns the Quote to a Buyer Group → produces the Price Authorization / Special Pricing Term (the contract wholesalers see) → which feeds the Rebate Program. The org has 30 Opportunities → 27 Quotes → 39 Price Authorizations → 118 Special Pricing Terms → 46 Rebate Programs.

The Full Flow: Opportunity to Rebate Program

  1. Create the Opportunity. App Launcher → Chargeback app → Opportunities tab → New. Fill: Account (the buyer/GPO), Amount (forecasted contract value), Close Date, Stage. This is the deal record that drives everything downstream.
  2. Add Medication line items. On the Opportunity → Related → Opportunity Products → Add Products. Select medications (Biktarvy, Harvoni, etc.) with quantities. The opportunityMedications LWC provides a visual picker.
  3. Generate the Quote. On the Opportunity → Generate Quote button (custom LWC: opportunityGenerateQuote). This creates a Quote record pre-populated with the Opportunity's medications as Quote Line Items, each with a contract net price (negotiated price per unit).
  4. Assign the Quote to a Buyer Group. On the Quote → Assign to Buyer Group button (quoteAssignBuyerGroup / quoteBuyerGroupSelector). Pick the GPO/aggregation entity (e.g., Vizient — Midwest Aggregation Group). This tells the system which buyers are eligible for this contract.
  5. Review the Quote Contract Viewer. On the Quote → Contract Viewer tab (quoteContractViewer LWC). Shows the medications, packaging (quoteMedicationPackaging), and line-level legibility (quoteLineLegibilityEditor — which specific buyers within the group can use this line).
  6. Generate the Price Authorization. From the Quote (or via automated flow), the system creates a Price_Authorization__c record with Price_Authorization_Line__c children — one per medication. This is the contract wholesalers see in their portal. It references the Quote but presents it in wholesaler-facing language.
  7. Create the Special Pricing Term (PSPT). The Price Authorization lines feed RebatePartnerSpecialPrcTrm records (one per medication). Each PSPT defines: ProductId, ProductQuantity (the cap), ReferencePricePerUnit (contract price), active dates. Critical: Each PSPT must have a RebatePtnrSpclPrcTrmBnft (Benefit Tier) with the reference price, or claims compute to $0.
  8. Confirm the Rebate Program is Active. The RebateProgram (Type=Ship and Debit) ties it all together: it holds the ProgramReferenceNumber (claims cite this), the date window (StartDate/EndDate + GracePeriodDayCount), and the RebateProgramMember (wholesaler enrollment with ShipToAccountId — must be set). Without an Active program, claims have nowhere to validate against.
LIVE Sales: Opportunity with Medications
s-01-opportunity.png
What to look at: Opportunity Amount, Close Date, Opportunity Products (medications). This is the deal that spawns the contract chain.
LIVE Sales: Quote with Buyer Group Assignment
s-02-quote.png
What to look at: Quote Line Items (medications + contract net price), Buyer Group assignment. The Quote is the negotiated contract.
LIVE Sales: Quote → Buyer Group Selector
s-03-quote-buyergroup.png
What to look at: Buyer Group picker modal. This assigns the Quote to a GPO, which defines which buyers can claim against it.
LIVE Sales: Price Authorization (Wholesaler View)
s-04-price-authorization.png
What to look at: Price Authorization with lines. This is the wholesaler-facing contract derived from the Quote.
LIVE Sales: Rebate Program (PSPT Active)
s-05-rebate-program.png
What to look at: Rebate Program Type=Ship and Debit, ProgramReferenceNumber, StartDate/EndDate, GracePeriod, active Special Pricing Terms. This is the live contract claims validate against.

Deep Dive: The Opportunity, Tab by Tab

Open a live Opportunity (e.g., Pacific Crest Health Network — 2026 Chargeback) in the Chargeback app. Different collaborators own different tabs — the flow is a hand-off:

  1. Details tabOwner: Sales. Account (the buyer/GPO), Amount (forecasted contract value), Close Date, Stage (Negotiation → Closed Won). Sets the deal frame.
    Opportunity → Details
    so-01-opportunity-details.png
    Look at: Stage + Amount + Account — the deal record everything hangs off.
  2. Medications tab (opportunityMedications) — Owner: Chargeback Admin builds the catalog + packaging SKUs; Sales selects. Add the medications in scope (e.g., AmBisome, Biktarvy 30-ct/90-ct) with quantities. Only medications that exist in the Admin's catalog appear here.
    Opportunity → Medications
    so-02-opportunity-medications.png
    Look at: The medication picker — sourced from the Admin's Medication Catalog.
  3. Generate Quote (opportunityGenerateQuote) — Owner: Sales. Click the action to spin up a Quote pre-loaded with the Opportunity's medications as Quote Line Items.
    Opportunity → Generate Quote
    so-03-opportunity-generate-quote.png
    Look at: The Generate Quote action that seeds the Quote from the Opp.
  4. Quotes tabOwner: Sales. The generated Quote appears in the related list; click into it to continue.
    Opportunity → Quotes
    so-04-opportunity-quotes-tab.png
    Look at: The Quote spawned from this Opportunity.

Deep Dive: The Quote, Tab by Tab

Inside the Quote, the hand-off continues:

  1. Quote Lines / Legible Editor (quoteLineLegibilityEditor) — Owner: Sales (pricing). Each medication line shows WAC vs contracted net price + margin %. Sales negotiates and sets the contracted price here (e.g., Biktarvy 30-ct $4,216 WAC → $3,869 contracted, 83.65% margin).
    Quote → Lines (Legible Editor)
    sq-01-quote-lines.png
    Look at: WAC vs contracted price + blended margin — the pricing Sales owns.
  2. Medication Packaging tab (quoteMedicationPackaging) — Owner: Sales, packaging from Admin's catalog. Confirm which packaging SKUs (30-ct / 90-ct) are on the contract.
    Quote → Medication Packaging
    sq-02-quote-packaging.png
    Look at: The packaging SKUs carried on the contract.
  3. Buyer Group Config tab (quoteAssignBuyerGroup / quoteBuyerGroupSelector) — Owner: Buyer-Group specialist / Sales ops. Assign the Quote to a Buyer Group (e.g., Premier — Acute Care Aggregation) and confirm the Roster Version + members via the "Change Buyer Group" action. This defines which buyers can claim against the contract.
    Quote → Buyer Group Config
    sq-03-quote-buyergroup.png
    Look at: Change Buyer Group, Roster Versions, Roster Members — sets claim eligibility.
  4. Contract Viewer (quoteContractViewer) — Owner: Sales (review) → feeds Price Authorization. The consolidated contract view that becomes the wholesaler-facing Price Authorization + the Special Pricing Terms.
    Quote → Contract Viewer
    sq-04-quote-contract-viewer.png
    Look at: The finished contract that produces the Price Authorization wholesalers see.
Who owns what: Admin builds the medication catalog + buyer groups first · Sales creates the Opportunity, adds medications, negotiates line pricing, generates the Quote · Buyer-Group specialist assigns the group + roster · the system then derives the Price Authorization → Special Pricing Term → Rebate Program that wholesalers claim against.
Tab / StepPrimary CollaboratorWhat they contribute
Opportunity → DetailsSales RepStage, account, close date, amount
Opportunity → MedicationsChargeback Admin (catalog) + Sales Rep (selection)Admin authors the catalog + packaging SKUs; Sales picks medications for the deal
Opportunity → Generate QuoteSales RepInitiates quote generation from opportunity products
Opportunity → QuotesSystem (auto)Standard related list showing the generated quote
Quote → Lines (Legible Editor)Sales Rep + Pricing AnalystSales reviews lines; Pricing Analyst adjusts contracted prices / margins
Quote → Medication PackagingChargeback AdminPackaging SKU config (NDC, UOM) from the catalog, surfaced here
Quote → Buyer Group ConfigBuyer-Group Specialist / Sales OpsAssigns GPO, selects roster version, manages membership
Quote → Contract ViewerContract Manager / Sales RepGenerates the customer contract documents from quote data

Manager Home + Backlog Charts

Sales managers track pipeline health and contract backlog. The Sales Manager Home (Lightning page) shows chargebackBacklogCharts (segmentation + backlog by status) and guidance. Use this to monitor which contracts are active, which are pending, and which have exceptions.

LIVE Sales: Manager Home + Backlog Charts
s-06-manager-home.png
What to look at: Backlog charts (by status), contract pipeline metrics. Managers use this to prioritize contract setup.
Key Takeaway: Sales is the enabler for all downstream activity. If wholesalers report "no matching program" or "invalid ship-to" errors, the root cause is almost always incomplete Sales setup: missing Rebate Program, missing Benefit Tier, or null ShipToAccountId on the member. Always verify the contract chain exists and is Active before troubleshooting claims.
Persona 2: Distributor

Wally Wholesaler — Cardinal Health

Portal user. Files chargeback claims + POS, tracks payouts against the contracts Sales set up. Key metric: $501,165 processed (Harvoni 90/400 28ct, qty 43).

Responsibilities: Submit POS transactions (evidence), file Rebate Claims (payment requests), track validation/processing status, view payouts. Pages: Claims Dashboard (/wholesaler-claims), My Payouts (/wholesaler-payouts), Submit POS (/wholesaler-pos), Upload Claims (/wholesaler-claims-upload), Price Authorizations (/wholesaler-agreements).
LIVEWholesaler: Home Navigation
w-01-home.png
What to look at: Portal tabs: My Claims, My Payouts, Submit POS, Price Authorizations.
LIVEWholesaler: Claims List (Dual Status)
w-02-claims-dual-status.png
What to look at: Validation status vs Processing status columns. Evidence modal link.
LIVEWholesaler: My Payouts ($501,165)
w-04-payouts.png
What to look at: Total payout amount, breakdown by medication. Reconciles to aggregate.
LIVEWholesaler: Submit POS
w-05-submit-pos.png
What to look at: POS form: buyer, medication, quantity, sale price, sale date. Evidence for claims.
LIVEWholesaler: Upload Claims Wizard
w-06-upload-wizard.png
What to look at: Batch CSV upload wizard. Bulk claim filing.
LIVEWholesaler: Price Authorizations
w-07-price-authorizations.png
What to look at: Active contracts (Price Authorizations) the wholesaler can claim against.
Persona 3: GPO Admin

Benny BuyerGroup — Sentinel Health Alliance

Portal user. GPO/aggregation admin; earns via shareback. Key metric: $73,744 across 9 members.

Responsibilities: Manages GPO member roster, tracks group-level shareback (≤3% admin fee for safe harbor), distributes to members. Pages: Group Home (/buyer-group-home), Roster (/buyer-group-roster), Contracts (/buyer-group-contracts), Group Savings (/buyer-group-savings), Shareback (/buyer-group-claims).
LIVEBuyer Group: Home ($73,744 / 9 members)
bg-01-home.png
What to look at: Group-level shareback total, member count. Dashboard.
LIVEBuyer Group: Roster
bg-02-roster.png
What to look at: Member list, eligibility status. Per-medication roster management.
LIVEBuyer Group: Contracts
bg-03-contracts.png
What to look at: Active contracts the group participates in. Medication-level detail.
LIVEBuyer Group: Savings
bg-04-savings.png
What to look at: Group-level chargeback savings summary. Rollup from members.
LIVEBuyer Group: Shareback Distribution
bg-05-shareback.png
What to look at: Admin fee (≤3%), pro-rata by volume. Member-level breakdown.
Persona 4: Hospital/Member

Barbara Buyer — St. Mary Regional

Portal user. Member hospital; consumes chargeback savings + shareback, signs LOA. Key metric: $52,000 accrued (60.47% pro-rata).

Responsibilities: Views own savings + shareback (LOA-gated: sign to unlock), manages Primary Group Survey (elects which GPO to use per medication). Pages: My Savings & Benefits (/buyer-savings), Shareback Purchases (/buyer-shareback), Primary Group & LOA survey (/buyer-actions).
LIVEBuyer: Savings & Benefits ($52,000)
b-01-savings.png
What to look at: Accrued shareback, chargeback savings summary. Pro-rata share (60.47%).
LIVEBuyer: Shareback Purchases
b-02-shareback.png
What to look at: Shareback line items by medication. Traced volume drives pro-rata.
LIVEBuyer: Primary Group Survey + LOA
b-03-survey-loa.png
What to look at: The Survey dropdown lists the buyer's own issued survey (PGS-00841, St. Mary); selecting it shows the per-medication GPO election. Completing it and signing the Letter of Authorization is the gate that unlocks the shareback benefit. (A portal-visibility fix ensures each buyer sees only their own survey here; if the dropdown appears empty, re-login to refresh permissions.)
Persona 5: AP Processing

Finance Person — Internal AP

Internal. AP processing, approval queues, payment runs. Key tool: Finance AP Home (Finance Claims Workbench + Segmentation & Backlog charts).

Responsibilities: Reviews approved claims, runs payment batches, resolves exceptions, monitors backlog. Verifies aggregate reconciliation (aggregate = Σ processed claims).
LIVEFinance: AP Home + Claims Workbench
f-01-ap-home.png
What to look at: Finance Claims Workbench (processed book: $501,165). Approval queues.
Finance: Backlog & Segmentation Charts
f-02-backlog-charts.png
Setup note: The chargebackBacklogCharts component lives on the Finance AP Home Lightning App page, which must be activated in Setup → Lightning App Builder before it appears (deploying the FlexiPage metadata alone does not activate it). Once active it shows claim segmentation (3 Processed / 36 Failed / 10 New) and backlog aging for exception monitoring.
Persona 6: Compliance/SOX

Audit Person — Internal Compliance

Internal. Monitors GPO admin-fee safe harbor (3% / 42 CFR §1001.952(j)), drills into claim calc detail to replicate. Key tool: Compliance SOX Home (GPO Fee Workbench + Finance Claims drill-down).

Responsibilities: Reviews GPO fee percentages (red flags if >3%), reconciles claim calculations, ensures proper authorization trails (Roster Change Logs tied to Primary Group Surveys).
LIVEAudit: GPO Fee Workbench (Safe Harbor)
a-01-gpo-fee-workbench.png
What to look at: GPO fee agreements, compliance status (green/yellow/red). ≥1 flagged Above Safe Harbor.
LIVEAudit: Claim Drill-Down (Math Reconciliation)
a-02-claim-drilldown.png
What to look at: Claim detail: WAC, Reference, Unit Chargeback, Qty, Total. Replicate the math.
Governance App

Prompt Validation — AI Governance

The guardrail layer. Prompt Validation governs the AI-assisted recommendations in the system (e.g., the Primary Group recommendation that tells a buyer which GPO yields the best chargeback). It scores each recommendation against declarative rules and produces a human-readable rationale + an ALLOW / REVIEW / BLOCK decision — so no automated pick goes out ungoverned.

Role & Responsibilities: Owned by Admin / Compliance. Configures the policies (Prompt_Validation__c + versioned Prompt_Validation_Version__c) that gate a target process (e.g., PrimaryGroupSurveyRecommend). Each policy defines rules (field/operator/score), score thresholds (Review ≥ 50, Block ≥ 85), and the rationale text surfaced to the user. Lives in the Charge Back app via two tabs.

Click-by-click: Prompt Validation Workbench

  1. Chargeback app → Prompt Validation Workbench tab (promptValidationWorkbench).
  2. Select a policy (e.g., the Primary-Group recommendation policy). Review its rules: each has a field, operator, score, result code, and a rationale string (e.g., "PRICE_GROUNDED — recommendation is grounded in the buyer's contracted net price").
  3. Check the thresholds: score ≥ 50 → REVIEW, ≥ 85 → BLOCK; below → ALLOW. This is what turns a raw AI pick into a governed decision.
  4. Test a scenario to see the computed score + which rule fired + the rationale that a user would see.
Prompt Validation Workbench
pv-01-workbench.png
Look at: The policy's rules, scores, and the rationale each produces.

Click-by-click: Prompt Validation Governance

  1. Chargeback app → Prompt Validation Governance tab (promptValidationGovernance).
  2. Review a policy's Governance State (Active/Draft) and its versions. Only one version is the Active Version at a time.
  3. Activate a new version or roll back — the prior version is retained (immutable audit trail). This is how Compliance controls what the AI is allowed to recommend, and proves it.
Prompt Validation Governance
pv-02-governance.png
Look at: Governance state, version history, and activation — the control + audit trail.
Internal Tools

Workbenches Reference

Internal LWC workbenches for exception management, roster admin, and reporting. Each has a specific purpose.

Workbench Purpose Who Uses It
Finance Claims Workbench Processed claim book ($501,165). Approval queues, payment runs. Finance AP
GPO Fee Workbench Safe harbor monitoring (≤3% admin fee / 42 CFR §1001.952(j)). Red flags if >3%. Audit/Compliance
Shareback Distribution Workbench Bulk admin-fee calculation + pro-rata member allocation. Accrued vs pending (LOA-gated). Finance, Buyer Group admins
Buyer Group Roster Workbench Per-medication eligible-buyer roster management. Add/remove members from PSPT rosters. Sales, Ops
Roster Conflict View Detects overlapping/conflicting roster memberships (same buyer on multiple PSPTs for same drug). Sales, Ops
POS Exception Workbench POS transactions that don't match any claim (orphans). Manual review queue. Ops, Finance
Rebate Claim Exception Workbench Claims with Validation=Failed or Processing=System Failed. Exception queue for human review. Ops, Finance
Claim Statement Workbench Generate claim statements (PDFs) for wholesalers. Batch export. Finance, Ops
chargebackBacklogCharts Segmentation + backlog by status (3 Processed / 36 Failed / 10 New). Dashboard component. Finance, Sales managers

Click-by-click: GPO Fee Workbench (author & approve a fee agreement)

  1. Chargeback app → Compliance SOX Home (or the GPO Fee Workbench tab).
  2. Click + New Agreement (top-right). Enter the GPO account, default fee %, and effective dates.
  3. Add Fee Schedule Lines — one per medication/scope. Each line's fee % is checked against the 3% safe-harbor cap: GREEN ≤ cap, YELLOW watch-zone, RED above cap.
  4. Use Approve / Reject / Recall / Activate to move the agreement through its lifecycle; Clone to New Version to revise an active one (keeps an immutable prior version).
  5. RED lines require review/remediation before activation — this is the SOX control.
GPO Fee Workbench — New Agreement
wbd-01-gpo-fee-new-agreement.png
Look at: The New Agreement / fee-schedule form with green/yellow/red risk per line.

Click-by-click: Shareback Distribution Workbench (compute a distribution)

  1. Chargeback app → Shareback Distribution Workbench tab.
  2. Pick a Buyer Group + period (e.g., Vizient — Midwest, Q2 2026). Click Compute (or open a Computed distribution).
  3. The engine runs: bulk rebate → deduct ≤3% GPO admin fee → pro-rata by traced 867 volume. Review the Net_To_Distribute__c and the per-member Shareback_Line__c rows.
  4. Each member line shows accrued (Active) vs shadow accrual (excluded / Pending-LOA — "sign to unlock"). Confirm reconciled=true.
LIVEWorkbench: Shareback Distribution
wbd-02-shareback-compute.png
Look at: Bulk → admin fee → pro-rata; member-level accrued vs pending (LOA-gated) breakdown.

Click-by-click: POS Exception Workbench (resolve an orphan POS)

  1. Chargeback app → POS Exception Workbench tab. Rows are POS in Raw status with a reason (Unvalidated POS / No ship-to identifier / Sale price not below WAC).
  2. Click a row → Review. Inspect the POS fields against the expected contract.
  3. Correct the ship-to / pricing, or reject the row. Valid rows route into the claim-matching pipeline.
LIVEWorkbench: POS Exception — Review
wbd-03-pos-exception-review.png
Look at: A row's Review panel + the exception reason to correct.

Click-by-click: Rebate Claim Exception Workbench (re-validate a failed claim)

  1. Chargeback app → Rebate Claim Exception Workbench tab. Rows are Error-held claims with a reason code (SS: Reference price not set · II: Customer unmapped · VV: chargeback math mismatch).
  2. Click a row → Find POS to locate the matching transaction, or fix the underlying data (set the reference price, map the customer).
  3. Click Re-validate — the claim re-runs the BRE. On success it moves to System Processed and joins the aggregate.
LIVEWorkbench: Claim Exception — Re-validate
wbd-04-claim-exception-revalidate.png
Look at: The reason code + Find POS / Re-validate actions on a held claim.

Click-by-click: Roster Conflict Workbench (resolve a multi-GPO overlap)

  1. Chargeback app → Roster Conflict View tab. Rows are Multi-GPO conflicts (same buyer + medication on competing buyer groups).
  2. Click a conflict → review the competing groups (Contracted vs Potential) and the winning designation.
  3. Confirm the primary designation (ties to the buyer's Primary Group Survey / LOA) to resolve which group's contract governs that buyer's claims.
LIVEWorkbench: Roster Conflict — Resolve
wbd-05-roster-conflict-resolve.png
Look at: Competing buyer groups for the same buyer+drug, and the resolve/designation action.
LIVEWorkbench: Shareback Distribution (list)
wb-01-shareback-distribution.png
What to look at: All distributions (Premier, Sentinel, Ridgeline, Vizient) with Computed/Void/Seeded statuses.
LIVEWorkbench: Roster Conflict Detection
wb-02-roster-conflict.png
What to look at: Conflicting roster memberships flagged. Resolution actions.
LIVEWorkbench: POS Exceptions
wb-03-pos-exception.png
What to look at: Orphan POS transactions (no matching claim). Manual review queue.
LIVEWorkbench: Claim Exceptions
wb-04-claim-exception.png
What to look at: Failed claims (36 System Failed + 10 New). Exception reasons, resolution path.
Reference Matrix

Roles & Responsibilities

Quick reference: who owns what, who can do what, who can't do what, and key screens per persona.

Persona Owns Can Do Can't Do Key Screens
Chargeback Admin (Internal) Medication catalog, Buyer Group config, data loading, org setup Build medications + packaging, create buyer groups + rosters, bulk-load accounts/contracts/POS/claims, assign permsets, publish site, activate pages Cannot file claims or process payments; does not negotiate contracts (that is Sales) Medication Catalog Builder, Buyer Group Builder, Onboarding Review, Data Import Wizard, Prompt Validation Governance
Sales Person (Internal) Contract origination: Opp → Quote → PA → PSPT → Rebate Program Create opportunities, generate quotes, assign to buyer groups, create price authorizations, activate programs Cannot file claims, cannot process payments, cannot see portal views Opportunities, Quotes, Price Authorizations, Rebate Programs, Manager Home
Wally Wholesaler (Portal: Cardinal Health) Claims + POS submission, payout tracking Submit POS, file claims (single/batch), view price authorizations, track payouts Cannot see other wholesalers' data, cannot edit contracts, cannot approve claims My Claims, My Payouts, Submit POS, Upload Claims, Price Authorizations
Benny BuyerGroup (Portal: Sentinel) GPO admin, shareback distribution View group savings, manage roster, distribute shareback (≤3% admin fee), view contracts Cannot file claims, cannot see other GPOs' data, cannot edit member savings directly Group Home, Roster, Contracts, Group Savings, Shareback
Barbara Buyer (Portal: St. Mary) Consumes savings + shareback, signs LOA View own savings/shareback, complete Primary Group Survey (elect GPO per medication), sign LOA to unlock shareback Cannot see other buyers' data, cannot edit prices, cannot file claims My Savings & Benefits, Shareback Purchases, Primary Group & LOA
Finance Person (Internal) AP processing, payment runs Review claims workbench, approve/reject claims, run payment batches, resolve exceptions, monitor backlog Cannot edit contracts, cannot file claims on behalf of wholesalers, cannot override BRE decisions (must fix root cause) Finance AP Home, Finance Claims Workbench, Backlog Charts
Audit Person (Internal) Compliance/SOX monitoring Review GPO fee safe harbor (3%), drill into claim calcs to replicate, audit roster authorization trails Cannot edit claims, cannot process payments, cannot override compliance flags (must escalate) Compliance SOX Home, GPO Fee Workbench, Finance Claims Drill-Down
Common Issues

Troubleshooting

Real failures and their fixes. Each of these was encountered and resolved during development.

Symptom Real Cause Fix
Claim → CalculatedAmount = 0 but processed No benefit tier → reference price 0 Create a RebatePtnrSpclPrcTrmBnft with ReferencePricePerUnit
Claim → "The ship to account on the rebate claim is not valid." Program member ShipToAccountId null / ≠ claim's ParticipatingAccountId Set member Ship To (delete aggregate first if locked)
"…because a Rebate Member Claim Aggregate has already been generated." Managed-pkg lock on member/term after an aggregate exists Delete the aggregate, make the edit, reprocess
Aggregate = exactly 2× the claim total Async writer double-enqueued / added instead of set Single-enqueue guard + reconstruct-from-claims (SET not ADD)
Flow throws "An unhandled fault has occurred" Missing fault connector hides the real error Add a fault path that writes $Flow.FaultMessage onto the claim
SOQL/Apex says a just-deployed field "No such column" Field-Level Security not granted to the running user (metadata deploy grants none) Deploy + assign a permission set granting FLS
Rule Builder shows the rebate template but "Executable = false" It's a template, not the executable Use this Template → Activate; then wire into the flow
Claim → "No matching RebateProgramMember" Claim's program ref has no enrolled member (orphan claim) Verify Sales created the Rebate Program + enrolled the wholesaler as a member
Claim → "proposed total claimed quantity > product quantity of the special pricing term" Cap breach: aggregate qty + this claim's qty > PSPT ProductQuantity Reject claim or increase cap (delete aggregate first if locked)
Claim → "sale price per unit ≠ sale price per unit of the special pricing term" Price mismatch: claim's SalePricePerUnit (WAC) ≠ PSPT reference + expected spread Verify correct reference price on Benefit Tier; check if WAC changed
Terms & Definitions

Glossary

Key terms used throughout the demo. Alphabetical reference.

Term Definition
Chargeback The difference between WAC (list price) and the contracted price. The wholesaler bills this back to the manufacturer.
Ship & Debit (S&D) The wholesaler ships at contract price and debits the manufacturer for the spread. A rebate type.
WAC (Wholesale Acquisition Cost) List price for a drug. The price wholesalers stock at, before any contract discounts.
Reference Price The contracted net price per unit. Chargeback = WAC − Reference.
POS (Point of Sale / Resale Transaction) The invoice showing what the buyer actually paid. Evidence for a claim.
Rebate Claim The wholesaler's request for chargeback dollars, referencing a POS.
PSPT (RebatePartnerSpecialPrcTrm) Special Pricing Term — the per-medication contract line defining cap, reference price, dates.
Benefit Tier (RebatePtnrSpclPrcTrmBnft) Pricing tier under a PSPT. Critical: BRE reads reference price from here, NOT the PSPT header.
Aggregate (RebateMemberClaimAggregate) Running total of claimed qty/$ per (member × product). Enforces cap, drives payout. Once created, locks member/term.
Shareback Bulk rebate → GPO admin fee (≤3%) → pro-rata by traced volume to members. Accrued vs pending (LOA-gated).
GPO (Group Purchasing Organization) Buyer aggregation entity (e.g., Vizient, Premier). Negotiates contracts on behalf of member hospitals.
LOA (Letter of Authorization) Member signature gate for shareback unlock. Sign to receive accrued shareback.
Primary Group Survey (PGS) Buyer's election of which GPO to use per medication. Drives PSPT roster membership (eligibility).
PSPT Roster Per-medication eligible-buyer roster on a term. Built from PGS elections, forward-dated, immutable audit.
BRE (Business Rules Engine) Visual rule builder for business logic. Cloned from "Validate and Calculate Rebate Claim and Claim Aggregate" template.
Safe Harbor (3% / 42 CFR §1001.952(j)) Federal regulation: GPO admin fees ≤3% of purchase price to avoid Anti-Kickback Statute violations.
Validation Status Did the claim pass the 13 EDI-844 gates? (Passed/Failed) — orthogonal to Processing Status.
Processing Status Did the BRE accept it and write the aggregate? (System Processed / System Failed / New).
Price Authorization Wholesaler-facing contract derived from Quote. Wholesalers reference this when filing claims.
EDI 844 / 849 Electronic Data Interchange standards for Product Transfer (844) and Response (849) in pharma chargebacks.