Explorus Enterprise Suite / Delivery Review

What is built.
How far it goes.
What remains.

A scope-by-scope review of the travel operations platform, including functional revisions and the gap to the original three-month plan.

22 October 2026 · Asia/Kolkata · Code snapshot 195ca87 · Original plan: 8 modules / 12 weeks
Executive assessment

A substantial operations platform—not yet the complete enterprise scope.

The deepest delivery is in travel execution: lead/customer management, multi-family costing, payment planning, independent lead versions, document review and itinerary sharing. The largest remaining gaps are shared WhatsApp conversations, compliant invoicing, the referral wallet and lifecycle automations.

Depth matters as much as breadth.

Nine costing service tables, 17 database-backed report endpoints, formula-aware editing, locked customer funding agreements and review-first document imports show meaningful operational depth. They should be credited without equating them to unrelated unfinished deliverables.

Delivered beyond the plan's basic wording

  • Independent versions of the entire lead—not only a saved quotation.
  • Bank/ETO/ETC/ET family funding, ROE 1/2, lock/unlock behavior and effective markup.
  • Spreadsheet-style costing formulas, undo, date-group row handling, notes and refund events.
  • Bulk multi-traveller review from images/PDFs, saved raw originals and reusable document sources.
  • Configurable costing/vendor dropdowns and lead-specific access delegation.

Do not confuse these with completion

  • Wavebox enquiry capture ≠ a WATI-style shared conversation inbox.
  • Per-family invoice notes ≠ numbered, GST/TCS-compliant invoices.
  • Quotation status labels ≠ enforced approval and automatic version-diff workflows.
  • A delivery queue ≠ birthday, anniversary, passport, follow-up and invoice-reminder automations.
  • Seventeen reports ≠ every planned financial metric or CSV export.
Original scope / current coverage

All eight modules, assessed separately

“Built” below means functionality is present in the inspected source. It is not a fresh production acceptance test. No module is declared fully signed off against every original bullet.

Planned moduleCurrent assessmentFunctional revisions*
01 · Foundation & InfrastructureWeeks 1–2Core built · provider deliverable differs4catalogued themes
02 · WhatsApp IntegrationWeeks 3–4Capture built · shared messaging remains6catalogued themes
03 · CRM Core, Customers & VendorsWeeks 5–6Substantial core built · automation gaps10catalogued themes
04 · Dashboard & User InterfaceWeek 7Live dashboard built · inbox/export gaps3catalogued themes
05 · Itinerary Builder & SharingWeeks 8–9Core creation/sharing built · library gaps7catalogued themes
06 · Costing EngineWeeks 10–11Deep operational engine · approval gaps11catalogued themes
07 · Invoices, Payments & Family FundingWeek 12Funding/payments built · invoicing incomplete8catalogued themes
08 · Automation & ReportsWeek 12 · parallel17 live reports · lifecycle jobs absent2catalogued themes

*Counts refer to the explicitly numbered themes below. They are not commits, deployments, hours, or a completion percentage.

How revisions are counted

Each numbered entry describes a meaningful change in what a user or the system can do, calculate, preserve, share or access. Related fixes are grouped into one theme. Purely decorative changes, asset uploads, publication checkpoints and documentation-only edits are not counted.

These are catalogued functional revision themes, reconstructed from the supplied conversation, current source and available Git history—not a claim to know the exact number of implementation rounds. One request can affect multiple modules, so the per-module counts must not be added up as a count of unique change requests. Initial module creation is described under “What is built,” not billed as a revision.

Superseded rules are labelled.

For example, per-cell rounding and rounding costing before markup were discussed earlier. Current code instead applies markup to original costing and rounds the final combined amount once. The report credits the evolution without claiming both rules are active.

01 / ORIGINAL SCOPE · Weeks 1–2

Foundation & Infrastructure

Core built · provider deliverable differs

A real multi-workspace application with authentication, API authorization and persistent business data—not just a collection of screens.

What is built & how deep it goes

  • Registration, sign-in, email verification/invitations and server-managed signed sessions.
  • Workspace-scoped customers, leads, vendors and financial records, with permission checks on protected API actions.
  • Owner/member access controls, section-level read/write permissions, lead leaders and delegated editing.
  • Typed API contracts, database-backed services, private document storage and regression-test infrastructure.

