Curated agent readiness scenarios check whether your data can run a specific Pricefx curated agent. There is one scenario for each agent. You select them in the Add validation scenarios dialog of the Data Validation Tool, like any other scenario.
Each scenario:
-
Uses the Pricefx standard data model, version 0.0.4.
-
Marks the fields that the agent needs as mandatory in the Data mapping step.
-
Runs the global checks that apply to its agent, and the checks of its agent.
-
Asks for a file for each entity it checks: transactions, and customers or products where the agent needs them.
Severity
|
Severity |
Effect |
|---|---|
|
Blocking |
A failed check sets the status of the run to error. |
|
Standard |
A failed check lowers the score of its category. A low score can set the status of the run to warning or error. |
|
Informational |
The result is for information only. It never blocks you from continuing. |
Global Checks
The scenarios share these global checks. A scenario runs a global check only when its agent needs the fields that the check uses. The exceptions are Currency code format and No duplicate transaction lines: every scenario includes them, and each applies only when you map currency or transactionId. The section of each agent lists the global checks it does not run.
|
Check |
What it checks |
Severity |
|---|---|---|
|
Required fields filled |
Every field this agent needs is filled on every row. |
Blocking |
|
Amounts are line totals |
Money fields are extended by quantity, not per unit. Runs only when quantity is required. |
Informational |
|
Currency code format |
currency is a three-letter ISO 4217 code; n/a when currency is not mapped. |
Blocking |
|
No duplicate transaction lines |
transactionId appears once; n/a when transactionId is not mapped. |
Blocking |
|
No duplicate master data keys |
customerId / productId appear once in their master file. |
Blocking |
|
Transactions link to master data |
Every transaction customerId / productId exists in the master file. |
Blocking |
|
No leading or trailing spaces in keys |
Key and dimension values have no stray spaces; series are joined on them. |
Standard |
|
List price not below invoice price |
On sale lines, localListPrice is greater than or equal to invoicePrice. Runs only when both fields are required. |
Standard (Informational for Discount Creep and Price Realization) |
|
At least N months of history |
pricingDate spans the history window that the agent needs. The window of each agent is listed below. |
Blocking |
At least N months of history checks only the date range of the transaction file, not how recent the data is. A file that ended months ago passes this check, but the agent can find little or no data in its current period. The checks that compare two periods count back from the latest pricingDate in the file. The agent counts back from its own reference date or from today.
In addition, the Data Validation Tool checks the data type of every mapped number or date field. A text value in a number field, or an invalid date, is reported by this type check, not by Required fields filled.
Agents
Discount Creep
Scenario: Discount Creep agent readiness. Checks that transaction and customer data can run the Discount Creep agent (incremental discount increases over time).
History needed: at least 12 months.
Global checks not run: none.
Required fields:
-
Transactions:
customerId,grossMargin,invoicePrice,localListPrice,pricingDate,quantity -
Customers:
customerId,customerName,customerSegment
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
Positive invoice and list price on sales |
Sale lines (quantity > 0) have invoicePrice > 0 and localListPrice > 0. |
Standard |
|
Customer segment filled |
customerSegment is not empty (top grouping level). |
Blocking |
|
Same customers in both comparison periods |
At least one customer has lines in the last 3 months and in months 9-12 back, counted from the latest pricingDate. Only lines with quantity, invoicePrice and localListPrice > 0 count. |
Standard |
Price Realization
Scenario: Price Realization agent readiness. Checks that transaction, customer and product data can run the Price Realization agent (realized vs reference price).
History needed: at least 3 months.
Global checks not run: none.
Required fields:
-
Transactions:
customerId,invoicePrice,localListPrice,pricingDate,productId,quantity -
Customers:
customerId,customerName,region -
Products:
productId,productName
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
No zero-value transactions |
No line has invoicePrice = 0 or quantity = 0 (the agent drops zero-value lines; a zero quantity with an amount distorts the per-unit prices). |
Standard |
|
Region filled |
region is not empty (the benchmark is the regional list price). |
Blocking |
|
Positive list price on sales |
Sale lines have localListPrice > 0 (realization = price / list price). |
Blocking |
Margin Shortfall
Scenario: Margin Shortfall agent readiness. Checks that transaction, customer and product data can run the Margin Shortfall agent (high revenue, low margin customers).
History needed: at least 3 months.
Global checks not run: List price not below invoice price.
Required fields:
-
Transactions:
customerId,grossMargin,invoicePrice,pricingDate,quantity,productId -
Customers:
customerId,customerName,customerSegment -
Products:
productId,productGroup
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
Positive invoice price on sales |
Sale lines have invoicePrice > 0 (grossMargin and productGroup non-empty are covered by Required fields filled). |
Standard |
|
Customer segment filled |
customerSegment is not empty (used as a grouping level). |
Standard |
Margin Inconsistency
Scenario: Margin Inconsistency agent readiness. Checks that transaction and product data can run the Margin Inconsistency agent (products priced inconsistently within their group).
History needed: at least 3 months.
Global checks not run: List price not below invoice price.
Required fields:
-
Transactions:
grossMargin,invoicePrice,pricingDate,productId,quantity -
Products:
productId,productGroup,productName
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
Quantity above minimum on sales |
Sale lines have quantity > 0.1. |
Standard |
|
Enough products per product group |
Each productGroup has at least 5 products. |
Informational |
Unprofitable Long-Tail Customer
Scenario: Unprofitable Long-Tail Customer agent readiness. Checks that transaction, customer and product data can run the Unprofitable Long-Tail Customer agent.
History needed: at least 3 months.
Global checks not run: List price not below invoice price.
Required fields:
-
Transactions:
customerId,grossMargin,invoicePrice,pricingDate,quantity,productId -
Customers:
customerId,customerName,customerSegment -
Products:
productId,productGroup
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
Positive invoice price on sales |
Sale lines have invoicePrice > 0 (grossMargin and productGroup non-empty are covered by Required fields filled). |
Standard |
|
Enough customers per segment |
Each customerSegment has at least 5 customers. |
Informational |
Unprofitable Account
Scenario: Unprofitable Account agent readiness. Checks that transaction and customer data can run the Unprofitable Account agent.
History needed: at least 12 months.
Global checks not run: Amounts are line totals, List price not below invoice price.
Required fields:
-
Transactions:
customerId,grossMargin,invoicePrice,pricingDate -
Customers:
customerId,customerName,customerSegment
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
No zero-value transactions |
No line has invoicePrice = 0. |
Standard |
Unprofitable Product
Scenario: Unprofitable Product agent readiness. Checks that transaction and product data can run the Unprofitable Product agent.
History needed: at least 3 months.
Global checks not run: none.
Required fields:
-
Transactions:
grossMargin,invoicePrice,localListPrice,pricingDate,productId,quantity -
Products:
productId,productGroup,productName
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
No zero-value transactions |
No line has invoicePrice = 0. |
Standard |
Freight Cost Distortion
Scenario: Freight Cost Distortion agent readiness. Checks that transaction and product data can run the Freight Cost Distortion agent.
History needed: at least 3 months.
Global checks not run: Amounts are line totals, List price not below invoice price.
Required fields:
-
Transactions:
freightCost,grossMargin,invoicePrice,pricingDate,productId -
Products:
productId,productGroup,productName
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
Positive invoice price |
No line has invoicePrice <= 0 (the agent keeps only lines with a positive invoice price). |
Standard |
|
No zero gross margin |
No line has grossMargin = 0 (freight-to-margin ratio). |
Standard |
Regional Margin Variance
Scenario: Regional Margin Variance agent readiness. Checks that transaction, customer and product data can run the Regional Margin Variance agent.
History needed: at least 3 months.
Global checks not run: Amounts are line totals, List price not below invoice price.
Required fields:
-
Transactions:
customerId,grossMargin,invoicePrice,pricingDate,productId -
Customers:
customerId,customerName,region -
Products:
productId,productGroup
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
Positive invoice price |
No line has invoicePrice <= 0 (the agent keeps only lines with a positive invoice price). |
Standard |
|
Region filled |
region is not empty (join key). |
Blocking |
|
Product group filled |
productGroup is not empty (join key). |
Blocking |
Freight Margin
Scenario: Freight Margin agent readiness. Checks that transaction, customer and product data can run the Freight Margin (Freight Recovery) agent.
History needed: at least 3 months.
Global checks not run: Amounts are line totals, List price not below invoice price.
Required fields:
-
Transactions:
customerId,freightCharge,freightCost,invoicePrice,pricingDate,productId -
Customers:
customerId,customerName -
Products:
productId,productGroup
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
Positive freight cost |
No line has freightCost <= 0 (recovery % is computed on it). |
Standard |
Product Freight
Scenario: Product Freight agent readiness. Checks that transaction, customer and product data can run the Product Freight agent.
History needed: at least 3 months.
Global checks not run: Amounts are line totals, List price not below invoice price.
Required fields:
-
Transactions:
freightCharge,freightCost,invoicePrice,pricingDate,productId,customerId -
Customers:
customerId,country -
Products:
productId,productGroup,productName
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
Country filled |
country is not empty (4th grouping level). |
Blocking |
Cost Pass-Through
Scenario: Cost Pass-Through agent readiness. Checks that transaction, customer and product data can run the Cost Pass-Through agent.
History needed: at least 2 months.
Global checks not run: List price not below invoice price.
Required fields:
-
Transactions:
costs,customerId,grossMargin,invoicePrice,pricingDate,productId,quantity -
Customers:
customerId,customerName -
Products:
productId,productName
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
Minimum price and quantity on sales |
Sale lines have invoicePrice > 0.01 and quantity > 0.01. |
Standard |
|
Same product x customer pairs in both 30-day windows |
At least one productId x customerId pair has lines in the last month and in the month before. Only lines with invoicePrice and quantity > 0.01 count. The check uses calendar months in place of the two 30-day windows of the agent. |
Blocking |
Per Unit Cost Pass-Through
Scenario: Per Unit Cost Pass-Through agent readiness. Checks that transaction, customer and product data can run the Per Unit Cost Pass-Through agent.
History needed: at least 2 months.
Global checks not run: List price not below invoice price.
Required fields:
-
Transactions:
costs,customerId,grossMargin,invoicePrice,pricingDate,productId,quantity -
Customers:
customerId,customerName -
Products:
productId,productName
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
Minimum price and quantity on sales |
Sale lines have invoicePrice > 0.01 and quantity > 0.01. |
Standard |
|
Same product x customer pairs in both 30-day windows |
At least one productId x customerId pair has lines in the last month and in the month before. Only lines with invoicePrice and quantity > 0.01 count. The check uses calendar months in place of the two 30-day windows of the agent. |
Blocking |
|
Gross margin reconciles with invoice price minus costs |
grossMargin = invoicePrice - costs on every line (tolerance 0.01). |
Standard |
Product Cost Pass-Through
Scenario: Product Cost Pass-Through agent readiness. Checks that transaction and product data can run the Product Cost Pass-Through agent.
History needed: at least 2 months.
Global checks not run: none.
Required fields:
-
Transactions:
costs,grossMargin,invoicePrice,localListPrice,pricingDate,productId,quantity -
Products:
productId,productGroup,productName
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
Minimum price and quantity on sales |
Sale lines have invoicePrice > 0.01 and quantity > 0.01. |
Standard |
|
Same products in both 30-day windows |
At least one product has lines in the last month and in the month before. Only lines with invoicePrice and quantity > 0.01 count. The check uses calendar months in place of the two 30-day windows of the agent. |
Blocking |
Product Cost Misalignment
Scenario: Product Cost Misalignment agent readiness. Checks that transaction, customer and product data can run the Product Cost Misalignment agent.
History needed: at least 12 months.
Global checks not run: none.
Required fields:
-
Transactions:
costs,grossMargin,invoicePrice,localListPrice,pricingDate,productId,quantity,customerId -
Customers:
customerId,country -
Products:
productId,productName
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
Positive cost, price and quantity on sales |
Sale lines have costs > 0 and invoicePrice > 0 (quantity > 0 defines a sale line). |
Standard |
|
Same products in both comparison windows |
At least one product has lines in the last 3 months and in months 9-12 back. Only lines with costs, invoicePrice and quantity > 0 count. The agent pairs each product with a country, but the check uses the product only, because country is in the customer file. |
Blocking |
|
Country filled |
country is not empty (join key). |
Blocking |
Return Anomaly
Scenario: Return Anomaly agent readiness. Checks that transaction and product data can run the Return Anomaly agent.
History needed: at least 3 months.
Global checks not run: List price not below invoice price.
Required fields:
-
Transactions:
grossMargin,invoicePrice,pricingDate,productId,quantity -
Products:
productId,productGroup,productName
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
Returns recorded as negative quantity |
At least one line has quantity < 0 (returns are negative-quantity lines; there is no return flag). |
Blocking |
High Buyback Customers
Scenario: High Buyback Customers agent readiness. Checks that transaction, customer and product data can run the High Buyback Customers agent.
History needed: at least 3 months.
Global checks not run: List price not below invoice price.
Required fields:
-
Transactions:
customerId,grossMargin,invoicePrice,pricingDate,quantity,productId -
Customers:
customerId,customerName -
Products:
productId,productGroup
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
Returns recorded as negative quantity |
At least one line has quantity < 0. |
Blocking |
|
Returns carry negative amounts |
Return lines (quantity < 0) have invoicePrice < 0. |
Blocking |
Product Group Margin Variance
Scenario: Product Group Margin Variance agent readiness. Checks that transaction and product data can run the Product Group Margin Variance agent.
History needed: at least 3 months.
Global checks not run: Amounts are line totals, List price not below invoice price.
Required fields:
-
Transactions:
grossMargin,invoicePrice,pricingDate,productId -
Products:
productId,productGroup,productName
|
Agent check |
What it checks |
Severity |
|---|---|---|
|
Positive invoice price |
No line has invoicePrice <= 0 (the agent keeps only lines with a positive invoice price). |
Standard |
|
Enough products per product group |
Each productGroup has at least 5 products. |
Informational |