Part 1 of 15 Project Accounting Codes for School Construction: A Simple System That Actually Works
- Lettie Boggs

- Dec 23, 2025
- 7 min read
Updated: Jan 16
Stop drowning in spreadsheets—here's the three-part coding structure that gives you instant budget clarity and audit-ready reports.
The cleanest path from bond dollars to finished buildings uses just three core codes—everything else is noise that slows you down and confuses your team.

If your codes aren’t easily understood, the use of them will be inconsistent and unreliable. The codes should also use and support the fiscal coding already in place for the district/COE. A sharp coding system gives you instant clarity: where money came from, what it bought, and which project it moved forward. That clarity drives faster approvals, cleaner audits, and fewer "emergency" board presentations.
This post shows you the simplest structure that actually holds up in the real world—and exactly how to put it in place.
The model (keep it this lean)
A durable, audit-ready program needs only three things:
Fund – Where the money came from
Object – What you spent it on
Project (Unique Identifier) – Which scope/goal you moved forward
That's it. Everything else is secondary.
If you can't reliably capture it at the point of entry or use it in reporting, don't bake it into the code. Add it as reference data or a tag later—not as a core dimension. Your business office staff will thank you.
Why this works
Speed: Staff can code invoices correctly on the first try—no 20-minute debates about which bucket.
Accuracy: Auditors can trace dollars from source → use → project without calling you three times for clarification.
Control: You spot budget pressure early, before it becomes a panicked board item at 5pm on Friday.
Focus: Less noise, fewer reconciliation reports, more time for actual decisions.
Five rules that keep your codes clean
1) Begin with the end in mind.
Design your codes backward from the reports you will owe to others: board dashboards, bond oversight committees, grant closeouts, and annual audits. If your final report never breaks out a dimension, don't hard-code it. I've seen districts create elaborate coding schemes for internal curiosity, then spend months translating them for external reporting. Don't do that to yourself, your time is precious.
2) One project = one promise.
If work must stand alone at audit or board acceptance, it's a project. If it's bid and managed together, it's one project—even if it touches multiple sites. Stop splitting projects just to "feel organized." You're only creating reconciliation churn and making your successor's job harder. (We will show you how to do this and still reconcile the amounts to the sites!)
3) Object codes do the heavy lifting.
Roll up object codes into clear categories you'll actually present to leadership: Planning & Design, Construction, Tests & Inspections, FF&E, Contingency, Admin. Do this mapping once in your system, and dashboards basically build themselves. Your board doesn't care about the difference between object 6210 and 6212—they want to know if you're over budget on construction.
4) Use reference tables for everything else.
Vendors, APNs, grant IDs, room numbers, phase tags—store them as attributes in your system, not as segments in your accounting codes. Reference data can evolve without blowing up your general ledger. Trust me, your chart of accounts shouldn't need a board vote every time you add a new contractor.
5) If you can't know it at entry, don't require it.
A "mandatory" field that no one can fill in accurately just invites guesswork and future cleanup projects. Sometimes well-meaning teams add required fields that invoicing clerks have to guess at—then spend weeks fixing the data later. Optional and correct beats required and wrong. Every single time.