What remains against the plan

  • The original Week 2 WATI connection/test-send deliverable is not evidenced; the implemented provider is Wavebox for the separate capture service.
  • A code review is not a security certification. Tenant-isolation, access and recovery acceptance tests still belong in release sign-off.

Functional evolution 4 catalogued revision themes

  1. 01.01

    Granular permissions

    Access developed beyond broad roles into default-deny read/write permissions, enforced in both screens and API actions.

  2. 01.02

    Lead-specific delegation

    Workspace ownership and lead leadership can manage file-specific access; costing-service tabs can have delegated editors without exposing all leads to everyone.

  3. 01.03

    Invitation/account handling

    Invitation flows were revised to reject already-associated accounts rather than strand an invitee at signup; invited-user phone validation follows country rules.

  4. 01.04

    Published-origin and API safeguards

    Allowed production origins and explicit route policies were tightened so customer links and application requests use controlled access rather than unrestricted endpoints.

Evidence & history anchors

d1d6862 · 14 Oct: lead access delegation; 20ea94a and 50edf96 · 15 Oct: auth/team controller changes.

Repository-relative paths are evidence references, not links required to open this document.

artifacts/api-server/src/lib/auth.tsartifacts/api-server/src/lib/workspace-access.tsartifacts/api-server/src/lib/api-route-policy.tsartifacts/api-server/src/controllers/team.controller.tsartifacts/api-server/src/controllers/lead-access.controller.ts
02 / ORIGINAL SCOPE · Weeks 3–4

WhatsApp Integration

Capture built · shared messaging remains

An operational enquiry intake and sales-notification pipeline exists. It is not the shared WhatsApp conversation platform described in the plan.

What is built & how deep it goes

  • A server-to-server enquiry endpoint with API-key protection and isolated whatsapp_capture storage.
  • Original raw payload plus parsed enquiry fields; partial/repeated-phone enquiries are handled without treating every submission as a unique CRM customer.
  • Beautified sales notifications through Wavebox, with persistent delivery tracking and retry handling.
  • New-enquiry dispatch and pending-queue recovery, with the daily 11:00 IST behavior kept separate from CRM lead records.

What remains against the plan

  • No working CRM shared inbox: the routed Inbox page is explicitly Coming Soon.
  • Incoming WhatsApp conversation/message persistence, agent text/media replies, real-time threads and contact synchronization are not implemented end to end.
  • Capture does not automatically create CRM pipeline leads or customers. That bridge remains a separate requirement.
  • Five approved customer-lifecycle templates and their verified provider configuration are not evidenced. A digest/notification template is not those five workflows.
  • A daily in-process retry is not a guarantee that an autoscaled service wakes at 11:00 IST. Reliable scheduled execution needs operational verification.

Functional evolution 6 catalogued revision themes

  1. 02.01

    Isolated enquiry storage

    The intake design moved away from using the CRM lead table to separate chatbot-enquiry storage, keeping CRM records and daily delivery bookkeeping apart.

  2. 02.02

    Capture-only startup

    The capture service can start with its own API key and database connection; sending credentials are required only for delivery work.

  3. 02.03

    Expanded payload contract

    The intake expanded to the 14-field chatbot payload, preserving raw content alongside parsed values rather than losing free-text trip details.

  4. 02.04

    Per-enquiry delivery queue

    Delivery evolved from a daily summary concept into persisted row-level notification tracking; Wavebox acceptance is the agreed completion criterion, not proof of handset receipt.

  5. 02.05

    Pending-only recovery

    New-row triggers also recover queued work, with the requested daily 11:00 IST pending-queue pass rather than repeatedly sending completed rows.

  6. 02.06

    Faithful message formatting

    The notification formatter omits fields absent from raw_payload instead of inventing a Service type: Not provided line.

Evidence & history anchors

43b254c, ff142fd, 9bbd216, 087ac4e, 7805e44 · 10 Oct: capture, queue and delivery evolution.

Repository-relative paths are evidence references, not links required to open this document.

artifacts/api-server/whatsapp-capture/app.tsartifacts/api-server/whatsapp-capture/database.tsartifacts/api-server/whatsapp-capture/delivery-queue.tsartifacts/api-server/whatsapp-capture/delivery-provider.tsartifacts/explorus-crm/src/pages/crm/InboxPage.tsx
03 / ORIGINAL SCOPE · Weeks 5–6

CRM Core, Customers & Vendors

Substantial core built · automation gaps

