Tour Guides: A Multilingual Quote That Ties Dates, Suppliers and Currency Together
Back to blog
automation·September 6, 2026·5 min read·By Yehonatan Saadia

Tour Guides: A Multilingual Quote That Ties Dates, Suppliers and Currency Together

A group quote is written in one language, built from supplier costs in another, and signed weeks later. The data model, the frozen rate, and FX exposure.

Key takeaways

  • Document language, traveller language and supplier language are three separate fields. Merging them produces a quote sent in German with site names in English and supplier detail in Hebrew.
  • The quote has exactly one currency. Supplier costs may be in several, and every line keeps its original currency alongside the converted amount.
  • The rate is frozen at quote time and stored on the line. A quote that recalculates on every open shows a total different from the one the client received by email.
  • FX exposure is not the quote total. It is the sum of only those lines whose currency differs from the quote currency - usually a small share of the value, and precisely the share that erases the margin.
  • Validity and a re-quote threshold are written into the document. Without them, the decision about a moved rate gets taken in a phone call, under pressure.

A group quote is written in one language, built from supplier costs denominated in another, and signed weeks after it was sent. Those three gaps - language, currency and time - are what decide whether the margin visible in the quote is the margin that actually arrives.

Three languages and two currencies in one document

A guide hosting a group in Israel runs three linguistic worlds at once. They cannot be collapsed into one, so they are three fields:

  • Document language - the language the quote is sent in. A BCP 47 tag such as de-DE or en-GB, not the word "German" as text.
  • Traveller communication language - not always the same. A German agent may want the document in German and the correspondence in English.
  • Supplier language - hotel names, site names, driver instructions. These arrive in Hebrew or English and are not translated into the document unless an approved translation exists.

That separation solves a common problem: a site with one official name and another commonly used name, both correct, only one of which belongs in the quote. The name is stored as a translated field with an identifier rather than as text typed into the quote.

Language tags are defined by BCP 47, itself specified in RFC 5646 and maintained through the IANA language subtag registry. Using a standard tag rather than a free string is what makes it possible to filter, sort and check that a translation exists.

The quote line: what must be stored per supplier cost

FieldExampleWhy
line_idQL-4471-03A stable identifier, surviving reordering
supplier_idSUP-0088Not a supplier name, whose spelling drifts
supplier_currencyILSThe currency the supplier actually bills in
supplier_amount8,400.00The original amount, before any conversion
fx_rate_used4.0500The rate frozen onto this line
fx_rate_date2026-03-11The publication date, not the keying date
quote_amount2,074.07The amount in the quote currency
is_fx_sensitivetrueWhether the currency differs from the quote currency
markup_pct22.0Applied per line, not only to the total
name_i18n{he, en, de}The line name in every supported language
valid_until2026-04-30Supplier price validity, separate from quote validity

is_fx_sensitive is the field that makes everything else possible. An Israeli guide quoting a German group typically has most lines in shekels and one or two in another currency, so real exposure is far smaller than the total. A calculation that assumes the whole quote is exposed leads to an inflated safety margin, which prices the quote out and loses the work.

Which rate does the quote use, and when is it fixed?

The rate is read once, at quote creation, and stored on every exposed line. The moment is chosen in advance from three possible policies, and the policy is stated in the document itself:

  1. Fixed rate. The stored rate holds until the quote expires, whatever happens. Simple for the client, and the entire movement lands on the guide.
  2. Re-resolve at acceptance. The amount is recomputed at the rate on the signature date. No exposure for the guide, and uncertainty for the client, who sees a number different from the one they approved.
  3. Fixed rate with a tolerance band. The rate is stored, and if it moves by more than a defined percentage by signature date, the quote is reissued. This is the balance between the other two, and it needs an explicit threshold field.

Where the rate comes from and how a non-publication day is handled is covered in Bank of Israel rates for automated pricing; this article uses that and does not repeat it.

What happens to the margin when the rate moves before acceptance?

It moves with it, in a direction that is not intuitive. A worked example on one quote:

Total supplier cost 24,300 shekels. The quote currency is euro. The rate frozen on the quote date, 4.0500, translates that cost into 6,000 euro. A 22% markup produces a quote of 7,320 euro. The client signs five weeks later.

Scenario at acceptanceRateCost in euroQuoteMarginMargin rate
Unchanged4.05006,000.007,3201,320.0018.0%
Shekel weaker4.25005,717.657,3201,602.3521.9%
Shekel stronger3.90006,230.777,3201,089.2314.9%

