Folks BackOffice ERP

Reservation · Operations · Approval · Payments · Accounts — User Manual

Version 3.0  |  May 2026  |  MasGen Innovations

7 Modules · 90+ Tables · 300+ Stored Procedures · 70+ Razor Pages
01

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.

SP-driven core

Every read and write goes through a named stored procedure — predictable, auditable, no LINQ in business logic.

RBAC & menu privileges

Roles map to designations; designations to menus; menus to actions. Reservation, ops, approval and payments staff are scoped accordingly.

Blazor Server UI

.NET Blazor with SignalR — inboxes light up the moment a booking, proforma or payment lands.

Accounts Gateway

The bridge that pushes Customer / Supplier postings from Payments into the GL — operational events post asynchronously.

Modules in this manual

#ModulePurposeKey entities
1ReservationTravel booking — Hotel / Flight / Tour / Visa / Transfer; package builder.PackageBooking, HotelBooking, FlightBooking, TourBooking, VisaRequest, TransferRequest
2OperationsBooking intent inbox, indent viewer per service, quotation desk preparation.BookingRequestIntend, QuotationDesk, IndentViewer_*
3ApprovalApprovals inbox, Proforma Invoice, chase-up, customer invoice generation.ProformaInvoice, QuotationList, CustomerBillingInfo, InvoiceList
4PaymentsReceivables (customer collection) and Payables (supplier vouchers).CustomerInvoicePayments, SupplierVoucherList, SupplierInvoicePaymentExpence
5AccountsGeneral ledger — Chart of Accounts, journals, reports, sub-ledgers.Accounts_LedgerGroup, Accounts_Ledger, Accounts_Transaction
6Accounts GatewayBridge that pushes Customer / Supplier postings into the ledger.AccountsGateway_Customer, AccountsGateway_Supplier, ActionItems
7User Management LockedLogin, employees, departments, designations, roles, menus, workflow.Login, Users, UserRoles, UserRolePrivileges, MainMenu, SubMenu, Workflow*

The data flow at a glance

Reserve
Operations
Approve
Pay
Gateway
Ledger
Companion manual. If you handle physical assets, vendors and a counter-side POS, see the Folks Inventory ERP Manual — same UM and Accounts modules, different operational core.
02

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

  1. Open the FE URL. Login with username & password.
  2. JWT issued; redirected to the role's DefaultPath.
  3. Login.Status must be Active — Inactive / Blocked rows are admin-only.

2.2 Roles you'll meet

RoleSeesCannot
SuperAdminAll modules.
Reservation AgentReservation, customer master, package builder.Operations, Approval, Payments.
OperationsBooking inbox, indent viewer, quotation desk.Approval inbox, payments.
ApproverApprovals inbox, proforma, customer invoice.Reservation, supplier vouchers.
Payments OfficerCustomer collection, supplier vouchers.Reservation create.
AccountantChart of accounts, journals, reports, gateway.Reservation create, supplier voucher line entry.

2.3 The page anatomy

Folks BackOffice ERP — Standard inbox page
New Refresh Export Search bookings…
#Booking RefCustomerTypeService MixStatus
1PB-2026-0042Aman Travel CorpGroupHotel · Flight · TransferAwaiting Quote
2PB-2026-0043Sarah KhanIndividualHotel · VisaConfirmed

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.
03

User Management (UM)

Locked

UM 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

Login ──▶ Users ──▶ UserRoles ──▶ UserRolePrivileges ──▶ SubMenu ──▶ MainMenu │ │ │ └──▶ PagePrivilegeTypes (View / Create / Edit / Delete / Approve) │ └──▶ DefaultPath (where to land after login)

3.2 Tables you may need to know

TablePurpose
LoginUserName / Password / Status / DefaultPathID / LoginTypeID.
EmployeeRegEmployee profile with image & designation.
Department / DesignationOrg hierarchy.
UserRolePrivileges(UserRolesID × SubMenuID × PagePrivilegeTypes) — the actual gate.
InternalWorkflow / ExternalWorkflow / WorkflowListenerThe state-machine engine that powers approvals across modules — used heavily by Approval.
ActivityLogAppend-only audit trail.
Locked module. Do not modify UM API/FE/DB code in either ERP — both products depend on identical contracts.
04

