93 lines
3.9 KiB
HTML
93 lines
3.9 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Revisar importação{% endblock %}
|
|
{% block content %}
|
|
|
|
<div class="page-head">
|
|
<div>
|
|
<h2>Revisar antes de importar</h2>
|
|
<p class="muted">Confira os documentos extraídos. Corrija os ilegíveis e confirme.</p>
|
|
</div>
|
|
<a href="/" class="btn btn-ghost btn-sm">Cancelar</a>
|
|
</div>
|
|
|
|
<section class="summary-banner">
|
|
<div class="summary-item">
|
|
<span class="summary-label">Documentos</span>
|
|
<strong class="summary-value">{{ summary.count }}</strong>
|
|
</div>
|
|
<div class="summary-item">
|
|
<span class="summary-label">Valor total</span>
|
|
<strong class="summary-value money">{{ summary.total | money }}</strong>
|
|
</div>
|
|
{% if summary.pendentes %}
|
|
<div class="summary-item warn">
|
|
<span class="summary-label">Precisam de correção</span>
|
|
<strong class="summary-value">{{ summary.pendentes }}</strong>
|
|
</div>
|
|
{% endif %}
|
|
</section>
|
|
|
|
{% if not rows %}
|
|
<div class="card"><p class="muted">Nenhum documento neste lote. <a href="/" class="link">Voltar</a>.</p></div>
|
|
{% else %}
|
|
|
|
<div class="staging-list">
|
|
{% for r in rows %}
|
|
<article class="staging-row {{ 'row-warn' if (not r.legible or not r.supplier_name or r.total_paid is none) else '' }}">
|
|
<div class="staging-badges">
|
|
{% if not r.legible %}<span class="badge badge-warn">Ilegível — revise</span>{% endif %}
|
|
{% if r.legible and (not r.supplier_name or r.total_paid is none) %}<span class="badge badge-warn">Incompleto — preencha</span>{% endif %}
|
|
<span class="badge badge-conf badge-{{ r.confidence }}">{{ r.confidence }}</span>
|
|
<span class="badge badge-src">{{ 'IA' if r.extractor == 'openai' else 'OCR local' }}</span>
|
|
{% if r.uncertain_fields and r.uncertain_fields != '[]' %}
|
|
<span class="badge badge-fields">incertos: {{ r.uncertain_fields | replace('[','') | replace(']','') | replace('"','') }}</span>
|
|
{% endif %}
|
|
</div>
|
|
<form method="post" action="/import/{{ batch.id }}/update/{{ r.id }}" class="staging-form">
|
|
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
|
<label class="field">
|
|
<span>Data</span>
|
|
<input type="date" name="purchase_date" value="{{ r.purchase_date }}">
|
|
</label>
|
|
<label class="field grow">
|
|
<span>Fornecedor</span>
|
|
<input type="text" name="supplier_name" value="{{ r.supplier_name or '' }}" placeholder="Nome do estabelecimento">
|
|
</label>
|
|
<label class="field">
|
|
<span>Valor (R$)</span>
|
|
<input type="text" inputmode="decimal" name="total_paid" value="{{ '%.2f'|format(r.total_paid) if r.total_paid is not none else '' }}" placeholder="0,00">
|
|
</label>
|
|
<div class="staging-actions">
|
|
<button type="submit" class="btn btn-primary btn-sm">Salvar correção</button>
|
|
<a href="/files/{{ r.upload_id }}" target="_blank" rel="noopener" class="btn btn-ghost btn-sm">Ver arquivo</a>
|
|
</div>
|
|
</form>
|
|
<form method="post" action="/import/{{ batch.id }}/discard/{{ r.id }}" class="staging-discard"
|
|
onsubmit="return confirm('Descartar este documento do lote?');">
|
|
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
|
<button type="submit" class="btn btn-danger btn-sm">Descartar</button>
|
|
</form>
|
|
<div class="staging-source">{{ r.source_file_name }}</div>
|
|
</article>
|
|
{% endfor %}
|
|
</div>
|
|
|
|
<div class="confirm-bar">
|
|
<div class="muted">
|
|
{% if summary.pendentes %}
|
|
Corrija os {{ summary.pendentes }} documento(s) pendente(s) antes de importar.
|
|
{% else %}
|
|
Tudo pronto para importar.
|
|
{% endif %}
|
|
</div>
|
|
<form method="post" action="/import/{{ batch.id }}/confirm">
|
|
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
|
<button type="submit" class="btn btn-primary btn-lg" {{ 'disabled' if summary.pendentes else '' }}>
|
|
Confirmar importação de {{ summary.count }} documento(s) · {{ summary.total | money }}
|
|
</button>
|
|
</form>
|
|
</div>
|
|
|
|
{% endif %}
|
|
{% endblock %}
|