Skip to content

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/BookingWizard referral 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 / NewLeadInput services. Flows deduplicate against history (CheckForHistoricalBookingsByPartyName, GetHistoricalBookingByPartyName), route to a consultant or a regional team, then convert to a booking or close as Unconverted.
  • 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 service HubSpotWebhook; queue Hubspot_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 transitions IVK_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, else Agency/ExpiryDays, default 7). Quote-price expiry is advisory — CheckQuoteExpiry warns 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_SendQuoteExpiryEmails is flagged EXCLUDED FROM DEPLOYMENT, has role Maintenance.Debug only, and filters on an attribute named QuoteExpiry_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, queue LogPricingQueue
  • Rate-sheet driven pricing with configuration flows, manual discount approval, tax treatment (CountryTaxTreatment_NewEdit in FinancePortal), 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 PPPriced reconciliation, totals; pricing-manual-adjustments.md for the human path — USD limits, the approval chain and the ManualDiscounts folder'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, SRM bulk 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).
  • Exo and PanStrat are thin third-party hotel-availability connectors (ExoGetAvailability, PanStrat_GetAvailability). Wedge contains 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 = C is set before the TourPlan write. If the write then fails, the booking reads as confirmed while TourPlan has nothing. Booking.LeaveBookingChecks exists to nag about exactly that state. Any report counting confirmed bookings is counting Window status, not TourPlan reality. An annotation on Sub_ConfirmBooking states 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 CancelBooking rather than by the caller: an empty draft is hard-deleted; a booking with nothing owing goes to CX; a booking with a fee goes to CC and its fee-bearing lines stay LIVE to carry the charge.
  • Cancellation fees come from PaymentTerms/CancellationFee where 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.
  • NoCancelFees waives every fee on a booking, is settable by Employee and ExternalConsultant with 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, role Debug) 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 = true does 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. Count BookingLineStatus in (Cancelled, CancelledWithCosts) for real cancellations; anything counting the Cancel flag 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), BookingMasterData charter types
  • Entry points: Interconnect.CreateRouteOperationDates, AddFlightToInterconnect, CreateMissingConnections, DS_GetNextConnections, CheckForDepartureTax; WAir.IVK_FlyReport, CreateMissingTransport_Wair, IVK_GetOAFlightsReport; Booking.IVK_FlightBooking
  • Interconnect models the scheduled light-aircraft network (routes, connections, operation dates, departure taxes); WAir produces the flight manifests and reports (inferred: Wilderness Air); TravelStart handles commercial airline content.

14. Ground services: transfers, touring, explorations, permits

  • Where: Transfers (+ RTWebhook service), 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
  • Prepurchases is specifically about pre-purchased permits (gorilla trekking permits are the dominant case): purchase, receipting, vouchers and permit documents.
  • Explorations covers 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 in BookingMasterData/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 (+ OAuthHandler service), Booking/SupplierEmails, WordTemplates, DocumentGeneration, PDFUtils, XLSReport, Booking document 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), roles Roar, 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), roles AfterHours, 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 (+ published GuestManagementApi, queue GMAPI_TaskQueue), Booking/Guests, Booking/Guest Payments
  • Entry points: GuestManagement.OpenMemberHomePage (role-based home page for Member and MediaMember), 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. GuestManagementAPI exposes 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; early EarlyInvoice_SelectLines, IVK_EarlyInvoice_Close; final FinalInvoice_Prepare -> IVK_FinalInvoice_Post; full/partial IVK_FullInvoice_Partial, FullInvoice_BL; credit notes CreateSummaryInvoice_CN, CreditInvoice_NetMethod; controls IVK_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 via CashReceiptMove/ and IVK_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), Booking voucher 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's IVK_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), role GuestExperience
  • 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 in BookingMasterData (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) and MFTourplan (84) - TourPlan booking and service-line sync; MF WISH (83) + WishWindowReconciliation (15) - WISH sync and reconciliation; Duplicate bookings (20); DebugBookings (13); Exchange rate + scheduled CheckCurrency -> 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), scheduled GoogleAnalytics.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 DetermineServer gates 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, role EmployeeWithoutLDAP for non-LDAP accounts, Anonymous module 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), widget nagarro.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