2026-09-02
-
Rejected Visa Operational Lifecycle & Passport Return:
- Rejection Notification Emails (
POST /api/v1/visas/{id}/notify-rejection): Staff can dispatch branded, professional notification emails directly to clients when an embassy refuses a visa application. Emails include custom embassy decision remarks, assigned consultant contact info, and office passport collection instructions. - Bypassed Visa Issuance on Rejection Finalization: Finalizing passport collection on a rejected visa (
bookingApi.finalizeVisa) no longer demands visa numbers or issue dates; it immediately completes the operational lifecycle and markscompleted_at. - Preserved Rejection State in Active Services: Finalizing passport return retains
VisaStatus.rejectedin PostgreSQL rather than overwriting it withpassport_collected. Suppressed congratulatory “Visa Complete” approval emails. - Dossier & Services Panel Visibility (
ServicesPanel.tsx): The customer active services panel highlights rejected applications with a prominent redREJECTEDbadge andPASSPORT RETURNEDbadge upon completion, and strictly excludes rejected applications from the active held visas list inPassportVault.
- Rejection Notification Emails (
-
Rejected Visa Invoicing & Balance Waiver Settlement (
POST /api/v1/invoices/{id}/settle-rejection):- Uncollectible Debt Waiver: Settling a rejected visa invoice automatically attaches a “Visa Rejection Balance Waiver” discount line for the unpaid remainder, adjusting the net total amount to match collected revenue (
amountPaid), clearing outstanding debt (balanceDue = 0.00), and marking invoice status asPAID. - Preserved Invoice Audit Trail: Settled invoices remain fully visible and downloadable in the customer dossier with itemized waiver discount lines.
- Uncollectible Debt Waiver: Settling a rejected visa invoice automatically attaches a “Visa Rejection Balance Waiver” discount line for the unpaid remainder, adjusting the net total amount to match collected revenue (
-
Admin Invoice Cancellation Hard Delete (
cancelInvoice):- P&L and Revenue Integrity: Cancelling an invoice via
POST /api/v1/invoices/{id}/cancelpermanently removes the invoice, all line items, tax lines, discount lines, request links, and all associated receipts/payments from the database to ensure zero distortion in financial reports and monthly executive digests.
- P&L and Revenue Integrity: Cancelling an invoice via
-
Customer Dossier Direct Profile Navigation:
- Standardized Profile User Icon (
Userfromlucide-react): Replaced textual redirect links across Task Tracker drawers (TaskDetailDrawer.tsx), List views (TaskListView.tsx), Admin tables (AdminTaskTable.tsx), and Group drawers (LinkedGroupDrawer.tsx) with standard clickable profile icons linking directly to/client-dossier/:customerId.
- Standardized Profile User Icon (
-
Structured Customer Document Upload System:
- Default Document Line Items: Customer dossier Documents tab provides direct upload rows for standard travel documents (Passport, NIC, Photo, Bank Statements, Utility Bills, Tickets, Other).
- Standardized Naming Convention (
name_type): Files uploaded are automatically prefixed as<CustomerName>_<DocumentType>before persisting to Cloudflare R2 object storage.
Last updated on