The CRM now handles complex group travel: customers, relationships, families, independent trip scenarios, documents and review-before-save imports.

What is built & how deep it goes

  • Lead/customer creation and editing, configurable pipeline stages, assignments, travel dates, destinations and shared service selection.
  • Named travellers organized into families, with planned trip headcounts kept independent of a partly completed roster.
  • Independent lead versions: choose a copy source, rename versions and designate a main version for reporting. Version-specific traveller profiles retain actual customer identities.
  • Customer relationships and phone-country validation; display formatting preserves the underlying phone identity.
  • Passport/PAN/other supported document extraction and review, private original-file access, and bulk image/PDF traveller import into Family 1.
  • Newly approved file-based imports retain originals in a separate Raw files section. Add Document can reuse a raw file or upload a new one.
  • Vendor records with configurable categories, country/city search behavior and optional full-width detail notes.

What remains against the plan

  • Automatic lead/contact creation from WhatsApp conversations and round-robin assignment remain absent.
  • A fully connected timeline covering every message, share, status and financial event is not complete. Existing activity logging should not be described as universal.
  • Customer identity/duplicate handling exists, but automatic deduplication during a future WhatsApp contact-sync flow still needs its own acceptance tests.

Functional evolution 10 catalogued revision themes

  1. 03.01

    Split names and consistent presentation

    Customer entry moved to first/last names, with consistent human-label casing while preserving emails, URLs, abbreviations and free-form notes.

  2. 03.02

    Country-aware phone handling

    Storage stays normalized; optional child phone numbers, country validation and later country-specific visual grouping replaced the earlier no-spaces-everywhere presentation.

  3. 03.03

    Customer relationships

    Related customer plus relationship became editable across customer/traveller surfaces, including custom relationships and corrected selectable previews.

  4. 03.04

    Flexible trip dates

    Departure/arrival editing gained future-year navigation, consistent display, arrival selection and owner-only backdated-entry rules.

  5. 03.05

    Shared lead services

    Service selections became lead data shared across Add Lead, lead detail and Costing rather than an individual viewer's local choice.

  6. 03.06

    Family roster behavior

    Traveller editing, Family 1 intake and movement across families preserve planned headcounts rather than silently redefining the trip size.

  7. 03.07

    Independent lead scenarios

    Full lead versions replaced the need to reuse one mutable trip scenario; main-version selection controls aggregate reporting.

  8. 03.08

    Vendor data depth

    Country/city selection, configurable vendor categories and optional vendor notes replaced narrower hardcoded/manual entry behavior.

  9. 03.09

    Bulk review imports

    Multi-person image/PDF extraction now creates reviewable drafts rather than immediately creating customers; approved people can be new or linked customers.

  10. 03.10

    Original-file retention

    Approved import originals now persist under Raw files, with retry-safe saving and independent reviewed-document copies. Previously discarded originals are not retroactively recoverable.

Evidence & history anchors

9a9fb60 and c1b7454 · 14 Oct: dates/services; 0f920e5 · 18 Oct: versions; aa2245d · 21 Oct: bulk import; 85b7b9e · 22 Oct: raw-file/document management.

Repository-relative paths are evidence references, not links required to open this document.

artifacts/api-server/src/controllers/leads.controller.tsartifacts/api-server/src/controllers/customers.controller.tsartifacts/api-server/src/controllers/lead-versions.controller.tsartifacts/api-server/src/lib/lead-versions.tsartifacts/api-server/src/controllers/traveller-import.controller.tsartifacts/api-server/src/controllers/customer-raw-files.controller.tsartifacts/explorus-crm/src/pages/crm/components/BulkTravellerUploadDialog.tsx
04 / ORIGINAL SCOPE · Week 7

Dashboard & User Interface

Live dashboard built · inbox/export gaps

The routed dashboard and pipeline use live application data. A polished screen does not imply that the missing shared inbox is delivered.

What is built & how deep it goes

  • Database-backed dashboard summaries scoped to the current workspace and permitted lead visibility.
  • Pipeline table and Kanban-style interaction, including persisted drag-to-change-status behavior.
  • Lead workspace navigation with tab persistence, rather than always returning to Travellers on refresh.
  • Settings dropdown categories presented as a left-side list with a right-side option editor; shared options feed operational forms.

