Milestone Revenue Recognition Products

V4 product endpoints now support revenue_pattern: PROGRESS with a ONE_TIME price and a
progress_plan_template whose measure is MILESTONES, for organizations with milestone
revenue recognition enabled. Other progress measures are not yet supported.

Define milestone keys, names, ordering, allocation values, and optional forecast offsets
such as {"count": 1, "unit": "MONTHS"}. Offset counts are non-negative integers; units are DAYS,
MONTHS, or YEARS. Sequences must be positive JSON integers; fractional numbers and strings are rejected.
Both allocation modes use non-negative decimal strings: at most 4 decimal places for PERCENTAGE and
10 for AMOUNT, including trailing zeros; excess precision is rejected rather than rounded.
PERCENTAGE allocations total exactly 100;
AMOUNT allocations are proportional product-template weights, not fixed contract obligations.
Responses include server-generated IDs. Keys cannot be UUIDs.