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

Tools · Accounting · Tally

{{ 'Cash Payment Entry Allocation' if page_mode == 'allocation' else 'Cash Payment Compliance Review' }}

{% if page_mode == 'allocation' %}

Prepare and validate cash payment entry allocation using only actual source payment dates. The tool checks totals, the configured daily limit and the permitted source-date window; it never invents or changes dates.

{% else %}

Read-only Tally review for cash payments above the configured limit, same-day party aggregation and possible split-payment patterns.

{% endif %}
Back to Tally
{% if saved %}
Cash payment rule settings saved.
{% endif %} {% if command_error %}
{{ command_error }}
{% endif %} {% if page_mode != 'allocation' %}

Cash Payment Compliance Review

Uses the same live Tally master-reading mechanism as Opening Balance Review. By default only ledgers under Cash-in-Hand are shown; choose “All Tally ledgers” only for manual selection when required.

Select the Tally company, choose a Cash-in-Hand ledger, and review its cash transactions for the selected period. The existing background extraction, threshold analysis and dual VPS/Local Agent progress are preserved.

Rule Settings

{% if cache_job %}

Local Tally SQLite Cache

Status: {{ cache_job.status }}{% if cache_job.stage %} · {{ cache_job.stage }}{% endif %}

{{ cache_job.completed_days }}/{{ cache_job.total_days }} day(s)
{{ cache_job.vouchers_cached }} Cash-ledger voucher(s)
{% if cache_job.cash_ledgers %}
Ledger: {{ cache_job.cash_ledgers|join(', ') }}
{% endif %}
{% if cache_job.error %}

{{ cache_job.error }}

{% endif %}
{% endif %} {% if review %}
{% if review.sqlite_cache %}
Analysis completed from the Local Agent SQLite cache. TallyPrime was used only for the slow background extraction and was released before this analysis ran. {{ review.tally_request_count or 0 }} Tally request(s), {{ review.tally_retry_count or 0 }} retry/retries, and approximately {{ review.tally_pause_ms or 0 }} ms cooling between successful day reads.
{% endif %}
{% for label, value in [('Vouchers reviewed', review.summary.vouchers_reviewed), ('Cash payments', review.summary.cash_payment_vouchers), ('Single-voucher exceptions', review.summary.single_voucher_exceptions), ('Same-day exceptions', review.summary.same_day_exceptions), ('Possible split patterns', review.summary.possible_split_patterns)] %}
{{ label }}
{{ value }}
{% endfor %}

Above-limit / same-day aggregate exceptions

{% for row in review.exceptions %}{% else %}{% endfor %}
DateParty / ledgerAmountReasonVoucher(s)
{{ row.date }}{{ row.party }}₹{{ '%.2f'|format(row.amount) }}{{ row.reason }}{{ row.voucher_numbers|join(', ') }}
No above-limit exception found for the selected period.

Possible split-payment patterns — review only

These rows are indicators for auditor review; they do not by themselves determine tax treatment.

{% for row in review.possible_split_payments %}{% else %}{% endfor %}
Party / ledgerPeriodTotalDaily amounts
{{ row.party }}{{ row.date_from }} → {{ row.date_to }}₹{{ '%.2f'|format(row.total_amount) }}{% for item in row.days %}{{ item.date }}: ₹{{ '%.2f'|format(item.amount) }}{% if not loop.last %}
{% endif %}{% endfor %}
No near-limit multi-day pattern found.
{% endif %} {% endif %} {% if page_mode == 'allocation' %}

Cash Payment Entry Allocation — Actual Source Dates

Use this when the source records establish that one accounting amount was actually paid on multiple dates. Enter the real dates and amounts. The tool validates totals, daily limits and the configured date window; it does not fabricate dates or automatically rewrite Tally vouchers.

{% if allocation_plan %}
{{ 'Ready for accounting review' if allocation_plan.status == 'ready' else 'Manual review required' }}
{% if allocation_plan.errors %}
    {% for item in allocation_plan.errors %}
  • {{ item }}
  • {% endfor %}
{% endif %}
Expected total: ₹{{ '%.2f'|format(allocation_plan.expected_total or 0) }} · Source total: ₹{{ '%.2f'|format(allocation_plan.supplied_total or 0) }} · Date span: {{ allocation_plan.span_days or 0 }} day(s) / {{ allocation_plan.max_allocation_days or setting.max_allocation_days }} allowed.
{% if allocation_plan.entries %}{% for row in allocation_plan.entries %}{% endfor %}
Actual DateProposed Entry Amount
{{ row.date }}₹{{ '%.2f'|format(row.amount) }}
{% endif %}

{{ allocation_plan.note or 'No accounting dates are generated automatically.' }}

{% endif %}
{% endif %}
{% endblock %}