spec odapm/v1
The model
Build a rate sheet for anyone. Keep it current forever. Every number says how it was built.
What it is
A rate sheet you own. Named SKUs for the work you sell. Prices you can defend.
- Scope
- Name the work. Unitize it. Reuse it. That list is yours, not a vendor's code set.
- Pricing
- Public data sets the cost floor. You set markup and disclose it. Every non-zero price carries a
basis. No basis, no price.
Why this exists
Shops guess. They copy a competitor. They buy a list they are not allowed to see inside. Then the number gets challenged and there is nothing to stand on. That is not a market. That is a black box with a letterhead.
This model is the equation below, plus a basis on every non-zero price. Public data sets the cost floor. You set markup and you disclose it. That is the whole point.
How it gets used
Write a model.json. Use the spec, the prompts, or any program that emits odapm/v1 — bring your own model; mileage varies. Open it on the rate sheet. This page checks the file in your browser and lists every SKU and rate. Nothing is uploaded. Nothing is saved. When the market moves, you re-index. You do not start over.
A shop can run on that file. One of them lives at odapm.ai. The standard does not require that shop, and that shop does not own the standard.
The math
Unit price
unit price = (labor hours × local labor cost)
+ (material qty × material cost)
+ equipment share
+ markup
Conformance
A valid model has meta.schema of odapm/v1, items that match the scope and pricing schemas, and a basis on every non-zero price. Structure without a basis is not conformant. No app owns the standard.
Owned by no one
The standard is free, open, and stays that way. Tools are MIT. Spec and data are CC-BY-4.0. The methodology is public. A shop that uses this model is a consumer of it. It does not get to become the owner.