Skip to content

DesignForFailure/Tax_Co-Pilot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

305 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
 ________                          ______                     _______   __  __              __     
β•±        β”‚                        β•±      β•²                   β•±       β•² β•±  β”‚β•±  β”‚            β•±  β”‚    
$$$$$$$$β•±______   __    __       β•±$$$$$$  β”‚  ______          $$$$$$$  β”‚$$β•± $$ β”‚  ______   _$$ β”‚_   
   $$ β”‚ β•±      β•² β•±  β•²  β•±  β”‚      $$ β”‚  $$β•±  β•±      β•²  ______ $$ β”‚__$$ β”‚β•±  β”‚$$ β”‚ β•±      β•² β•± $$   β”‚  
   $$ β”‚ $$$$$$  β”‚$$  β•²β•±$$β•±       $$ β”‚      β•±$$$$$$  β”‚β•±      β”‚$$    $$β•± $$ β”‚$$ β”‚β•±$$$$$$  β”‚$$$$$$β•±   
   $$ β”‚ β•±    $$ β”‚ $$  $$<        $$ β”‚   __ $$ β”‚  $$ β”‚$$$$$$β•± $$$$$$$β•±  $$ β”‚$$ β”‚$$ β”‚  $$ β”‚  $$ β”‚ __ 
   $$ β”‚β•±$$$$$$$ β”‚ β•±$$$$  β•²       $$ β•²__β•±  β”‚$$ β•²__$$ β”‚        $$ β”‚      $$ β”‚$$ β”‚$$ β•²__$$ β”‚  $$ β”‚β•±  β”‚
   $$ β”‚$$    $$ β”‚β•±$$β•± $$  β”‚______$$    $$β•± $$    $$β•±         $$ β”‚      $$ β”‚$$ β”‚$$    $$β•±   $$  $$β•± 
   $$β•±  $$$$$$$β•± $$β•±   $$β•±β•±      β”‚$$$$$$β•±   $$$$$$β•±          $$β•±       $$β•± $$β•±  $$$$$$β•±     $$$$β•±  
                          $$$$$$β•±                                                                                        

Local-first, privacy-preserving personal tax software

CI License: AGPL-3.0 Python 3.11+ Status: Stable

An engineering-focused system for modeling tax rules, storing tax-relevant data, and deterministically calculating outcomes using transparent, verifiable logic.

This is not tax advice software.

Getting Started Β· Architecture Β· Documentation Β· Contributing


Why Tax Co-Pilot?

Most consumer tax software hides its logic, can't reproduce historical results, and stores your data in the cloud. Tax Co-Pilot takes the opposite approach:

Traditional Tax Software Tax Co-Pilot
Calculation logic Hidden / proprietary Open, versioned YAML rule packs
Reproducibility Results change silently Immutable runs with full audit trace
Data storage Cloud-based, opaque Local SQLite, optional AES-256 encryption
Traceability Inputs and outputs blended Every number traceable to its source

Key Features

  • Rules-as-Data β€” Tax logic lives in versioned YAML rule packs, not application code. Past results never silently change.
  • Full Audit Trace β€” Every calculation produces rule ID, inputs, intermediates, rounding policy, and human-readable explanation.
  • Adaptive Workspace UI β€” Landing page navigation, latest-run dashboard, dedicated audit-trace review, and light/dark theme support keep long workflows easier to navigate.
  • Local-First & Private β€” Runs entirely on local hardware. Optional AES-256 encryption at rest via SQLCipher.
  • Multi-Person & Multi-State β€” Two-taxpayer filing support (MFJ/MFS) with multiple state jurisdiction modeling.
  • What-If Engine β€” Scenario comparison (e.g., MFJ vs MFS) with compliance-first optimization.
  • Integrity Verification β€” SHA-256 hash chain over immutable run artifacts with tamper detection.

Getting Started