What remains against the plan

  • The planned three-panel shared WhatsApp inbox and its messaging quick actions are absent.
  • Pipeline CSV export was not found in the audited implementation.
  • Push-real-time dashboard updates are not established by the current fetch-based pages.

Functional evolution 3 catalogued revision themes

  1. 04.01

    Live, scoped dashboard totals

    Dashboard behavior matured into permission-aware database metrics; main-version filtering and receipt-accounting rules matter to what is counted.

  2. 04.02

    Refresh-safe lead navigation

    The selected lead subtab is retained through the URL/navigation state rather than resetting every refresh to Travellers.

  3. 04.03

    Central dropdown management

    Settings moved from scattered options to a category sidebar/editor and became the shared source for vendor and costing dropdowns.

Evidence & history anchors

d44b624 · 17 Sep: live dashboard enhancement; 263099d and c397472 · 15 Oct: shared dropdown configuration. Tab persistence is also evidenced in current lead navigation code.

Repository-relative paths are evidence references, not links required to open this document.

artifacts/explorus-crm/src/App.tsxartifacts/explorus-crm/src/pages/crm/DashboardPage.tsxartifacts/api-server/src/controllers/dashboard.controller.tsartifacts/explorus-crm/src/pages/crm/PipelinePage.tsxartifacts/explorus-crm/src/pages/crm/LeadDetailPage.tsxartifacts/explorus-crm/src/pages/crm/SettingsPage.tsx
05 / ORIGINAL SCOPE · Weeks 8–9

Itinerary Builder & Sharing

Core creation/sharing built · library gaps

Brief and timed itineraries support AI-assisted drafting, saved versions, customer-friendly output and immutable public-share snapshots.

What is built & how deep it goes

  • Brief and timed itinerary workflows with saved content, version history and editing.
  • AI drafting from trip facts and staff instructions; costing context supports generation rather than indiscriminately overriding the itinerary.
  • Day/activity editing and reordering; the timed editor supports activities within each day's structure.
  • Branded print/PDF output, revocable public snapshot links and editable copyable text.
  • Route presentation is derived from itinerary/costing context and reused in itinerary outputs. Missing destination evidence must not be replaced with invented stops.

What remains against the plan

  • Reusable cross-customer itinerary templates and the destination/prebuilt-activity library are not implemented.
  • Activity drag/drop within a day exists; moving an activity directly between days is not implemented in the audited nested drag/drop structure.
  • No WATI PDF/template sending from the itinerary workflow.
  • A shared link freezes a snapshot, but the editable source is not automatically locked/new-versioned on every post-share edit. That differs from the exact original plan.
  • Inferred routes still need content-level checks on ambiguous or underspecified itineraries; a correct example format alone is not proof every draft will infer correctly.

Functional evolution 7 catalogued revision themes

  1. 05.01

    Brief-to-costing context

    Generation gained structured trip/service and costing context, plus preview/apply behavior, instead of treating every AI draft as authoritative final costing.

  2. 05.02

    Saved-version workflows

    Saved history, restore/selection and export targeting developed so users share a selected saved version rather than accidentally exporting unsaved edits.

  3. 05.03

    One share menu

    Separate sharing actions were consolidated into Link, PDF and Text options for brief and timed itineraries.

  4. 05.04

    Editable share text

    The text popup became editable for one-off copying without changing the saved itinerary.

  5. 05.05

    Customer-ready text structure

    Brief text gained travel year, route, guest/pax context and emphasized day headings instead of a less structured generic text export.

  6. 05.06

    Automatic route presentation

    A proposed separate route-review step was removed; itinerary-led route inference and supporting costing context feed text, PDF and newly created links.

  7. 05.07

    Stable public snapshots

    Public sharing gained revocation and request/access compatibility handling; later source edits do not silently rewrite an already issued snapshot.

Evidence & history anchors

82bbf1c and f06e204 · 16 Oct: sharing/access; 132870c · 20 Oct: sharing evolution; 26f688d and 67be3c5 · 21 Oct: route/sharing revisions.

Repository-relative paths are evidence references, not links required to open this document.

artifacts/api-server/src/controllers/briefs.controller.tsartifacts/api-server/src/controllers/itineraries.controller.tsartifacts/api-server/src/controllers/itinerary-shares.controller.tsartifacts/explorus-crm/src/pages/crm/components/ItineraryTab.tsxartifacts/explorus-crm/src/components/itinerary-share/ShareItineraryMenu.tsx
06 / ORIGINAL SCOPE · Weeks 10–11