Reservation — Module Overview

Core

The 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

ServiceMasterDetailPer-pax detail
HotelHotelBookingHotelBookingDetails (room × dates)GuestHotelBookingDetails
FlightFlightBookingFlightBookingDetails (segment × class)(per pax via package guest)
TourTourBookingTourBookingDetails (itinerary)GuestTourBooking
VisaVisaRequestVisaRequestDetails (per pax × type)VisaRequestGuestDetails
TransferTransferRequestTransferRequestDetails (leg × vehicle)(per pax via package guest)
Package (composite)PackageBookingPackageBookingDetails (link rows)

4.3 The end-to-end flow

Customer / Agent ──▶ PackageBooking ──▶ Hotel + Flight + Tour + Visa + Transfer │ ▼ BookingRequestIntend ──▶ Operations Inbox
Counts: 34 tables, 103+ controllers (60 SP + 43 named), 7 sub-modules, 6 service types.
05

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

  1. Open Reservation → Customer Registration.
  2. Enter Name, Type (Individual / Corporate), Contact, Country, Currency.
  3. Add Billing Info (address, TRN/VAT) on the same screen.
  4. Pick Reference Type (e.g. Walk-in, Online, Existing).

5.2 Add an Agent

  1. Open Reservation → Agent Dictionary.
  2. Capture commission %, credit limit, payment terms.
  3. 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.
Why split? Agents earn commission and are billed at NetRate; customers pay SellRate. The Quotation Desk uses both to compute commission accruals.
06

Booking Concepts (Package, Pax, Currency, Tax)

Five concepts you'll see on every booking screen.

ConceptTableNotes
PackagePackageBooking + PackageBookingDetailsThe composite — links any combination of service-type bookings.
Booking TypeBookingTypeGroup / Individual / Corporate / Inbound / Outbound.
Pax TypePaxTypeAdult / Child / Infant — drives pricing per service.
Guest InfoGuestInfoThe actual traveller — name, passport, DOB, nationality.
CurrencyCurrencyTradesMulti-currency, with daily rate; FE coerces sell rate to base currency at save.
TaxTaxationTypesVAT, service tax, tourism levy — applied on quotation.
LanguageLanguageCustomer-facing language for invoice / voucher PDFs.

6.1 The Package shape

PackageBooking ├── PackageBookingDetails ──▶ HotelBookingID ├── PackageBookingDetails ──▶ FlightBookingID ├── PackageBookingDetails ──▶ TourBookingID ├── PackageBookingDetails ──▶ VisaRequestID └── PackageBookingDetails ──▶ TransferRequestID
You don't have to use a Package — a single hotel-only booking is just a Package with one detail line. The framework is uniform.
07

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

  1. Open Reservation → Hotel Booking. Pick the package or start standalone.
  2. Pick the Hotel (filtered by city via HotelDictionary).
  3. Pick Room Type + Meal Plan; set check-in / check-out dates.
  4. 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.

FieldNote
HotelIDFrom HotelDictionary.
RoomTypeIDStandard / Deluxe / Suite / Family.
MealPlanIDBB (room only) / HB (with breakfast) / FB / AI (all-inclusive).
CheckIn / CheckOutDates; nights = diff.
NetRate / Markup / SellRateNetRate from supplier; Markup is your margin; SellRate = NetRate × (1 + Markup%).
CurrencyOften supplier-side (e.g. USD); converted to base at save.
StatusDraft / 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.

Pro tip. Always set NetRate first — the FE auto-fills SellRate from the customer's markup or agent's commission.
08

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

#FromToDateAirlineClassPax
1DXBBOM2026-08-15EKEconomy4
2BOMGOI2026-08-16AIEconomy4
3GOIBOM2026-08-22AIEconomy4
4BOMDXB2026-08-23EKBusiness2
Pricing. Each segment carries its own NetRate / SellRate. The header total rolls up automatically.
09

Tour Booking

