Skip to main content
Checked against the product · 2026-10-05

Audit Support & ICS Submission — Controller Guide

Every government contractor gets audited — on a schedule (the annual Incurred Cost Submission) and ad hoc when an auditor asks for support on a specific number. The work is never the audit itself; it's having the evidence assembled and tracked so the review is a retrieval exercise, not a fire drill. Arcvue gives you two pages for this: one to run the back-and-forth of a live audit (tracking every document the auditor requests), and one to assemble and sign off the annual ICS schedules. This guide walks the exact clicks in both. It assumes you run a business but aren't necessarily a career government accountant.

For: controllers · Time: ~15 minutes · You'll need: the Accounting module.

Where these live

There are two destinations, both under Compliance in the left nav:

  • Compliance → Audit Support (/accounting/audit) — run a live audit: open it, pick the audit type, and work the auto-populated PBC ("provided by client") item list to completion.
  • Compliance → ICS (/accounting/ics/:fiscal_year) — assemble the annual Incurred Cost Submission: 15 schedules (A through O), each expanded, reviewed, and marked complete.

Part 1 — The ideas you need first (read once)​

Two different jobs, two pages​

"Audit support" is really two workflows that people run at different times:

  • A live audit is a conversation. An auditor (DCAA or your CPA) opens an engagement, sends you a PBC list — "provided by client," the documents and schedules they want — and you supply them one at a time until the list is done. The value is tracking: which items are outstanding, which are handed over, which don't apply. That's the Audit Support page.
  • The ICS (Incurred Cost Submission) is the big annual deliverable — the report of your actual indirect rates and costs, due after fiscal year-end, built as a set of schedules (A through O) that must reconcile to each other and to the books. That's the ICS page.

The two connect: when the audit type is Incurred Cost, the ICS is the package the auditor works from. But the pages are separate, so this guide covers each in turn.

PBC items (the live-audit workflow)​

A PBC item is one thing the auditor asked for — a schedule, a reconciliation, a sample of transactions. When you open an audit, Arcvue auto-populates a standard PBC list for that audit type, so you start with the checklist already built rather than transcribing the auditor's request letter by hand. Each item then moves through four states — pending → in_progress → provided → not_applicable — and the page shows an X/Y provided count so you always know how close the engagement is to done.

The ICS schedules (the annual workflow)​

The ICS is 15 schedules, A through O — the indirect rate computation (Schedule A), the pools and bases, direct costs by contract, subcontracts, compensation analysis, unallowables, contract briefs, and so on. Arcvue auto-builds each one from the same GL, contracts, vendors, employees, and indirect-rate engine you use all year, so the schedules tie out to the books by construction rather than being rebuilt in spreadsheets. Your job on the ICS page is to review each schedule and mark it complete, driving a completion percentage to 100%.

Tie-out is the whole game​

Auditors trust numbers that trace. A summary figure — a pool total, a rate, a contract's direct cost — should walk down to the transactions behind it, and the schedules should agree with each other. A package that ties out cleanly is a short audit; one that doesn't is a long one. That's why the ICS schedules are built from the ledger, not typed in.

Giving the auditor a seat​

An outside auditor can be given their own login instead of working through you. The External Auditor role is read-only across the whole product — it can open every report on screen and export it to PDF or Excel, and it can change nothing — and a tenant administrator seats one from Admin → Users without routing through anyone else. An auditor is engaged by the company to examine the company's own books, so seating one administers a decision already taken; the Lender seat is deliberately not self-serve, because a lender is a counterparty. See Users, Permissions and Access.

What Arcvue deliberately will not do​

  • It won't produce ICS schedules that don't reconcile to the GL — the point is defensibility, so mismatches surface rather than hide.
  • It won't fold unallowables into allowable pools (see the Unallowable Cost guide) — that segregation is what Schedule G and the rate schedules depend on.

Part 2 — How to run it​

The two workflows are independent. Steps 1–4 cover a live audit on the Audit Support page; Steps 5–7 cover the annual ICS on the ICS page. Run whichever you need.

