Curated Agent Readiness Scenarios

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