# Formal-offer cohort worksheet, version 1

Independent Metix AI editorial asset. All example records, including dates after this guide's preparation, are invented. No real candidate data or observed performance. Python 3 standard library; runs locally, makes no network requests and writes no files.

Choose the formal-offer policy, included roles, local reporting timezone, first-issue window and cutoff before using the sheet. Dates are calendar dates in that chosen timezone. Date-only observations on the cutoff are included through that date. Choose one consideration_id per person + requisition + continuous offer negotiation. No names, emails, compensation or candidate prose are needed. Keep the private ID mapping in your authorized record system. This file does not detect the same consideration entered under two different IDs; reconcile IDs manually before relying on totals.

A revision is a snapshot of the same consideration: keep the first_issued_on date fixed and number revisions consecutively from 1. recorded_on is when this snapshot became known, not a backdated issue date. Same-date snapshots use the larger revision. A terms amendment stays under the same ID. The latest snapshot recorded on or before --as-of supplies status. Supply sufficient history at each cutoff: later terminal records cannot reconstruct a missing earlier pending snapshot. Future records are validated but excluded from earlier results.

pending requires an empty outcome_on. accepted, declined and company_withdrawn require an actual outcome date between first issue and recording. Never turn silence into a decline without the employer's documented disposition policy. Do not mark a declined offer company_withdrawn to improve a number. Accepted means acceptance recorded by the employer under its policy, not a start or retained hire. Terminal outcomes cannot be changed by a later revision in this calculator; correct an erroneous source record with an audit trail and rerun. Track post-acceptance withdrawal, no-show, rescission and starts in a separate downstream ledger, not by silently overwriting this acceptance cohort.

Use blank-offers.csv for your own history. Required exact columns:
consideration_id,revision,first_issued_on,recorded_on,status,outcome_on
Only the four lowercase statuses above are accepted. Blank, missing, extra, malformed, duplicated or chronologically inconsistent rows reject the entire input. The calculator produces no partial report on rejection. Retain the input file/version, parameters, resulting JSON and any manual corrections in your own controlled system.

Example:
python3 offer-rate.py fictional-offers.csv --start 2026-11-01 --end 2026-11-06 --as-of 2026-11-15

Independent hand calculation for the six considerations: C01/C02/C03 accepted; C04 declined; C05 pending; C06 company_withdrawn. Therefore A=3,D=1,P=1,W=1,N=6. Candidate-resolved acceptance=3/(3+1)*100=75.00%. Accepted share of all issued=3/6*100=50.00%. Revisions do not increase N. expected-nov15.json records these results. On Nov30 C05 is accepted, so A=4,D=1,P=0,W=1,N=6: 80.00% candidate-resolved and 66.67% all-issued. This change reflects follow-up on the same cohort, not proven improvement.

Company withdrawals are included in all-issued N and excluded from candidate-resolved A+D. Both choices must be disclosed. Neither rate isolates compensation, recruiter quality or a vendor effect. If A+D=0 the resolved rate is null; if N=0 both rates are null. A positive denominator with no accepts gives 0. Display counts beside percentages. For team totals sum comparable A,D,P,W first; do not average role percentages. Compare cohorts at the same follow-up age and role/market scope. No universal acceptance target is provided.

The two displayed formulas help reconcile definitions; this file is not a reproduction of a vendor's activity-date report, an ATS import, an integration, an offer management system or a benchmark. Vendor definitions: https://resources.workable.com/tutorial/faq-job-offer-metrics and https://support.greenhouse.io/hc/en-us/articles/204635925-Offer-activity-report (checked Nov3 2026).