Prerequisites

  • Python 3.11+

  • pip

  • System build dependencies (required to compile pysqlcipher3):

    Distro Command
    Fedora / RHEL sudo dnf install gcc python3-devel sqlcipher-devel
    Debian / Ubuntu sudo apt-get install build-essential python3-dev libsqlcipher-dev
    macOS (Homebrew) brew install sqlcipher

    Windows note: These build dependencies compile pysqlcipher3 from source on Linux/macOS. The default install has encryption disabled (TAX_COPILOT_ENCRYPTION_ENABLED=false), so Tax Co-Pilot runs on native Windows with no SQLCipher and no C compiler. There is no prebuilt SQLCipher wheel on PyPI for Windows, so if you want encryption at rest on Windows, use WSL or conda, or build pysqlcipher3 from source β€” see docs/ENCRYPTION.md β†’ Windows for the full instructions. Install a recent Python for Windows and make sure you check "Add python.exe to PATH" in the installer.

Install

macOS / Linux / WSL

python -m pip install --upgrade pip
python -m pip install -r requirements.txt

# Optional: dev tooling (ruff, mypy, pip-audit)
python -m pip install -r requirements-dev.txt

Windows (PowerShell or Command Prompt)

py -m pip install --upgrade pip
py -m pip install -r requirements.txt

REM Optional: dev tooling (ruff, mypy, pip-audit)
py -m pip install -r requirements-dev.txt

Use the py launcher (bundled with the official Windows installer) or python, whichever resolves on your PATH. If you prefer an isolated environment, create a virtualenv first with py -m venv .venv and activate it via .venv\Scripts\activate.

Run

macOS / Linux / WSL

./run.sh
# or: python -m uvicorn main:app --host 127.0.0.1 --port 8000 --reload

Windows

run.bat
REM or: py -m uvicorn main:app --host 127.0.0.1 --port 8000 --reload

You can also double-click run.bat from File Explorer.

Open http://127.0.0.1:8000 in your browser to reach the landing page and dashboard workspace.

Test

pytest -q

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Browser (Server-rendered HTML / Jinja2)        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                     β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  main.py β€” app factory, lifespan, middleware    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚                 β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  app/routes/               β”‚ β”‚  app/route_helpers/       β”‚
β”‚  Request handlers          β”‚ β”‚  CSRF / form / DB state   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚                 β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  app/engine/              β”‚ β”‚  app/services/            β”‚
β”‚  Calculator / RuleLoader  β”‚ β”‚  Database / Encryption    β”‚
β”‚  WhatIfEngine             β”‚ β”‚  CSV / Audit / Pack CRUD  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  rule_packs/ β€” Versioned YAML (federal + state)          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Layer Separation

Layer Path Responsibility
Engine app/engine/ Tax computation only. No persistence, no I/O. Decimal math throughout.
Services app/services/ Persistence, encryption, adapters. No tax/business logic.
Models app/models/ Pydantic domain models (FilingStatus, W2Data, ReturnRun, TraceNode, etc.)
Route Helpers app/route_helpers/ Shared CSRF, form parsing, DB state, and rule-pack cache helpers for the web layer.
Web app/routes/ FastAPI route handlers and response orchestration.
App Wiring main.py FastAPI app factory, lifespan, middleware, and router registration.
Rule Packs rule_packs/ Versioned YAML rule definitions and manifests per jurisdiction/year.

Tech Stack

Component Technology
Language Python 3.11+
Backend FastAPI + Uvicorn
Database SQLite (WAL mode) + optional SQLCipher (AES-256)
UI Server-rendered Jinja2 templates
Numeric Type Decimal (never float)
Rule Packs Versioned YAML
CI GitHub Actions (ruff, mypy, pytest, pip-audit)

Project Status

Tax Co-Pilot is stable (1.0.x). The application compatibility promise described under Versioning is in effect.