Tours are itinerary-style. The header is one tour; the details are stops; GuestTourBooking tracks who actually takes the tour.

  1. Open Reservation → Tour Booking. Pick the package.
  2. Add the tour name and date range.
  3. Add itinerary lines (Day 1 — sightseeing X, Day 2 — beach Y, etc.).
  4. Tick which guests are participating in Guest Tour Booking.

9.1 Itinerary fields

FieldNote
TourNameFree text, often supplier-given.
StartDate / EndDateTour window.
Itinerary linesDay-by-day or hour-by-hour.
GuideLanguageFrom Language master.
NetRate per paxDrives total = pax × rate.
10

Visa Request

Visa is per-pax. The header captures the destination + visa type; the details capture each applicant.

10.1 Visa types

TypeUseValidity (typical)
TouristLeisure travel14 / 30 / 90 days
BusinessMeetings, conferences30 / 90 days
TransitLayover >24h96 hours
Multi-EntryRepeat visits1 / 5 years

10.2 Steps

  1. Reservation → Visa Request. Pick destination country, visa type from VisaTypes.
  2. Add applicant rows in VisaRequestDetails — passport no, expiry, nationality.
  3. For group visas, multi-pax mapping flows through VisaRequestGuestDetails.
Passport expiry must be ≥ 6 months from travel — the system flags but does not block.
11

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

LegFromToVehiclePax
1 (Arrival)BOM Airport T2Goa HotelSUV4
2 (Departure)Goa HotelGOI AirportSUV4
12

Operations — Module Overview

Core

Operations 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

Inbox
Indent
Quote Desk
Move
Approval

12.3 The four pages

PagePurpose
QuotationDesk.razorPer-package rate preparation.
QuotationList.razorList of all quotations in flight.
QuotationViewer.razorRead-only summary for review.
QuotationEmailList / EmailTemplateSend quotations to customer/agent.
13

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

ColumnSource
Booking RefPackageBooking.BookingRefNo
Customer / AgentCustomerORAgent (joined)
Service MixBooleans — has Hotel / Flight / Tour / Visa / Transfer
Travel DatesMin/max from child bookings
Pax countSum from PackageBookingDetails
StatusNew / Indented / Quoted / Moved

13.2 Pick & act

  1. Operations clicks a row from the inbox.
  2. The BookingRequestIntend opens — service-by-service tabs (Hotel / Flight / Tour / Visa / Transfer).
  3. Each tab is the Indent Viewer (Chapter 14) — read-only summary of what the agent booked.
  4. Op clicks Move to Quotation Desk when ready.
The inbox is a SignalR-driven page — new bookings appear instantly without a refresh.
14

Indent Viewer

Five SPs feed the Indent Viewer — one per service type. Operations uses these to verify the booking and prepare the indent.

ServiceSPReturns
HotelIndentViewer_HotelBookingInformation_SelectByPAckageBookingIDHotel master + room lines.
Hotel pricingIndentViewer_DailyHotelPricing_SelectPer-night rate breakdown.
FlightIndentViewer_FlightRequestInformation_SelectByPAckageBookingIDMulti-segment + class.
TourIndentViewer_TourBookingInformation_SelectByPAckageBookingIDItinerary + guests.
VisaIndentViewer_VisaRequestInformation_SelectByPAckageBookingID + VisaRequestGuestDetailsPer-applicant detail.
TransferIndentViewer_TransferRequestInformation_SelectByPAckageBookingIDPer-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.
15

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

FieldMeaning
NetRateConfirmed supplier rate.
CommissionEither agent commission % or markup amount.
SellRateNetRate + Commission/Markup, after rounding.
EditsNumber of times the line was edited (audit signal).
TurnaroundTimeHours from inbox-pick to move-to-approval.
RemarksFree-text justification for the rate.

15.2 The screen

Operations → Quotation Desk — Prep
ServiceLineNetRateComm/MkupSellRateEdits
HotelGoa Hotel · Suite × 7n1,400+10%1,5401
FlightDXB-BOM × 4 (Y)2,100+5%2,2050
TourGoa Beach Day × 4 pax320+15%3682
VisaIndia Tourist × 4 pax180+10%1980
TransferBOM Airport → Goa140+12%1571
Net: 4,140  ·  Margin: 328  ·  Sell: 4,468
Move to Approval
Edits matter. Approvers see the edit count — high edit counts on a single quotation invite scrutiny.
16

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.

  1. From the Quotation Desk, click Move to Approval.
  2. Confirmation modal — last chance to edit rates.
  3. SP fires; the booking flips status QuotedSubmitted for Approval.
  4. Approval inbox lights up.

What changes

  • BookingRequestIntend.StatusMoved.
  • New row in QuotationList.
  • Inbox notification to approvers.
17

Approval — Module Overview

Core

The 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

QuotationList (Ready) ──▶ MovToProformaInvoice_Insert ──▶ ProformaInvoice │ ▼ ProformaChaseUp (modify status) │ ▼ (Approved) CustomerInvoice (legal) │ ▼ Send to Payments
Pages: ApprovalInbox.razor · ProformaInvoiceList.razor · ProformaChaseUpList.razor · ProformaInvoiceViewer.razor.
18

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

ColumnSource
Booking RefPackageBooking
Customer / AgentCustomerORAgent
Service MixService-type flags
NetRate / Commission / SellRateFrom QuotationDesk
EditsEdit count signal
Quoted AtMove-to-approval timestamp
AgingHours 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.
19

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

SectionContent
HeaderBooking Ref, Customer / Agent, Travel dates, Currency.
Service linesOne row per service (Hotel / Flight / Tour / Visa / Transfer) with NetRate & SellRate.
Sub-totalSum of SellRate.
TaxVAT / service tax / tourism levy from TaxationTypes.
Total DueSub-total + Tax.
ValidityTypically 7 days.
StatusDraft / 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.

A Proforma is not posted to Accounts — only the Customer Invoice (Chapter 21) creates ledger entries via the Gateway.
20

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

DayActionStatus
0Send proformaSent
2Reminder callReminded
5Final reminderFinal reminder
7Proforma expiresExpired
Customer confirmsAccepted
Customer declinesDeclined

20.2 On Acceptance

  1. Approver clicks Approve on the chase-up row.
  2. Status flips to Accepted.
  3. The Customer Invoice generation is unlocked (Chapter 21 / 23).
21

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

FieldNote
Invoice NoAuto-generated, sequential — never gaps.
Invoice DateToday by default.
Due DatePer customer credit terms.
Bill-toFrom CustomerBillingInfo.
LinesFrom the proforma.
TaxRecomputed at issue date (rates may have changed).
Total DueSub-total + Tax.
StatusIssued / 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.

22

Payments — Module Overview

Core

The 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)
Counts: 14 tables, 5 named controllers + 17 SP controllers, 12 Razor pages.
23

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

  1. Open Payments → Approved Proforma Inbox.
  2. Pick a row; click Generate Invoice.
  3. SP PaymentsInbox_GenerateInvoice_InvoiceList_Insert creates the invoice header + lines + tax in one transaction.
  4. InvoiceNo is allocated and PDF is generated automatically (server-side).
  5. 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.
24

Customer Payment Collection (Receivables)

When a customer pays, you record the receipt. SP: CustomerInvoice_CustomerInvoicePaymentCollection_Insert.

24.1 The collection screen

  1. Open Payments → Process Invoice Payment Collection.
  2. Pick the open invoice (filtered by customer or invoice no).
  3. Enter the payment — date, mode (Cash / Bank / Card / Cheque), amount, reference.
  4. Save. SP creates a CustomerInvoicePayments row.

24.2 Partial payments

Multiple payment rows against one invoice are supported. The InvoiceList.Status moves Issued → Partly Paid → Paid as collection accumulates.

StatusDefinition
IssuedSent, not paid.
Partly PaidSome payments collected; balance > 0.
PaidSum of payments ≥ total due.
OverduePast due date, not fully paid.
CancelledVoided 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).

25

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

Capture
Add Lines
Attach PDF
Approve
Pay

