{% extends "base.html" %} {% block content %} {# Build a clean human title — strip doc_type from start or end wherever AI inserted it #} {% set raw_name = doc.display_name or doc.original_filename %} {% set human_name = raw_name %} {% if doc.doc_type %} {# Strip from start: "1099-NEC — Gusto" → "Gusto" #} {% if human_name.startswith(doc.doc_type) %} {% set human_name = human_name[doc.doc_type|length:].lstrip(' \u2014-').strip() %} {% endif %} {# Strip from end: "Gusto — 1099-NEC" → "Gusto" #} {% if human_name.endswith(doc.doc_type) %} {% set human_name = human_name[:(human_name|length - doc.doc_type|length)].rstrip(' \u2014-').strip() %} {% endif %} {% endif %}
{# Title row #}
{{ doc.doc_type }}

{{ human_name }}

{{ doc.page_count }} pages
{# Warning banner #}
⚠️ Verify all extracted values against your original document before using for tax filing. TaxClaw uses AI extraction — values may contain errors.
{# Action buttons #}
⬇ Download original 📊 Export to Spreadsheet
Advanced export ▾
🗃 Data Analysis Export 🛠 Developer Export (JSON)
Preview {% if doc.page_count and doc.page_count > 1 %} {{ doc.page_count }} pages {% endif %}
{% set pages = range(doc.page_count or 1) %} {% for p in pages %}
{% if (doc.page_count or 1) > 1 %}
{{ p + 1 }} / {{ doc.page_count }}
{% endif %}
{% endfor %}
{# ── Editable fields ─────────────────────────────────────── #}
Document info
{# ── Status chips ────────────────────────────────────────── #}
Status
{# Processing status #} {% if doc.status == 'processed' %} {% set st_icon = '✅' %}{% set st_label = 'Processed' %}{% set st_color = 'rgba(34,197,94,0.12)' %}{% set st_border = 'rgba(34,197,94,0.35)' %}{% set st_text = '#4ade80' %} {% elif doc.status == 'pending' %} {% set st_icon = '⏳' %}{% set st_label = 'Pending' %}{% set st_color = 'rgba(245,158,11,0.12)' %}{% set st_border = 'rgba(245,158,11,0.35)' %}{% set st_text = 'var(--warn)' %} {% else %} {% set st_icon = '❌' %}{% set st_label = (doc.status or 'Unknown')|title %}{% set st_color = 'rgba(239,68,68,0.12)' %}{% set st_border = 'rgba(239,68,68,0.35)' %}{% set st_text = '#f87171' %} {% endif %}
Processing
{{ st_icon }} {{ st_label }}
{# Needs review #} {% if doc.needs_review %} {% set nr_icon = '⚠️' %}{% set nr_label = 'Needs review' %}{% set nr_color = 'rgba(245,158,11,0.12)' %}{% set nr_border = 'rgba(245,158,11,0.35)' %}{% set nr_text = 'var(--warn)' %} {% else %} {% set nr_icon = '✅' %}{% set nr_label = 'Looks good' %}{% set nr_color = 'rgba(34,197,94,0.12)' %}{% set nr_border = 'rgba(34,197,94,0.35)' %}{% set nr_text = '#4ade80' %} {% endif %}
Review flag
{{ nr_icon }} {{ nr_label }}
{# Classification confidence #} {% set cls_pct = ((doc.classification_confidence or 0) * 100)|round|int %} {% if cls_pct >= 80 %} {% set cls_color = 'rgba(34,197,94,0.12)' %}{% set cls_border = 'rgba(34,197,94,0.35)' %}{% set cls_text = '#4ade80' %}{% set cls_dot = '🟢' %} {% elif cls_pct >= 50 %} {% set cls_color = 'rgba(245,158,11,0.12)' %}{% set cls_border = 'rgba(245,158,11,0.35)' %}{% set cls_text = 'var(--warn)' %}{% set cls_dot = '🟡' %} {% else %} {% set cls_color = 'rgba(239,68,68,0.12)' %}{% set cls_border = 'rgba(239,68,68,0.35)' %}{% set cls_text = '#f87171' %}{% set cls_dot = '🔴' %} {% endif %}
Doc type confidence
{{ cls_dot }} {{ cls_pct }}%
{# Overall extraction confidence #} {% set ovr_pct = ((doc.overall_confidence or 0) * 100)|round|int %} {% if ovr_pct >= 80 %} {% set ovr_color = 'rgba(34,197,94,0.12)' %}{% set ovr_border = 'rgba(34,197,94,0.35)' %}{% set ovr_text = '#4ade80' %}{% set ovr_dot = '🟢' %} {% elif ovr_pct >= 50 %} {% set ovr_color = 'rgba(245,158,11,0.12)' %}{% set ovr_border = 'rgba(245,158,11,0.35)' %}{% set ovr_text = 'var(--warn)' %}{% set ovr_dot = '🟡' %} {% else %} {% set ovr_color = 'rgba(239,68,68,0.12)' %}{% set ovr_border = 'rgba(239,68,68,0.35)' %}{% set ovr_text = '#f87171' %}{% set ovr_dot = '🔴' %} {% endif %}
Extraction quality
{{ ovr_dot }} {{ ovr_pct }}%
{% if doc.needs_review %}
{% else %}
{% endif %}
{% if doc.doc_type == '1099-DA' and transactions %}

1099-DA Transactions ({{ transactions|length }})

{% for t in transactions %} {% endfor %}
Asset Units Date acquired Date sold Proceeds Cost basis Term 8949 Noncovered
{{ t.asset_name or '' }} {{ t.asset_code or '' }} {{ t.units or '' }} {{ t.date_acquired or '' }} {{ t.date_sold or '' }} {{ t.proceeds or '' }} {% if t.cost_basis %} {{ t.cost_basis }} {% else %} missing {% endif %} {{ t.gain_loss_term or '' }} {{ t.form_8949_code or '' }} {{ t.noncovered or '' }}
{% endif %}

Extracted fields

{% if fields and fields|length > 0 %} {% for key, label, val in fields %} {% set is_dollar = val and (val.startswith('$') or val.startswith('-$')) %} {% endfor %}
Field Value
{{ label }} {{ val if val else '—' }}
{% else %}
No extracted fields stored.
{% endif %}
{% if doc.doc_type == '1099-DA' %}
🪙 You extracted your 1099-DA. Now get your cost basis right.
Extracted proceeds are just step 1. Without cost basis, you can't calculate your gains — and the IRS will assume $0.
See what to do next →
{% endif %} {% endblock %}