Current Scope

  • Tax years 2023, 2024, and 2025 with federal 1040-style calculations
  • W-2 (incl. Medicare wages Box 5/6), 1099-INT, 1099-DIV, 1099-B, 1099-NEC, and SSA-1099 income support
  • Preferential LTCG/qualified-dividend rates, self-employment tax, Social Security taxability, and capital-loss carryover
  • Credits and surtaxes: EITC (with the combat pay election), CTC + refundable ACTC + ODC, education credits, dependent care, NIIT, Additional Medicare Tax (Form 8959 incl. Part IV withholding), age-65+/blind deductions, military provisions
  • Withholding and estimated payments
  • Two-person filing (MFJ / MFS / Single / HoH / QSS)
  • 15 state packs: GA, CA, NY, PA, IL, NC (with dependent exemptions, state credits, NYC/Yonkers city tax, and the NY recapture) plus 9 no-income-tax stubs
  • Multi-state W-2 returns: nonresident wage apportionment and the resident credit for taxes paid to other states
  • What-if scenario comparison engine (filing-status and combat-pay-election scenarios)
  • Local web UI with landing page, light/dark theme support, and full calculation trace
  • JSON and HTML audit export, IRS form-line mapping, encrypted-at-rest storage (SQLCipher)

Versioning

This project follows Semantic Versioning for application releases. Before 1.0.0, application releases use numeric 0.y.z versions while lifecycle labels such as Beta remain separate status markers. Rule pack manifests use their own independent SemVer line, while editor variant IDs such as custom_v1 are workspace labels that sit alongside the manifest version. For backward compatibility, legacy custom packs with shorthand manifest versions such as 1 continue to load as 1.0.0 and are rewritten to canonical SemVer when edited, cloned, or re-imported. The SQLite schema uses its own integer generation via PRAGMA user_version, independent of both application and rule-pack versions. A stable application compatibility promise begins at 1.0.0.


Documentation

Guides

Document Description
πŸ”’ Encryption Guide Setup, configuration, and password management for AES-256 database encryption
πŸ“– Rule Pack Authoring How to write rule packs β€” rule types, expressions, constants, and worked examples
πŸ‡ΊπŸ‡Έ State Authoring Guide Adding a new state tax jurisdiction from template to tests

Project

Document Description
🎯 Roadmap Milestones, planned features, and implementation prompts
πŸ“œ Changelog Release notes and change history
🀝 Contributing Development setup, quality checks, and PR expectations
πŸ›‘οΈ Security Policy Vulnerability reporting and disclosure process

Legal

Document Description
πŸ“„ Notice (Third-Party) Full attribution for all third-party dependencies
🌐 Export Control Cryptographic export control notice (EAR/TSU)
⚠️ Disclaimer Warranty disclaimer and user responsibilities

Actual Current Repository Structure