Costing Engine

Deep operational engine · approval gaps

This is one of the most developed areas: nine service tables, spreadsheet-like formulas, family allocation, currency controls, refund handling and edit history.

What is built & how deep it goes

  • Accommodation, Activities, Intercity, Intracity, Flights, Visa, Cruise, Insurance and Forex service tables.
  • Multi-family allocation, arithmetic expressions in Rate and family cells, formula indicators and the t alias for total.
  • Currency conversion, live-rate retrieval, manual ROE overrides and refresh locking.
  • Row duplication, date-group reordering, booking details, notes and cancellation/refund calculations.
  • Committed-cell undo/redo across costing tables, including numeric/formula dependencies.
  • Saved quotation snapshots and statuses, plus independent lead-version scenarios.

What remains against the plan

  • Costing does not universally recalculate its structure automatically after every itinerary edit; generation/application is an explicit workflow.
  • Manual quotation snapshots are not automatic post-send version creation or a line-item version-diff viewer.
  • Status tags do not constitute the complete enforced Draft → Sent → Approved/Rejected → Invoiced transition workflow.
  • Admin-configurable minimum-margin/discount gates are not implemented.
  • The broader browser suite has previously timed out in Brief-to-Costing navigation; current release sign-off must resolve/retest that separately. This audit did not rerun it.

Functional evolution 11 catalogued revision themes

  1. 06.01

    Stored Rate formulas

    Rate cells evolved from numeric-only entry to arithmetic such as 4000/2, displaying 2000 while retaining the expression and formula indicator.

  2. 06.02

    Short family formulas

    Family formulas accept t in place of total while retaining the established total vocabulary for existing expressions.

  3. 06.03

    Automatic last-family remainder

    Initial weighted allocation stays; editing earlier families recalculates the last family's remainder. Over-allocation shows zero remainder and a mismatch highlight rather than a negative display.

  4. 06.04

    Real balance comparison

    Mismatch highlighting compares displayed/calculated allocations to the row total, not merely whether every family has a saved manual override.

  5. 06.05

    Spreadsheet-style undo

    Cmd/Ctrl+Z and redo were added for committed cell edits, then revised for numeric fields, focus movement, queued rapid changes and restoring dependent values.

  6. 06.06

    Row order and duplication

    Copies appear immediately below the source row; drag order is constrained to the row's date group rather than arbitrary cross-date placement.

  7. 06.07

    Refund arithmetic

    Cancellation/refund handling became event-based with shared editing behavior and rounding against the original row basis.

  8. 06.08

    Configurable dropdown cells

    Meals, Payment, Status, activity types and transfer modes/types/car types moved to workspace-defined option lists.

  9. 06.09

    Dates and 24-hour times

    Activity Start and transfer departure/arrival/in/out time entry gained time selection; date navigation and backdating restrictions were aligned.

  10. 06.10

    Grid editing behavior

    Headers remain visible only within their table, low-screen currency menus open upward, explicit zero is preserved and manual labels use the agreed capitalization.

  11. 06.11

    Floating notes editor

    Per-row notes were added, moved before action controls, then changed from row-expanding textareas to a focused floating editor with bounded previews.

Evidence & history anchors

3578adf · 12 Oct: costing updates; 434f61b · 14 Oct: tables; 957c73b, 3e580af, 926168b · 19 Oct: notes; 132870c · 20 Oct: allocation; 4b1887b · 21 Oct: undo/history.

Repository-relative paths are evidence references, not links required to open this document.

artifacts/explorus-crm/src/pages/crm/components/CostingTab.tsxartifacts/api-server/src/controllers/leads-costing.controller.tsartifacts/api-server/src/lib/costing-roe-refresh.tsartifacts/api-server/src/lib/exchange-rates.tsartifacts/api-server/src/controllers/quotation-versions.ts
07 / ORIGINAL SCOPE · Week 12

Invoices, Payments & Family Funding

Funding/payments built · invoicing incomplete

Payment planning is considerably richer than a basic receipt tracker. The remaining tax-invoice and referral-wallet work is still material.

