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

GST Return Reconciliation

Download GST returns through the lightweight operator agent, store them in the configured client local storage, and reconcile against Accounting Mirror.

Back to Accounting
{% if message %}
{{ message }}
{% endif %} {% if error %}
{{ error }}
{% endif %}
{% if selected_client and selected_registration %}

1. Automatic GST Download

The lightweight GST Operator Agent runs only on this workstation. It opens visible Chrome/Edge, autofills the selected Credential Vault username/password, and waits for you to complete CAPTCHA/OTP. It does not run Tally or hold the client storage.

GST Operator Agent: Checking… v{{ operator_agent_version }} Download / Install Agent
{% if credentials|length==1 %}

The only eligible GST Portal credential has been selected automatically.

{% endif %}
Returns to download
Configured Storage Agent: {{ 'Online' if node_online else 'Offline' }}

For Full Financial Year, the job processes April through March and reports progress month by month. The password is redeemed directly by the localhost agent and is never placed in this page's HTML or URL.

2. Manual Import Fallback

If a GST portal download cannot be automated, keep the workflow moving by importing the portal JSON/ZIP files. They use the same client GST storage hierarchy and the same reconciliation engine.

3. Reconcile Stored Data

Sales: Accounting Mirror vs GSTR-1. Purchases: Accounting Mirror vs GSTR-2B. ITC: GSTR-2B vs GSTR-3B. Analysis reads only stored client data, so download and reconciliation remain independent.

{% set a=request.session.get('gst_reconciliation_result') or {} %} {% if a %} {% set s=a.get('sales_reconciliation',{}).get('counts',{}) %}{% set p=a.get('purchase_reconciliation',{}).get('counts',{}) %}

Reconciliation Summary — {{ a.get('period','') }}

Sales vs GSTR-1

Books {{ s.get('books',0) }} · Portal {{ s.get('portal',0) }} · Matched {{ s.get('matched',0) }} · Missing in portal {{ s.get('missing_in_portal',0) }} · Missing in books {{ s.get('missing_in_books',0) }} · Value mismatch {{ s.get('value_mismatch',0) }}

Purchases vs GSTR-2B

Books {{ p.get('books',0) }} · 2B {{ p.get('portal',0) }} · Matched {{ p.get('matched',0) }} · Missing in 2B {{ p.get('missing_in_portal',0) }} · Missing in books {{ p.get('missing_in_books',0) }} · Value mismatch {{ p.get('value_mismatch',0) }}

ITC: GSTR-2B vs GSTR-3B

{% for tax,row in a.get('itc_reconciliation',{}).items() %}{% endfor %}
TaxGSTR-2BGSTR-3BDifference
{{ tax }}{{ '%.2f'|format(row.get('gstr2b',0)) }}{{ '%.2f'|format(row.get('gstr3b',0)) }}{{ '%.2f'|format(row.get('difference',0)) }}
{% endif %} {% endif %}
{% endblock %}