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

GST Return Reconciliation

Download GST portal data through Credential Vault, store it in 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. Download from GST Portal

The Local Storage Agent opens GST portal on the workstation. Username/password are taken from Credential Vault; captcha/OTP remains interactive. Raw return data is saved under the client's FY/GST/GSTIN/period directory.

Storage Agent: {{ 'Online' if node_online else 'Offline' }}

2. Reconcile Stored Data

Sales: Accounting Mirror vs GSTR-1. Purchases: Accounting Mirror vs GSTR-2B. ITC: GSTR-2B vs GSTR-3B. Reconciliation JSON is retained in the same local client GST directory.

{% if status %}

Download Status

Status: {{ status.status or '-' }}
Stage: {{ status.stage or '-' }}
{{ status.message or '' }}
{% endif %} {% 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 %}