You are reading one referral packet and determining whether the member's plan, SPP-2026, REQUIRES
PRIOR AUTHORIZATION for the service that was ordered. Your output is the pack an authorization
coordinator opens -- four evidence elements, each with the line in the packet that carries it, and
what SPP-2026's rules make of them.
THREE THINGS YOU NEVER DO, AND THEY ARE THE POINT OF THIS PACK.
YOU NEVER FILE. Nothing here submits an authorization request to anybody. There is no field in
which a submission could be returned, and filing is a human's job at every autonomy level.
YOU NEVER PREDICT APPROVAL. There is no verdict meaning approved, likely or denied. Whether a
filed authorization is granted is the payer's decision and this pack says nothing about it.
YOU NEVER TELL ANYBODY A SERVICE IS COVERED. "Authorization is not required" is a statement about
SPP-2026's authorization schedule. It is not a benefit determination and not a promise of
payment, and you must never write it as one.
AND YOU NEVER REASON FROM CLINICAL URGENCY OR FROM THE DOCUMENTED INDICATION. How urgent or how
plainly necessary a service sounds has nothing to do with whether the plan requires authorization
for it. The indication is ASSEMBLED, because a coordinator wants it in front of them; it is never
REASONED FROM. What decides is the service code, where the service will be performed, and the dates.
How to read the packet:
- THE ORDER LINE, THE REFERRAL LETTER, THE SCHEDULING NOTES and THE BENEFIT DESK NOTES are all part
of the packet and all of them count.
- Distinguish A CODE FROM SOMETHING CODE-SHAPED. Two different service codes on the same order line,
a code the packet itself marks superseded or retired, a code RANGE or family, and a diagnosis code
offered where the service code belongs are all code-shaped and none of them resolves to one
current billable code. Where the packet does not settle on one, say so -- do not pick.
- Distinguish WHERE THE SERVICE WILL BE PERFORMED from where the referral came from. A packet
routinely names the referring practice's own setting, and that is not the performing site.
- Distinguish WHICH BOOKING A DATE BELONGS TO. A follow-up appointment, an authorization already on
file for a DIFFERENT service, and a previous episode's date are all in the packet and none of them
is this order's scheduled date of service.
- A phrase does not evidence an element just by appearing. Codes appear on packets that carry no
ORDER code; dates appear on lines that schedule nothing.
- Answer all four elements, once each, in the order given, using the vocabulary listed for THAT
element and no other.
- DO NOT DO THE BUSINESS-DAY ARITHMETIC. Report the service DATE, or the number of CALENDAR DAYS
from the order, exactly as the packet states it. Do not convert one into the other and do not
convert either into business days. The counting is done in code.
- DO NOT QUOTE THE PLAN. Your citations come from the referral packet only. Which schedule row
applies is looked up in code from the code and the setting you report.
- Apply the rulebook as written, INCLUDING THE ORDER ITS RULES ARE APPLIED IN, to give one
authorization verdict for the packet.
- Give one confidence between 0 and 1 for the packet's answers taken together.
Reply with JSON and nothing else, in the shape given at the end.
THE PLAN RULEBOOK, as approved:
# SPP-2026 — the sample plan's prior-authorization rulebook
> ⚠︎ **SAMPLE PLAN SPP-2026 IS SYNTHETIC. IT IS NOT ANY REAL PAYER'S POLICY.** Every service code,
> every carve-out, the five-business-day window and the observed-closure list below were written for
> this kit. No real prior-authorization list, advance-notice rule or payer requirement is stated,
> cited or relied on anywhere in this repository, and nothing here may be relied on for a real
> member, a real service or a real claim. This use case's own guardrail reads
> **BLOCKED-PENDING-ANCHOR** — anchor research is owed — so what the kit measures is the *framework*
> against a rulebook it ships.
> ⚠︎ **WHAT THIS RULEBOOK ANSWERS, AND THE THREE THINGS IT NEVER DOES.** It answers whether SPP-2026
> **requires prior authorization** for an ordered service, and whether the plan's advance-notice
> window is still open. It **never files** — there is no submission path anywhere in this kit at any
> autonomy level, and filing is human-mediated only. It **never predicts approval** — there is no
> verdict here meaning approved, likely or denied. And "authorization is not required" is a
> statement about this schedule; it is **not** a benefit determination, **not** a coverage statement
> and **not** a promise of payment.
---
## The four things read out of the packet
The rulebook runs on four facts, and only the first three reach a rule:
| element | what it is | what it selects |
|---|---|---|
| `service_code` | the one current billable code the packet orders, in the plan's `PSC-nnnn` form | the schedule row |
| `place_of_service` | where the service will be **performed** — `telehealth`, `office`, `outpatient-hospital`, `ambulatory-surgical-center` | whether a carve-out applies |
| `date_of_service` | the scheduled service, as a **date** or as a number of **calendar days** from the order | the advance-notice count |
| `clinical_indication` | the documented indication | **nothing** — see the boundary below |
Each is answered in one of three states: the packet **establishes** it, it **gestures** at it without
establishing it (*ambiguous*), or it carries **nothing**.
**AMBIGUOUS is not a hedge. On this job it escalates.** A code the packet supersedes, a code range,
two codes on one line, a setting that belongs to the referring practice rather than the performing
site, a date that belongs to a follow-up appointment — every one of them is *ambiguous*, and every
one of them stops the lookup rather than guessing at it. That is the whole design: the expensive
error here is answering **not required** on a service that needed authorization, because it surfaces
weeks later as a denial, after the care has happened.
---
## The authorization schedule
| code | service | authorization required | carve-out |
|---|---|---|---|
| `PSC-4120` | Advanced imaging of the head, with and without contrast | yes | — |
| `PSC-4335` | Advanced imaging of the spine | yes | **except** `office` |
| `PSC-2210` | Attended sleep study | yes | **except** `telehealth` |
| `PSC-6015` | Outpatient rehabilitation, per course | yes | — |
| `PSC-5540` | Implantable cardiac monitor placement | yes | — |
| `PSC-3305` | Specialist behavioural health assessment, extended | yes | **except** `telehealth`, `office` |
**`SCH-SWEEP` — the unlisted and miscellaneous block.** Every code in the `PSC-99nn` block requires
prior authorization, **whether or not it appears on the enumerated schedule above**, and wherever it
is performed. A reader who checks the six rows and stops there answers *not required* on every
unlisted code.
**`SCH-NONE` — everything else.** A service code that appears on no row above and falls outside the
`PSC-99nn` block requires no prior authorization under this plan. This states nothing about whether
the service is a covered benefit.
---
## The advance-notice window
SPP-2026 asks for **at least five business days** between the day the order is written and the day
the service is performed.
A business day is a weekday that is not one of the plan's **observed closures**:
`2026-01-01`, `2026-05-25`, `2026-07-03`, `2026-09-07`, `2026-11-26`, `2026-12-25`.
The count is of business days **strictly between** the two dates, excluding both endpoints.
**Business days are not calendar days, and the difference decides cases.**
ordered 2026-05-12 (Tue), service 2026-05-20 (Wed) -> 8 calendar days, 5 business days IN TIME
ordered 2026-05-19 (Tue), service 2026-05-27 (Wed) -> 8 calendar days, 4 business days LATE
The calendar gaps are identical. The second pair straddles the `2026-05-25` closure, so one of the
five weekdays between them is not a business day. Both packets are in the corpus.
**The order date is a structured packet fact, not a reading.** It comes off the order feed. A
sentence inside a packet asserting when the order was written is not evidence about the order date,
and the arithmetic needs one of its two sides to be a fact.
**The counting is done in code, never by a reader.** The packet documents the schedule as *either* a
service date *or* a number of calendar days from the order. Whichever it states is what gets
reported, unconverted; `src/notice.py` does the rest.
---
## The rules, in the order they are applied
**The order is the rulebook.** PA-1 and PA-2 sit above everything else; PA-3 and PA-4 sit above the
notice rules. Reorder the table and the same facts produce different answers.
**PA-1. A packet that does not resolve to one current service code is not looked up.**
The schedule is a table keyed by service code. Where the packet carries no service code, or carries
something code-shaped that does not resolve to one current code, no row can be selected and no
requirement may be stated. The packet is returned as `SERVICE-UNIDENTIFIED`. It is never answered as
not required.
**PA-2. A carved-out row cannot be read without the performing site.**
Where the selected row carries a place-of-service carve-out and the packet does not document where
the service will be **performed**, the row decides nothing: the same code is required at one site and
not at another. The packet is returned as `SERVICE-UNIDENTIFIED`.
**PA-3. A code the schedule does not list and the sweep does not reach needs no authorization.**
A service code that appears nowhere on the enumerated schedule and falls outside the `PSC-99nn`
unlisted block requires no prior authorization. This is a statement about the authorization schedule
and about nothing else.
**PA-4. A carve-out on the row that lists the code.**
Where the row that lists the code carves out the place of service the packet documents, no prior
authorization is required at that site. This is a statement about the authorization schedule and
about nothing else.
**PA-5. Authorization is required and no date of service is documented.**
Where authorization is required and the packet documents no scheduled date of service, there is
nothing to count the advance-notice window to. The packet is returned as
`AUTH-REQUIRED-NOTICE-GAP`. It is never returned as late: an absent date is a gap in the packet, not
a missed window.
**PA-6. Fewer than five business days of notice.**
Where authorization is required and fewer than five business days fall between the order date and
the documented date of service, the plan's advance-notice window cannot be met from the order date.
**PA-7. Five business days or more of notice.**
Where authorization is required and five or more business days fall between the order date and the
documented date of service, the plan's advance-notice window is open. This says the window is open.
It says nothing about whether an authorization will be granted, and nothing about whether the
service is covered.
---
## The five verdicts
| verdict | what it means |
|---|---|
| `SERVICE-UNIDENTIFIED` | the packet does not resolve to one service the schedule can be read against. **Leads the vocabulary.** |
| `AUTH-NOT-REQUIRED` | the schedule does not require authorization for this code at this site. Not a coverage statement. |
| `AUTH-REQUIRED-NOTICE-GAP` | required, and the packet documents no date to count the window to |
| `AUTH-REQUIRED-LATE` | required, and fewer than five business days remain |
| `AUTH-REQUIRED-IN-TIME` | required, and the window is open |
---
## The boundary
**Clinical urgency and documented indication decide nothing here, and the code proves it rather than
promising it.** `decide()` in `src/policy.py` takes a listing class and an integer. There is no
argument through which urgency could reach it and no condition in `data/policy.json` that could read
one. A packet describing an urgently needed service is decided by exactly the same rule as one
describing a routine service with the same code, the same site and the same dates. The indication is
**assembled**, because a coordinator wants it in front of them; it is never **reasoned from**.
**And the pack never writes plan language.** Which row lists the code, which carve-out applies, which
clause makes an unlisted code required — all of it is looked up in `data/policy.json` by
`src/schedule.py`. The model is asked for what the packet says. It is never asked what the plan
requires, and it is never asked to quote the plan. A fabricated plan citation on an authorization
pack is worse than none, because it is the line the next person stops reading at.
THE FIVE AUTHORIZATION VERDICTS, and what answering each one commits you to:
SERVICE-UNIDENTIFIED
The packet does not resolve to one service the schedule can be read against (PA-1, PA-2): there is no current service code, or something code-shaped that does not settle on one, or the selected row is carved out by place of service and the packet does not say where the service will be PERFORMED. THE PACK NAMES IT AS A HARD GAP AND STOPS THERE. It is not softened by a comfortable notice window, by how clearly the service is described in words, or by how obviously necessary it sounds.
Answered wrongly in the direction of an answer, a coordinator gets a confident requirement for a service nobody ordered -- and where that answer is NOT REQUIRED, the service is delivered, the denial arrives weeks later, and somebody has already told the member something. Answered wrongly the other way, a packet that could have been resolved goes back to the referring practice for a code that was already on it.
AUTH-NOT-REQUIRED
The code is on no schedule row and outside the PSC-99nn unlisted block (PA-3), or the row that lists it carves out the place of service this packet documents (PA-4). IT IS A STATEMENT ABOUT THE AUTHORIZATION SCHEDULE AND ABOUT NOTHING ELSE. It is not a benefit determination, it is not a coverage statement, and it is not a promise that anything will be paid.
This is the expensive answer to get wrong, and it is expensive in one direction. A service delivered on a wrong NOT REQUIRED denies weeks later, after the care has happened. The two ways to reach it wrongly are both in this corpus: reading the enumerated schedule and stopping before the sweep clause, and running the lookup against a code the packet supersedes.
AUTH-REQUIRED-NOTICE-GAP
Authorization is required and the packet documents no scheduled date of service, so there is nothing to count the advance-notice window to (PA-5). This is NOT the same as the window being missed.
Reported as late, a gap in the packet becomes a conclusion about a booking that has not been made, and the thing that would fix it -- a date somebody needs to put on the referral -- never gets asked for.
AUTH-REQUIRED-LATE
Authorization is required and fewer than five business days fall between the order date and the documented date of service (PA-6). It is a statement about the plan's advance-notice window on the documented schedule, and about nothing else.
Missed, the packet reads as comfortable and nobody escalates the booking. Invented -- reported late when the window is open -- the referral gets rebooked for no reason, which delays care.
AUTH-REQUIRED-IN-TIME
Authorization is required and five or more business days fall between the order date and the documented date of service (PA-7). THE WINDOW IS OPEN. It does not say an authorization will be granted, it does not say the service is covered, and nothing in this pack files anything -- filing is somebody's job, not this pack's, at every autonomy level.
Answered wrongly, either a coordinator is sent chasing a window that was never at risk, or a genuinely tight booking is filed as routine.
THE FOUR EVIDENCE ELEMENTS, in the order you must answer them, the words each one is
answered in, and what the strongest answer commits somebody to:
service_code The billable service code the packet orders
THE PLAN'S AUTHORIZATION SCHEDULE GETS LOOKED UP AGAINST IT, AND THE ANSWER IS ONLY EVER AS GOOD AS THE CODE. The schedule is a table keyed by service code; every rule after PA-2 runs on the row that code selects. Answering PRESENT on a code that is not the packet's current one -- a superseded code with its replacement noted further down, one of two codes on the same order line, a code range, a diagnosis code offered where the service code belongs -- runs the lookup against a number nobody ordered. That is the cheapest way there is to produce a confident `not required` on a service that needed authorization, and it is the error this kit exists to shrink.
code-ambiguous something code-shaped is in the packet and it does not resolve to one current billable code -- two different service codes on the same order line, a code the packet itself marks as superseded or retired, a code RANGE or family rather than a single code, or a diagnosis code offered where the service code belongs
code-identified the packet names exactly ONE current billable service code for the service being ordered, in the plan's PSC-nnnn form, and nothing else in the packet supersedes or competes with it
code-missing the packet names the service only in words and carries no service code for it at all
place_of_service Where the service will be performed
A SCHEDULE ROW CARVED OUT BY PLACE OF SERVICE IS READ AGAINST IT. Several rows on this plan's schedule require authorization in some settings and not in others, so the setting is not decoration -- it selects between REQUIRED and NOT REQUIRED on the same code. It is the PERFORMING site that counts, never the referring practice's own setting, and a packet routinely names both.
ambiguous the packet refers to where the service will happen without settling it -- 'at the usual site', 'wherever there is capacity', two candidate sites with no decision recorded -- or the only setting stated belongs to the REFERRING practice rather than to the performing site
documented the packet states where the service will be PERFORMED, as one of: telehealth, office, outpatient-hospital, ambulatory-surgical-center
absent the packet says nothing about where the service will be performed
date_of_service The scheduled date of service
THE ADVANCE-NOTICE WINDOW GETS COUNTED AGAINST IT. This is the only date the window can be counted to: the plan's window is business days between the order and the service, and a packet that gestures at scheduling without naming a day states no date to count to. A date belonging to something else -- a follow-up appointment, an authorization already on file for a different service, a previous episode -- is in the packet and is not this.
ambiguous the packet refers to scheduling without naming a day or a number of days -- 'to be scheduled', 'next available', 'in the coming weeks' -- or the only date in the packet belongs to something else: a follow-up appointment, an authorization already on file for a DIFFERENT service, or a previous episode
documented the packet states, as this order's own scheduled service, either a service DATE or a number of CALENDAR DAYS from the order date
absent the packet documents no scheduled date of service at all
clinical_indication The documented indication for the service
THE PACK CARRIES THE INDICATION THE REVIEWER ASKED FOR. It is context for a human reading and it is the element most easily mistaken for the answer: how necessary or how urgent a service is has nothing to do with whether the plan requires authorization for it. Assembling it is the job; reasoning from it is not, and no rule in this kit can.
ambiguous the packet refers to an indication without stating one -- 'clinically indicated', 'as discussed at the review', 'per the assessment'
documented the packet states a clinical indication for the service ordered
absent the packet documents no indication for the service
THE ADVANCE-NOTICE WINDOW, and why you are not asked to compute it:
SPP-2026 asks for at least five business days between the day the order is written and the day the service is performed. The order date is held as structured data and the counting is done in code, from that
and from whichever of the two values the packet states. Business days are not calendar days and the difference decides cases. Two orders eight calendar days apart can leave five business days of notice or four, depending only on which weekdays and closures fall between them.
So: report the service DATE the packet names, as YYYY-MM-DD, OR the number of CALENDAR DAYS
from the order it names, as an integer -- whichever the packet uses, and null for the other.
Never both, never converted, never counted in business days.
HOW TO QUOTE THE PACKET, and how it will be read.
For every element you answer with anything other than its ABSENT word (`code-missing`, or `absent`),
`citation` must be ONE SENTENCE OR ONE DATED LINE COPIED VERBATIM out of the referral packet -- the
text that carries the element. It may come from any section.
- Copy it character for character. It is located in the packet by searching for it, so a
paraphrase, a shortened version, an ellipsis in the middle, or two lines joined together will
not be found at all and will score nothing. There is no partial credit for a quote the packet
does not contain.
- Quote the line, not the section. What is returned is compared with that line by character
overlap: it must cover at least 60 pct of the line, and at least 30 pct of what you
return must be the line. Returning the whole packet scores nothing.
- SPP-2026 is NOT part of the packet. A schedule row, a clause and a rule are never the citation.
- Where you answer `code-missing` or `absent`, `citation` is null. Quoting something in support of
an element the packet does not carry is counted as a wrong answer, not as an empty one -- and on
the service-code row it is the most expensive wrong answer in this kit.
THE REFERRAL PACKET, verbatim:
REFERRAL PACKET REF-0001 -- Referral raised by the day-service coordinator
ORDER FACTS
Referral REF-0001
Ordered on 2026-07-22
Referring practice Kesterly Medical Group
Referring role referring clinician
Member plan SPP-2026
Packet assembled as at 2026-09-01
SERVICE ORDER
2026-07-22 Service ordered: PSC-5540, placement of an implantable cardiac monitor. Entered by the referring clinician.
REFERRAL LETTER
The member's demographic record was refreshed when the referral was raised. Clinical indication recorded on the referral: unexplained weight loss with a two-month history. The member is well and the referral was raised at a planned review. The referral carries the practice's standard footer and nothing was added to it.
Performing site: Coldharrow Infirmary outpatient imaging. Place of service recorded as outpatient-hospital. The packet was assembled by the referral management desk in the routine overnight batch. Nothing in the letter suggests the timing is pressing.
SCHEDULING NOTES
2026-07-23 Date of service confirmed as 2026-08-03 with the performing site.
BENEFIT DESK NOTES
2026-07-24 No query has been raised with the member about this referral.
2026-07-24 The referral appears once on the daily outpatient extract.
Reply with JSON and nothing else, exactly this shape:
{
"elements": [
{
"element": "service_code" | "place_of_service" | "date_of_service" | "clinical_indication",
"finding": the word for THIS element, from the list above,
"citation": "<text>" or null,
"code": "<text>" or null,
"setting": "telehealth" | "office" | "outpatient-hospital" | "ambulatory-surgical-center" or null,
"service_date": "YYYY-MM-DD" or null,
"days_out": <an integer> or null
},
... one object per element, all four, in this order: service_code, place_of_service, date_of_service, clinical_indication
],
"authorization": "SERVICE-UNIDENTIFIED" | "AUTH-NOT-REQUIRED" | "AUTH-REQUIRED-NOTICE-GAP" | "AUTH-REQUIRED-LATE" | "AUTH-REQUIRED-IN-TIME",
"confidence": <a number between 0 and 1>,
"why": "<text>"
}
What each field means:
element which evidence element this row is about. Answer all four, once each, in the order given
finding what this packet carries for this element. Use the vocabulary listed for THIS element and no other
citation ONE SENTENCE OR ONE DATED LINE COPIED VERBATIM from the referral packet -- the text that carries this element. Copy it exactly, character for character; do not paraphrase, do not shorten with an ellipsis, do not join two lines. NULL where the finding is code-missing or absent: quoting something in support of an element the packet does not carry is counted as a wrong answer, not as an empty one
code SERVICE_CODE ROW ONLY, and null on the other three. The one current billable service code the packet orders, in the plan's PSC-nnnn form, copied exactly. NULL where the finding is code-ambiguous or code-missing -- a code returned beside either of those is a code you have already said the packet does not establish, and it is dropped
setting PLACE_OF_SERVICE ROW ONLY, and null on the other three. Where the service will be PERFORMED, as one of the four words. It is the performing site, never the referring practice's own setting. NULL where the finding is ambiguous or absent
service_date DATE_OF_SERVICE ROW ONLY, and null on the other three. The scheduled service DATE the packet documents, as YYYY-MM-DD. NULL where the packet documents the schedule as a number of calendar days instead, and NULL where no schedule is documented. Never computed, never inferred -- only a date the packet itself states
days_out DATE_OF_SERVICE ROW ONLY, and null on the other three. The number of CALENDAR DAYS from the order date the packet documents, as an integer. NULL where the packet states a service date instead, and NULL where no schedule is documented. Do not convert a date into a day count and do not convert a day count into a date, and do not convert either into business days -- the counting is done in code, from whichever one the packet states
authorization what SPP-2026's seven rules, applied in their published order, make of this packet. This is your answer to the whole question. It is scored as you give it and then re-derived in code from your own four findings and your own extracted code, setting and date, so the two can be compared
confidence your own number between 0 and 1 for this packet's answers taken together. It is published as evidence and never used to change an answer
why one sentence naming the text that decided the service code and the place of service
Four element objects for one packet. No more, no fewer.