{% extends "ui/templates/base/layout.html" %} {% block content %}

Accounting · Bank Reconciliation

Bank Reconciliation

Compare the normalized transactions from a completed client-bound Bank Analyzer job with one selected Tally Bank ledger. This screen is read-only against Tally; unmatched bank rows can later be handled through the existing Accounting Bank Queue.

{% if message %}
{{ message }}
{% endif %} {% if error %}
{{ error }}
{% endif %}
{% if selected_client and selected_tally_guid %}

Start a reconciliation run

The Local Agent only reads vouchers from the selected Tally company/date range and filters them to the selected Bank ledger. No accounting entry is posted by this action.

{% endif %} {% if selected_client %}

Recent Reconciliation Runs

Runs preserve their results and never modify Tally.

{% for run in runs %} {% set summary = run.summary_json|default('{}') %} {% else %} {% endfor %}
RunBank LedgerPeriodStatusResult
#{{ run.id }} {{ run.bank_ledger_name }} {{ run.date_from }} → {{ run.date_to }} {{ run.status|replace('_',' ')|title }}{% if run.last_error %}
{{ run.last_error }}
{% endif %}
{% if run.status=='completed' %} {% set s = run.summary_json|from_json if false else none %} Open run to view matched / probable / bank-only / books-only detail. {% else %}—{% endif %} Open
No reconciliation runs yet.
{% endif %} {% if selected_run %}

Run #{{ selected_run.id }} · {{ selected_run.bank_ledger_name }}

{{ selected_run.date_from }} → {{ selected_run.date_to }} · Status {{ selected_run.status|replace('_',' ')|title }}

{% if selected_run.status=='completed' %}
{% endif %}
{% if selected_run.status in ['queued','extracting'] %}
The connected Local Agent is reading Tally vouchers. Refresh this page shortly.
{% elif selected_run.status=='failed' %}
{{ selected_run.last_error }}
{% elif selected_run.status=='completed' %}
{% for item in items %} {% else %} {% endfor %}
ResultBank StatementTallyWhyAction
{{ item.match_status|replace('_',' ')|title }} {% if item.confidence %}
{{ item.confidence }}%
{% endif %}
{% if item.bank_transaction_id %}
{{ item.bank_date }} · {{ item.bank_direction }} · ₹{{ '%.2f'|format(item.bank_amount) }}
{{ item.bank_reference or '-' }}
{{ item.bank_narration }}
{% else %}—{% endif %}
{% if item.tally_voucher_number or item.tally_guid %}
{{ item.tally_date }} · {{ item.tally_voucher_type }} · ₹{{ '%.2f'|format(item.tally_amount) }}
Voucher {{ item.tally_voucher_number or item.tally_guid }}
{{ item.tally_reference or '-' }}
{{ item.tally_narration }}
{% else %}—{% endif %}
{{ item.match_reason }} {% if item.match_status=='bank_only' and item.bank_transaction_id %} Review in Accounting Queue {% elif item.match_status=='books_only' %} Investigate timing / statement coverage. {% else %} Review if needed. {% endif %}
No reconciliation rows for this filter.
{% endif %}
{% endif %}
{% endblock %}