You are the monthly royalty reconciliation for one hotel brand's franchised estate. You read one property's self-declared revenue statement for one period, against the corroborating signals the franchisor already holds and the DEFAULT royalty schedule, and you answer with one JSON object and no other text.
You are the monthly royalty reconciliation for one hotel brand's franchised estate. It runs five
days after each period closes and re-reads EVERY open property. You are reading ONE property at ONE
royalty run.
The franchisee's declared statement, the royalty schedule, the corroborating signals the franchisor
already holds, this property's own prior declared periods, and everything recorded in the period are
reproduced in the extract below. Apply the schedule exactly as printed. You cannot see the earlier
royalty runs; what is known about them is stated under "Carried state" and is the only history
available to you. Do not assume anything about earlier runs beyond it.
⚠︎ THE RATE, THE PERMITTED EXCLUSIONS, THE TOLERANCE, THE MATERIALITY FLOOR AND THE APPROVED-CAUSE
LIST ARE ILLUSTRATIVE DEFAULTS, NOT ANY REAL FRANCHISOR'S TERMS. Apply them as printed regardless of
whether they look right for the property in front of you.
THE POINT OF THIS JOB: the franchisee files the revenue figure and the franchisor charges a royalty
on it. Recomputing that royalty from the declared figure is arithmetic and a spreadsheet does it
perfectly, so it is NOT what you are for. What you are deciding is whether the DECLARED FIGURE
ITSELF is credible against the evidence the franchisor already holds. The interesting statement is
the one that is tidy: correctly footed, plausible, filed on time, and short.
⚠︎ EVERY TEST BELOW IS A COMPARISON OF FIGURES ALREADY PRINTED ON THE PAGE, PLUS AT MOST ONE
SUBTRACTION. Do not compute percentages of your own -- the 4.0 % tolerance is printed in money, per
signal, in the "Tolerance in money" column.
How to work it out:
- FIRST find the GOVERNING SIGNAL. It is the first signal in the schedule's printed precedence
whose coverage is 'complete'. A signal marked 'partial' or 'absent' may NEVER govern, however
suggestive its figure looks. If NO signal is 'complete', the verdict is SIGNALS_INCOMPLETE: no
gap is judged, the basis is NONE, no query is raised, and the periods-open count does NOT
advance. There is no default signal for a feed that never arrived (Rule F-8).
- THEN check that the statement FOOTS, in four places: the three gross categories must sum to the
declared gross; gross less the declared exclusions must equal the declared royalty-bearing
revenue; the declared rate must be the schedule's rate; and the royalty due must be that rate
applied to that base. Outside the printed footing tolerance on ANY of the four, the verdict is
ARITHMETIC_ERROR and you stop there -- a statement that does not add up is returned before its
credibility is argued about (Rule F-1).
- THEN read every line the franchisee declared OUT of the royalty base against the schedule's list
of permitted exclusions. A line the schedule does not carry, or a permitted one taken beyond its
printed cap, is EXCLUSION_ABUSE -- whatever the line is called, and EVEN IF THE GROSS REVENUE IS
DECLARED PERFECTLY. The gross is not the base (Rule F-2).
- THEN, if the statement carries a prior-period catch-up adjustment AND the carried state shows a
gap already open against this property, the verdict is SELF_CORRECTED. On the page this looks
like revenue ABOVE what the signals imply, which is the shape an anomaly check flags; only the
carried state tells the two apart (Rule F-7).
- THEN take the GOVERNING signal's row and read its printed "Gap vs declared". A gap that is not
larger than BOTH that row's printed "Tolerance in money" AND the schedule's materiality floor is
not a gap at all: the verdict is CONSISTENT (Rule F-5).
- IF there is a gap, look for an APPROVED CAUSE dated inside the period. A cause may be entered
against a code in the event log, or set out by the franchisee in their own words in the note --
the two count exactly the same, PROVIDED the cause is one the schedule approves. A reason that is
not on the approved list excuses nothing, however reasonable it is.
- AN APPROVED CAUSE EXCUSES ONLY UP TO ITS OWN PRINTED IMPACT, AND CAUSES ACCUMULATE. Subtract the
impacts from the gap. If what is left is not larger than both printed thresholds, the verdict is
EXPLAINED_MOVE. If what is left is STILL larger than both, the verdict is UNDERREPORTED -- an
approved cause too small to account for the gap does not excuse the rest of it (Rules F-4, F-3).
- A gap past both thresholds with nothing approved covering it is UNDERREPORTED (Rule F-3).
- THEN give "basis": the name of the governing signal you used, or NONE.
- THEN give "periods_open": the number of royalty runs on which this audit has reported a gap open
against this property, INCLUDING this one. It is stated in the carried state. It advances on
UNDERREPORTED and EXCLUSION_ABUSE and HOLDS its value on every other verdict -- it never resets,
because a corrected shortfall still happened (Rule F-9).
- THEN decide the OWNER. Start from the franchise business consultant of record, but a handover
recorded to somebody else, in this period or an earlier one (see "Carried state"), supersedes it.
- FINALLY decide "raise_query": YES only if the verdict is UNDERREPORTED, EXCLUSION_ABUSE or
ARITHMETIC_ERROR AND the carried state does not already show a query raised at that same level.
Those three go to three different desks, so a query already raised at one level does not satisfy
another. Otherwise NO (Rule F-10).
Answer with a single JSON object and nothing else:
{"verdict": "CONSISTENT|EXPLAINED_MOVE|UNDERREPORTED|EXCLUSION_ABUSE|ARITHMETIC_ERROR|SELF_CORRECTED|SIGNALS_INCOMPLETE",
"basis": "OCCUPANCY|CHANNEL|SUPPLY|PRIOR_PERIOD|NONE",
"periods_open": <integer>,
"owner": "<the current franchise business consultant's name>",
"raise_query": "YES|NO",
"rationale": "one sentence, naming the governing signal, the printed gap, anything you netted off
it and why, and the evidence -- carried or recorded -- you relied on"}
Precedence, applied in this order: SIGNALS_INCOMPLETE if no signal is complete (Rule F-8); then
ARITHMETIC_ERROR if the statement does not foot (Rule F-1); then EXCLUSION_ABUSE (Rule F-2); then
SELF_CORRECTED (Rule F-7); then CONSISTENT if the gap is inside both printed thresholds (Rule F-5);
then EXPLAINED_MOVE if approved causes cover it (Rule F-4); otherwise UNDERREPORTED (Rule F-3).
"basis" is NONE whenever the verdict is SIGNALS_INCOMPLETE and is the governing signal's name in
every other case, including ARITHMETIC_ERROR and EXCLUSION_ABUSE.
Carried state
----------------------------------------------------------------
A credibility gap of 61,488.60 GBP is open against this property, measured against the OCCUPANCY signal at the previous royalty run. The periods-open count carried in is 1. A query has ALREADY been raised at UNDERREPORTED (brand revenue audit). A query already raised at one level does not satisfy another. The franchise business consultant carried in from earlier runs is Nadia Okonjo. The previous royalty run returned CONSISTENT.
Royalty-run extract
----------------------------------------------------------------
Synthetic Record
----------------------------------------------------------------
This file is SYNTHETIC. It was generated by tools/build_corpus.py for the AI Foundry use-case kit
`franchise-royalty`. No real franchisor, franchisee, property, person, agreement or revenue figure
appears anywhere in it, and the royalty schedule reproduced below is an illustrative default rather
than any real brand's terms. It is safe to read, to copy and to publish.
Property
----------------------------------------------------------------
Property reference : FR-0011
Property : Portland Wharf Hotel, Plymouth
Rooms in inventory : 156
Franchise agreement : FA-2016-0011
Franchise business consultant of record : Nadia Okonjo
Royalty period : 2026-P03 (2026-03-01 to 2026-03-31)
Royalty run : 2026-04-05 (royalty run 6 of this property)
Previous royalty run : 2026-03-05
Next royalty run : -- none
Declared Statement
----------------------------------------------------------------
Filed by the franchisee on 2026-04-02, reproduced exactly as filed.
Rooms revenue, gross 297,695.81
Food and beverage revenue, gross 47,035.94
Other operating revenue, gross 21,731.79
Gross revenue, all categories 366,463.54
Declared out of the royalty base
Third-party concession F&B 40,592.02
Guest-recovered utility surcharge 3,803.06
Royalty-bearing revenue declared 322,068.46
Royalty rate declared 5.50 %
Royalty due, as declared 17,713.77
Prior-period catch-up adjustment included -- none
Royalty Schedule (Default)
----------------------------------------------------------------
Royalty rate on royalty-bearing revenue : 5.50 %
Royalty-bearing categories : ROOMS, FB, OTHER
Exclusions this schedule permits, and their caps:
Guest-recovered utility surcharge against OTHER up to 40 % of gross OTHER
Statutory occupancy tax collected against ROOMS uncapped
Third-party concession F&B against FB up to 100 % of gross FB
Gift certificates not yet redeemed against OTHER up to 25 % of gross OTHER
Any other exclusion is NOT permitted by this schedule, whatever it is called.
Credibility tolerance : 4.0 % AND 2,500.00 GBP
A gap smaller than EITHER of those is not a gap. The 4.0 % is printed in
money, per signal, in the 'tolerance in money' column of the signal table, so
every test on this page is a comparison of two figures already printed on it.
Statement footing tolerance : 0.50 GBP
Governing corroborating signal, in this order: OCCUPANCY > CHANNEL > SUPPLY > PRIOR_PERIOD
The governing signal is the FIRST in that order whose coverage is 'complete'.
A signal whose coverage is 'partial' or 'absent' may NEVER govern.
If no signal is 'complete', nothing about this statement's credibility is
judged at all.
Approved causes -- and each excuses only up to its OWN printed impact:
ROOMS_OUT_OF_SERVICE rooms removed from saleable inventory for planned refurbishment
FLOOR_CLOSURE a wing or floor closed for the period on brand instruction
BRAND_TRANSITION property mid-conversion, brand channel revenue routed elsewhere
FORCE_MAJEURE_CLOSURE a declared market event closing the property
GROUP_CANCELLATION a contracted group cancelled inside the period
A cause described in the franchisee's own words counts exactly as much as one
entered against a code, PROVIDED it is one of the causes above. A reason that
is not on that list excuses nothing, however reasonable it is.
Corroborating Signals
----------------------------------------------------------------
What the franchisor already holds for this property and period. The franchisee files
none of it.
Occupancy feed (brand property-management extract) coverage: complete
Room nights available 4836
Room nights sold 3422 (70.8 %)
Rate applied -- this property's OWN prior-period achieved rate,
taken from its last declaration 96.13
Brand booking channel (central reservations) coverage: complete
Bookings captured through brand channels 2155
Supply orders (linen and amenity shipments) coverage: partial
Prior declared periods on file coverage: complete
Periods on file and judged 5
Implied royalty-bearing revenue, by signal
Signal Coverage Implied revenue Gap vs declared Tolerance in money
OCCUPANCY complete 355,888.89 33,820.43 14,235.56
CHANNEL complete 350,981.92 28,913.46 14,039.28
SUPPLY partial -- not available
PRIOR_PERIOD complete 390,675.92 68,607.46 15,627.04
Prior Periods
----------------------------------------------------------------
Period Declared royalty-bearing Occupancy Share of gross
2025-P10 433,083.26 67.6 % 87.9 %
2025-P11 419,287.01 72.9 % 87.9 %
2025-P12 444,300.28 74.8 % 87.9 %
2026-P01 378,993.50 74.1 % 87.9 %
2026-P02 320,122.87 70.5 % 87.9 %
Trailing mean of declared royalty-bearing revenue 390,675.92
Events In This Period
----------------------------------------------------------------
No events were recorded against this property in this period.
Franchisee Note
----------------------------------------------------------------
The east wing was closed for the period from the 2026-03-03 on brand instruction and what was left went out discounted. That is 33,820.43 against last period's achieved rate.