What is built & how deep it goes

  • Family funding in Bank, ETO, ETC and ET; markup, exchange rates, totals, balance validation and read-only INR equivalents.
  • One final upward rounding step after costing plus markup, rather than rounding every family/source cell.
  • Locked payment summaries preserve the selling agreement while current costing changes the displayed effective markup/profit.
  • Payment/refund records, approvals and outstanding calculations with handling for historical data.
  • Per-family invoice-entry fields with activity logging. These are not complete statutory invoice documents.
  • Copied payment/invoice history in lead versions, with explicit accounting safeguards against counting a copied receipt as new money.

What remains against the plan

  • No complete tax invoice entity with sequential numbering and one-click generation from an approved costing.
  • GST/TCS calculation, tax breakdowns and compliance acceptance remain to be implemented. Rates/thresholds in the plan need current professional validation, not blind hardcoding.
  • No branded .xlsx invoice export or WATI invoice attachment send.
  • No referral-wallet ledger, credits/debits, redemption, expiry, approval thresholds, invoice application or customer notification.
  • Payment-source/accounting choices differ from the plan's generic UPI/card/cash list; reconcile that scope before claiming the exact planned payment-mode deliverable.

Functional evolution 8 catalogued revision themes

  1. 07.01

    Funding-category markup

    The pricing rules were revised so markup follows the underlying source allocation rather than accumulating incorrectly in Bank.

  2. 07.02

    ET offsets Bank

    Typing a change into ET transfers that difference from Bank; a later manual Bank edit does not rewrite ET or other sources.

  3. 07.03

    ETO extras move to ETC

    ETO keeps its base costing share, while markup/rounding attributable to ETO is assigned to ETC.

  4. 07.04

    Rounding rule evolution

    Cell-level and double/base-rounding proposals were superseded. Current logic applies markup to original costing, then rounds the combined selling total up to the next 100 once.

  5. 07.05

    Locked selling agreement

    Locking freezes markup input, ROEs, family funding and final selling total; subsequent costing edits change effective profit, not the customer's locked amount.

  6. 07.06

    Clear locked-state figures

    The locked view was simplified to current costing, locked final, effective markup amount/percent and original-at-lock context; the unlocked layout stays unchanged.

  7. 07.07

    Receipt approval/history rules

    Pending/rejected receipts do not settle balances; older valid receipts remain readable without silently converting historical currencies or payment sources.

  8. 07.08

    Version-aware financial copies

    Payments and invoice entries can be copied into scenarios without treating copies as additional actual cash; main-version reporting is distinct from simply viewing a scenario.

Evidence & history anchors

adc45bb and 814ff1f · 24 Sep: receipt/history changes; a9b884a · 12 Oct: funding independence; 71853f5 and 0f920e5 · 16–18 Oct: pricing/versioning; ad6e5ea and 5d926c8 · 19 Oct: locking/validation.

Repository-relative paths are evidence references, not links required to open this document.

artifacts/explorus-crm/src/lib/payment-summary-pricing.tsartifacts/explorus-crm/src/lib/payment-summary-costing.tsartifacts/api-server/src/controllers/payment-summary-lock.controller.tsartifacts/api-server/src/controllers/leads-payments.controller.tsartifacts/api-server/src/controllers/leads-invoices.controller.tslib/db/src/schema/lead-invoice-entries.tsartifacts/api-server/src/lib/lead-versions.ts
08 / ORIGINAL SCOPE · Week 12 · parallel

Automation & Reports

17 live reports · lifecycle jobs absent

Reporting breadth is real, but several financial meanings differ from the plan. The five customer/agent reminder automations are not delivered by the enquiry queue.

What is built & how deep it goes

  • Seventeen database-backed report endpoints across pipeline, finance, team, customers, destinations and operations, with date-filtered report screens.
  • Pipeline summary, conversion funnel and lead-source analysis.
  • Revenue receipts, payment modes and outstanding estimates; staff performance and team workload.
  • Customer demographics/acquisition/source-by-tier; top destinations and seasonal patterns.
  • Cost-category mix, booking status, vendor usage and group composition.

What remains against the plan

  • Birthday, anniversary, passport-expiry at 6/3/1 months, 3-day inactive-lead and overdue-invoice reminders are not implemented as the five scheduled workflows.
  • BullMQ/Redis orchestration specified by the plan is not evidenced; the enquiry delivery worker does not substitute for these automations.
  • Revenue overview reports receipts, not a complete revenue-and-profit series.
  • Destination reporting uses lead counts/estimated costs, not realized destination revenue.
  • Outstanding figures are not a full tax-invoice ledger/aging report; agent response time cannot be calculated without message events.
  • Report CSV export was not found. Exact business definitions and export parity remain required.

