Move AQMM controls to assurance engagement workflow

This commit is contained in:
A R R R Associates
2026-07-07 10:29:27 +05:30
parent cd355d6fc5
commit 05c882304b
10 changed files with 943 additions and 82 deletions
@@ -147,68 +147,20 @@
<input name="country" value="{{ form_data.country or (row.country if is_edit else 'India') }}" class="mt-1 w-full rounded-xl border border-slate-300 px-4 py-2 text-sm">
</div>
{% set acc_status = form_data.acceptance_status or (row.acceptance_status if is_edit else 'pending_review') %}
{% set acc_required = form_data.acceptance_required if form_data.acceptance_required is defined else (row.acceptance_required if is_edit else true) %}
{% set ind_done = form_data.independence_check_completed if form_data.independence_check_completed is defined else (row.independence_check_completed if is_edit else false) %}
{% set conflict_done = form_data.conflict_check_completed if form_data.conflict_check_completed is defined else (row.conflict_check_completed if is_edit else false) %}
{% set kyc_done = form_data.kyc_completed if form_data.kyc_completed is defined else (row.kyc_completed if is_edit else false) %}
{% set el_required = form_data.engagement_letter_required if form_data.engagement_letter_required is defined else (row.engagement_letter_required if is_edit else true) %}
{% set el_received = form_data.engagement_letter_received if form_data.engagement_letter_received is defined else (row.engagement_letter_received if is_edit else false) %}
<input type="hidden" name="acceptance_status" value="{{ acc_status }}">
<input type="hidden" name="acceptance_required" value="{{ '1' if acc_required else '0' }}">
<input type="hidden" name="independence_check_completed" value="{{ '1' if ind_done else '0' }}">
<input type="hidden" name="conflict_check_completed" value="{{ '1' if conflict_done else '0' }}">
<input type="hidden" name="kyc_completed" value="{{ '1' if kyc_done else '0' }}">
<input type="hidden" name="engagement_letter_required" value="{{ '1' if el_required else '0' }}">
<input type="hidden" name="engagement_letter_received" value="{{ '1' if el_received else '0' }}">
{# Client master is intentionally free of AQMM controls.
AQMM/quality workflow now starts only at assurance engagement creation.
Hidden compatibility fields prevent older backend handlers from failing
if Phase 2 client acceptance columns still exist in the database. #}
<input type="hidden" name="acceptance_status" value="{{ form_data.acceptance_status or (row.acceptance_status if is_edit else 'pending_review') }}">
<input type="hidden" name="acceptance_required" value="0">
<input type="hidden" name="independence_check_completed" value="0">
<input type="hidden" name="conflict_check_completed" value="0">
<input type="hidden" name="kyc_completed" value="0">
<input type="hidden" name="engagement_letter_required" value="0">
<input type="hidden" name="engagement_letter_received" value="0">
<input type="hidden" name="acceptance_review_notes" value="{{ form_data.acceptance_review_notes or (row.acceptance_review_notes if is_edit else '') }}">
<input type="hidden" name="acceptance_rejection_reason" value="{{ form_data.acceptance_rejection_reason or (row.acceptance_rejection_reason if is_edit else '') }}">
<div class="md:col-span-2 rounded-2xl border border-sky-200 bg-sky-50 p-4">
<div class="flex items-start justify-between gap-3">
<div>
<h4 class="text-sm font-semibold text-sky-950">Digital Client Acceptance Workflow</h4>
<p class="mt-1 text-xs text-sky-800">
Independence, conflict, KYC and engagement letter controls are completed from the client detail workflow after the client is saved.
Manual ticking is intentionally disabled on this form to preserve proper AQMM and peer review evidence.
</p>
</div>
<span class="rounded-full px-3 py-1 text-xs font-semibold {% if acc_status == 'approved' %}bg-emerald-100 text-emerald-700{% elif acc_status == 'rejected' %}bg-rose-100 text-rose-700{% else %}bg-amber-100 text-amber-800{% endif %}">{{ acc_status.replace('_',' ').title() }}</span>
</div>
<div class="mt-4 grid gap-3 md:grid-cols-2 text-sm text-slate-700">
<div class="rounded-xl bg-white/80 px-3 py-2 border border-sky-100">
<div class="text-xs font-semibold uppercase tracking-wide text-slate-500">Independence</div>
<div class="mt-1">{{ 'Completed' if ind_done else 'Declaration workflow pending' }}</div>
</div>
<div class="rounded-xl bg-white/80 px-3 py-2 border border-sky-100">
<div class="text-xs font-semibold uppercase tracking-wide text-slate-500">Conflict Check</div>
<div class="mt-1">{{ 'Completed' if conflict_done else 'Declaration workflow pending' }}</div>
</div>
<div class="rounded-xl bg-white/80 px-3 py-2 border border-sky-100">
<div class="text-xs font-semibold uppercase tracking-wide text-slate-500">KYC</div>
<div class="mt-1">{{ 'Verified from Permanent Documents' if kyc_done else 'Permanent document verification pending' }}</div>
</div>
<div class="rounded-xl bg-white/80 px-3 py-2 border border-sky-100">
<div class="text-xs font-semibold uppercase tracking-wide text-slate-500">Engagement Letter</div>
<div class="mt-1">
{% if not el_required %}Not required{% elif el_received %}Accepted / received{% else %}Digital OTP or manual signed upload pending{% endif %}
</div>
</div>
</div>
{% if is_edit %}
<p class="mt-3 text-xs text-slate-600">
Open the client detail page to request declarations, verify KYC from permanent documents, draft engagement letter, send it to client, and approve acceptance.
</p>
{% else %}
<p class="mt-3 text-xs text-slate-600">
Save the client first. The digital acceptance workflow will be available from the client detail page.
</p>
{% endif %}
</div>
<div class="md:col-span-2">
<label class="block text-sm font-medium text-slate-700">Notes</label>
<textarea name="notes" rows="4" class="mt-1 w-full rounded-xl border border-slate-300 px-4 py-2 text-sm">{{ form_data.notes or (row.notes if is_edit else '') }}</textarea>