Table of Contents
- Introduction & System Overview
- Login, Roles & Common Page Operations
- User Management (UM) Locked
- Reservation — Module Overview Core
- Customer & Agent Master
- Booking Concepts (Package, Pax, Currency, Tax)
- Hotel Booking
- Flight Booking
- Tour Booking
- Visa Request
- Transfer Request
- Operations — Module Overview Core
- Booking Request Intent (Inbox)
- Indent Viewer
- Quotation Desk Preparation
- Move to Approval
- Approval — Module Overview Core
- Quotation List Ready for Proforma
- Proforma Invoice Creation
- Proforma Chase-up & Status Modify
- Customer Billing & Invoice Generation
- Payments — Module Overview Core
- Approved Proforma → Customer Invoice
- Customer Payment Collection (Receivables)
- Supplier Voucher Processing (Payables)
- File Uploads — Invoice / Voucher PDFs
- Accounts — Chart of Accounts & Ledgers
- Journal Entry & Voucher Types
- Accounts Reports
- Accounts Gateway — Cross-Module Posting Bridge
- Status & Notification Reference
- Troubleshooting
- Glossary
Introduction & System Overview
Folks BackOffice ERP is the side of the Folks ERP suite that owns travel reservations, operational fulfilment, approvals and the receivable-payable money flow. From a single hotel booking to a multi-service package invoiced and paid, it walks every booking through Reservation → Operations → Approval → Payments → Accounts.
Every read and write goes through a named stored procedure — predictable, auditable, no LINQ in business logic.
Roles map to designations; designations to menus; menus to actions. Reservation, ops, approval and payments staff are scoped accordingly.
.NET Blazor with SignalR — inboxes light up the moment a booking, proforma or payment lands.
The bridge that pushes Customer / Supplier postings from Payments into the GL — operational events post asynchronously.
Modules in this manual
| # | Module | Purpose | Key entities |
|---|---|---|---|
| 1 | Reservation | Travel booking — Hotel / Flight / Tour / Visa / Transfer; package builder. | PackageBooking, HotelBooking, FlightBooking, TourBooking, VisaRequest, TransferRequest |
| 2 | Operations | Booking intent inbox, indent viewer per service, quotation desk preparation. | BookingRequestIntend, QuotationDesk, IndentViewer_* |
| 3 | Approval | Approvals inbox, Proforma Invoice, chase-up, customer invoice generation. | ProformaInvoice, QuotationList, CustomerBillingInfo, InvoiceList |
| 4 | Payments | Receivables (customer collection) and Payables (supplier vouchers). | CustomerInvoicePayments, SupplierVoucherList, SupplierInvoicePaymentExpence |
| 5 | Accounts | General ledger — Chart of Accounts, journals, reports, sub-ledgers. | Accounts_LedgerGroup, Accounts_Ledger, Accounts_Transaction |
| 6 | Accounts Gateway | Bridge that pushes Customer / Supplier postings into the ledger. | AccountsGateway_Customer, AccountsGateway_Supplier, ActionItems |
| 7 | User Management Locked | Login, employees, departments, designations, roles, menus, workflow. | Login, Users, UserRoles, UserRolePrivileges, MainMenu, SubMenu, Workflow* |
The data flow at a glance
Login, Roles & Common Page Operations
Authentication, roles and page conventions are identical across BackOffice and Inventory — the UM module is shared. This chapter focuses on the roles you'll actually meet on this side and the conventions you'll see on every screen.
2.1 Logging in
- Open the FE URL. Login with username & password.
- JWT issued; redirected to the role's DefaultPath.
- Login.Status must be
Active— Inactive / Blocked rows are admin-only.
2.2 Roles you'll meet
| Role | Sees | Cannot |
|---|---|---|
| SuperAdmin | All modules. | — |
| Reservation Agent | Reservation, customer master, package builder. | Operations, Approval, Payments. |
| Operations | Booking inbox, indent viewer, quotation desk. | Approval inbox, payments. |
| Approver | Approvals inbox, proforma, customer invoice. | Reservation, supplier vouchers. |
| Payments Officer | Customer collection, supplier vouchers. | Reservation create. |
| Accountant | Chart of accounts, journals, reports, gateway. | Reservation create, supplier voucher line entry. |
2.3 The page anatomy
| # | Booking Ref | Customer | Type | Service Mix | Status |
|---|---|---|---|---|---|
| 1 | PB-2026-0042 | Aman Travel Corp | Group | Hotel · Flight · Transfer | Awaiting Quote |
| 2 | PB-2026-0043 | Sarah Khan | Individual | Hotel · Visa | Confirmed |
2.4 Common conventions
- Booking refs are auto-generated. Leave the ref field empty when adding — the SP fills it in.
- IsActive flag. Master rows soft-delete; never physically remove a customer or supplier.
- UserID stamping. CreatedBy / ModifiedBy are filled from the JWT.
- Currency and pax. Every booking line carries a Currency and PaxType — the FE coerces on save.
User Management (UM)
LockedUM is shared with the Inventory ERP — Login, Employee, Role, Workflow tables are identical. Treat this chapter as a reference. To modify UM you must coordinate with both products.
3.1 Login & RBAC chain
3.2 Tables you may need to know
| Table | Purpose |
|---|---|
Login | UserName / Password / Status / DefaultPathID / LoginTypeID. |
EmployeeReg | Employee profile with image & designation. |
Department / Designation | Org hierarchy. |
UserRolePrivileges | (UserRolesID × SubMenuID × PagePrivilegeTypes) — the actual gate. |
InternalWorkflow / ExternalWorkflow / WorkflowListener | The state-machine engine that powers approvals across modules — used heavily by Approval. |
ActivityLog | Append-only audit trail. |
Reservation — Module Overview
CoreThe Reservation module is where the customer journey starts. ~34 tables, ~100 controllers, six service types feed a single Package Booking that downstream modules act on.
4.1 The seven sub-modules
- Customer & Agent Master — registration, reference types, billing info.
- Booking Intent — the central
PackageBooking+BookingRequestIntend. - Hotel — booking, room allocation, meal plans, guest-to-room mapping.
- Flight — multi-segment, airline, class.
- Tour — itinerary lines, guest participation.
- Visa — per-pax visa request with type.
- Transfer — per-leg with vehicle type and trip type.
4.2 The six service types
| Service | Master | Detail | Per-pax detail |
|---|---|---|---|
| Hotel | HotelBooking | HotelBookingDetails (room × dates) | GuestHotelBookingDetails |
| Flight | FlightBooking | FlightBookingDetails (segment × class) | (per pax via package guest) |
| Tour | TourBooking | TourBookingDetails (itinerary) | GuestTourBooking |
| Visa | VisaRequest | VisaRequestDetails (per pax × type) | VisaRequestGuestDetails |
| Transfer | TransferRequest | TransferRequestDetails (leg × vehicle) | (per pax via package guest) |
| Package (composite) | PackageBooking | PackageBookingDetails (link rows) | — |
4.3 The end-to-end flow
Customer & Agent Master
Every booking is keyed to either a Customer (B2C) or an Agent (B2B). The CustomerORAgent table is the union; CustomerBillingInfo holds the invoice address; AgentDictionary holds agent-specific terms.
5.1 Add a Customer
- Open Reservation → Customer Registration.
- Enter Name, Type (Individual / Corporate), Contact, Country, Currency.
- Add Billing Info (address, TRN/VAT) on the same screen.
- Pick Reference Type (e.g. Walk-in, Online, Existing).
5.2 Add an Agent
- Open Reservation → Agent Dictionary.
- Capture commission %, credit limit, payment terms.
- Save. Agents appear in the booking customer-picker with a special tag.
5.3 Reference Types
- Walk-in — quick capture without a full master.
- Online — came through a website link.
- Existing — repeat customer; pulls history.
- Agent — invoice goes to the agent, not the traveller.
Booking Concepts (Package, Pax, Currency, Tax)
Five concepts you'll see on every booking screen.
| Concept | Table | Notes |
|---|---|---|
| Package | PackageBooking + PackageBookingDetails | The composite — links any combination of service-type bookings. |
| Booking Type | BookingType | Group / Individual / Corporate / Inbound / Outbound. |
| Pax Type | PaxType | Adult / Child / Infant — drives pricing per service. |
| Guest Info | GuestInfo | The actual traveller — name, passport, DOB, nationality. |
| Currency | CurrencyTrades | Multi-currency, with daily rate; FE coerces sell rate to base currency at save. |
| Tax | TaxationTypes | VAT, service tax, tourism levy — applied on quotation. |
| Language | Language | Customer-facing language for invoice / voucher PDFs. |
6.1 The Package shape
Hotel Booking
The hotel side has the richest data model — multiple rooms, dates, meal plans, and guest-to-room mapping. HotelDictionary is the master; RoomType and RoomDetails describe inventory; HotelMealPlans covers BB / HB / FB / AI.
7.1 Create a hotel booking
- Open Reservation → Hotel Booking. Pick the package or start standalone.
- Pick the Hotel (filtered by city via
HotelDictionary). - Pick Room Type + Meal Plan; set check-in / check-out dates.
- Add room lines (each line has #pax, #rooms, rate).
7.2 Map guests to rooms
Use Guest Hotel Booking Details to assign each GuestInfo row to a specific room — driver of vouchers and check-in lists.
| Field | Note |
|---|---|
| HotelID | From HotelDictionary. |
| RoomTypeID | Standard / Deluxe / Suite / Family. |
| MealPlanID | BB (room only) / HB (with breakfast) / FB / AI (all-inclusive). |
| CheckIn / CheckOut | Dates; nights = diff. |
| NetRate / Markup / SellRate | NetRate from supplier; Markup is your margin; SellRate = NetRate × (1 + Markup%). |
| Currency | Often supplier-side (e.g. USD); converted to base at save. |
| Status | Draft / Confirmed / Cancelled. |
7.3 Daily Hotel Pricing
If rate varies by date (high-season / low-season), open IndentViewer_DailyHotelPricing when Operations prepares the indent — this view shows the per-night price and is editable by ops.
Flight Booking
Flight bookings can span many segments; each segment has an airline, class and pax assignment.
8.1 Concepts
- FlightBooking — header (booking ref, airline, total).
- FlightBookingDetails — one row per segment (origin → destination × date × class).
- FlightClass — Economy / Premium Economy / Business / First.
- Airlines / AirPort — masters via
AirlinesDictionary.
8.2 Multi-segment example
| # | From | To | Date | Airline | Class | Pax |
|---|---|---|---|---|---|---|
| 1 | DXB | BOM | 2026-08-15 | EK | Economy | 4 |
| 2 | BOM | GOI | 2026-08-16 | AI | Economy | 4 |
| 3 | GOI | BOM | 2026-08-22 | AI | Economy | 4 |
| 4 | BOM | DXB | 2026-08-23 | EK | Business | 2 |
Tour Booking
Tours are itinerary-style. The header is one tour; the details are stops; GuestTourBooking tracks who actually takes the tour.
- Open Reservation → Tour Booking. Pick the package.
- Add the tour name and date range.
- Add itinerary lines (Day 1 — sightseeing X, Day 2 — beach Y, etc.).
- Tick which guests are participating in Guest Tour Booking.
9.1 Itinerary fields
| Field | Note |
|---|---|
| TourName | Free text, often supplier-given. |
| StartDate / EndDate | Tour window. |
| Itinerary lines | Day-by-day or hour-by-hour. |
| GuideLanguage | From Language master. |
| NetRate per pax | Drives total = pax × rate. |
Visa Request
Visa is per-pax. The header captures the destination + visa type; the details capture each applicant.
10.1 Visa types
| Type | Use | Validity (typical) |
|---|---|---|
| Tourist | Leisure travel | 14 / 30 / 90 days |
| Business | Meetings, conferences | 30 / 90 days |
| Transit | Layover >24h | 96 hours |
| Multi-Entry | Repeat visits | 1 / 5 years |
10.2 Steps
- Reservation → Visa Request. Pick destination country, visa type from
VisaTypes. - Add applicant rows in VisaRequestDetails — passport no, expiry, nationality.
- For group visas, multi-pax mapping flows through
VisaRequestGuestDetails.
Transfer Request
Transfers are per-leg — pickup and drop-off. TransferRequest is the header; TransferRequestDetails is each leg with vehicle type and trip type.
11.1 Trip types
- Arrival — airport → hotel.
- Departure — hotel → airport.
- Inter-city — hotel → hotel.
- Round-trip — both ways same vehicle.
11.2 Vehicle types
Maintained in VehicleType — Sedan / SUV / Mini-Van / Coach. Each carries a max-pax and base rate.
11.3 Example transfer
| Leg | From | To | Vehicle | Pax |
|---|---|---|---|---|
| 1 (Arrival) | BOM Airport T2 | Goa Hotel | SUV | 4 |
| 2 (Departure) | Goa Hotel | GOI Airport | SUV | 4 |
Operations — Module Overview
CoreOperations picks up packages from Reservation, generates a per-service indent, prepares the quotation desk, and hands the package to Approval. Three controllers, ~13 tables, ~5 named pages.
12.1 The five sub-modules
- Booking Request Intent — auto-generated from a saved Reservation; the inbox.
- Indent Viewer — per-service views (Hotel pricing, Flight info, Tour, Visa, Transfer).
- Quotation Desk — rate prep, edits, turnaround time, remarks.
- Move-to-Quotation Desk / Quotation — promote bookings forward.
- Customer-or-Agent linkage — confirms billing recipient.
12.2 The flow
12.3 The four pages
| Page | Purpose |
|---|---|
| QuotationDesk.razor | Per-package rate preparation. |
| QuotationList.razor | List of all quotations in flight. |
| QuotationViewer.razor | Read-only summary for review. |
| QuotationEmailList / EmailTemplate | Send quotations to customer/agent. |
Booking Request Intent (Inbox)
Every saved Reservation creates a row in BookingRequestIntend via the SP BookingRequestIntend_Auto_Insert. This row is the operations team's to-do list.
13.1 What the inbox shows
| Column | Source |
|---|---|
| Booking Ref | PackageBooking.BookingRefNo |
| Customer / Agent | CustomerORAgent (joined) |
| Service Mix | Booleans — has Hotel / Flight / Tour / Visa / Transfer |
| Travel Dates | Min/max from child bookings |
| Pax count | Sum from PackageBookingDetails |
| Status | New / Indented / Quoted / Moved |
13.2 Pick & act
- Operations clicks a row from the inbox.
- The BookingRequestIntend opens — service-by-service tabs (Hotel / Flight / Tour / Visa / Transfer).
- Each tab is the Indent Viewer (Chapter 14) — read-only summary of what the agent booked.
- Op clicks Move to Quotation Desk when ready.
Indent Viewer
Five SPs feed the Indent Viewer — one per service type. Operations uses these to verify the booking and prepare the indent.
| Service | SP | Returns |
|---|---|---|
| Hotel | IndentViewer_HotelBookingInformation_SelectByPAckageBookingID | Hotel master + room lines. |
| Hotel pricing | IndentViewer_DailyHotelPricing_Select | Per-night rate breakdown. |
| Flight | IndentViewer_FlightRequestInformation_SelectByPAckageBookingID | Multi-segment + class. |
| Tour | IndentViewer_TourBookingInformation_SelectByPAckageBookingID | Itinerary + guests. |
| Visa | IndentViewer_VisaRequestInformation_SelectByPAckageBookingID + VisaRequestGuestDetails | Per-applicant detail. |
| Transfer | IndentViewer_TransferRequestInformation_SelectByPAckageBookingID | Per-leg detail. |
14.1 What ops does in the viewer
- Verify hotel availability with the supplier.
- Confirm flight class / seat availability.
- Cross-check passport validity for visa applicants.
- Confirm vehicle availability for transfers.
- Adjust NetRate if supplier quote differs.
Quotation Desk Preparation
The Quotation Desk is where the per-line NetRate and SellRate get finalised before Approval sees them.
15.1 The desk fields
| Field | Meaning |
|---|---|
| NetRate | Confirmed supplier rate. |
| Commission | Either agent commission % or markup amount. |
| SellRate | NetRate + Commission/Markup, after rounding. |
| Edits | Number of times the line was edited (audit signal). |
| TurnaroundTime | Hours from inbox-pick to move-to-approval. |
| Remarks | Free-text justification for the rate. |
15.2 The screen
| Service | Line | NetRate | Comm/Mkup | SellRate | Edits |
|---|---|---|---|---|---|
| Hotel | Goa Hotel · Suite × 7n | 1,400 | +10% | 1,540 | 1 |
| Flight | DXB-BOM × 4 (Y) | 2,100 | +5% | 2,205 | 0 |
| Tour | Goa Beach Day × 4 pax | 320 | +15% | 368 | 2 |
| Visa | India Tourist × 4 pax | 180 | +10% | 198 | 0 |
| Transfer | BOM Airport → Goa | 140 | +12% | 157 | 1 |
Move to Approval
The handoff. The SP MovToQuotation_Insert creates a row in QuotationList with status Ready for Proforma; the booking moves out of Operations' inbox into Approvals.
- From the Quotation Desk, click Move to Approval.
- Confirmation modal — last chance to edit rates.
- SP fires; the booking flips status Quoted → Submitted for Approval.
- Approval inbox lights up.
What changes
BookingRequestIntend.Status→ Moved.- New row in
QuotationList. - Inbox notification to approvers.
Approval — Module Overview
CoreThe Approval module turns a Quotation into a Proforma, chases the customer for confirmation, and on confirmation generates the Customer Invoice. Seven controllers, ~7 tables, four named pages.
17.1 The seven sub-modules
- Approvals Inbox — Quotation Ready for Proforma.
- Proforma Invoice Creation — promote quotation to proforma.
- Proforma Chase-up & Status Modify — track follow-ups.
- Customer Billing Info — invoice address, TRN/VAT.
- Customer Invoice Generation — create the legal invoice from approved proforma.
- Customer Invoice Payments & Details — line-level receivables tracking.
- Invoice List — central registry.
17.2 The flow
Quotation List Ready for Proforma
The Approval inbox is fed by the SP ApprovalsInbox_QuotationListReadyForProforma_Select. Each row is a quotation that Operations has handed over.
18.1 What you see
| Column | Source |
|---|---|
| Booking Ref | PackageBooking |
| Customer / Agent | CustomerORAgent |
| Service Mix | Service-type flags |
| NetRate / Commission / SellRate | From QuotationDesk |
| Edits | Edit count signal |
| Quoted At | Move-to-approval timestamp |
| Aging | Hours since quoted |
18.2 Approver actions
- Review — Open the QuotationViewer for full breakdown.
- Reject — Send back to Operations with a reason; status returns to Quoted.
- Move to Proforma — Generate the proforma invoice.
Proforma Invoice Creation
The Proforma is a draft invoice — it shows the customer the full price and the breakdown but is not yet a legal document. SP: Prepare_MovToProformaInvoice_Insert.
19.1 What goes on the proforma
| Section | Content |
|---|---|
| Header | Booking Ref, Customer / Agent, Travel dates, Currency. |
| Service lines | One row per service (Hotel / Flight / Tour / Visa / Transfer) with NetRate & SellRate. |
| Sub-total | Sum of SellRate. |
| Tax | VAT / service tax / tourism levy from TaxationTypes. |
| Total Due | Sub-total + Tax. |
| Validity | Typically 7 days. |
| Status | Draft / Sent / Accepted / Rejected / Expired. |
19.2 PDF send
Generate the proforma PDF and email to the customer / agent. The action records a row on the chase-up list with timestamp.
Proforma Chase-up & Status Modify
Customers don't always confirm the same day. The Chase-up page tracks follow-ups — call notes, email sent, current status. SP: PerFormaChaseUpApproval_ModifyPerformaStatus_Update.
20.1 Chase-up rhythm
| Day | Action | Status |
|---|---|---|
| 0 | Send proforma | Sent |
| 2 | Reminder call | Reminded |
| 5 | Final reminder | Final reminder |
| 7 | Proforma expires | Expired |
| — | Customer confirms | Accepted |
| — | Customer declines | Declined |
20.2 On Acceptance
- Approver clicks Approve on the chase-up row.
- Status flips to Accepted.
- The Customer Invoice generation is unlocked (Chapter 21 / 23).
Customer Billing & Invoice Generation
Once a Proforma is Accepted, the Customer Invoice (legal) is generated. The data flow is: ProformaInvoice → InvoiceList → CustomerInvoicePayments (for receivables tracking).
21.1 Invoice fields
| Field | Note |
|---|---|
| Invoice No | Auto-generated, sequential — never gaps. |
| Invoice Date | Today by default. |
| Due Date | Per customer credit terms. |
| Bill-to | From CustomerBillingInfo. |
| Lines | From the proforma. |
| Tax | Recomputed at issue date (rates may have changed). |
| Total Due | Sub-total + Tax. |
| Status | Issued / Partly Paid / Paid / Overdue / Cancelled. |
21.2 Where it goes
Generated Invoices land in Payments → Invoice List for collection. The Approval team's job ends here; Payments takes over.
Payments — Module Overview
CoreThe Payments module is two-sided. Receivables handles customer invoice collections; Payables handles supplier vouchers. Both sides feed the Accounts Gateway.
22.1 The nine sub-modules
- Approved Proforma Inbox — quotations awaiting invoice generation.
- Generate Customer Invoice — from approved proforma.
- Customer Invoice Payment Collection — record incoming money.
- Invoice File Upload — attach signed PDF.
- Supplier Voucher Processing — payable side.
- Supplier Payment List — payables register.
- Supplier Invoice Payment Expense — expense allocation per supplier.
- Supplier Voucher Payment Details — line-level supplier payment.
- Supplier Voucher File Upload — attach PDF for audit.
22.2 The split
Receivables (Customer)
- Approved Proforma → Invoice
- Customer Invoice → Payment Collection
- Posts to Gateway as Customer credit (RV)
Payables (Supplier)
- Supplier Bill → Voucher
- Approve → Payment Processing
- Posts to Gateway as Supplier debit (PV)
Approved Proforma → Customer Invoice
The Approved Proforma inbox in Payments is the same backing data as the Approval-side Approved list, but with the action Generate Invoice.
23.1 Steps
- Open Payments → Approved Proforma Inbox.
- Pick a row; click Generate Invoice.
- SP
PaymentsInbox_GenerateInvoice_InvoiceList_Insertcreates the invoice header + lines + tax in one transaction. - InvoiceNo is allocated and PDF is generated automatically (server-side).
- Invoice appears in Payments → Invoice List with status Issued.
23.2 What's reflected
- Proforma row marked Invoiced.
- InvoiceList row created with Total Due.
- InvoiceFileUpload row created with the PDF reference.
- Customer is emailed the invoice.
Customer Payment Collection (Receivables)
When a customer pays, you record the receipt. SP: CustomerInvoice_CustomerInvoicePaymentCollection_Insert.
24.1 The collection screen
- Open Payments → Process Invoice Payment Collection.
- Pick the open invoice (filtered by customer or invoice no).
- Enter the payment — date, mode (Cash / Bank / Card / Cheque), amount, reference.
- Save. SP creates a
CustomerInvoicePaymentsrow.
24.2 Partial payments
Multiple payment rows against one invoice are supported. The InvoiceList.Status moves Issued → Partly Paid → Paid as collection accumulates.
| Status | Definition |
|---|---|
| Issued | Sent, not paid. |
| Partly Paid | Some payments collected; balance > 0. |
| Paid | Sum of payments ≥ total due. |
| Overdue | Past due date, not fully paid. |
| Cancelled | Voided after issue. |
24.3 Push to Gateway
Saving the collection calls Payments_AccountsGateWay_Customer_Insert — a row appears in the Gateway queue ready for an Accountant to post (Chapter 30).
Supplier Voucher Processing (Payables)
Suppliers (hotels, airlines, tour operators, visa agents, transport companies) bill us. The Voucher process captures, approves and pays them.
25.1 The voucher flow
25.2 The screens
| Page | Purpose |
|---|---|
| ProcessVendorVoucher.razor | Capture supplier voucher header. |
| VendorVoucherList.razor | List of vouchers with status. |
| VendorVoucherViewer.razor | Read-only summary. |
| SupplierVoucherFileUpload | Attach the supplier PDF. |
25.3 Voucher fields
| Field | Note |
|---|---|
| SupplierID | From Supplier master. |
| BookingRef link | Which package this voucher relates to. |
| Lines | Per-service expense (Hotel / Flight / Tour / Visa / Transfer). |
| SubTotal / Tax / Total | Roll-up. |
| Status | Captured / Approved / Paid / Disputed. |
25.4 Push to Gateway
Saving the supplier payment calls Payments_AccountsGateWay_Supplier_Insert — Gateway queue updated; Accountant posts the PV in Chapter 30.
File Uploads — Invoice / Voucher PDFs
Both sides — Customer Invoices and Supplier Vouchers — keep their PDF artefacts. Two upload SPs handle the two flows.
| SP | Used by |
|---|---|
PaymentsInbox_InvoiceList_FileUpload_Insert | Customer Invoice — attach signed PDF. |
PaymentsInbox_InvoiceList_FileUpload_Select | Retrieve the invoice file for view / re-send. |
SupplierVoucher_FileUpload_Insert | Supplier voucher PDF. |
26.1 What goes where
- Files live on disk; row in
InvoiceFileUpload/SupplierVoucherFileUploadstores path + metadata. - Auth — file path is never exposed; downloads go through controller with auth check.
- Retention — kept indefinitely; archive policy is a DBA concern.
Accounts — Chart of Accounts & Ledgers
The Accounts module is shared with Inventory ERP. Two-level chart: LedgerGroup (Asset / Liability / Equity / Income / Expense) parents Ledger; per-customer / supplier sub-ledgers sit under control accounts.
27.1 Chart for a BackOffice setup
| Group | Type | Example Ledgers |
|---|---|---|
| Cash & Bank | Asset | Main Bank, Card Settlement, Cash on Hand |
| Customer Receivables | Asset | Receivable — Direct Customer, Receivable — Agent |
| Supplier Payables | Liability | Hotel Suppliers, Airline Suppliers, Tour Operators, Visa Agents, Transfer Companies |
| Tax Payable | Liability | VAT Output, Tourism Levy |
| Travel Service Income | Income | Hotel Revenue, Flight Revenue, Tour Revenue, Visa Revenue, Transfer Revenue, Commission Income |
| Cost of Travel Services | Expense | Hotel COGS, Flight COGS, Tour COGS, Visa COGS, Transfer COGS |
| Operating Expense | Expense | Salary, Rent, Marketing, Bank Charges |
27.2 Sub-ledgers
Each Customer or Agent appears as a Accounts_SubLedger under Customer Receivables; each Supplier as a sub-ledger under Supplier Payables. This is what feeds Aged Receivables / Payables (Chapter 29).
27.3 Domain Account Master
Accounts_DomainAccountMaster is the BackOffice-domain override of the chart — Inventory's POS-side ledgers don't show here, only travel-relevant ones.
Journal Entry & Voucher Types
Posting is two-step — Transaction header + many balanced TransactionDetails. Σ Debit = Σ Credit always.
28.1 Voucher types
| Code | Name | Typical use |
|---|---|---|
RV | Receipt Voucher | Customer payment received. |
PV | Payment Voucher | Supplier voucher paid. |
JV | Journal Voucher | Free-form correction / adjustment. |
CV | Contra Voucher | Bank-to-cash, cash-to-bank. |
BV | Bank Voucher | Card settlement, bank charges. |
28.2 Manual journal — example
Customer paid 4,468 cash for booking PB-2026-0042. Posted via Gateway, but the underlying journal looks like:
| Ledger | Dr | Cr |
|---|---|---|
| Cash on Hand | 4,468 | — |
| Hotel Revenue | — | 1,540 |
| Flight Revenue | — | 2,205 |
| Tour Revenue | — | 368 |
| Visa Revenue | — | 198 |
| Transfer Revenue | — | 157 |
| Totals | 4,468 | 4,468 |
Accounts Reports
| Report | Question it answers |
|---|---|
| Balance Sheet | Asset / Liability / Equity grouped as of a date. |
| Cash Book | Receipts / payments by ledger in a date range. |
| Aged Receivables | Customer balances bucketed 0-30 / 31-60 / 61-90 / 90+. |
| Aged Payables | Supplier balances similarly bucketed. |
| Top Expenses | Top-N expense ledgers by amount. |
| Monthly Trends | 12 months of receipts / payments. |
| Trial Balance | All ledgers Dr / Cr at as-of date. |
| Customer Statement | Per-customer ledger printout. |
| Supplier Statement | Per-supplier ledger printout. |
| Booking → GL drill | From a single Booking Ref to its journal entries. |
Accounts Gateway — Cross-Module Posting
BridgeThe Accounts Gateway is the bridge between Payments and the GL. It pushes Customer collections (RV) and Supplier vouchers (PV) into Accounts_Transaction via three named SPs.
30.1 The three SPs
| SP | Triggered by | Effect |
|---|---|---|
Payments_AccountsGateWay_Customer_Insert | Customer payment collection saved. | Inserts a candidate Customer-side ledger entry. |
Payments_AccountsGateWay_Supplier_Insert | Supplier voucher payment processed. | Inserts a candidate Supplier-side ledger entry. |
Payments_AccountsGateWay_ListActionItems_Select | Accountant opens the Gateway page. | Returns the queue of unposted candidates. |
30.2 The Gateway page
| SL | Booking Ref | Type | Customer / Supplier | Net | Comm. | Sell | Posted | Action |
|---|---|---|---|---|---|---|---|---|
| 1 | PB-2026-0042 | Customer Receipt | Aman Travel Corp | 4,140 | 328 | 4,468 | 2026-05-10 14:32 | Post |
| 2 | VCH-2026-0089 | Supplier Voucher | Goa Hotel Group | 1,400 | — | — | 2026-05-10 11:14 | Post |
| 3 | PB-2026-0043 | Customer Receipt | Sarah Khan | 820 | 72 | 892 | 2026-05-10 09:55 | Post |
30.3 Posting a candidate
- Click Post. The candidate is wrapped in an
Accounts_Transactionwith the appropriate VoucherType (RV for customer, PV for supplier). - Detail rows are produced: e.g. customer receipt → Cash Dr 4,468 / Hotel Revenue Cr 1,540 / Flight Revenue Cr 2,205 / Tour Revenue Cr 368 / Visa Revenue Cr 198 / Transfer Revenue Cr 157.
- Gateway row marked Posted; new TransactionID stored back.
- Released to
Accounts_ReleaseLog— append-only audit.
Status & Notification Reference
Every long-lived row carries a status. This chapter is a quick-look table.
| Entity | Statuses |
|---|---|
| PackageBooking | Draft Saved Indented Quoted Confirmed Cancelled |
| BookingRequestIntend | New Indented Quoted Moved |
| QuotationDesk | In-Prep Edited Submitted |
| QuotationList | Submitted Ready for Proforma Proforma Created Rejected |
| ProformaInvoice | Draft Sent Reminded Accepted Declined Expired Invoiced |
| InvoiceList | Issued Partly Paid Paid Overdue Cancelled |
| SupplierVoucherList | Captured Approved Paid Disputed |
| Accounts_Transaction | Pending Posted Cancelled Reconciled |
31.1 Notifications you'll see in the Inbox
- New Booking saved (Reservation → Operations).
- Quotation moved to Approval.
- Proforma due for chase-up.
- Invoice overdue (past due date).
- Accounts Gateway has un-posted candidates.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Booking saved but Operations Inbox is empty | BookingRequestIntend_Auto_Insert didn't fire (transaction failed). | Re-save the booking; check ActivityLog for the original error. |
| Indent Viewer shows blank for a service tab | The matching service-type row is missing on the package. | Re-open Reservation; add the missing service line. |
| Move-to-Approval button is disabled | Quotation Desk isn't fully filled — at least one line has 0 NetRate or no SellRate. | Open desk; complete every line. |
| Proforma stuck on Sent for 7+ days | Customer hasn't responded. | Use Chase-up to reminder; or expire and regenerate. |
| Customer Invoice not generating | Proforma not in Accepted state. | Approve the proforma first. |
| Payment saved but ledger unchanged | Gateway candidate not posted. | Open Accounts → Gateway; click Post. |
| Currency rate looks stale | CurrencyTrades not refreshed today. | Run the daily-rate refresh job; resave the booking. |
| Aged Receivables shows wrong customer name | Sub-ledger missing on Accounts_SubLedger for that customer. | Open Accounts → Sub-Ledger; add the row. |
Glossary
| Term | Meaning |
|---|---|
| PackageBooking | The composite booking that bundles Hotel / Flight / Tour / Visa / Transfer for one customer/agent. |
| BookingRequestIntend | Auto-generated row from PackageBooking — feeds the Operations inbox. |
| CustomerORAgent | Union of customer or agent — every booking points here for the billing party. |
| Indent | The per-service summary view operations sees before quoting. |
| Quotation Desk | The screen where NetRate, Commission, and SellRate are finalised. |
| NetRate / SellRate | Supplier rate / customer-facing rate — difference is margin or commission. |
| Proforma | Draft invoice — not legal, not posted to GL. |
| Customer Invoice | Legal invoice — posted via Gateway to the GL. |
| Chase-up | The follow-up rhythm on a sent proforma. |
| Voucher (Supplier) | Supplier's bill captured in our system; once paid, posted to Accounts. |
| RV / PV / JV / CV / BV | Receipt / Payment / Journal / Contra / Bank — the five voucher types. |
| Accounts Gateway | The bridge that posts Customer / Supplier events to the GL. |
| SubLedger | Customer or supplier sitting under a control account (Receivable / Payable). |
| PaxType | Adult / Child / Infant — drives per-service pricing. |
| CurrencyTrades | Multi-currency table with daily rates. |
| TaxationTypes | VAT / service tax / tourism levy applied at quotation/invoice time. |
| SP-driven | Every read & write through a stored procedure — never raw SQL or LINQ. |
| RBAC | Role-Based Access Control — UserRolePrivileges × SubMenu × PagePrivilegeTypes. |
| Workflow Listener | UM engine that propagates approvals across modules. |