Tax_Co-Pilot/
β”œβ”€β”€ .agent_tools/
β”‚   β”œβ”€β”€ 00_master_directives.md
β”‚   β”œβ”€β”€ 01_style_guide.md
β”‚   β”œβ”€β”€ 02_architecture.md
β”‚   β”œβ”€β”€ 03_testing_rules.md
β”‚   β”œβ”€β”€ 04_doc_updater.md
β”‚   └── 05_session_log.md
β”œβ”€β”€ .claude/
β”‚   └── settings.json
β”œβ”€β”€ .editorconfig
β”œβ”€β”€ .github/
β”‚   β”œβ”€β”€ ISSUE_TEMPLATE/
β”‚   β”‚   β”œβ”€β”€ bug_report.md
β”‚   β”‚   β”œβ”€β”€ config.yml
β”‚   β”‚   β”œβ”€β”€ feature_request.md
β”‚   β”‚   β”œβ”€β”€ new_state.md
β”‚   β”‚   └── tax_calculation_error.yml
β”‚   β”œβ”€β”€ PULL_REQUEST_TEMPLATE.md
β”‚   └── workflows/
β”‚       └── ci.yml
β”œβ”€β”€ .gitignore
β”œβ”€β”€ .pre-commit-config.yaml
β”œβ”€β”€ AGENTS.md
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ config.py
β”‚   β”œβ”€β”€ engine/
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ calculator.py
β”‚   β”‚   β”œβ”€β”€ rule_loader.py
β”‚   β”‚   └── whatif.py
β”‚   β”œβ”€β”€ log.py
β”‚   β”œβ”€β”€ models/
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ domain.py
β”‚   β”‚   └── forms.py
β”‚   β”œβ”€β”€ route_helpers/
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ csrf.py
β”‚   β”‚   β”œβ”€β”€ db_state.py
β”‚   β”‚   β”œβ”€β”€ form_parsing.py
β”‚   β”‚   └── pack_cache.py
β”‚   β”œβ”€β”€ routes/
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ calculate.py
β”‚   β”‚   β”œβ”€β”€ encryption.py
β”‚   β”‚   β”œβ”€β”€ import_export.py
β”‚   β”‚   β”œβ”€β”€ navigation.py
β”‚   β”‚   β”œβ”€β”€ rule_packs.py
β”‚   β”‚   └── runs.py
β”‚   β”œβ”€β”€ services/
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ ai_prompt.py
β”‚   β”‚   β”œβ”€β”€ audit_export.py
β”‚   β”‚   β”œβ”€β”€ csv_import.py
β”‚   β”‚   β”œβ”€β”€ database.py
β”‚   β”‚   β”œβ”€β”€ encryption.py
β”‚   β”‚   β”œβ”€β”€ form_mapper.py
β”‚   β”‚   β”œβ”€β”€ ref_catalog.py
β”‚   β”‚   └── rule_pack_editor.py
β”‚   β”œβ”€β”€ static/
β”‚   β”‚   β”œβ”€β”€ css/
β”‚   β”‚   β”‚   └── main.css
β”‚   β”‚   └── js/
β”‚   β”‚       β”œβ”€β”€ ai-assist.js
β”‚   β”‚       β”œβ”€β”€ compare.js
β”‚   β”‚       β”œβ”€β”€ constant-editor.js
β”‚   β”‚       β”œβ”€β”€ forms.js
β”‚   β”‚       β”œβ”€β”€ rule-editor.js
β”‚   β”‚       β”œβ”€β”€ submit-guard.js
β”‚   β”‚       └── theme.js
β”‚   └── templates/
β”‚       β”œβ”€β”€ layouts/
β”‚       β”‚   └── base.html
β”‚       └── pages/
β”‚           β”œβ”€β”€ audit_trace.html
β”‚           β”œβ”€β”€ calculate.html
β”‚           β”œβ”€β”€ constant_editor.html
β”‚           β”œβ”€β”€ dashboard.html
β”‚           β”œβ”€β”€ forms_view.html
β”‚           β”œβ”€β”€ home.html
β”‚           β”œβ”€β”€ import_csv.html
β”‚           β”œβ”€β”€ legal.html
β”‚           β”œβ”€β”€ rotate_key.html
β”‚           β”œβ”€β”€ rule_editor.html
β”‚           β”œβ”€β”€ rule_pack_ai_assist.html
β”‚           β”œβ”€β”€ rule_pack_detail.html
β”‚           β”œβ”€β”€ rule_pack_import.html
β”‚           β”œβ”€β”€ rule_packs.html
β”‚           β”œβ”€β”€ run_compare.html
β”‚           β”œβ”€β”€ runs.html
β”‚           β”œβ”€β”€ unlock.html
β”‚           └── whatif.html
β”œβ”€β”€ CHANGELOG.md
β”œβ”€β”€ CITATION.cff
β”œβ”€β”€ CLAUDE.md
β”œβ”€β”€ CODE_OF_CONDUCT.md
β”œβ”€β”€ CONTRIBUTING.md
β”œβ”€β”€ docs/
β”‚   β”œβ”€β”€ DISCLAIMER.md
β”‚   β”œβ”€β”€ ENCRYPTION.md
β”‚   β”œβ”€β”€ EXPORT_CONTROL.md
β”‚   β”œβ”€β”€ NOTICE.md
β”‚   β”œβ”€β”€ ROADMAP_ARCHIVE_v1.md
β”‚   β”œβ”€β”€ RULE_PACK_AUTHORING.md
β”‚   β”œβ”€β”€ STATE_AUTHORING_GUIDE.md
β”‚   └── superpowers/
β”‚       β”œβ”€β”€ plans/
β”‚       β”‚   β”œβ”€β”€ 2026-03-15-federal-completeness.md
β”‚       β”‚   β”œβ”€β”€ 2026-03-16-state-expansion.md
β”‚       β”‚   β”œβ”€β”€ 2026-03-18-forms-support.md
β”‚       β”‚   β”œβ”€β”€ 2026-03-18-multi-year-support.md
β”‚       β”‚   β”œβ”€β”€ 2026-03-18-qa-remediation.md
β”‚       β”‚   β”œβ”€β”€ 2026-03-21-ca-ny-state-packs.md
β”‚       β”‚   β”œβ”€β”€ 2026-03-21-itemized-deductions-credits.md
β”‚       β”‚   β”œβ”€β”€ 2026-03-22-data-mgmt-dx.md
β”‚       β”‚   β”œβ”€β”€ 2026-03-22-hardening-qa.md
β”‚       β”‚   β”œβ”€β”€ 2026-03-22-rule-pack-editor.md
β”‚       β”‚   β”œβ”€β”€ 2026-03-24-ui-ux-beta-hardening.md
β”‚       β”‚   └── 2026-03-29-phase1-structural-hardening.md
β”‚       └── specs/
β”‚           β”œβ”€β”€ 2026-03-15-federal-completeness-design.md
β”‚           β”œβ”€β”€ 2026-03-16-state-expansion-design.md
β”‚           β”œβ”€β”€ 2026-03-22-hardening-qa-design.md
β”‚           β”œβ”€β”€ 2026-03-22-rule-pack-editor-design.md
β”‚           └── 2026-07-03-authoring-for-non-coders-design.md
β”œβ”€β”€ LICENSE
β”œβ”€β”€ main.py
β”œβ”€β”€ pyproject.toml
β”œβ”€β”€ README.md
β”œβ”€β”€ README.txt
β”œβ”€β”€ requirements-dev.txt
β”œβ”€β”€ requirements.txt
β”œβ”€β”€ ROADMAP.md
β”œβ”€β”€ rule_packs/
β”‚   β”œβ”€β”€ federal/
β”‚   β”‚   β”œβ”€β”€ 2023/
β”‚   β”‚   β”‚   β”œβ”€β”€ federal_2023_manifest.yaml
β”‚   β”‚   β”‚   └── federal_2023_rules.yaml
β”‚   β”‚   β”œβ”€β”€ 2024/
β”‚   β”‚   β”‚   β”œβ”€β”€ federal_2024_manifest.yaml
β”‚   β”‚   β”‚   └── federal_2024_rules.yaml
β”‚   β”‚   └── 2025/
β”‚   β”‚       β”œβ”€β”€ federal_2025_manifest.yaml
β”‚   β”‚       └── federal_2025_rules.yaml
β”‚   └── state/
β”‚       β”œβ”€β”€ _template/
β”‚       β”‚   └── 2024/
β”‚       β”‚       β”œβ”€β”€ state_TEMPLATE_2024_manifest.yaml
β”‚       β”‚       └── state_TEMPLATE_2024_rules.yaml
β”‚       β”œβ”€β”€ AK/
β”‚       β”‚   └── 2024/
β”‚       β”‚       β”œβ”€β”€ state_AK_2024_manifest.yaml
β”‚       β”‚       └── state_AK_2024_rules.yaml
β”‚       β”œβ”€β”€ CA/
β”‚       β”‚   └── 2024/
β”‚       β”‚       β”œβ”€β”€ state_CA_2024_manifest.yaml
β”‚       β”‚       └── state_CA_2024_rules.yaml
β”‚       β”œβ”€β”€ FL/
β”‚       β”‚   └── 2024/
β”‚       β”‚       β”œβ”€β”€ state_FL_2024_manifest.yaml
β”‚       β”‚       └── state_FL_2024_rules.yaml
β”‚       β”œβ”€β”€ GA/
β”‚       β”‚   β”œβ”€β”€ 2023/
β”‚       β”‚   β”‚   β”œβ”€β”€ state_GA_2023_manifest.yaml
β”‚       β”‚   β”‚   └── state_GA_2023_rules.yaml
β”‚       β”‚   β”œβ”€β”€ 2024/
β”‚       β”‚   β”‚   β”œβ”€β”€ state_GA_2024_manifest.yaml
β”‚       β”‚   β”‚   └── state_GA_2024_rules.yaml
β”‚       β”‚   └── 2025/
β”‚       β”‚       β”œβ”€β”€ state_GA_2025_manifest.yaml
β”‚       β”‚       └── state_GA_2025_rules.yaml
β”‚       β”œβ”€β”€ IL/
β”‚       β”‚   └── 2024/
β”‚       β”‚       β”œβ”€β”€ state_IL_2024_manifest.yaml
β”‚       β”‚       └── state_IL_2024_rules.yaml
β”‚       β”œβ”€β”€ NC/
β”‚       β”‚   └── 2024/
β”‚       β”‚       β”œβ”€β”€ state_NC_2024_manifest.yaml
β”‚       β”‚       └── state_NC_2024_rules.yaml
β”‚       β”œβ”€β”€ NH/
β”‚       β”‚   └── 2024/
β”‚       β”‚       β”œβ”€β”€ state_NH_2024_manifest.yaml
β”‚       β”‚       └── state_NH_2024_rules.yaml
β”‚       β”œβ”€β”€ NV/
β”‚       β”‚   └── 2024/
β”‚       β”‚       β”œβ”€β”€ state_NV_2024_manifest.yaml
β”‚       β”‚       └── state_NV_2024_rules.yaml
β”‚       β”œβ”€β”€ NY/
β”‚       β”‚   └── 2024/
β”‚       β”‚       β”œβ”€β”€ state_NY_2024_manifest.yaml
β”‚       β”‚       └── state_NY_2024_rules.yaml
β”‚       β”œβ”€β”€ PA/
β”‚       β”‚   └── 2024/
β”‚       β”‚       β”œβ”€β”€ state_PA_2024_manifest.yaml
β”‚       β”‚       └── state_PA_2024_rules.yaml
β”‚       β”œβ”€β”€ SD/
β”‚       β”‚   └── 2024/
β”‚       β”‚       β”œβ”€β”€ state_SD_2024_manifest.yaml
β”‚       β”‚       └── state_SD_2024_rules.yaml
β”‚       β”œβ”€β”€ TN/
β”‚       β”‚   └── 2024/
β”‚       β”‚       β”œβ”€β”€ state_TN_2024_manifest.yaml
β”‚       β”‚       └── state_TN_2024_rules.yaml
β”‚       β”œβ”€β”€ TX/
β”‚       β”‚   └── 2024/
β”‚       β”‚       β”œβ”€β”€ state_TX_2024_manifest.yaml
β”‚       β”‚       └── state_TX_2024_rules.yaml
β”‚       β”œβ”€β”€ WA/
β”‚       β”‚   └── 2024/
β”‚       β”‚       β”œβ”€β”€ state_WA_2024_manifest.yaml
β”‚       β”‚       └── state_WA_2024_rules.yaml
β”‚       └── WY/
β”‚           └── 2024/
β”‚               β”œβ”€β”€ state_WY_2024_manifest.yaml
β”‚               └── state_WY_2024_rules.yaml
β”œβ”€β”€ run.bat
β”œβ”€β”€ run.sh
β”œβ”€β”€ scripts/
β”‚   └── validate_rule_pack.py
β”œβ”€β”€ SECURITY.md
└── tests/
    β”œβ”€β”€ __init__.py
    β”œβ”€β”€ conftest.py
    β”œβ”€β”€ test_additional_medicare.py
    β”œβ”€β”€ test_additional_standard_deduction.py
    β”œβ”€β”€ test_ai_prompt.py
    β”œβ”€β”€ test_authoring_e2e.py
    β”œβ”€β”€ test_calculate_name_validation.py
    β”œβ”€β”€ test_calculator_resolve_ref.py
    β”œβ”€β”€ test_capital_loss_carryover.py
    β”œβ”€β”€ test_chain_integrity.py
    β”œβ”€β”€ test_constants_editor.py
    β”œβ”€β”€ test_data_mgmt.py
    β”œβ”€β”€ test_deep_review_fixes.py
    β”œβ”€β”€ test_dependent_care.py
    β”œβ”€β”€ test_edge_cases.py
    β”œβ”€β”€ test_education_credits.py
    β”œβ”€β”€ test_encoding_guard.py
    β”œβ”€β”€ test_encrypted_database.py
    β”œβ”€β”€ test_eitc.py
    β”œβ”€β”€ test_encryption.py
    β”œβ”€β”€ test_engine_hardening.py
    β”œβ”€β”€ test_error_paths.py
    β”œβ”€β”€ test_federal_corrections.py
    β”œβ”€β”€ test_forms.py
    β”œβ”€β”€ test_golden.py
    β”œβ”€β”€ test_golden2.py
    β”œβ”€β”€ test_golden_m1.py
    β”œβ”€β”€ test_hash_versioning.py
    β”œβ”€β”€ test_itemized_credits.py
    β”œβ”€β”€ test_logging.py
    β”œβ”€β”€ test_ltcg_rates.py
    β”œβ”€β”€ test_matrix_lookup.py
    β”œβ”€β”€ test_medicare_wages.py
    β”œβ”€β”€ test_military.py
    β”œβ”€β”€ test_milestone12_structure.py
    β”œβ”€β”€ test_milestone14_csp.py
    β”œβ”€β”€ test_milestone15_pagination.py
    β”œβ”€β”€ test_milestone6_routes.py
    β”œβ”€β”€ test_multi_year.py
    β”œβ”€β”€ test_multistate.py
    β”œβ”€β”€ test_niit.py
    β”œβ”€β”€ test_ny_recapture.py
    β”œβ”€β”€ test_parse_money.py
    β”œβ”€β”€ test_paste_import.py
    β”œβ”€β”€ test_route_coverage.py
    β”œβ”€β”€ test_rule_pack_editor.py
    β”œβ”€β”€ test_rule_pack_routes.py
    β”œβ”€β”€ test_schedule_8812.py
    β”œβ”€β”€ test_se_tax.py
    β”œβ”€β”€ test_services_hardening.py
    β”œβ”€β”€ test_state_ca_ny.py
    β”œβ”€β”€ test_state_corrections.py
    β”œβ”€β”€ test_state_credits.py
    β”œβ”€β”€ test_state_dependents.py
    β”œβ”€β”€ test_state_expansion.py
    β”œβ”€β”€ test_state_pa_il_nc.py
    └── test_web_hardening.py

