Planning method
Unknown costs: why missing prices are not free
The most dangerous shortcut in a travel budget is turning a missing amount into zero. It makes an incomplete plan look affordable and hides exactly the information a traveller still needs.
Asmaliana represents a genuinely free item as an evidenced zero amount. It represents a missing, restricted, conditional, conflicting, or out-of-date amount as an unknown with a reason.
This guide describes the calculation method. Its examples are synthetic and do not state real prices.
Zero and unknown mean different things
Consider two fictional entries:
amount_minor: 0
currency: MYR
resolution_status: known
and:
amount_minor: null
currency: MYR
resolution_status: unknown
unknown_reason: not_published
The first can support a zero-cost calculation if its evidence is reviewed, applicable, and allowed for use. The second contributes an unknown required cost. Replacing null with 0 would invent a claim.
Why a single headline amount is often insufficient
A cost can depend on:
- party member category or age band;
- residency or other eligibility evidence;
- day, time, or selected service;
- required booking or package;
- included and excluded components;
- mandatory fee, deposit, tax, or add-on;
- group minimum or maximum;
- effective date;
- currency.
These are rules, not decorations around a number. The planner evaluates the applicable rules for the submitted party and selection. When it cannot establish eligibility, it should preserve a range or unknown instead of choosing the cheapest case.
Minimum, maximum, and uncertainty
A useful itinerary cost has a lower bound and an upper bound, each with an explanation.
- A known fixed amount adds the same integer amount to both bounds.
- A known conditional range can widen the bounds when the unresolved condition is represented explicitly.
- An optional add-on stays outside the required minimum and is labelled optional.
- A required amount with no known upper bound prevents the planner from proving that a hard budget passes.
- A restricted amount remains undisclosed; the result explains that cost cannot be evaluated fully.
Suppose a synthetic itinerary has two required known costs totalling 4,000 minor units and one required unknown charge. The lower bound may be at least 4,000, but the upper bound is unknown. A budget of 5,000 cannot be marked feasible merely because the known subtotal is smaller.
Integer money avoids silent arithmetic errors
Amounts are added as integer minor units plus a currency code. For a two-decimal currency, 12.34 is represented as 1,234 minor units—not a binary floating-point value.
The calculation does not add MYR and another currency as if they were comparable. Currency conversion requires its own authorised, dated source, rounding rule, and validity. Without that, the result reports a currency mismatch or separate subtotals.
Party composition matters
A party is not always number_of_people × one price. The applicable set can depend on each member’s declared category and the evidence behind that category.
The service should:
- apply only the conditions actually satisfied by the structured party input;
- avoid inferring age, residency, disability, membership, or eligibility from a name or prose;
- report which rules were applied;
- preserve unknown eligibility as uncertainty;
- exclude personal details that are not needed for the calculation.
If the input says only “two people” and the source has distinct eligibility categories, a precise total may be impossible. Asking for the minimum necessary structured category can be an appropriate next action.
Required and optional extras
An offer record needs to distinguish:
- included item;
- required add-on;
- refundable or non-refundable deposit;
- optional upgrade;
- transport or other cost not covered by the venue rule;
- fee with an unknown amount.
An optional upgrade should not inflate the minimum required budget. A mandatory but unknown fee must not disappear from the upper bound.
Evidence and time still apply
A beautifully modelled number can still be unusable when:
- the price source is stale;
- the effective date does not include the visit;
- two applicable sources conflict;
- review is pending;
- the licence allows page display but not API redistribution;
- the value belongs to a different branch or service;
- the conditions cannot be evaluated from the input.
The result should expose these states instead of returning a bare total.
Budget assessment
For a hard budget, the safe rule is:
- Pass the cost dimension only when the applicable known upper bound is within the budget and currencies are comparable.
- Fail the cost dimension when the known minimum already exceeds the budget.
- Needs verification when an applicable required amount, eligibility condition, exchange basis, or upper bound is unknown.
This separates a proven conflict from insufficient evidence. Both are more useful than false precision.
Reading a cost response
Look for:
amount_minorandcurrency, not a locale-formatted string alone;- lower and upper bound semantics;
- party/eligibility rules applied;
- required and optional components;
- applicable dates and selected service;
- assertion evidence, review, freshness, and resolution;
- unknown/restricted/conflicting reasons;
- excluded dimensions such as transport, meals, conversion, or incidental spending;
data_versionandrule_version.
An API envelope with success=true can contain assessment=needs_verification because the cost calculation executed correctly and discovered a blocking unknown.
Practical checklist
- Is zero backed by a reviewed rule, rather than substituted for missing data?
- Are all amounts integer minor units with currencies?
- Does the party input satisfy the conditions used?
- Are mandatory fees and add-ons included?
- Are optional components separated?
- Is the upper bound known before declaring a budget feasible?
- Are mixed currencies kept separate unless a dated conversion basis exists?
- Are price validity, review, freshness, source rights, and branch/service scope visible?
- Are unpriced transport and incidental costs listed as unchecked or unknown?
Budget honesty is not about producing the most attractive total. It is about showing which part of the total is supported and which part still needs a decision.