Properties and definitions
| Property / definition | Required | Type / reference | Description / constraints |
|---|---|---|---|
| pack_id | yes | common.json#/$defs/packId | {“$ref”:“common.json#/$defs/packId”} |
| pack_version | yes | common.json#/$defs/packVersion | {“$ref”:“common.json#/$defs/packVersion”} |
| id | no | string | {“type”:“string”,“minLength”:1} |
| artist_review_mode | no | common.json#/$defs/reviewMode | {“$ref”:“common.json#/$defs/reviewMode”} |
| factors | yes | array | {“type”:“array”,“items”:{“type”:“object”,“properties”:{“id”:{“type”:“string”,“minLength”:1},“enabled”:{“type”:“boolean”},“weight”:{“type”:“number”},“value”:{},“mode”:{“type”:“string”,“minLength”:1},“provenance”:{“type”:“string”,“minLength”:1}},“required”:[“id”,“enabled”],“additionalProperties”:false}} |
| rates | yes | object | {“type”:“object”,“additionalProperties”:true} |
| minimums | yes | object | {“type”:“object”,“additionalProperties”:true} |
| rounding | yes | object | {“type”:“object”,“properties”:{“increment”:{“type”:“number”,“exclusiveMinimum”:0},“mode”:{“enum”:[“nearest”,“up”,“down”]}},“required”:[“increment”,“mode”],“additionalProperties”:false} |
| deposit_policy | yes | object | {“type”:“object”,“properties”:{“mode”:{“type”:“string”,“minLength”:1},“amount”:{“type”:“number”,“minimum”:0},“percentage”:{“type”:“number”,“minimum”:0,“maximum”:1},“basis”:{“type”:“string”,“minLength”:1},“rounding_increment”:{“type”:[“number”,“null”],“exclusiveMinimum”:0},“policies”:{“type”:“array”,“minItems”:1,“items”:{“type”:“string”,“minLength”:1}}},“required”:[“mode”],“additionalProperties”:false} |
| expiry_days | yes | common.json#/$defs/expiryDays | {“$ref”:“common.json#/$defs/expiryDays”} |
| provenance | no | string | {“type”:“string”,“minLength”:1} |
| keyword_match | no | enum | {“enum”:[“substring”,“whole_word”]} |
Full JSON
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://uqp.dev/spec/schemas/pricing-model.json",
"title": "PricingModel",
"type": "object",
"properties": {
"pack_id": {
"$ref": "common.json#/$defs/packId"
},
"pack_version": {
"$ref": "common.json#/$defs/packVersion"
},
"id": {
"type": "string",
"minLength": 1
},
"artist_review_mode": {
"$ref": "common.json#/$defs/reviewMode"
},
"factors": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"enabled": {
"type": "boolean"
},
"weight": {
"type": "number"
},
"value": {},
"mode": {
"type": "string",
"minLength": 1
},
"provenance": {
"type": "string",
"minLength": 1
}
},
"required": [
"id",
"enabled"
],
"additionalProperties": false
}
},
"rates": {
"type": "object",
"additionalProperties": true
},
"minimums": {
"type": "object",
"additionalProperties": true
},
"rounding": {
"type": "object",
"properties": {
"increment": {
"type": "number",
"exclusiveMinimum": 0
},
"mode": {
"enum": [
"nearest",
"up",
"down"
]
}
},
"required": [
"increment",
"mode"
],
"additionalProperties": false
},
"deposit_policy": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"minLength": 1
},
"amount": {
"type": "number",
"minimum": 0
},
"percentage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"basis": {
"type": "string",
"minLength": 1
},
"rounding_increment": {
"type": [
"number",
"null"
],
"exclusiveMinimum": 0
},
"policies": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"minLength": 1
}
}
},
"required": [
"mode"
],
"additionalProperties": false
},
"expiry_days": {
"$ref": "common.json#/$defs/expiryDays"
},
"provenance": {
"type": "string",
"minLength": 1
},
"keyword_match": {
"enum": [
"substring",
"whole_word"
]
}
},
"required": [
"pack_id",
"pack_version",
"factors",
"rates",
"minimums",
"rounding",
"deposit_policy",
"expiry_days"
],
"additionalProperties": false
}
Reference example
Tattoo pack 0.1.0 at a fixed evaluation time. Example data, not real prices. The Quote represents synthetic artist review, not evaluator approval.{
"pack_id": "tattoo",
"pack_version": "0.1.0",
"provenance": "tattoo.co current constant, unvalidated",
"id": "tattoo-formula-a-example",
"artist_review_mode": "post_price",
"factors": [
{
"id": "size",
"enabled": true,
"provenance": "tattoo.co current constant, unvalidated",
"value": {
"dimensions": {
"xs": 1.5,
"sm": 3,
"md": 5,
"lg": 8,
"xl": 12,
"unsure": 5
},
"area_per_hour": 12,
"minimum_hours": 1,
"unknown_base_hours": 4
},
"mode": "no_estimate"
},
{
"id": "placement",
"enabled": true,
"provenance": "tattoo.co current constant, unvalidated",
"mode": "additive_0_5h",
"value": {
"additive_hours": 0.5,
"multiplier": 1.2,
"tricky": [
"Wrist",
"Hand",
"Neck",
"Foot",
"Lower Leg"
],
"match": {
"additive_0_5h": "substring",
"multiplier_1_2": "substring_ci"
}
}
},
{
"id": "complexity",
"enabled": true,
"provenance": "tattoo.co current constant, unvalidated",
"mode": "asked",
"value": {
"simple": 1,
"moderate": 1.15,
"detailed": 1.35,
"realism": 1.6
}
},
{
"id": "style",
"enabled": true,
"provenance": "tattoo.co current constant, unvalidated",
"mode": "asked",
"value": {
"blackgrey": 1,
"popcolor": 1.15,
"color": 1.3
}
},
{
"id": "wraparound",
"enabled": false,
"provenance": "tattoo.co current constant, unvalidated",
"mode": "wraparound_multiplier_1_3",
"weight": 1.3
},
{
"id": "tier",
"enabled": true,
"provenance": "tattoo.co current constant, unvalidated",
"mode": "fallback_standard"
},
{
"id": "deposit",
"enabled": true,
"provenance": "tattoo.co current constant, unvalidated",
"mode": "pct_of_low_30",
"value": {
"low_percentage": 0.3,
"total_percentage": 0.5,
"low_increment": 25,
"total_increment": 50,
"piece_increment": 25
}
},
{
"id": "sessions",
"enabled": false,
"provenance": "tattoo.co current constant, unvalidated",
"mode": "not_yet_modeled"
},
{
"id": "cover_up",
"enabled": false,
"provenance": "tattoo.co current constant, unvalidated",
"mode": "not_yet_modeled"
},
{
"id": "multi_area",
"enabled": false,
"provenance": "tattoo.co current constant, unvalidated",
"mode": "not_yet_modeled"
},
{
"id": "city_rate",
"enabled": false,
"provenance": "tattoo.co current constant, unvalidated",
"mode": "not_yet_modeled"
},
{
"id": "non_usd",
"enabled": false,
"provenance": "tattoo.co current constant, unvalidated",
"mode": "not_yet_modeled"
}
],
"rates": {
"currency": "USD",
"pricing_mode": "hourly",
"tiers": {
"apprentice": 120,
"standard": 200,
"senior": 300
},
"range_band": {
"low": 0.85,
"high": 1.15
},
"piece_high_multiplier": 1.5,
"provenance": "tattoo.co current constant, unvalidated"
},
"minimums": {
"piece_deposit": 100,
"provenance": "tattoo.co current constant, unvalidated"
},
"rounding": {
"increment": 50,
"mode": "nearest"
},
"deposit_policy": {
"mode": "pct_of_low_30",
"percentage": 0.3
},
"expiry_days": 7,
"keyword_match": "substring"
}