Red Hook WatchIndependent Community Resource

ABC methodology

How activity-based cost allocation is computed for the Village of Tivoli's A General Fund budget.
What activity-based costing does

New York's OSC chart-of-accounts organizes spending by object (salaries, contractual, equipment) and by function code (1620 buildings, 3120 police, 5110 highway, etc.). It does nottell you what each operational service actually costs to run, fully loaded — because indirect cost centers (employee benefits, buildings, IT, insurance) live in their own function codes and aren't attached to the services they support.

Activity-based costing re-decomposes the same dollars into service activities. Direct lines stay with the service that incurred them. Indirect pools (benefits, overhead) get allocated to operational services using payroll share as the cost driver. The result is one fully-loaded cost per service — police, streets, planning, refuse — that includes its share of shared overhead and benefits.

The pipeline runs the same five steps for every fund in every jurisdiction; only the routing rules differ. Every dollar in the source document ends up somewhere: direct, pooled-and-allocated, or excluded with a documented reason.

The math, in plain English

For one (jurisdiction, fund, fiscal year, source) document, the allocator does this:

  1. Direct lines. Every appropriation line is routed to a service via analysis/abc_routing.yaml. OSC code 3120 (police) goes to police, 5110 (streets) to transportation, 1110 (court) to court, and so on. These stay where they are — no allocation needed.
  2. Benefits pool, allocated by payroll share.OSC 9010-series benefit lines (state retirement, FICA, workers comp, hospital/medical, employee benefit reserve) all pool into a single benefits bucket. Each service's personal-services dollars as a fraction of total fund payroll becomes its share of the pool. If police is 60% of the fund's GF payroll, police gets 60% of the benefits pool.
  3. Overhead pool, allocated the same way. Indirect general-government lines (1620 buildings, 1640 garage, 1680 IT, 1910 insurance, 1920 municipal dues, restricted-reserve transfers) pool into an overhead bucket, then split by payroll share. The Village FY26-27 case is the exception — see the jurisdiction-specific section below.
  4. Dedicated revenue offsets the gross.Revenue lines that fund a specific service (Town/Tivoli police-contract payments, refuse-tag sales, zoning fees, court fines, SRO contract, etc.) are subtracted from that service's gross fully-loaded cost.
  5. General non-tax revenue is distributed proportionally. Revenue not tied to a specific service (state aid, sales-tax distribution from the County, interest earnings, fund-balance draw) is split across services in proportion to their post-dedicated residual cost. What's left is the net levy burden — what the property-tax levy actually has to fund for that service.
Reconciliation invariants. The Python pipeline asserts three balance conditions, to the dollar (with a $1 floating-point tolerance): appropriation_balanced — sum of direct + pooled + excluded = source appropriation total; revenue_balanced — sum of levy + dedicated + general + excluded revenue = source revenue total; levy_balanced — sum of net-levy-burden across services = the actual levy. If any invariant fails the build halts. Pipeline source: analysis/build_activity_based_cost_allocation.py; routing rules: analysis/abc_routing.yaml.
The Tivoli's General Fund, fully loaded

The most recent ABC document for the Tivoli's General Fund (Fund A) is the FY24/25 AFR (audited actuals). Top-line totals:

Total appropriation$1.23M
Total revenue$1.10M
Property-tax levy$530K
Total personal-services payroll$262K
Benefits pool (allocated by payroll share)$179K
Overhead pool (allocated by payroll share)$114K

Per-service buildup, after running the five steps above:

ServiceDirectPayroll shareBenefits allocOverhead allocGross fully-loadedDedicated revNet levy burden
Police$41,537$41,537$29,128
Fire protection$113,934$113,934$79,895
Streets, DPW & lighting$93,32510.8%$19,243$12,278$124,847$87,548
Refuse & sanitation$51,7287.9%$14,112$9,004$74,844−$25,473$34,621
Planning, zoning & building inspection$182,7482.3%$4,032$2,573$189,353−$40,075$104,681
Court$26,0778.3%$14,758$9,417$50,252−$11,641$27,076
Culture & recreation$53,79916.2%$28,892$18,435$101,125$70,914
Government administration$338,79454.6%$97,595$62,272$498,662−$223,198$193,168
Debt service$18,412$18,412$12,912

Reconciliation: appropriation balanced — yes; revenue balanced — yes; levy balanced — yes. Source bundle key: tivoli/FY24/25/afr/A.

Drill in: General FundFY24/25 drilldown (ABC view) · or browse all years on the General Fund multi-year page.

What makes Tivoli's allocation different

Tivoli is the cleanest application of the ABC pipeline of the three jurisdictions. The default payroll-share allocation applies to every service without bespoke overrides, and there is no A/B/DA/DB fund split to manage — Tivoli is a Village, so its A General Fund covers every Tivoli operating service end-to-end.

One operating fund, one taxpayer base

Tivoli's A General Fund is paid by Village of Tivoli residents only. Capital Projects (Fund H) is bond-financed and not part of the operating ABC view. Tivoli has no enterprise funds in the bundle (water and sewer are not separate enterprise accounts in Tivoli the way they are in the Village of Red Hook), so there's no rate-funded service to allocate separately.

Police is a $23K contract payment to the Village

Tivoli has no police department of its own. It buys patrol service from the Village of Red Hook under a separate inter-municipal agreement (visible on the Village side as revenue line A2260T). Inside Tivoli's books that contract shows up as a single direct A3120 line item; ABC routes it to police as a direct cost with zero payroll-share, zero benefits, zero overhead — a clean pass-through.

The fully-loaded cost of policing Tivoli residents is the Village's line, of which only $23K is offset by Tivoli's contract. See the police cost-sharing detail page for the cross-jurisdiction view.

Fire is a contracted service, not an own-operated department

Tivoli's fire service is provided through the Tivoli Fire District (Town Fund SF, not Village fund A). The line item that appears in Tivoli's A fund as “fire” is the contractual contribution / hydrant service piece — again routed by ABC as a direct cost with no payroll-share, no benefits, no overhead.

No bespoke overrides

Tivoli has no analog of the Village's police_costs.yaml override file. Every Tivoli ABC document uses pure payroll-share allocation for the benefits and overhead pools, with no per-service hand-set shares. Government administration dominates Tivoli's payroll share, which is what the table above reflects.

Sources