The core categories (so reporting writes itself)
You don't need 50 buckets. You need the right seven:
A: Site Acquisition & Approval (e.g., 6100s) – land purchase, environmental certifications, clearances
B: Planning & Design – architects, engineers, surveys, soil reports
C: Construction (Hard Costs) – general contractor, trade packages, CM-at-risk
D: Construction Administration – program or CM staff directly supporting construction
E: Tests & Inspections – on site inspectors, special inspections, materials testing, geotechnical
F: FF&E/Media/Fixtures – initial essential furniture and equipment to occupy and operate the building
G: Contingencies – construction, project, and program layers (keep them separate)
These summary areas simplify how you convey the message. When board members ask "where's the money going?" you can answer in one slide because your codes already match the categories they expect to see.
Common traps (and the fix)
Trap: You tell your design team the total project budget when they need to know the construction budget.
Fix: Start planning with roughly 70% of your non-land funds aimed at Construction; adjust as scope firms up. Architects shouldn’t design to a number that includes their own fees—they need the construction target.
Trap: You embed "nice to have" details as segments inside your core codes.
Fix: Move them to attributes or reference fields. Your team will still capture the data—without slowing down invoice entry or corrupting the accuracy of your primary codes. I've seen a 15-segment code structure that required a cheat sheet just to enter a simple invoice. Don't be that district.
Trap: You blend operational and capital costs (hello, mysterious 5800s showing up everywhere).
Fix: Write down a short "Capital vs. Ops" rule set and actually follow it. If it supports the physical asset or the construction activity, it's capital. District-wide HR costs, general legal counsel, and routine facilities advertising? Those stay operational. Five clear examples will prevent 90% of coding arguments.
Trap: You have one giant "mystery" contingency line that everyone raids.
Fix: Track contingency in Facilities – but you don’t need to book it. It can remain unallocated fund balance in the fiscal record, but in facilities you need to differentiate the types of contingency on each project or in the program so that they can be managed and tracked. Different managers, different approval processes, different burn patterns.
Split it into construction contingency (contractor change orders), project contingency (scope additions/unforeseen), and program contingency (project rescues or major changes). When they're lumped together, no one knows what you actually have left.
Quick start: implement in one week
Yes, really. Here's how:
Day 1 – Design the skeleton
Map your current codes to the Fund–Object–Project model. (You only need 20-30 object codes max.)
Approve the seven category rollups you'll present to leadership.
Get buy-in from Business Services—they're your partners, not your obstacle. They keep you compliant.
Day 2 – Build reference tables
List your vendors, sites, APNs, grant IDs, project phases.
Define who owns each table and the process for updates.
This is unsexy work, but it's what makes the whole system usable.
Day 3 – Lock down the rules
Write a one-page coding policy (5–7 bullets, max).
Create a "Capital vs. Ops" cheat sheet with actual examples. (Remember there are very few allowable uses of operational expenses from capital funds. Keep expenses in the 6000 objects.)
Document your contingency policy: purpose, owners, release triggers.
Day 4 – Configure and test
Set up validation rules (Fund+Object+Project required; attributes optional).
Build 3–5 prototype reports that your board and auditors will actually read.
Test them with real invoices from last month.
Day 5 – Train and go live
Hold a 45-minute staff session: show examples, show non-examples, walk through two practice invoices together.
Publish the policy and cheat sheet somewhere people will actually find them (not buried on slide 47 of a board presentation).
Answer questions. Field concerns. Adjust if needed.
Then you're live. Seriously.
A concrete example
Let's make this real:
Fund: Measure Q Series 2024
Object: C – Construction (hard cost)
Project: MS-Gym-Seismic-2026
Invoice you're coding: Structural steel package #2, $127,450
Reference attributes (not in the core code): Vendor = "Atlas Steel," Site = "Maple Middle School," APN = "123-456-789," Phase = "Steel Erection," Grant = "CA Seismic Safety Grant 2025"
Result: One click shows you the money trail from source → use → project. Your board report auto-rolls everything to "Construction" without someone doing VLOOKUP gymnastics in Excel at 11pm.
When the bond oversight committee asks "how much Measure Q money went to Maple Middle School construction?" you click twice and show them. No pivot tables. No explanation needed.

FAQs leaders ask (answer them upfront)
"Can we still get site-level budget splits if projects span multiple sites?"
Yes. If the project spans multiple sites use a Multi or District Wide site code, then do periodic journal allocations based on square footage, bid package splits, or agreed methodology. For the construction phase, plan ahead and ask your contractor to do the Schedule of Values by site. Then you have your transfer numbers. Be sure to do the transfer at least annually—definitely before year-end close. Your auditor will need it to allocate asset values. So why not break it out as you go? If you have a project at four site and you make it four projects, you have multiplied the clerical workload in purchasing, facilities, and accounting by four! It is far less work to prep a few transfers each year.
"What about all those eminent domain payment details?"
Track property owner/tenant names and APNs as reference attributes. Require your legal or real estate consultants to deliver payment logs in the exact format you need for audit. Make it a contract deliverable—have them report it how you need it.
"How should we handle bond interest earnings and premium savings?"
Track them in Fund, assign to the appropriate Project (or a program-level catch-all), and show them clearly in reports. GAAP requirements still apply even when grant rules limit what you can spend interest on. Keep it visible so everyone understands what's available money versus what's restricted.
Your next move
Adopt the three-part model this month: Fund–Object–Project. Stop over-engineering.
Publish the rules in a format humans can actually read—so coding becomes fast and consistent across your team. You should be able to read a coding string like a sentence.
Build those seven reporting categories so your board and auditors see exactly what they expect, every single time. Use them consistently.
When your codes are crisp, your financial story is crisp—and boards fund the teams who tell clear stories with their numbers. Districts with muddy accounting get muddy answers to budget questions. Don't be the facilities director who can't explain where the money went.









Comments