Skip to content

02 · Charge codes

No code, no booking.

In development · TBD 2027

A charge code is not a label. It is the join between an hour and a funding line, and if that join is loose, every number downstream — rates, billing, the binder — inherits the looseness.

6 funding sources · 3 approval tiers · ledger account on activation

Derivation
Names come from money

The code name derives from the funding source: award, CLIN, task order or indirect pool. You do not invent a string; you pick the money and the string follows.

charge_code.derive · name is a function of the funding line

Tiers
Three, by consequence

Direct-billable codes need the contract owner. Indirect pool codes need finance. Everything else needs a supervisor. The tier is chosen by what the code can cost, not by who asked.

3 approval tiers · tier set by funding source class

Activation
Writes the account

Approval and activation are one transaction: the general ledger account is created and bound to the code in the same write. A code cannot be bookable and unaccounted at the same time.

charge_code.activate · GL account bound in the same write

Ceilings
Checked at entry

Funded ceilings and task-order limits are evaluated when the hour is entered, not when the invoice is cut. The person who can still do something about it is the one who hears.

ceiling_check · evaluated at labor.post

The lifecycle, whole

01Requested · funding source selected, name derivedsettled
02Tier assigned · by what the code can costsettled
03Approved · named approver, not a role inboxsettled
04Activated · general ledger account boundsettled
05Bookable · ceilings evaluated at entrylive
06Closed · code retired, history retainedsettled
settled attention · reason on record live · never finished, kept
Why a retired code still resolves
Closing a code stops new bookings. It never removes the code from hours already posted against it.
charge_code.close · historical postings immutable · ledger seq preserved

Where this shows up in the survey

01Segregation of direct and indirect costssettled
02Costs identified and accumulated by contractsettled
09Costs by contract line itemsettled

Three of the fourteen areas are answered by the code structure alone.

Questions we get asked

The short answers.

How many funding sources does CRATON model?
Six: prime award, subcontract, task order, CLIN, internal research and development, and indirect pool. Each carries its own naming rule and approval tier.
Can we import our existing chart of accounts?
At launch, yes — the general ledger account is a field on the code, not a derived value, so an existing chart maps in. The import path and its validation rules are in the API contract for engineering.
What stops someone booking to a code they should not touch?
Codes carry an eligibility set. An hour posted to a code outside the person's set is refused at entry with the reason, rather than accepted and caught in a monthly review.
Does closing a code break historical reporting?
No. Postings are immutable and keep their ledger sequence. A closed code stops accepting new bookings and nothing else.

Request a walkthrough

Make your next audit the dullest hour of the year.

Forty minutes with the team building it. Bring your last SF 1408 or your first.

leadership@hypati.us

CRATON is in development; availability planned for 2027 (TBD). Walkthroughs by request.