Functional evolution 2 catalogued revision themes

  1. 08.01

    Receipt-aware business metrics

    Financial dashboard/reporting evolved with receipt approval and historical-currency handling, avoiding treating all recorded entries as settled cash.

  2. 08.02

    Main-version reporting

    Scenario versioning introduced designated-main filtering so alternate trip plans do not inflate pipeline/reporting totals.

Evidence & history anchors

ad379b1 · 17 Sep: 17 live-data reports; e6f5a8e · 2 Oct: payment/dashboard revisions; 0f920e5 · 18 Oct: version-aware controllers.

Repository-relative paths are evidence references, not links required to open this document.

artifacts/api-server/src/routes/reports.tsartifacts/api-server/src/controllers/reports.controller.tsartifacts/explorus-crm/src/lib/reports-api.tsartifacts/explorus-crm/src/pages/crm/components/reports/ReportFilters.tsxartifacts/api-server/src/lib/lead-versions.ts
Concrete behavior

What the depth looks like in practice

Pricing and lock behavior

Illustrative example, not customer data: Costing 3,761 + 22% markup (827.42) = 4,588.42. One upward rounding step produces 4,600, adding 11.58.

If 4,600 is then locked and current costing rises to 4,000, the locked final stays 4,600. Effective markup becomes 600 / 15%. Funding and ROEs do not silently change with that costing edit.

Review-first file intake

An uploaded family PDF produces reviewable traveller drafts. Approving a person saves or links the customer, preserves that source under Raw files and adds the traveller to Family 1.

Using that raw file for a reviewed passport document creates an independent attachment. The raw original is not automatically treated as a verified identity document.

Remaining delivery / suggested order

Six workstreams to close the original scope

This is a gap list and sequencing recommendation, not a new schedule, quote or authorization to build. Several tasks can run in parallel after shared data contracts are agreed.

1 · Provider and conversation foundation

Complete shared WhatsApp messaging and CRM capture

Confirm whether Wavebox replaces WATI contractually or WATI is still required. Implement message/contact storage, inbound webhooks, CRM lead/contact creation, deduplication, assignment, shared inbox, replies/media and the approved template catalog. Acceptance: a real incoming conversation reaches the CRM and can be answered by authorized staff without losing history.

2 · Financial system of record

Finish tax invoices, exports and approval gates

Define validated tax rules; add numbered invoice entities, approved-costing generation, GST/TCS breakdown, payment allocation, branded Excel export and customer sending. Complete costing approval transitions, minimum-margin controls, automatic post-send snapshots and item-level comparisons. Acceptance: trace a quote through approval, invoice, partial payment, refund and outstanding balance.

3 · Reuse and travel content

Complete itinerary libraries and exact version semantics

Add reusable itinerary templates, prebuilt destination/activity content and cross-day activity movement. Agree whether edits should explicitly regenerate costing or follow the plan's automatic recalculation promise. Reconcile source-version locking with today's immutable share snapshots. Acceptance: clone a template for another customer, modify it and prove older customer links remain unchanged.

4 · Depends on invoice accounting

Build referral-wallet accounting

Add a durable credit/debit ledger, actor/reason audit, partial redemption, expiry policy, approval thresholds and invoice application. Notify customers when credit is issued. Acceptance: a credit can be partially redeemed, reversed and audited without duplicating real money or crossing workspaces.

5 · Depends on events and message templates

Deliver the five scheduled automations

Birthday, anniversary, passport-expiry, inactivity and overdue-payment workflows need scheduling, timezones, consent/template handling, duplicate-send protection and retry tracking. Acceptance: each runs on the intended date even when there is no user traffic, and does not resend completed work.

6 · Reconcile and prove the full scope

Align reports, exports and release acceptance

Finish pipeline/report CSV exports, true profit and destination-revenue definitions, invoice-ledger outstanding values and message response-time metrics. Verify production OCR/storage, permissions, share links, queue execution and cross-module flows. Resolve the known Brief-to-Costing browser-test gap and capture production acceptance evidence.

Evidence & limitations

What this report establishes

Recommended use:

Use this as a stakeholder scope review: acknowledge delivered depth, agree the accepted substitutions and changed rules, then turn the remaining workstreams into explicit acceptance criteria. Do not use raw commit counts as a proxy for functional delivery.