Skip to main content
For Auditors & CFO IT

How Auditors Verify Our Work

FinAdvantage produces a complete, exportable audit trail for every workflow run. This page shows you exactly what data is recorded, how it is structured, and how to export it for audit documentation.

The Five-Stage Audit Trail

Every workflow execution passes through five audit-gated stages. Each stage writes an immutable record to the execution trace.

01 — Pipeline Intake & Routing

A workflow run is created with a versioned pipeline definition. Every input file is ingested, header-detected, column-normalized, and typed before execution begins.

The pipeline execution record captures the pipeline version, triggering user, input file bindings, and the deterministic ingestion decisions (header row, column names, coerced types). Logged before any node runs.

[PipelineExecution] status=RUNNING pipeline_version=4 inputs={bank_statement: r2://.../stmt.parquet, gl: r2://.../gl.parquet} started_at=2026-08-14T09:00:00Z
02 — Deterministic Node Execution

Each node runs as SQL against a DuckDB engine (via the MCP server) or a deterministic tool. The exact query, tool parameters, and result row counts are logged.

Every run_sql statement, every tool invocation, its parameters, duration, and output key are written to the execution trace before the result is promoted. Same query over same data → same output, every run.

[Node: reconcile_bank] tool=run_sql query="SELECT ... FROM t_bank JOIN t_gl ..." tables={t_bank, t_gl} rows_out=2,514 r2_key=pipelines/<id>/sql_<uuid>.parquet
03 — Human Review Gate

Any sensitive step — an ERP write, a flagged exception, a human-review node — pauses the run. The reviewer sees full context and approves, rejects, or edits before it continues.

The review decision (approved/rejected/edited, who, when, notes) is recorded and gates the write. The run resumes from its saved checkpoint exactly where it paused.

[HumanReviewNode] PAUSED action=CREATE_JOURNAL_ENTRY target=QuickBooks JournalEntry reviewed_by=null status=PENDING_APPROVAL
04 — ERP Write-Back with Read-Back

Approved write operations are posted to your ERP, then immediately read back to confirm they posted correctly. Transient failures are retried up to 3× before surfacing an exception.

POST → READ_BACK → if mismatch, retry with exponential backoff. Final status written to PipelineExecutionEvent with verification_confirmed=True/False.

POST /api/v3/journal_entries → 201 Created → READ_BACK: GET /api/v3/journal_entries/{id} → 200 OK, matches POST payload → PipelineExecutionEvent.verified = true
05 — Acceptance Gate & Export

Before a run is marked complete, acceptance assertions (row counts, tie-outs) run against the actual output. The full trail — queries, tool calls, reviews, ERP confirmations — is exportable.

Acceptance assertions (e.g. matched + unmatched = input, row_count > 0) are evaluated against the run's own output parquet. The export joins execution + events + steps + review data into a CSV or PDF for audit documentation.

Audit Export — audit_export_2026-08-14.csv ├─ PipelineExecution (version, user, timestamps) ├─ PipelineExecutionEvent (n=24, per node) ├─ ToolInvocation (n=12, queries + params) ├─ HumanReviewDecision (n=3, all APPROVED) └─ ERP Confirmation (n=3, all VERIFIED)

The Audit Data Model

Eight first-class tables power the audit trail. Every row is timestamped, attributed to an organization, and immutable.

PipelineExecution
1 per pipeline run

Root record for every run. Contains pipeline version, triggering user, input bindings, status, and start/end timestamps.

PipelineExecutionEvent
1+ per node

Per-node events: node_started, node_succeeded, node_failed, node_skipped, awaiting_review, resumed, pipeline_finished. Includes payload and node_id.

PipelineExecutionStep
1 per step per run

Step-level detail for each node execution, including the tool run and outcome.

ToolInvocation
1 per tool call

Each atomic tool call (including run_sql queries). Parameters, result row counts, and error state are recorded.

PipelineCheckpoint
1 per named checkpoint

Saved graph checkpoints used for pause/resume and to identify review/approval points.

ExecutionFeedback
1 per feedback event

Post-run user feedback (correct / near_correct / very_wrong) with correction notes, fed back into the next generation.

Per-Org MCP Isolation

Your ERP OAuth tokens run in a dedicated subprocess. No other organization shares your process, memory, or credentials.


┌─────────────────────────────────────────────────────────────────────┐
│                             Platform Core                             │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│   ┌──────────────┐     ┌──────────────┐     ┌──────────────┐        │
│   │   Org-A     │     │   Org-B     │     │   Org-C     │        │
│   │  (Tenant)   │     │  (Tenant)   │     │  (Tenant)   │        │
│   └──────┬───────┘     └──────┬───────┘     └──────┬───────┘        │
│          │                    │                    │                │
│          ▼                    ▼                    ▼                │
│   ┌──────────────┐     ┌──────────────┐     ┌──────────────┐        │
│   │ MCP Subproc A│     │ MCP Subproc B│     │ MCP Subproc C│        │
│   │ (Isolated)   │     │ (Isolated)   │     │ (Isolated)   │        │
│   │              │     │              │     │              │        │
│   │ QB Creds A   │     │ QB Creds B   │     │ QB Creds C   │        │
│   │ Xero Creds A │     │ Xero Creds B │     │ Plaid Creds C │        │
│   └──────────────┘     └──────────────┘     └──────────────┘        │
│                                                                     │
  │   No shared state. No shared memory. No credential leakage.         │
  │   Circuit breakers isolate failing tenants and limit concurrency.   │
  └─────────────────────────────────────────────────────────────────────┘
Per-tenant credential storage with AES-256 encryption at rest
MCP subprocess spawned per organization — no shared memory
SOC 2 Type II readiness built into our security architecture (certification on our roadmap)

Compliance Standards

The audit trail is designed to support the evidence auditors need under the following frameworks.

SOX

Every journal entry, approval, and modification timestamped and attributable to a specific user.

SSAE 18

Controls over data isolation, encryption at rest, and access logging documented in the security architecture.

AICPA TIA 505

Prepared by Client (PBC) tracking and evidence collection are designed to support audit preparation workflows.

SOC 2 Type II

On our compliance roadmap. Our security architecture is built around SOC 2 trust principles — security, availability, and confidentiality — as we prepare to pursue formal third-party certification.

GDPR

Data export and erasure requests are supported through our privacy team. Data is stored with our cloud hosting providers; residency options can be discussed before onboarding.

Need the Full Audit Package?

Enterprise customers can request the complete audit documentation package including data dictionary, schema diagrams, sample audit exports, and a call with our security team.

View Security Page
How Auditors Verify FinAdvantage | FinAdvantage