FOCUS 1.3 Cost and Usage export primitives for Costroid.
As of Milestone 6a, FocusRecord carries the full FOCUS 1.3 Cost and Usage
column set so the official validator's conditional dependency checks resolve.
Columns Costroid cannot derive from local data are emitted null where the spec
permits; the few that a not-null cascade forces are populated with the
spec-correct categorical value or, for billing-source identifiers with no local
value, a clearly-non-billing placeholder (documented as a deviation).
Numeric columns serialize as genuine numbers in JSON and as decimal-pointed values in CSV (so the validator's DECIMAL/DOUBLE/FLOAT type checks pass even when every value in a column is whole).
As of Milestone 6b, pricing is represented per token: PricingUnit = "tokens",
PricingQuantity is the token count, and the unit-price columns are per-token
rates (the per-1M catalog rate ÷ 1_000_000). Cost is unchanged — cost = tokens × rate is invariant — only the representation changed. On rows with no priced
SKU (SkuPriceId null), FOCUS 1.3 requires ConsumedQuantity / PricingQuantity
/ PricingUnit / PricingCategory to be null, so they are; the raw token count
still travels on the always-populated x_ConsumedTokens custom column for the
aggregation engine. One genuine validator-ruleset defect remains documented (the
ListCost/ContractedCost = unit-price × quantity check, which the validator
evaluates in zero-tolerance float64 even though Costroid's decimal arithmetic is
exact); see scripts/focus_known_failures.txt.