Step 1 — Open an audit​

In the left nav, go to Compliance → Audit Support (/accounting/audit). The page header reads DCAA Audit Support — "PBC workflow with auto-populated templates per audit type."

Click + Open audit (top right). A form appears with these fields:

  • Audit type — a dropdown: Incurred Cost, Forward Pricing, Billing, Purchasing System, Accounting System, or Other. This choice drives which PBC template gets pre-populated, so pick the one the auditor named.
  • DCAA branch — free text for the auditing office (optional).
  • Auditor name — free text (optional).
  • Period start and Period end — date pickers for the audit's period of performance (optional).

Fill in what you know and click Open audit (the button reads Opening… while it saves). On success a toast confirms "Audit opened with PBC items pre-populated" and the new audit appears in the table below. To back out without saving, click Cancel.

Step 2 — Find your audit in the list​

The table lists every audit with columns ID, Type, Branch, Auditor, Period (start → end), and Status. Locate the one you just opened (or an existing engagement) by its type and period.

Step 3 — Work the PBC items​

On the audit's row, click the PBC items link (far right). A panel opens headed PBC items (audit N) with a live completion readout in the top right: "X/Y provided (Z%)" — where X is the number of items marked provided, Y is the total, and Z is the percentage complete.

The panel is a table of every requested item, columns # (item number), Description, Status, and the provided date. For each item, use the Status dropdown to set where it stands:

  • pending — not started yet (the default).
  • in_progress — you're pulling it together.
  • provided — handed to the auditor. Setting this stamps the provided date and ticks the X/Y counter up.
  • not_applicable — doesn't apply to this engagement.

Changing a status saves immediately — there's no separate Save button — and the completion readout at the top of the panel recomputes as you go.

Step 3b — Assemble the evidence packet for an item​

One button assembles, and its label says whether a packet already exists. It reads Assemble from the books the first time and Reassemble once there is one, showing Assembling… while it runs. Reassembling replaces what is there.

The confirm button distinguishes confirming as written from confirming your own edit: it reads Confirm response for the text as assembled, and Confirm edit once you have changed it and the item is past draft. Either way the workbook prints the confirmed response, and marking the item provided on its row is a separate step you do once you have actually sent it.

Each PBC item row carries a Packet button. It opens the item's evidence packet: what Arcvue can pull from the books for that request, assembled so an auditor can read it without you re-keying anything. It never marks the item provided; that stays your call on the row.

  • Assemble reads the books for the item: the schedule the request asks for (a labor distribution, a paid-invoice sample, the subcontract register, the unallowable-cost list), a sample of the underlying documents with their chain of evidence (the document, who approved it and when, the postings, the payment) — the sample table reads Sample, Date, Amount and Chain — the totals, and a list headed A person supplies for the parts only you hold (a signed policy, a rate agreement letter, a disclosure statement). Re-assembling replaces the previous draft; nothing in the books changes.
  • The response box holds the cover text Arcvue drafted from the packet. It may cite only what the packet holds and state only figures the packet states; a draft that strays is rejected and says why. Edit it as you like. With no AI model configured, Assemble still builds the packet and leaves the box for you to write; the line under it then reads Written by hand instead of naming the model that drafted it.
  • Confirm locks the response as written. The workbook prints the confirmed response; the item's status on the row is still yours to set.
  • Workbook downloads the packet: the response, the schedule, the sampled documents with their chain, and what a person supplies, one sheet each.
  • Close shuts the panel; an unconfirmed draft stays where it was.

If a packet reads "a person assembles this item," Arcvue holds no source for that request (the internal-control narrative, a prior-year rate agreement) and the row is answered by attaching the document on the item itself. If the sample is empty for a period, the books hold no paid bills or certified timecards in that period — check the audit's period dates before reading it as a gap.

Step 4 — Drive the list to done​

Work top to bottom, flipping each item to provided (or not_applicable) as you satisfy it. When the readout shows Y/Y provided (100%), the auditor has everything on the list. If the auditor comes back for support on a specific number, that's where the ICS schedules and the GL drill-through come in — you pull the backing detail rather than scrambling.

Step 5 — Open the ICS for the fiscal year​

At year-end, go to Compliance → ICS (/accounting/ics/:fiscal_year). The header reads Incurred Cost Submission — FY {year} — "DCAA-required annual ICS package: 15 schedules (A through O) auto-built from GL, contracts, vendors, employees, and indirect rates." The top-right shows a Completion percentage and an X/15 counter — how many of the fifteen schedules you've signed off.

The year comes from the URL

The page reads the fiscal year from the route (/accounting/ics/:fiscal_year). The ICS nav item opens the default year; to work a different year, change the year in the address bar (e.g. /accounting/ics/2025).

Step 6 — Expand and review each schedule​

The organizational chart is edited in place and committed with Save chart, which reads Saving… while it writes.

Below the header is the list of all 15 schedules:

#Schedule
AIndirect Rate Computation
BSummary of Claimed Indirect Expense Rates
CDirect Costs by Contract
DSubcontract Information
EConsultant Information
FCompensation Analysis
GUnallowable Costs
HContract Briefs
ICumulative Direct Costs by Contract
JVendor Information
KEmployee Listing
LOrganizational Chart
MCertificate of Final Indirect Costs
NContract Funding Status
OOther Direct Costs by Contract

Each row shows a ▸ chevron and a status chip — Pending (gray) or Complete (green). Click a row to expand it (the chevron flips to ▾); Arcvue loads that schedule's data on expand — you'll see a brief "Loading…" then the schedule's table, with any notes above it and a Total row at the bottom where the schedule totals. This on-demand load is why the page opens fast even though it holds fifteen full schedules.

Review the numbers. Because each schedule is built from the ledger and the rate engine, this is a verification pass, not data entry — you're confirming Schedule A's final rates, that the direct-cost schedules tie to the GL, that Schedule G's unallowables reconcile, and so on.

Step 7 — Mark each schedule complete​