Legal & Acknowledgments

Tax Co-Pilot is licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later). See LICENSE for the full text.

Encryption Engine

Database encryption at rest is powered by SQLCipher (AES-256), Copyright 2008-2024 Zetetic LLC, licensed under BSD-3-Clause. SQLCipher is built on SQLite (public domain).

The cryptography library is used for legacy/compatibility encryption tooling (Apache-2.0 OR BSD-3-Clause), including OpenSSL (Apache-2.0).

Key Dependencies

Library License Use
FastAPI MIT Web framework
Uvicorn BSD-3-Clause ASGI server
Pydantic MIT Data validation
Jinja2 BSD-3-Clause Template engine
PyYAML MIT YAML rule pack parsing
python-multipart Apache-2.0 Form data parsing
pysqlcipher3 zlib/libpng SQLCipher Python binding
keyring MIT OS credential storage

All third-party licenses are permissive and compatible with AGPL-3.0. Full attribution in docs/NOTICE.md.

Export Control

This software contains cryptographic functionality (AES-256 via SQLCipher, PBKDF2-HMAC-SHA256). Distributed under the TSU exception (EAR 740.13(e)). See docs/EXPORT_CONTROL.md.

Disclaimer

This software is provided "as is", without warranty of any kind. Tax Co-Pilot is not tax advice software. All data is stored locally on your device. You are solely responsible for your data, backups, and encryption passwords. See the AGPL-3.0 license sections 15-16 for the full warranty disclaimer.

About

Tax_Co-Pilot is a locally hosted, privacy-first personal tax software system designed for auditability and reproducibility.

Resources

License

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors