Business flows¶
The processes Wilderness Window implements, grouped by where they sit in the commercial lifecycle. Each entry gives the modules and folders that own it and the model documents that are its entry points, so you can jump straight in with:
python3 tools/mxinspect.py ls <Module> <Folder>
python3 tools/mxinspect.py show <Module>.<Microflow>
Acronyms the model never spells out are marked (inferred) - confirm with the team.
Core lifecycle at a glance¶
website / agent / API enquiry
-> Lead (Booking/LeadManagement, LeadStatus: Assigned -> Contacted -> Quoted -> Confirmed | Unconverted)
-> Booking wizard (Booking/BookingWizard, 5 steps)
step 1 input -> step 2 availability -> step 3 timeline -> step 4 quote -> step 5 confirmation
-> Booking (BookingStatus: Draft/Quote_only -> P -> C -> Travelling -> Traveled | X/CX/CC)
-> Itinerary + documents + supplier confirmations
-> Receivables (deposit -> partial -> final invoice, receipts, POP)
-> Payables (supplier vouchers, payment requests)
-> Ops handover (ROAR) -> travel -> guest history, feedback
Status vocabularies, straight from the enumerations:
| Enumeration | Values |
|---|---|
Booking.BookingStatus |
Draft, Quote_only, Placeholder, P (provisional), C (confirmed), CC, CX, X (cancelled), D, I, Pending, Paid, Travelling, Traveled, EX_Tourplan |
Booking.BookingLineStatus |
Draft, Provisional, Waitlisted, Requested, Pending, Confirmed, Cancelled, CancelledWithCosts, Placeholder, Pseudo, Not_applicable |
Booking.LeadStatus |
Assigned, Contacted, Quoted, Confirmed, Unconverted |
Booking.InvoiceStatus |
Submitted, Rejected, Resolved, Posted, POP_sent, Reversed, Allocated_to_Clerk, With_Payments_Team |
Booking.PaymentStatus |
PP, PD, NP, NR |
A booking carries four independent status attributes, not one, and conflating them is the most common source of misreadings in this area:
| Attribute | Means |
|---|---|
Source |
how the record came into being — Quote_only is what makes it a quote |
WindowStatus |
the status users see and most logic branches on |
InventoryStatus |
model doc: "really only reflects Wish status" |
TourplanStatus |
the record's state in TourPlan — written only at confirmation |
A root-level CSV export of WindowStatus usages is checked into the repo.
Depth available. Three processes are now documented end to end, at guard-and-node level, with regression suites and business-audience walkthroughs: quote to booking (§7–§11 below), cancellation and fees (§12), and pricing in three parts — which discounts attach, how the number is produced and manual adjustments and approval (§9 below). Where those disagree with the summaries here, they are the more precise account.
A. Demand and customer relationships¶
1. Website enquiry and newsletter capture¶
- Where:
Enquiries - Entry points:
IVK_GetWebsiteEnquiries,GetWebsiteNewsletterSignups,CreateContactFromNewsletterSignUp,IVK_AddGCLIDToReferral - Pulls enquiries and newsletter signups off the public website, creates contacts, and carries Google Click IDs through so paid-search attribution survives into the CRM.
2. Lead management and assignment¶
- Where:
Booking/LeadManagement(151 documents),WildernessLeadModel,Booking/BookingWizardreferral flows,Configuration.AgenciesForLeads - Entry points:
IVK_AssignDirect,IVK_AssignNamTeam,IVK_AssignToExistingBooking,IVK_ArchiveLead,IVK_Lead_ClearAgency,IVK_ReferralView_Save,IVK_CancelReferralBookings - Leads arrive direct, via agency referral, or through the published
JSONLeadInput/NewLeadInputservices. Flows deduplicate against history (CheckForHistoricalBookingsByPartyName,GetHistoricalBookingByPartyName), route to a consultant or a regional team, then convert to a booking or close asUnconverted. - Referral country selection and lead-year rules live in
Configuration(Agency_SetLeadYears).
3. CRM synchronisation (HubSpot)¶
- Where:
HubSpot(160 microflows, 15 import mappings),HubSpot_DMC - Entry points: scheduled
Event_SetContactsToSync->IVK_SetAllContactsToSynced,Event_SyncQueueToHubSpot->ProcessHubSpotSyncQueue; inbound webhook serviceHubSpotWebhook; queueHubspot_Task_Queue - Contacts and bookings sync both ways; confirmed lodges are pushed onto the HubSpot
booking record (
AddConfirmedLodgesToHubSpotBooking).
4. Agent onboarding and accreditation¶
- Where:
AgentOnBoarding,Configuration(accreditation agreements),Agency - Entry points:
AOB_LandingPage->AOB_Wizard_Step_1..3,IVK_RequestNewOPT,IVK_SubmitOTP,IVK_ValidateEmail;AccreditationAgreement_New,AccreditationAgreement_PerformActivation,CheckAccreditationAgreement - Self-service agent signup with email + OTP verification, then an accreditation agreement that must be activated (or manually uploaded) before the agency trades.
5. Agency relationship management¶
- Where:
Agency(Agency/,ARM/,Preferences/,Groups/,Retail/,AccreditationAgreement/,Messages/),Training,Media,Awards - Covers agency records and hierarchies, ARM (agency relationship management) activity
tracking, per-agency preferences, group bookings, agent training history
(
Training_History_Overview,IVK_EmailTraining), press/media agents (Media_HomePage_Agent,OCh_UpdateImpressions) and industry awards records.
6. Donor and fundraising database¶
- Where:
DonorDatabase(70 docs),Windfall(wealth screening) - Entry points:
Communication_Overview,AllocationAmount_Overview,ContactReminder_NewEdit;GetWindfallData,IVK_FetchMissingWindfall,CreateWindfallDeeplink,ExportWindfallDataToExcell - Donor communications, allocations and reminders, enriched with net-wealth/NAICS/NTEE
data from the Windfall API and graded (
GetWindfallGrade). Supports the conservation trust side of the business (inferred).
B. Selling: quote to confirmed booking¶
7. The booking wizard - the heart of the app¶
- Where:
Booking/BookingWizard- 1,845 documents, by far the largest feature - Entry points: menu items
Booking.IVK_NewBooking,Booking.IVK_NewQuote_Only,Booking.IVK_FlightBooking; step transitionsIVK_ProceedToScreen2,IVK_ProceedToScreen3_AutoBooking,ProceedToScreen3_CreateBLs,IVK_ProceedToScreen4_1Checks
| Step | Folder | Docs | What happens |
|---|---|---|---|
| 1 | Step1 - Input parameters |
156 | Party, agency, guests, dates, consultant assignment, booking locks (ClearBookingLock_FromAccount), guest assignment from ResRequest/booking (DS_UnassignedGuests_RR_BK) |
| 2 | Step2 - Availability check |
620 | Camp and third-party availability, room configuration, flight availability (IVK_GetFlightAvail), temporary supplier selections, child age-limit rules |
| 3 | Step3 - Time line |
256 | Day-by-day travel timeline, travel days/locations, booking-line creation (Sub_CreateBookingLines) |
| 4 | Step4 - Quote |
253 | Pricing, cost groups, discounts, quote document generation |
| 5 | Step5 - Confirmation |
175 | Quote expiry checks, allocation codes, travel groups, passenger details, exposure calculation, confirmation |
| - | General |
385 | Shared wizard plumbing including IVK_NewBooking -> NewBooking -> CreateAgencyBooking / NewBookingByEmployee |
- Autobooking path (
ConfirmAutobooking,ProceedTo3_ConfirmAutobooking) skips manual confirmation where supplier integrations allow it. BookingTemplates(134 microflows) provides pre-built trips and template availability (IVK_BookingTemplateAvailability).
The wizard is not the only route through it. API.BookQuote performs
convert → build booking lines → hold inventory provisionally in a single published API
call, bypassing steps 1–3 entirely. It is how partner systems (iTrvl) book. It refuses with
a specific code for five cheap checks (SYS1010, IN4050, IN4080, IN4090, IN4100) but
returns an undiagnosable Success = false when the room-configuration check fails, and it only
ever sees bookings flagged APIBooking. Full walkthrough:
deep-dives/quote-to-booking.md §3a.
Provisional has two buttons with different side effects. IVK_ProvisionalAll updates
HubSpot (AddProvisionalExpiryDateToHubSpot, UpdateDealAfterProv, both queued);
IVK_ProvisionalAll_Agents does not. Both sit on BookingWizard_Step_3, and the difference is
which button was pressed rather than who pressed it.
8. Quotes and expiry¶
- Where:
Booking/BookingWizard,Maintenance - Entry points:
IVK_NewQuote_Only,CheckQuoteExpiry,GetQuoteExpiry,Booking.Sub_AssignExpiryDate,Booking.IVK_ExtendExpiry,Booking.SE_CancelExpiredBookings,Maintenance.ProcessExpiredLines,Maintenance.SE_ProcessExpiredWishSBs - Two different expiries share the word. Provisional-hold expiry is a real deadline on
held inventory (
Sub_AssignExpiryDate: earliest held inventory line, elseAgency/ExpiryDays, default 7). Quote-price expiry is advisory —CheckQuoteExpirywarns that third-party prices have gone stale but blocks nothing. - Extension is Manager-only (
IVK_ExtendExpiry) and pushes new dates back to WISH. - Correction:
Maintenance.SE_SendQuoteExpiryEmailsis flaggedEXCLUDED FROM DEPLOYMENT, has roleMaintenance.Debugonly, and filters on an attribute namedQuoteExpiry_notused. There is no automated e-mail chasing agents about expiring quotes. Expiry warnings reach only whoever is inside the booking at the time. An earlier version of this document said jobs chase the agent by email; that is not supported by the deployed model. - Housekeeping (
SE_CancelExpiredBookings) deletes quotes and placeholders 4 years past trip end — 2 years for brochure costings — a retention period agreed 2023-05-05 (see deep-dive §7).
9. Pricing, costing and discounting¶
- Where:
Pricing(637 microflows:MF_Trans/376,MF_Config/168,ManualDiscounts/76,Dynamic/,Tax/,PCG_Allocations/),PricingDynamic,Booking/Dynamic Pricing,BookingMasterData/RARA/Pricing - Entry points:
Pricing.Sub_PriceBookingAll(89 callers - one of the most-used microflows in the app),Pricing.SumDetailedBookingLines, queueLogPricingQueue - Rate-sheet driven pricing with configuration flows, manual discount approval, tax
treatment (
CountryTaxTreatment_NewEditinFinancePortal), bed levies, VAT and departure-tax variants, party cost groups (PCG) and allocations, plus a dynamic pricing engine. - Documented in depth: pricing-rules.md for
qualification — 54 rule attributes, 23 subtypes, weighting and selectable rules;
pricing-calculation.md for the arithmetic —
inclusive tax, rack factor, the
PPPricedreconciliation, totals; pricing-manual-adjustments.md for the human path — USD limits, the approval chain and theManualDiscountsfolder's 61 flows. Test cases in regression-pricing-rules.md.
10. Availability¶
- Where:
XtremeAvailability(own camps),LiveRequest(102 microflows, 44 pages - third-party channels),Availability,SRMbulk availability jobs,Exo,PanStrat - Entry points: menu items
XtremeAvailability.ShowAvailability(Wilderness camp availability),LiveRequest.IVK_ViewThirdPartyAvail(all availability),BookingTemplates.IVK_BookingTemplateAvailability(trip availability);XtremeAvailability.GetOverallAvail(74 callers) - Scheduled bulk refreshes per channel:
SRM.SE_BulkHTI_Avail,SE_BulkNightsBridge_Avail,SE_BulkRR_Avail(ResRequest). ExoandPanStratare thin third-party hotel-availability connectors (ExoGetAvailability,PanStrat_GetAvailability).Wedgecontains a single overview page and looks dormant.
11. Confirmation and supplier acceptance¶
- Where:
Booking,Anonymous,Supplier_Portal, channel modules - Entry points:
Booking.ConfirmBooking,Sub_ConfirmBooking,IVK_ConfirmFromBookingFile(+_Agent,_Partial),IVK_ConfirmExistingBooking,Tools.IVK_ReconfirmBooking,Anonymous.DeepLink_ConfirmSupplierBooking,DataManagement.TP_ConfirmBooking,Siteminder.ConfirmBookingReceived,Profitroom.ConfirmProfitRoomBookingReceived - Suppliers can confirm without logging in, via a signed deep link (hashes expire -
Anonymous.SE_DeleteExpiredDeepLinkHashes). - Confirmation is where TourPlan first hears about the booking. Everything earlier — quote, convert, provisional — is invisible to the system of record.
WindowStatus = Cis set before the TourPlan write. If the write then fails, the booking reads as confirmed while TourPlan has nothing.Booking.LeaveBookingChecksexists to nag about exactly that state. Any report counting confirmed bookings is counting Window status, not TourPlan reality. An annotation onSub_ConfirmBookingstates the opposite intent — "Cannot let the Agent think they have confirmed the booking, if there is a problem confirming" — which is enforced for the WISH leg but not the TourPlan one.- Confirmation also fans out to HubSpot, OnBase and (first confirmation only, and only when four flags are all clear) the deposit invoice. See deep-dives/quote-to-booking.md §5.
12. Changes, cancellations and waitlists¶
- Where:
Booking/BookingChanges,Booking/Waitlist Management,Booking/ExpiryManagement,DataManagement - Entry points:
IVK_CancelBooking_Confirm,IVK_CancelBookingLineFully,IVK_CancelBooking_Overview_NoCancelFees,CancelBookingConfirmation,IVK_CancelAllProvBookings,Sub_CancelOrphanDraftBookings,DataManagement.TP_UncancelBooking,TP_ReviveCancelledBookingLines,DataManagement.jaCheckForWaitlistOnSector - Cancellation splits by whether fees apply (
CancelledWithCosts) and whether the booking exists downstream in TourPlan/WISH/channel systems - each has its own cancel path, and revive/uncancel flows exist for mistakes. - One button, three outcomes, chosen inside
CancelBookingrather than by the caller: an empty draft is hard-deleted; a booking with nothing owing goes toCX; a booking with a fee goes toCCand its fee-bearing lines stayLIVEto carry the charge. - Cancellation fees come from
PaymentTerms/CancellationFeewhere configured, and from a hardcoded fallback ladder where not. The fallback is punitive — accommodation 25% beyond 60 days and 100% inside it, associated-product suppliers 100% at any notice. A disproportionate fee is usually a missing RARA record, not a commercial decision. NoCancelFeeswaives every fee on a booking, is settable byEmployeeandExternalConsultantwith no approval step, and is independent of the cancellation reason — so "not charging fees as a favour to agent" does not actually stop the charge.- Revive is support-only (
IVK_Uncancel, roleDebug) and clears the WISH linkage rather than restoring it: it recovers the record, not the space. - Full mechanics, 90 regression cases and 16 catalogued defects: deep-dives/cancellation-and-fees.md.
BookingLine.Cancel = truedoes not mean a guest cancelled. The flag marks a line as passing through the delete/cancel machinery, and the partner API's amendment operations set it when removing a line. CountBookingLineStatus in (Cancelled, CancelledWithCosts)for real cancellations; anything counting theCancelflag also counts itinerary edits.
12a. Amending a booking through the partner API — not yet documented¶
A parallel set of published operations changes an existing booking without going near the wizard. It shares almost none of the UI's vocabulary, which is why it is easy to miss:
| Operation | Effect |
|---|---|
API.ReplaceQuote, API.ReplaceBooking |
Rebuild a booking's itinerary wholesale, with a long validation chain |
API.AddAccomodationToBooking, API.AddAccomodationToStartEnd, API.AddDaysToBooking, API.ChangeAccomNumberOfNights, API.DeleteAccomodation, API.SwitchAccomodation |
Per-component itinerary edits |
API.AddFlightToStartEnd, API.AddTravelHubAndFlightToStartEnd |
Flight edits |
API.CopyBooking, API.ConfirmRooms, API.UpdateBookingService, API.UpdateDMCOverrideLine |
Copy, room confirmation, service and DMC-override changes |
API.GetQuote_B2B, API.GetQuote_V2 |
Create bookings via CreateWindowBooking, despite the Get names |
Transfers.AddGuideToBooking, AddRTConsultant |
Inbound webhook writes |
Mostly published on WWAPI_V2 (SOAP); ReplaceQuote and the GetQuote pair also on
WWAPI_Rest. API.CreateWindowBooking sits behind several of them and behind the ProfitRoom,
SiteMinder and NightsBridge channels — it is the largest orchestration in the model (73 distinct
calls) and is not itself a published operation.
No document in this set covers these yet. The gap is measured, not estimated —
python3 tools/coverage.py Booking.Booking --attr WindowStatus,Source,BookingStep,InventoryStatus,TourplanStatus <docs>
reports 18 of 20 lifecycle entry points uncovered.
13. Air travel¶
- Where:
Interconnect(84 microflows, 19 pages - inter-camp flight network),WAir,TravelStart(commercial flights),BookingMasterDatacharter types - Entry points:
Interconnect.CreateRouteOperationDates,AddFlightToInterconnect,CreateMissingConnections,DS_GetNextConnections,CheckForDepartureTax;WAir.IVK_FlyReport,CreateMissingTransport_Wair,IVK_GetOAFlightsReport;Booking.IVK_FlightBooking Interconnectmodels the scheduled light-aircraft network (routes, connections, operation dates, departure taxes);WAirproduces the flight manifests and reports (inferred: Wilderness Air);TravelStarthandles commercial airline content.
14. Ground services: transfers, touring, explorations, permits¶
- Where:
Transfers(+RTWebhookservice),Touring,Explorations,Prepurchases - Entry points:
Transfers.Activities_Config,AddGuideToBooking,AddServiceArrangedStatus,ConvertBookedStatus,DS_GetActivitiesReport;Touring.CreateUpdateTour,IVK_AddSetTourOption,IVK_BookingFromBL;Explorations.Exploration_View,GetExplorationPackages;Prepurchases.Get_CreatePermit,CheckReceiptsCoverPermits,DS_Gorilla_Permits_Outstanding,Gorilla_PermitDoc Prepurchasesis specifically about pre-purchased permits (gorilla trekking permits are the dominant case): purchase, receipting, vouchers and permit documents.Explorationscovers the mobile/adventure product line with its own packages, dummy suppliers and rooming logic.
C. Delivering the trip¶
15. Itinerary production¶
- Where:
Itinerary(V8/197 docs,MF/,ItineraryByParty/,ComponentInfo/),Itinerary_SafariPortal,TourplanItineraries, Wetu integration inBookingMasterData/RARA/Wetu Management - Entry points:
Itinerary.CreateItineraryLegs_V8,CreateItineraryLegs_ByParty - "V8" is the current itinerary generation; per-party itineraries are a parallel
variant. Earlier generations still exist in
MF/.
16. Correspondence, documents and email¶
- Where:
AdvEmail,Email_Connector(+OAuthHandlerservice),Booking/SupplierEmails,WordTemplates,DocumentGeneration,PDFUtils,XLSReport,Bookingdocument templates (72 of the 80 in the app) - Entry points:
AdvEmail.SendEmailMessage_msg(168 callers),Maintenance.SE_EmailSend,Maintenance.SE_GetEmails->IMAP_POP3_email.SE_GetEmails,Maintenance.SE_ProcessEmails,GuestManagement/EmailProcessing - Outbound mail is queued and sent by scheduled job; inbound mail is fetched over IMAP/POP3 and parsed back onto bookings, guests and suppliers. Booking documents (quotes, confirmations, vouchers, invoices, itineraries) come from document templates plus Word/PDF generation.
17. Operations handover - "ROAR"¶
- Where:
Booking/ROAR(60 docs), rolesRoar,AfterHours - Entry points:
Booking.IVK_HandOverToRoar,IVK_AcceptToRoarMember,IVK_AssignRoarer,IVK_CreateETickets,IVK_Ops_SupplierDocs,IVK_Ops_PaymentsWithFinance,IVK_Ops_SubmittedPmtReqs,IVK_Ops_RejectedDocs,IVK_AddAgencyOpsEmail,IVK_BookingCorr_FromAttach - Once sold, a booking is handed from the reservations consultant to the operations team
("ROAR"), who own e-tickets, supplier documents, payment requests and agency ops
correspondence. There is also a consultant-to-consultant handover
(
HandOverToConsultant). ROAR's expansion is not recorded in the model (inferred: the operations/ops-support team).
18. After-hours desk - "EAH"¶
- Where:
EAH(23 docs), rolesAfterHours,AfterHoursRead - Entry points:
EAH_Home,EAH_Home_Nam,EAH_Admin,EAH_Remittances,IVK_EAH_CC_Add,IVK_EAH_Email_Agent,IVK_EAH_Email_TD,EAHLog_View - A small out-of-hours console: log the call, email the agent or the travel director, capture a credit card, handle remittances. Regional split (Namibia has its own home page). (inferred: EAH = emergency/after-hours.)
19. Guest management¶
- Where:
GuestManagement(Members/224,ContactManagement/150,Customer Care/,WishGuests/,Conversion/,EmailProcessing/,Tripadvisor/,Cleanup/),BookingGuestManagement,GuestManagementAPI(+ publishedGuestManagementApi, queueGMAPI_TaskQueue),Booking/Guests,Booking/Guest Payments - Entry points:
GuestManagement.OpenMemberHomePage(role-based home page forMemberandMediaMember),BookingGuestManagement.IVK_GuestLog(70 callers),BookingGuestManagement.CancelBooking_Guests - Guest and contact master records, a member-facing portal, customer care cases,
TripAdvisor feedback capture, guest payments, and de-duplication/cleanup routines.
GuestManagementAPIexposes guest data to other Wilderness systems.
20. Camp and lodge operations¶
- Where:
LodgeManagement(190 docs),BookingMasterData/RARA/Camp tips,Maintenance - Entry points:
CampBookingSheets,CampQuestionnaire_NewEdit,CampQAlertConfig_NewEdit,CampIssueAlert,CampStaff_Edit,CampFeedbackTags_NewEdit,AddCampManagersEmails - Camp-facing tooling: arrival/booking sheets, camp questionnaires with configurable alerting on answers, camp issues, camp staff records, feedback tagging.
21. Incident management¶
- Where:
IncidentManagement(100 docs) - Entry points:
Alert_WhoWhatAffected,CriticalityInfo,FinancialLoss_NewEdit, filters by criticality/country/person type - Structured incident logging with criticality, affected parties (guest, agent, staff), country and financial loss, with its own admin role.
D. Money¶
22. Receivables - invoicing and receipts¶
- Where:
Booking/Receivables(284 docs:MF/,Forms/,CashReceiptMove/,NetInvoicing/),Booking/PartyInvoicing,Booking/Guest Payments - Entry points: deposit
IVK_DepositInvoice_Post,IVK_PartialDepositInvoice_Add,CreateInvoiceDetail_Deposit; earlyEarlyInvoice_SelectLines,IVK_EarlyInvoice_Close; finalFinalInvoice_Prepare->IVK_FinalInvoice_Post; full/partialIVK_FullInvoice_Partial,FullInvoice_BL; credit notesCreateSummaryInvoice_CN,CreditInvoice_NetMethod; controlsIVK_InvoiceChecksConfirm,IVK_InvoiceReject_Send,IVK_Invoice_resolved,IVK_InvoicePmt_Cancel,IVK_InvoiceDelete - Invoice lifecycle follows
InvoiceStatus:Submitted->Rejected/Resolved->Allocated_to_Clerk/With_Payments_Team->Posted->POP_sent/Reversed. ("POP" = proof of payment;IVK_ChangeStatus_POPNotSent,FinancePortal.ChangeStatus_POPSent.) - Gross vs net invoicing are separate paths (
NetInvoicing/,CheckDepositInvoice_Net), as is invoicing a whole party (PartyInvoicing/). Cash receipts are moved between bookings and vouchers viaCashReceiptMove/andIVK_CashPmtMove_SelectFromVouchers/..._SelectToVouchers. - Tax variants have dedicated line builders:
GetInvoiceLines_Invoice_BedLevy,..._Vat_DepTaxSeparate,..._VatableSeparate.
23. Payables - supplier vouchers and payments¶
- Where:
Booking/Payables(98 docs),Bookingvoucher flows,Supplier_Portal - Entry points:
Ds_AP_Vouchers_NotInvoiced,Ds_BookingAPVoucherswithNoInvoice_My/_BranchDept,BookingOverview_AP_vouchersNoInvoices,UpdateTPVouchers_P/_R,TourplanVoucherStatus,IVK_Vouchers_Gen_txt_Dual,VoucherPrep_BL_txt,Ds_ReceiptsOnCancelledVouchers, ROAR'sIVK_Ops_SubmittedPmtReqs - Supplier vouchers are generated from booking lines, tracked against supplier invoices, and reconciled with TourPlan; payment requests route through ops to finance.
24. Finance portal¶
- Where:
FinancePortal(226 docs) - Entry points:
CreateInvoice,BookingInvoices,CheckInvoices_Pay_Post,CashPaymentMoves_View,CashReceiptMoves_View,CashMove_Edit,ClerkTourplans,ACT_CurrencyPair_Add_Rate,ACT_TourPlanPaymentMethod_NewEdit,CountryTaxTreatment_NewEdit,Create_Pdfs,ChangeStatus_POPSent - The finance team's own workspace: posting and paying invoices, cash moves, currency
pairs and rates, per-country tax treatment, TourPlan payment methods, clerk allocation.
Roles
Finance,FinanceReadOnly,AccountsPayable.
25. Staff remuneration and incentives¶
- Where:
StaffRemuneration - Entry points:
SE_EOD_GetRemunerationData,GetB2BRemunerationData,GetB2CRemunerationData,IVK_MyIncentives,IVK_ValidateIncentives,ExportStaffRemunewration(sic) - End-of-day job computes consultant incentives from B2B and B2C sales; staff see their own incentives, admins validate and export.
26. GEL bookings¶
- Where:
Booking/GEL(36 docs), roleGuestExperience - Entry points:
IVK_Gel_new,IVK_GelNoBooking_New,IVK_Add_To_GelCalendar,IVK_AssignGEl/IVK_UnAssignGEl,DS_GetGelConsultants,DS_CalculateCost_GelBooking,DS_CalculateGEL_Total_PerBookingline,GetSupplier_Feedback - A distinct booking type with its own consultants, calendar, costing and supplier feedback loop. (inferred: GEL relates to the guest-experience function; the model does not expand the acronym.)
E. Master data, integration and platform flows¶
27. RARA - camps, suppliers, options and rates master data¶
- Where:
BookingMasterData/RARA- 560 documents, plus 176 entities inBookingMasterData(the largest domain model in the app) - Sub-areas:
Suppliers and Option(207),Transport overview(72),Pricing(61),RateSheets(53),Country and Location(34),Booking Configuration(21),Price adjustment log(15),Clusters(15),Wetu Management(14),RoomTypes(14),Siteminder Config(10),Inclusion and Exclusion(9),NightsBridge_Config(8),ProfitRoom(7),Setup Wizard(4),DeadBeds(3),Stats(3),Booking rules(1) - Everything sellable is defined here: suppliers and their options, room types, rate
sheets and price adjustments (with an audit log), countries/locations/clusters,
per-channel configuration, inclusions/exclusions, and dead-bed tracking.
Queue
RARA_Task_Queue. (inferred: "RARA" is the internal name for this rates/availability master-data area.)
28. Downstream system synchronisation and reconciliation¶
- Where:
DataManagement(717 microflows, 256 Java actions, 135 entities),History(44),WishAPI,hostConnect/HTI,TourplanInvoicing - Sub-areas:
MFTourplanNew(278) andMFTourplan(84) - TourPlan booking and service-line sync;MF WISH(83) +WishWindowReconciliation(15) - WISH sync and reconciliation;Duplicate bookings(20);DebugBookings(13);Exchange rate+ scheduledCheckCurrency->TP_CheckExchangeRates;SiteminderPricing,ProfitroomPricing,ExternalAvail - Entry points:
TP_CreateTPServiceLinesByBookingline,TP_ConfirmBooking,Maintenance.SE_HH_UpdateWishHistory,WishAPI.GetExpiredLines - This is the integration engine: mirror Window bookings into TourPlan and WISH, detect
and resolve duplicates and drift, keep exchange rates current, and reconcile histories.
Two external MSSQL connections (
TourPlan_PAF,WildernessWindow_DB) read legacy data directly.
29. Supplier relationship management¶
- Where:
SRM(420 microflows, 156 pages:MF/,Forms/,_Forms_Overview/,Supplier Management/,Revenue targets/,Jobs/,Feedback/,DocumentStorage/) - Entry points:
SE_BulkHTI_Avail,SE_BulkNightsBridge_Avail,SE_BulkRR_Avail,SE_InactivateExpiredDocs - Third-party supplier records, contracted revenue targets, supplier feedback, document
storage with expiry, plus the bulk availability jobs per channel. Roles
SRMadmin,SRMUser,RaraSupplier.
30. Supplier / DMC portal¶
- Where:
Supplier_Portal(42 docs) - Entry points:
DMC_RequestForQuotes,DMC_Booking,DMC_Setup,CreateSupplierConfirmation,DS_GetSupplierBookingLines,DMC_AutoAddOverrride_View - Destination management companies log in to see their booking lines, respond to quote
requests and confirm services. Role
SupplierUser.
31. Information centre (agent-facing knowledge base)¶
- Where:
InformationCentre(168 docs) - Entry points:
AgentLandingPage,IVK_GetAgentPortalData,DocumentRepository_Public,DocumentRepository_Fileserver,DocSetupGuide,Categories_NewEdit,ExplorationsAndAdventures_NewEdit_Wilderness - Categorised document and content repository for agents (rates, fact sheets, policies),
with roles
InfoPortalRates,InfoPortalWP,InfoPortalAP,InfoPortalGuestService.
32. Dashboards and reporting¶
- Where:
Dashboard(161 docs),Booking/BookingOverview(492),Booking/_GridControls,XLSReport,ExcelImporter,GoogleAnalytics,Tools - Entry points:
Administration.OpenHomePageWithDL(the actual application home - navigation menus carry only three groups, everything else launches from here),Booking.DS_DAR_MyReports,DS_DAR_BranchDptmReports,Booking.IVK_BookingFile_Detail(69 callers), scheduledGoogleAnalytics.DS_GetGoogleData - Booking overviews sliced by consultant, branch/department, expiry and status; Excel exports and imports; the booking file itself as the main working screen.
33. Configuration and environment setup¶
- Where:
Configuration(159 docs),SetupWizard(58 docs),Administration(410),Common,Tools - Entry points:
SetupWizard.AdminSetupWizard,CheckCountrySetup,CheckEmployeeSetup,CheckEmailTemplateSetup,AgencySetup,AgentSetup;Administration.GetServerSettings(463 callers - the second most-called microflow in the app),Administration.GetEnvironment,Administration/DetermineServer - Environment-aware behaviour is pervasive: nearly every substantial flow reads server
settings, and
DetermineServergates production-only side effects.Administration/DebugScreens(220 docs) is a large in-app debugging surface.
34. User administration and access¶
- Where:
Administration/Account,Administration/User Management,Ldap,Anonymous,Encryption - Entry points: scheduled
Ldap.LdapSync->IVK_SE_SyncAllFlow, roleEmployeeWithoutLDAPfor non-LDAP accounts,Anonymousmodule for unauthenticated deep links and uploads - Staff accounts sync from LDAP; 66 user roles map onto the module roles of all 108 modules.
35. AI-assisted content¶
- Where:
OpenAIConnector(111 flows),GenAICommons(112), widgetnagarro.WrittingAssistant - Writing assistance inside the app (itinerary/correspondence text (inferred)), with the standard Mendix GenAI plumbing plus trace/usage cleanup jobs.
Where flows are triggered from¶
| Trigger | Examples |
|---|---|
| Navigation menu (only 3 groups) | Bookings (new booking / new quote / new flight booking), Availability (camp / all / trip), Debug |
| Role-based home pages | Administration.OpenHomePageWithDL (staff), GuestManagement.OpenMemberHomePage (Member, MediaMember) |
| Scheduled events (31) | see generated/scheduled-jobs.md |
| Task queues (5) | Hubspot_Task_Queue, LogPricingQueue, RARA_Task_Queue, GMAPI_TaskQueue, API_TaskQueue |
| Published REST (15) / SOAP (4) | see generated/published-interfaces.md |
| Inbound webhooks | HubSpotWebhook, Transfers.RTWebhook, API.itrvlWebhook, Booking.JSONLeadInput |
| Inbound email | Maintenance.SE_GetEmails / SE_ProcessEmails via IMAP/POP3 |
| Anonymous deep links | supplier booking confirmation, document upload, issue reporting |