Note that the quote itself never changed. What changed is how many euro are needed to pay suppliers who bill in shekels, so the gap between the second and third scenarios is 513 euro, more than a third of the original margin. Under a three percent tolerance band applied to adverse movement, the third scenario breaches it and triggers a reissue. The second scenario moves in the guide's favour, triggers nothing, and the quote stands exactly as sent.

Two notes on those figures: margin rate here is calculated against the quote price rather than against cost, and every amount is a worked example. Nothing here asserts a real rate on any real date.

Translation is a field state, not a fallback

A quote sent with one English line in the middle of a German document looks like a mistake, because it is one. So every translated field carries a state, not only a value:

  • missing - no translation at all. Sending is blocked.
  • machine - machine translated and unreviewed. Allowed in a draft, blocked on send.
  • reviewed - checked by a person. Cleared to send.
  • locked - agreed wording that must not be altered, such as cancellation terms.

The rules that follow are short:

  • Sending is blocked while any field in the document language is missing or machine. The block message names the line and the field.
  • A site or hotel name with no approved translation is shown in its original form explicitly, as secondary text beside the translated name rather than instead of it.
  • Numbers, dates and currency are formatted from the document language tag. A date written 03/04 reads differently in two languages, so the document date format must be unambiguous.
  • Changing wording after signature creates a new version of the quote rather than editing the existing one. The signature process and the evidence retained are covered in digital signature on a quote.

What actually breaks

  • An amount stored only in the quote currency. It cannot be checked against the supplier invoice and exposure cannot be computed.
  • One rate for the whole quote. Lines added two weeks later inherit a stale rate and nobody notices.
  • Validity written as a sentence. "Valid for three weeks" in free text is not a field anything can be checked against.
  • A supplier price that lives only inside a quote. When the same supplier appears in ten quotes, a price update means ten edits.
  • A translation that quietly fell back to English. The client receives a mixed document and concludes the guide never read it.
  • A group size that changes without splitting lines. Per-person lines and fixed group lines behave differently, and merging them produces a wrong price on every size change.

What to have ready before building it

  • The list of supported languages as BCP 47 tags, and a decision on which language is the default for supplier data.
  • One of the three rate policies, and if a tolerance band was chosen, its percentage.
  • A supplier catalogue holding currency, price and price validity, so a quote is not where supplier prices live.
  • An explicit split between per-person lines and per-group lines, including what happens when group size changes.
  • A decision on who approves a translation, and what happens when they are unavailable on the day the quote must go out.

Sources

#tour guiding#quotes#multilingual#currency#suppliers#FX exposure

Frequently asked questions

Which currency should a quote be issued in?

The one the client pays in, almost always. A quote denominated in one currency and paid in another transfers the exposure to the client, who usually discovers this at payment. More important than the choice itself is that cost lines retain their original currency, so exposure is calculated rather than estimated.

What do you do when a supplier changes price after the quote was sent?

Check whether the quote is still within validity and whether the line was affected. If the quote is live, the difference is the guide's cost, which is exactly why supplier price validity is stored separately from quote validity. A new quote is issued only once validity lapses or the client asks for a change.

Does the whole quote need translating, or only the descriptions?

Everything the client reads in order to decide: line names, descriptions, cancellation terms and payment terms. Operational detail intended for the supplier, such as a pickup time or a driver name, does not. The split is made in the field definition, not in the judgement of whoever fills in the quote.

How long should a quote stay valid?

That is a commercial decision, but it has to be a dated field rather than a sentence. Longer validity means longer exposure to both rate movement and supplier price changes, so a long validity justifies either a tolerance band or a wider margin. Either is better than leaving validity undefined.

Keep reading

Related service

Business Automation

I build custom automations that remove repetitive work end to end.

Learn more →←

About the author

Yehonatan Saadia

Freelance automation, web & MVP developer

I'm Yehonatan Saadia, a senior developer who builds business automation, custom websites, and MVPs for small and mid-sized companies across the US, Europe, and Israel. These guides come from real client work, not theory.

Work with me

Have a project like this?

Tell me what you're trying to automate or build. I reply within 24 business hours with a few targeted questions, then we walk through it on a free 30-minute call, with no commitment. You come away with a scope, a timeline and a fixed price - or a straight answer that it isn't worth building.