When a schedule is right, click Mark Complete (green, bottom-right of the expanded panel). Its chip flips from Pending to Complete, the toast confirms "Schedule X marked complete" (with the schedule's letter in place of X), and the top-right Completion % and X/15 counter tick up. Marked one in error? The same button now reads Mark Incomplete — click it to flip back (toast: "Schedule X marked incomplete").

Work all fifteen to Complete and the header reads 100% · 15/15. Schedule A is the DCAA-facing final-rate deliverable and the basis for the closeout true-up on your cost contracts.

Schedule L is the one you type

Fourteen of the fifteen schedules are built for you from the ledger and the rate engine. Schedule L — Organizational Chart — is not. It is free text you enter on the schedule itself, so it stays empty until somebody writes it. If you are reviewing the pack and L looks blank, nothing is broken: it is waiting for you.

Step 8 — Download the package, then record the submission​

Download workbook fetches the built package and reads Preparing… while the file is put together, so a pause here is the file being assembled rather than a stall. Record submission then logs that you filed it, reading Recording… while it writes. Downloading does not record anything — the two are deliberately separate, because downloading a copy to read is not the same act as filing.

Reaching 15/15 is not the end of the job; it is the point at which the package becomes available. Two things follow, and the second one is the one an auditor asks about.

Download the package. Once the schedules are complete, the assembled package is downloadable from the ICS page. That file is what you send.

Every build is kept, and pressing the button again does not replace anything. The action reads Build new version, and that is exactly what it does: each build is stored as its own version with its own timestamp and its own sha256 checksum, and the page lists them newest first. Download on any row fetches that specific version, not just the most recent one.

This matters more here than anywhere else in the product. The question an auditor asks is not "can you produce an incurred-cost package" — it is "is this the file you filed, unchanged." The checksum on the version you downloaded and sent is what answers that, which is why nothing is ever overwritten.

Re-deriving a year that is already filed is safe

Because a build appends rather than replaces, you can rebuild a filed year to answer a question — a schedule that needs re-expanding after a coding fix, say — without destroying the version you actually submitted. Note the checksum of the version you filed, and it stays downloadable next to the new one.

Then mark the fiscal year submitted. The page records who submitted it and when, and from then on shows FY <year> submitted with that stamp instead of the working controls. This exists because FAR 52.242-4 requires the certified proposal for final indirect rates to be submitted within six months of fiscal year-end — the stamp is your evidence of the date you met it.

Completing the schedules is not submitting them

15/15 means the pack is assembled and internally signed off. It does NOT mean anything was sent, and it does not create the submission record. A year worked to 100% with no submission stamp reads, to anyone looking later, as a package that was prepared and never filed.


Entries posted without review is the management-override panel, and its definition is the part worth reading: journal entries a person posted with nobody else involved. Scheduled jobs posting their own output are counted separately rather than swept in — they are not a person overriding a control, and mixing them in would bury the entries an auditor is actually asking about.

Each row carries Posted by — the person — and Why it is listed, the reason that entry met the test. Read the reason before the name: the column exists so the list is self-explaining rather than a set of entry numbers you have to go look up.

Part 3 — When something looks wrong​

SymptomWhat it means / what to do
A PBC item won't move off pendingThe dropdown saves on change — pick in_progress, provided, or not_applicable and it stamps immediately. If a save fails you'll see a red "Failed…" toast; retry.
The X/Y count didn't go up when I set an itemOnly provided increments the "provided" count. in_progress and not_applicable don't — that's by design (not_applicable items are out of scope, not delivered).
I opened the wrong audit typeThe audit type drove the auto-populated PBC template. Open a fresh audit with the correct type and work that one; the item lists differ per type.
An ICS schedule shows "No data."The schedule loaded but the ledger has nothing to build it from for that year — e.g. no subcontracts for Schedule D, or no consultants for Schedule E. Confirm the underlying activity actually exists for the fiscal year before treating it as a defect.
An ICS schedule says "Failed to load schedule."The on-expand fetch errored. Collapse and re-expand to retry; if it persists the schedule's source data (GL, contracts, rates) may not be settled for that year yet.
A schedule doesn't tie to the GLThat's the check working. A pool or base is picking up (or missing) a cost — trace it to the account and fix the coding or the pool definition, then re-expand to rebuild. Don't force a tie by marking complete; fix the underlying number.
Unallowables aren't reconciling on Schedule GAn unallowable cost is likely sitting in an allowable account, or vice versa. Correct the coding (see the Unallowable Cost guide) so segregation is clean, then re-expand Schedule G.
The rates on Schedule A differ from what I billedExpected — you billed at provisional rates; the ICS reports actual/final rates. The difference is the year's true-up, settled at contract closeout, and should match the rate movement applied to the year's costs (see the Indirect Rates guide).
Completion % is stuck below 100%One or more schedules are still Pending. Expand each gray-chip schedule, review it, and click Mark Complete. The counter only reaches 15/15 when every schedule is signed off.

One-line summary​

Audit Support (/accounting/audit) runs a live engagement — + Open audit → pick the audit type → work the auto-populated PBC items from pending to provided until the X/Y count hits 100%. The ICS page (/accounting/ics/:fiscal_year) assembles the annual submission — expand each of the 15 schedules (A–O), confirm it ties to the books, and Mark Complete to drive the completion counter to 15/15 — then download the package and mark the year submitted, which is what FAR 52.242-4 actually asks of you. Both surfaces are built from the ledger and rate engine you run all year, so the audit is retrieval rather than reconstruction — with the one exception of Schedule L, the org chart, which you type.

  • File final indirect rates as Schedule A → Indirect Rates
  • Keep unallowables segregated for Schedule G → Concepts: unallowable cost
  • Keep the year clean so the schedules tie → Close a Month (Period Close)