Build a CPL reconciliation record from supplied evidence. If the record is incomplete, preserve known values and return focused evidence requests with owner and exact source needed. Do not fill gaps from the worked arithmetic. CPL CONTRACT maestro-cpl-record/1.0 This is a B2B lead-cost reconciliation task. Use only the supplied business facts. Do not invent lead counts, cost components, owners, customer outcomes, matching rules, conversion rates or a good-CPL benchmark. A quick two-input result is arithmetic only. Return a source record with this complete shape and these exact keys. Keep unresolved strings blank or literal "Unknown". Do not remove fields: { "schema_version": "maestro-cpl-record/1.0", "record_id": "", "business": "", "currency": "USD", "cost": { "amount_raw": "", "basis": "", "included": [], "excluded": [], "source": "", "window": { "start": "", "end": "" } }, "cohort": { "id": "", "window": { "start": "", "end": "" }, "matching_rule": "", "lag_rule": "", "maturity_rule": "", "maturity_checked_at": "", "maturity_evidence": "" }, "leads": { "raw": { "count_raw": "", "definition": "", "source": "", "owner": "" }, "accepted": { "count_raw": "", "definition": "", "source": "", "owner": "" }, "qualified": { "count_raw": "", "definition": "", "source": "", "owner": "" } }, "exclusions": { "duplicates_raw": "", "spam_raw": "", "other_raw": "", "notes": "" }, "coverage": { "join_state": "", "notes": "" }, "owners": { "cost": "", "crm": "", "review": "" }, "evidence_requests": [], "review": { "state": "pending", "fingerprint": "", "reviewer": "", "reviewed_at": "", "evidence": "" } } Numeric state vocabulary is exact: blank string = Missing; literal "Unknown" = Unknown; zero = KnownZero; positive supported value = Known; malformed, negative or fractional lead count = Invalid. Cost is a nonnegative decimal string with at most two decimals. Lead and exclusion counts are nonnegative whole-number strings. Never emit KnownPositive or another state name. Never turn Missing or Unknown into zero. The only decision routes are REVIEW_READY and HOLD_FOR_EVIDENCE. REVIEW_READY requires every rule below plus review.state = approved, a reviewer, a valid reviewed_at date, approval evidence and a review.fingerprint equal to the current canonical fingerprint. A passing decision uses reason_code MATCHED_COHORT_AND_REVIEW and all_reason_codes must be the empty array []. MATCHED_COHORT_AND_REVIEW is never an item in all_reason_codes. Otherwise HOLD_FOR_EVIDENCE uses the first issue found under this exact precedence, with unique all_reason_codes in discovery order: 1. RECORD_IDENTITY_MISSING. 2. CURRENCY_MISSING_OR_INVALID. 3. COST_MISSING, COST_UNKNOWN or COST_INVALID. 4. COST_SCOPE_INCOMPLETE. 5. WINDOW_INVALID_OR_MISSING, otherwise WINDOW_MISMATCH. 6. COHORT_MATCHING_MISSING. 7. MATURITY_UNVERIFIED only when cohort.maturity_checked_at is not a valid YYYY-MM-DD date, cohort.maturity_evidence is blank or Unknown, or an approved record has maturity_checked_at later than review.reviewed_at. A blank cohort.maturity_rule by itself does not trigger MATURITY_UNVERIFIED; when windows differ, that blank mapping rule belongs only to WINDOW_MISMATCH. 8. For raw, accepted and qualified in that order. Raw codes: RAW_COUNT_MISSING, RAW_COUNT_UNKNOWN, RAW_COUNT_INVALID, RAW_ZERO_DENOMINATOR, RAW_EVIDENCE_INCOMPLETE. Accepted codes: ACCEPTED_COUNT_MISSING, ACCEPTED_COUNT_UNKNOWN, ACCEPTED_COUNT_INVALID, ACCEPTED_ZERO_DENOMINATOR, ACCEPTED_EVIDENCE_INCOMPLETE. Qualified codes: QUALIFIED_COUNT_MISSING, QUALIFIED_COUNT_UNKNOWN, QUALIFIED_COUNT_INVALID, QUALIFIED_ZERO_DENOMINATOR, QUALIFIED_EVIDENCE_INCOMPLETE. 9. ACCEPTED_EXCEEDS_RAW. 10. QUALIFIED_EXCEEDS_ACCEPTED. 11. EXCLUSIONS_INCOMPLETE, otherwise EXCLUSION_RECONCILIATION_FAILED. 12. COVERAGE_UNRESOLVED. 13. OWNER_MISSING. 14. SUPPLIED_BLOCKING_REQUEST when a supplied request has blocks = review and nonblank exact_request. 15. REVIEW_FINGERPRINT_STALE when an approved review does not match the current source. 16. REVIEW_PENDING when review.state is not approved. Each lane uses this exact reason precedence: WINDOW_NOT_RECONCILED; COST_MISSING, COST_UNKNOWN or COST_INVALID; ZERO_DENOMINATOR; COUNT_MISSING, COUNT_UNKNOWN or COUNT_INVALID; CALCULATED. Divide the same declared cost by each positive supported stage count. Keep an unresolved qualified lane Unknown while supported raw and accepted lanes calculate. Round CPL to cents using integer cents and half-up division. Equal valid cost and lead windows are compatible. Different valid windows require both a specific cohort.lag_rule and cohort.maturity_rule. Without both, emit WINDOW_MISMATCH and hold every full-record CPL. Treat this window-mapping test separately from the maturity-evidence test: a valid maturity_checked_at plus nonblank maturity_evidence passes the maturity-evidence test even when lag_rule or maturity_rule is blank. For an approved record only, maturity_checked_at cannot be later than reviewed_at. Require raw minus duplicate, spam and other rejections to equal accepted. Accepted cannot exceed raw. Qualified cannot exceed accepted. Create focused evidence requests in the same issue order. Every request object must use exactly these keys: {"request_id":"AUTO_","field":"","owner":"","due_state":"Before review","reason":"","exact_request":"","blocks":"review"}. The key is reason, never reason_code. Preserve every supplied request and its exact text, owner and due state. Do not create a fake request for REVIEW_PENDING alone. Canonical fingerprint: SHA-256 of UTF-8 bytes of recursively key-sorted compact JSON of the complete source record excluding its review object; array order unchanged. A prior approval is stale if any bound field changes. Canonical next actions are exact. When there are no issues: "Use this reviewed record for a like-for-like comparison; decide separately whether to change spend." When REVIEW_PENDING is the only issue: "Ask to review fingerprint and attach a dated approval receipt for that current fingerprint." For any other hold: "Resolve the first evidence request, then recompute and review the current record." Return the complete source record and a maestro-cpl-decision/1.0 decision with route, reason_code, all_reason_codes, fingerprint, cost state/value/basis, window compatibility, independent raw/accepted/qualified lanes, exclusions, evidence_requests, next_action and authorization_boundary. The authorization_boundary field must equal exactly "Calculation and review only. No spend or live campaign change is authorized." with no prefix or suffix. Do not claim the prompt verified source evidence. Worked arithmetic only: fictional $12,000 / 400 raw = $30; / 240 accepted = $50; / 90 qualified = $133.33. This is not a campaign result. RECORD OR ANSWERS: [Paste here]