25.2 The screens

PagePurpose
ProcessVendorVoucher.razorCapture supplier voucher header.
VendorVoucherList.razorList of vouchers with status.
VendorVoucherViewer.razorRead-only summary.
SupplierVoucherFileUploadAttach the supplier PDF.

25.3 Voucher fields

FieldNote
SupplierIDFrom Supplier master.
BookingRef linkWhich package this voucher relates to.
LinesPer-service expense (Hotel / Flight / Tour / Visa / Transfer).
SubTotal / Tax / TotalRoll-up.
StatusCaptured / 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.

26

File Uploads — Invoice / Voucher PDFs

Both sides — Customer Invoices and Supplier Vouchers — keep their PDF artefacts. Two upload SPs handle the two flows.

SPUsed by
PaymentsInbox_InvoiceList_FileUpload_InsertCustomer Invoice — attach signed PDF.
PaymentsInbox_InvoiceList_FileUpload_SelectRetrieve the invoice file for view / re-send.
SupplierVoucher_FileUpload_InsertSupplier voucher PDF.

26.1 What goes where

  • Files live on disk; row in InvoiceFileUpload / SupplierVoucherFileUpload stores path + metadata.
  • Auth — file path is never exposed; downloads go through controller with auth check.
  • Retention — kept indefinitely; archive policy is a DBA concern.
27

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

GroupTypeExample Ledgers
Cash & BankAssetMain Bank, Card Settlement, Cash on Hand
Customer ReceivablesAssetReceivable — Direct Customer, Receivable — Agent
Supplier PayablesLiabilityHotel Suppliers, Airline Suppliers, Tour Operators, Visa Agents, Transfer Companies
Tax PayableLiabilityVAT Output, Tourism Levy
Travel Service IncomeIncomeHotel Revenue, Flight Revenue, Tour Revenue, Visa Revenue, Transfer Revenue, Commission Income
Cost of Travel ServicesExpenseHotel COGS, Flight COGS, Tour COGS, Visa COGS, Transfer COGS
Operating ExpenseExpenseSalary, 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.

28

Journal Entry & Voucher Types

Posting is two-step — Transaction header + many balanced TransactionDetails. Σ Debit = Σ Credit always.

28.1 Voucher types

CodeNameTypical use
RVReceipt VoucherCustomer payment received.
PVPayment VoucherSupplier voucher paid.
JVJournal VoucherFree-form correction / adjustment.
CVContra VoucherBank-to-cash, cash-to-bank.
BVBank VoucherCard 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:

LedgerDrCr
Cash on Hand4,468
Hotel Revenue1,540
Flight Revenue2,205
Tour Revenue368
Visa Revenue198
Transfer Revenue157
Totals4,4684,468
Most postings come from the Accounts Gateway (Chapter 30) — manual journals are used for adjustments and settlements.
29

Accounts Reports

ReportQuestion it answers
Balance SheetAsset / Liability / Equity grouped as of a date.
Cash BookReceipts / payments by ledger in a date range.
Aged ReceivablesCustomer balances bucketed 0-30 / 31-60 / 61-90 / 90+.
Aged PayablesSupplier balances similarly bucketed.
Top ExpensesTop-N expense ledgers by amount.
Monthly Trends12 months of receipts / payments.
Trial BalanceAll ledgers Dr / Cr at as-of date.
Customer StatementPer-customer ledger printout.
Supplier StatementPer-supplier ledger printout.
Booking → GL drillFrom a single Booking Ref to its journal entries.
Booking-to-GL drill. The most-used custom report — pick a Booking Ref, see every Accounts_Transaction with that ref. Indispensable for audit.
30

Accounts Gateway — Cross-Module Posting

Bridge

The 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

SPTriggered byEffect
Payments_AccountsGateWay_Customer_InsertCustomer payment collection saved.Inserts a candidate Customer-side ledger entry.
Payments_AccountsGateWay_Supplier_InsertSupplier voucher payment processed.Inserts a candidate Supplier-side ledger entry.
Payments_AccountsGateWay_ListActionItems_SelectAccountant opens the Gateway page.Returns the queue of unposted candidates.

30.2 The Gateway page

Accounts → Accounts Gateway
SLBooking RefTypeCustomer / SupplierNetComm.SellPostedAction
1PB-2026-0042Customer ReceiptAman Travel Corp4,1403284,4682026-05-10 14:32Post
2VCH-2026-0089Supplier VoucherGoa Hotel Group1,4002026-05-10 11:14Post
3PB-2026-0043Customer ReceiptSarah Khan820728922026-05-10 09:55Post

30.3 Posting a candidate

  1. Click Post. The candidate is wrapped in an Accounts_Transaction with the appropriate VoucherType (RV for customer, PV for supplier).
  2. 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.
  3. Gateway row marked Posted; new TransactionID stored back.
  4. Released to Accounts_ReleaseLog — append-only audit.
The Gateway is the only path Payments uses to reach the GL. If a customer collection is missing from the ledger, the candidate hasn't been posted — start here.
31

Status & Notification Reference

Every long-lived row carries a status. This chapter is a quick-look table.

EntityStatuses
PackageBookingDraft Saved Indented Quoted Confirmed Cancelled
BookingRequestIntendNew Indented Quoted Moved
QuotationDeskIn-Prep Edited Submitted
QuotationListSubmitted Ready for Proforma Proforma Created Rejected
ProformaInvoiceDraft Sent Reminded Accepted Declined Expired Invoiced
InvoiceListIssued Partly Paid Paid Overdue Cancelled
SupplierVoucherListCaptured Approved Paid Disputed
Accounts_TransactionPending 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.
32

Troubleshooting

SymptomLikely causeFix
Booking saved but Operations Inbox is emptyBookingRequestIntend_Auto_Insert didn't fire (transaction failed).Re-save the booking; check ActivityLog for the original error.
Indent Viewer shows blank for a service tabThe matching service-type row is missing on the package.Re-open Reservation; add the missing service line.
Move-to-Approval button is disabledQuotation 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+ daysCustomer hasn't responded.Use Chase-up to reminder; or expire and regenerate.
Customer Invoice not generatingProforma not in Accepted state.Approve the proforma first.
Payment saved but ledger unchangedGateway candidate not posted.Open Accounts → Gateway; click Post.
Currency rate looks staleCurrencyTrades not refreshed today.Run the daily-rate refresh job; resave the booking.
Aged Receivables shows wrong customer nameSub-ledger missing on Accounts_SubLedger for that customer.Open Accounts → Sub-Ledger; add the row.
The ActivityLog records every Insert / Update / Delete with userid + timestamp — your first stop for diagnosis.
33

Glossary

TermMeaning
PackageBookingThe composite booking that bundles Hotel / Flight / Tour / Visa / Transfer for one customer/agent.
BookingRequestIntendAuto-generated row from PackageBooking — feeds the Operations inbox.
CustomerORAgentUnion of customer or agent — every booking points here for the billing party.
IndentThe per-service summary view operations sees before quoting.
Quotation DeskThe screen where NetRate, Commission, and SellRate are finalised.
NetRate / SellRateSupplier rate / customer-facing rate — difference is margin or commission.
ProformaDraft invoice — not legal, not posted to GL.
Customer InvoiceLegal invoice — posted via Gateway to the GL.
Chase-upThe 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 / BVReceipt / Payment / Journal / Contra / Bank — the five voucher types.
Accounts GatewayThe bridge that posts Customer / Supplier events to the GL.
SubLedgerCustomer or supplier sitting under a control account (Receivable / Payable).
PaxTypeAdult / Child / Infant — drives per-service pricing.
CurrencyTradesMulti-currency table with daily rates.
TaxationTypesVAT / service tax / tourism levy applied at quotation/invoice time.
SP-drivenEvery read & write through a stored procedure — never raw SQL or LINQ.
RBACRole-Based Access Control — UserRolePrivileges × SubMenu × PagePrivilegeTypes.
Workflow ListenerUM engine that propagates approvals across modules.
End of Manual. Now apply it — head to the Exercise Workbook for 15 hands-on labs.