Rules-as-code · Plain-English guide
How the digitised Wildlife Regulations 2024 take what an applicant wants to do with wildlife and work out — automatically — which kind of licence they need, which single licence should be issued, what the application form must contain, and roughly what it will cost. No code, no jargon left unexplained.
How to read this guide
This ruleset is about the application, not the licence once held. It starts from what an applicant says they want to do — the animals, the activities, the purpose, the source — and runs them through a five-step pipeline to reach a recommended licence type, a set of required form fields, and an indicative fee. Everything is worked out by the same rules, evaluated top-to-bottom; when two rules touch the same value, the later one wins. The colour code is constant throughout: Permitted / applies, Not permitted, Obligated / Required, Rules work out.
The Wildlife Regulations 2024 create twelve kinds of wildlife licence — basic, advanced, specimen, dingo, controller, dealer, demonstrator, displayer, game bird farmer, processor, farmer and taxidermist — plus separate import and export permits. Which one an applicant needs depends not on ticking a box but on the combination of what they want to do, which animals are involved, and why.
This ruleset does that reasoning for them. It takes the application's inputs and runs a five-step pipeline:
A separate check runs alongside step 2: the application is only permissible if it maps to at least one licence type. If the requested combination matches nothing, that is itself the answer — no licence covers it.
Idea 1
The applicant never picks a licence type. They describe what they want to do and with which animals; the rules derive the licence, the required fields and the fee. Anything the rules work out is marked Rules work out.
Idea 2
A licence type isn't unlocked by one fact. Each is a small combination — an activity and a Schedule (or animal trait) and a purpose. Miss any part and that licence doesn't apply; a different one might.
Idea 3
Real activities overlap. Buying implies acquiring; keeping implies possessing a live animal; breeding implies both. The rules expand the applicant's ticks before testing any gate, so the gates see the full picture.
Idea 4
Rules run top-to-bottom. When several licence types are flagged, the convergence step re-assigns the single recommended type in order, so the last matching line decides. This one idea explains which licence an ambiguous application ends up with.
The application is one big record. Most of it is You provide — facts the applicant supplies. A smaller set is Rules work out — conclusions the rules derive. These are the fields that actually drive the logic below; the full model has more, but they follow the same pattern.
The hub record — who is applying and what they want to do.
Which official lists the animal appears on, plus a few traits. These are the key that opens most gates.
One yes/no flag per licence type — all computed. Step 2 sets them; step 3 reads them.
Worked out from the licence type and the requested term.
Before any licence is tested, the rules fill in the activities that are implied by the ones the applicant ticked (Section 7). This matters because the licence gates below check for specific activities — and an applicant who says “I want to breed” shouldn't have to separately tick “keep” and “possess” for the gates to fire.
| If the applicant ticks… | …the rules also set |
|---|---|
| Buy wildlife | Acquire wildlife |
| Receive wildlife | Possess wildlife |
| Keep wildlife | Possess wildlife · Wildlife is alive |
| Breed wildlife | Possess wildlife · Keep wildlife · Wildlife is alive |
These run in order, so a chain resolves in one pass: breeding turns on keeping, which (already set) implies possessing a live animal. The is alive flag it sets is later used to exclude the specimen, taxidermist and processor gates, which all require the animal not to be alive.
This is the heart of the ruleset. Each licence type (Sections 8–19) is a gate: a combination of an activity, the animal's Schedule (or a trait), and a purpose. The rules test every gate independently and set a yes/no flag for each type the request matches. An application can match several at once — that's expected, and step 3 resolves it.
Almost every gate is built the same way: “any handling activity AND the right Schedule AND the right purpose.” Here is the basic-licence gate drawn out; the others differ only in which Schedules and purposes they check.
The full set of gates, with the primary condition for each. “Handling activity” means any of the acquire/keep/possess/dispose/display family (each gate lists a slightly different subset). Where a gate has more than one route to a “yes”, the alternative is noted.
| Licence type | Activity | Wildlife | Purpose / other |
|---|---|---|---|
| Basic S8 | Any handling | Schedule 2 or 7 | Non-commercial |
| Advanced S9 | Any handling | Schedule 2, 3A, 3B or 7 | Non-commercial |
| Specimen S10 | Any handling | Prepared or mounted specimen · not alive | Non-commercial |
| Dingo S11 | Any handling or display | Is a dingo | Non-commercial · or canine-show display · or educational display |
| Controller S12 | Destroy or dispose | Taken from the wild | Non-commercial |
| Dealer S13 | Any handling · or dispose (not sell) of dead stock | Schedule 2, 3A, 4B or 7 | Commercial |
| Demonstrator S14 | Any handling | (for the films route) Schedule 2–4B | Promote ecology + conservation · or commercial-films display |
| Displayer S15 | Any handling / display | — | Commercial-films · conservation · or educational |
| Game bird farmer S16 | Any handling · or possess/display dead stock | Is a bird · bred in captivity · (or dead + specimen) | For hunting |
| Processor S17 | Buy/acquire/receive · or sell/keep/process | Schedule 5A · (or dead Schedule 7) | Provide products for sale |
| Farmer S18 | Any handling · or dispose of infertile eggs | Schedule 7 | For farming wildlife |
| Taxidermist S19 | Buy/acquire/receive · or sell/keep/display | Schedule 2–4B · not alive | Preserve / mount / restore |
| Import / Export S115 | Import / export wildlife | — | — |
Running alongside these gates is a single obligation (the “Misc” rule): the application must map to at least one licence type. The rules OR together the flags from basic through taxidermist into a computed licence types selected value and mark it Obligated — the machine-checkable way of saying “if this application matches no licence, it isn't permissible as-is.” (The dingo and import/export flags are absent from that roll-up — see Observations 1 and 2.)
Step 2 can flag several licence types. Step 3 picks the single one to actually issue. It does this with a run of rules — one per type — each of the form “if this type is flagged, set the recommended licence type to it.” Because rules run top-to-bottom and the last match wins, the effective priority is the reverse of the writing order:
| Effective priority (highest first) | Recommended licence type |
|---|---|
| 1 | Taxidermist |
| 2 | Farmer |
| 3 | Processor |
| 4 | Game bird farmer |
| 5 | Displayer (also the demonstrator + dealer tie-break) |
| 6 | Dingo |
| 7 | Demonstrator |
| 8 | Dealer |
| 9 | Controller |
| 10 | Specimen |
| 11 | Advanced (but basic + advanced together ⇒ basic) |
| 12 | Basic |
So an application that qualifies for several categories is issued the one highest in effective priority — for example, a request that needs both a controller and a taxidermist licence is recommended a taxidermist licence. Two deliberate tie-breaks are built in: basic + advanced resolves back to basic, and demonstrator + dealer resolves to displayer. (Two behaviours that earlier versions got wrong here — the specimen case and the missing dingo line — have since been corrected: specimen now issues a specimen licence, and there is now a dingo line. Import/export still has no line — Observation 2.)
Section 20 turns the application into a form. Depending on who is applying and for what, individual fields become Required (must be filled in) or stay optional. The main triggers:
Import/export permits (Section 115) add their own applicant name-and-address requirements when either permit is needed. Several of the field rules in this section have wiring slips worth a look — see Observation 4.
Section 23 attaches a fee to the recommended licence type. Every type has a fixed number of fee units; the amount is those units prorated over the requested term (issue months), with a concession halving for eligible individuals.
| Recommended licence type | Fee units |
|---|---|
| Basic | 6.7 |
| Advanced | 12.4 |
| Specimen | 1 |
| Dingo | 9.6 |
| Controller | 20 |
| Dealer | 57.2 |
| Demonstrator | 37.3 |
| Displayer | 51.3 |
| Game bird farmer | 49.2 |
| Processor | 49.2 |
| Farmer | 49.2 |
| Taxidermist | 40.7 |
The amount is built in two moves. A fee per month is set to the cost of a fee unit ($16.22) divided by 12 for terms under 18 months, or by 15 for terms of 18 months or more — a modest bulk discount on longer licences. The amount is then fee per month × issue months × fee units, so at a 12-month term it equals the licence's fee units × the cost per unit, exactly as expected. Finally, a natural person eligible for a concession has the amount halved. (An earlier version left the cost-per-unit out and applied the term twice; the current encoding fixes both.)
Three applications traced through the pipeline: the common ambiguous case, a clean single-licence case, and the dingo case that still trips the permissibility check.
Coverage at a glance
17 test suite(s), 45 scenario(s), 96 expectation(s) in total. 43 scenario(s) assert an outcome; 2 assert nothing (inputs only).
Scenarios that assert nothing exercise the rules but cannot pass or fail — they are a coverage gap worth noting.
The 45 scenarios still concentrate on step 2 — the twelve licence gates. Each of Sections 8–19 gets a small suite pairing a positive case (the right activity + Schedule + purpose, asserting the matching isX LicenceRequired = true) with one or two negatives (wrong Schedule, or commercial flipped, asserting it stays false). Suite S7 checks the activity-implication shortcuts, and small suites cover the permissibility roll-up (“Misc”), the convergence, and — new since the earlier encoding — the indicative fee (Section 23) and the Dingo gate (S11). That gate coverage is genuinely solid and now reaches further down the pipeline than it once did.
The remaining gaps are in convergence and the tail of the pipeline. The convergence suite tests only the basic and advanced cases, so the last-match-wins priority for the other ten types — including the newly-added Dingo line and the specimen → specimen fix — is unverified. The required-fields logic (Section 20) has just two scenarios, and the import/export permits (Section 115) and the permissibility gap for a dingo-only application (Observation 2) have none.
Two scenarios are also weak in construction: two assert nothing at all (the S13 venomous-snake case and the S14 conservation-breeding case), so they run the rules but can neither pass nor fail. Most tellingly, the “Basic plus advanced equals advanced” scenario asserts the issued type is advanced, while the rules resolve basic + advanced to basic (Observation 5) — so either that test or that rule is wrong, and nothing currently forces the question.
Given these inputs
| @id: | 98ZudGRxsbWEzxgsul1kNlZb |
| @type: | Regsoft |
| @name: | Basic licence required |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | False |
| application.desiredActivities.possessWildlife: | False |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isCommercial: | False |
| application.wildlife.isListedInSchedule2: | True |
| application.wildlife.isListedInSchedule7: | False |
Then expect
Given these inputs
| @id: | YONpXzJV3z3Jl9Fda8wvcXwh |
| @type: | Regsoft |
| @name: | Wildlife from a different schedule requires a different licence |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isCommercial: | False |
| application.wildlife.isListedInSchedule2: | False |
| application.wildlife.isListedInSchedule7: | False |
Then expect
Given these inputs
| @id: | GXVkz95uslkJ1csVu6ZBSTUA |
| @type: | Regsoft |
| @name: | Commercial purposes require a different licence |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | False |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isCommercial: | True |
| application.wildlife.isListedInSchedule2: | True |
| application.wildlife.isListedInSchedule7: | False |
Then expect
Given these inputs
| @id: | LZPs4U8KxZwIJoVShyfQO0GR |
| @type: | Regsoft |
| @name: | Buying wildlife implies keeping wildlife |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.keepWildlife: | False |
| application.desiredActivities.receiveWildlife: | False |
Then expect
Given these inputs
| @id: | lr8uWO8GGMbxEKbNbYtceZ0s |
| @type: | Regsoft |
| @name: | Receiving wildlife implies possessing wildlife |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | False |
| application.desiredActivities.keepWildlife: | False |
| application.desiredActivities.receiveWildlife: | True |
Then expect
Given these inputs
| @id: | wbwFLrKL2bL5AEQGs6ULia00 |
| @type: | Regsoft |
| @name: | Keeping wildlife implies possessing live wildlife |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | False |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.receiveWildlife: | False |
Then expect
Given these inputs
| @id: | HelbhofVJPeMr0MopuoawG2h |
| @type: | Regsoft |
| @name: | Breeding wildlife implies possessing and keeping live wildlife |
| application.desiredActivities.breedWildlife: | True |
| application.desiredActivities.buyWildlife: | False |
| application.desiredActivities.keepWildlife: | False |
| application.desiredActivities.receiveWildlife: | False |
Then expect
Given these inputs
| @id: | eYpZ4pupiE8wiQg8JzJtBDtK |
| @type: | Regsoft |
| @name: | Advanced licence required |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | False |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isCommercial: | False |
| application.wildlife.isListedInSchedule2: | False |
| application.wildlife.isListedInSchedule3PartA: | False |
| application.wildlife.isListedInSchedule3PartB: | True |
| application.wildlife.isListedInSchedule7: | False |
Then expect
Given these inputs
| @id: | VBC2s3rMTEaReK97NgqPwJOx |
| @type: | Regsoft |
| @name: | Schedule 2 animals don't require advanced licence |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isCommercial: | False |
| application.wildlife.isListedInSchedule2: | True |
| application.wildlife.isListedInSchedule3PartA: | False |
| application.wildlife.isListedInSchedule3PartB: | False |
| application.wildlife.isListedInSchedule7: | False |
Then expect
Given these inputs
| @id: | 6cGYpKH714Afg1622idGkgP9 |
| @type: | Regsoft |
| @name: | Commercial keeping of venemous taxa is not permitted |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isCommercial: | True |
| application.wildlife.isListedInSchedule3PartA: | False |
| application.wildlife.isListedInSchedule3PartB: | True |
Then expect
Given these inputs
| @id: | v9DlOeqndNgWgsjxfJjjCQSp |
| @type: | Regsoft |
| @name: | Specimen licence required to handle mounted specimens |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | False |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | False |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isCommercial: | False |
| application.specimen.isMountedSpecimen: | True |
| application.specimen.isPreparedSpecimen: | False |
| application.wildlife.isAlive: | False |
Then expect
Given these inputs
| @id: | XGRYv8u50A9ZZYaxmusrOupE |
| @type: | Regsoft |
| @name: | Commercial selling of mounted animals is not allowed for specimen licences |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.disposeOfWildlife: | True |
| application.desiredActivities.keepWildlife: | False |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | True |
| application.purpose.isCommercial: | True |
| application.specimen.isMountedSpecimen: | True |
| application.specimen.isPreparedSpecimen: | False |
| application.wildlife.isAlive: | False |
Then expect
Given these inputs
| @id: | Ll7wmVdbnCCx98costjOSqwo |
| @type: | Regsoft |
| @name: | Application for Dingo licence |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | False |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isCommercial: | False |
| application.purpose.isEducational: | False |
| application.purpose.isToDisplayAtCanineAssociationShow: | True |
| application.wildlife.isDingo: | True |
Then expect
Given these inputs
| @id: | uHoLv4g3z7R4dvCel4KBRP7Y |
| @type: | Regsoft |
| @name: | Non-commercial dingo possession is allowed for educational purposes |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.displayWildlife: | True |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isCommercial: | False |
| application.purpose.isEducational: | True |
| application.purpose.isToDisplayAtCanineAssociationShow: | False |
| application.wildlife.isDingo: | True |
Then expect
Given these inputs
| @id: | GCyv36t9gT9qiRfWsD1tJoW3 |
| @type: | Regsoft |
| @name: | Commercial dingo display is not permitted under this licence |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.displayWildlife: | True |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isCommercial: | True |
| application.purpose.isEducational: | False |
| application.purpose.isToDisplayAtCanineAssociationShow: | False |
| application.wildlife.isDingo: | True |
Then expect
Given these inputs
| @id: | hHcKihPSHdZIkNuwadv5Wg3b |
| @type: | Regsoft |
| @name: | Basic controller licence application |
| application.desiredActivities.destroyWildlife: | True |
| application.desiredActivities.disposeOfWildlife: | False |
| application.purpose.isCommercial: | False |
| application.wildlifeSource.isTakenFromTheWild: | True |
Then expect
Given these inputs
| @id: | RMiHtjJNumdBVgrCzTENIZIQ |
| @type: | Regsoft |
| @name: | Commercial activity not permitted under controller licence |
| application.desiredActivities.destroyWildlife: | True |
| application.desiredActivities.disposeOfWildlife: | False |
| application.purpose.isCommercial: | True |
| application.wildlifeSource.isTakenFromTheWild: | True |
Then expect
Given these inputs
| @id: | ZFrLsmsHl9LhIN3Hh0emJdiO |
| @type: | Regsoft |
| @name: | Wildlife must be taken from the wild |
| application.desiredActivities.destroyWildlife: | True |
| application.desiredActivities.disposeOfWildlife: | False |
| application.purpose.isCommercial: | False |
| application.wildlifeSource.isTakenFromTheWild: | False |
Then expect
Given these inputs
| @id: | JSO6PCggvlK1rbWKQySNhIha |
| @type: | Regsoft |
| @name: | Basic licence |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | True |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.displayWildlife: | True |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isCommercial: | True |
| application.wildlife.isListedInSchedule2: | True |
| application.wildlife.isListedInSchedule3PartA: | False |
| application.wildlife.isListedInSchedule4PartB: | False |
| application.wildlife.isListedInSchedule7: | True |
Then expect
Given these inputs
| @id: | 3XQgj236nGt0lv1LCp8skRyL |
| @type: | Regsoft |
| @name: | Non-commercial disposal of dead wildlife is permitted |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.displayWildlife: | True |
| application.desiredActivities.disposeOfWildlife: | True |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isCommercial: | False |
| application.wildlife.isListedInSchedule2: | True |
| application.desiredActivities.breedWildlife: | False |
| application.wildlife.isAlive: | False |
| application.wildlife.isListedInSchedule3PartA: | False |
| application.wildlife.isListedInSchedule4PartB: | False |
| application.wildlife.isListedInSchedule7: | False |
Then expect
Given these inputs
| @id: | sYOMglDgfKnzsnrreOlMF0qs |
| @type: | Regsoft |
| @name: | Commercial selling of venemous snakes not permitted under dealer licence |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.disposeOfWildlife: | True |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | True |
| application.purpose.isCommercial: | True |
| application.wildlife.isListedInSchedule2: | False |
| application.wildlife.isListedInSchedule3PartA: | False |
| application.wildlife.isListedInSchedule4PartB: | False |
| application.wildlife.isListedInSchedule7: | False |
Then expect
Nothing asserted — this scenario has no expectations.
Given these inputs
| @id: | bHqLDCXmywXafslDL387YM1J |
| @type: | Regsoft |
| @name: | Breeding venemous snakes to promote conservation is allowed |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | True |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.disposeOfWildlife: | True |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isToDisplayInCommercialFilms: | False |
| application.purpose.isToPromoteConservation: | True |
| application.purpose.isToPromoteUnderstandingOfEcology: | False |
| application.wildlife.isListedInSchedule2: | False |
| application.wildlife.isListedInSchedule3PartA: | False |
| application.wildlife.isListedInSchedule3PartB: | True |
| application.wildlife.isListedInSchedule4PartA: | False |
| application.wildlife.isListedInSchedule4PartB: | False |
Then expect
Nothing asserted — this scenario has no expectations.
Given these inputs
| @id: | TlcHVmOWaEhE1m6NSsQ4gtO1 |
| @type: | Regsoft |
| @name: | Breeding Green Pygmy-Geese for display in commercial films is permitted |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | True |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.displayWildlife: | True |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | False |
| application.desiredActivities.possessWildlife: | False |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | True |
| application.purpose.isToDisplayInCommercialFilms: | True |
| application.purpose.isToPromoteConservation: | False |
| application.purpose.isToPromoteUnderstandingOfEcology: | False |
| application.wildlife.isListedInSchedule2: | False |
| application.wildlife.isListedInSchedule3PartA: | False |
| application.wildlife.isListedInSchedule3PartB: | False |
| application.wildlife.isListedInSchedule4PartA: | True |
| application.wildlife.isListedInSchedule4PartB: | False |
Then expect
Given these inputs
| @id: | GH6aVaf8IXreXf7tHa9tChMI |
| @type: | Regsoft |
| @name: | Keeping wildlife for educational purposes is permitted |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | False |
| application.desiredActivities.displayWildlife: | True |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.listedInSubRegulation2: | True |
| application.purpose.isToDisplayInCommercialFilms: | False |
| application.purpose.isToPromoteConservation: | True |
| application.purpose.isToPromoteUnderstandingOfEcology: | True |
| application.wildlife.isListedInSchedule2: | True |
| application.wildlife.isListedInSchedule3PartA: | False |
| application.wildlife.isListedInSchedule3PartB: | False |
| application.wildlife.isListedInSchedule4PartA: | False |
| application.wildlife.isListedInSchedule4PartB: | False |
Then expect
Given these inputs
| @id: | GTykAfT6FUn6LB8iKrAjZmQZ |
| @type: | Regsoft |
| @name: | Breeding wildlife for edcucational purposes is allowed under this licence |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | True |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.displayWildlife: | True |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isEducational: | True |
| application.purpose.isToDisplayInCommercialFilms: | False |
| application.purpose.isToPromoteConservation: | False |
Then expect
Given these inputs
| @id: | XrHVX45HiwWUfdzjfzCykzKL |
| @type: | Regsoft |
| @name: | Keeping wildlife for display in commercial films is permitted |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isEducational: | False |
| application.purpose.isToDisplayInCommercialFilms: | True |
| application.purpose.isToPromoteConservation: | False |
Then expect
Given these inputs
| @id: | dMbncHidiVhzUu1HxkLZoPZ2 |
| @type: | Regsoft |
| @name: | Game bird licence |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.destroyWildlife: | False |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.disposeOfWildlife: | True |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.processWildlife: | False |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | True |
| application.purpose.isForHunting: | True |
| application.specimen.isMountedSpecimen: | False |
| application.specimen.isPreparedSpecimen: | False |
| application.wildlife.isAlive: | True |
| application.wildlife.isBird: | True |
| application.wildlife.isBredInCaptivity: | True |
Then expect
Given these inputs
| @id: | 8AzDs6EZJ1nIqtmir3ycLNfB |
| @type: | Regsoft |
| @name: | Possessing dead wildlife for mounting is allowed with this licence |
| application.desiredActivities.aquireWildlife: | False |
| application.desiredActivities.breedWildlife: | False |
| application.desiredActivities.buyWildlife: | False |
| application.desiredActivities.destroyWildlife: | False |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | False |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.processWildlife: | True |
| application.desiredActivities.receiveWildlife: | False |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isForHunting: | False |
| application.specimen.isMountedSpecimen: | True |
| application.specimen.isPreparedSpecimen: | False |
| application.wildlife.isAlive: | False |
| application.wildlife.isBird: | True |
| application.wildlife.isBredInCaptivity: | False |
Then expect
Given these inputs
| @id: | YLKRJsWPew1nWHoJsBoIKvbW |
| @type: | Regsoft |
| @name: | Selling wildlife from schedule 5a is permitted under this licence |
| application.desiredActivities.aquireWildlife: | False |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | False |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | True |
| application.purpose.isToProvideProductsForSale: | True |
| application.wildlife.isAlive: | False |
| application.wildlife.isListedInSchedule5PartA: | True |
| application.wildlife.isListedInSchedule7: | False |
Then expect
Given these inputs
| @id: | YLKRJsWPew1nWHoJsBoIKvbW |
| @type: | Regsoft |
| @name: | Selling wildlife from schedule 5a is permitted under this licence |
| application.desiredActivities.aquireWildlife: | False |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | False |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | True |
| application.purpose.isToProvideProductsForSale: | True |
| application.wildlife.isAlive: | False |
| application.wildlife.isListedInSchedule5PartA: | False |
| application.wildlife.isListedInSchedule7: | True |
Then expect
Given these inputs
| @id: | KrOlW3rD6pJHSNHKXBYrihqY |
| @type: | Regsoft |
| @name: | Test |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.disposeOfWildlife: | True |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | True |
| application.purpose.isToProvideProductsForSale: | True |
| application.wildlife.isAlive: | False |
| application.wildlife.isListedInSchedule5PartA: | False |
| application.wildlife.isListedInSchedule7: | False |
Then expect
Given these inputs
| @id: | 5CMo4mEvPnNNFvCmyN67ulP4 |
| @type: | Regsoft |
| @name: | Selling products from Schedule 5 Part A allowed with Farmer's licence |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | True |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.destroyWildlife: | False |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.disposeOfInfertileEggs: | False |
| application.desiredActivities.disposeOfWildlife: | True |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.processWildlife: | False |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | True |
| application.purpose.isForFarmingWildlife: | True |
| application.wildlife.isListedInSchedule7: | True |
Then expect
Given these inputs
| @id: | LcdeHoKRczB2LQbCE5Xz7NGt |
| @type: | Regsoft |
| @name: | Selling wildlife from schedule 7 not for farming purposes is prohibited |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | True |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.destroyWildlife: | False |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.disposeOfInfertileEggs: | False |
| application.desiredActivities.disposeOfWildlife: | True |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.processWildlife: | False |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | True |
| application.purpose.isForFarmingWildlife: | False |
| application.wildlife.isListedInSchedule7: | True |
Then expect
Given these inputs
| @id: | BRbswuQRJsYCOwwhZaMwGdnf |
| @type: | Regsoft |
| @name: | Disposing of infertile eggs from schedule 7 is permitted |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.breedWildlife: | True |
| application.desiredActivities.buyWildlife: | True |
| application.desiredActivities.destroyWildlife: | False |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.disposeOfInfertileEggs: | True |
| application.desiredActivities.disposeOfWildlife: | False |
| application.desiredActivities.keepWildlife: | True |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.processWildlife: | False |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | False |
| application.purpose.isForFarmingWildlife: | False |
| application.wildlife.isListedInSchedule7: | True |
Then expect
Given these inputs
| @id: | 4JTpxDHs503kam8pzeQiVMNH |
| @type: | Regsoft |
| @name: | Preserving wildlife requires a licence |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.buyWildlife: | False |
| application.desiredActivities.displayWildlife: | False |
| application.desiredActivities.disposeOfWildlife: | True |
| application.desiredActivities.keepWildlife: | False |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.processWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | True |
| application.purpose.isToDisplayInCommercialFilms: | False |
| application.purpose.isToPrepareAndMountWildlife: | True |
| application.purpose.isToPreserveWildlife: | True |
| application.purpose.isToProvideCompleteSpecimensOfWildlife: | True |
| application.purpose.isToProvidePartsOfWildlife: | True |
| application.purpose.isToRestoreCompleteSpecimens: | True |
| application.purpose.isToRestorePartsOfWildlife: | True |
| application.wildlife.isAlive: | False |
| application.wildlife.isListedInSchedule2: | True |
| application.wildlife.isListedInSchedule3PartA: | False |
| application.wildlife.isListedInSchedule3PartB: | False |
| application.wildlife.isListedInSchedule4PartA: | False |
| application.wildlife.isListedInSchedule4PartB: | False |
Then expect
Given these inputs
| @id: | WBEt5jz84BXjF2n1Dj6HcdxS |
| @type: | Regsoft |
| @name: | Providing dead wildlife for films is permitted with taxidermist licence |
| application.desiredActivities.aquireWildlife: | True |
| application.desiredActivities.buyWildlife: | False |
| application.desiredActivities.displayWildlife: | True |
| application.desiredActivities.disposeOfWildlife: | True |
| application.desiredActivities.keepWildlife: | False |
| application.desiredActivities.possessWildlife: | True |
| application.desiredActivities.processWildlife: | True |
| application.desiredActivities.receiveWildlife: | True |
| application.desiredActivities.sellWildlife: | True |
| application.purpose.isToDisplayInCommercialFilms: | True |
| application.purpose.isToPrepareAndMountWildlife: | True |
| application.purpose.isToPreserveWildlife: | True |
| application.purpose.isToProvideCompleteSpecimensOfWildlife: | True |
| application.purpose.isToProvidePartsOfWildlife: | True |
| application.purpose.isToRestoreCompleteSpecimens: | True |
| application.purpose.isToRestorePartsOfWildlife: | True |
| application.wildlife.isAlive: | False |
| application.wildlife.isListedInSchedule2: | True |
| application.wildlife.isListedInSchedule3PartA: | False |
| application.wildlife.isListedInSchedule3PartB: | False |
| application.wildlife.isListedInSchedule4PartA: | False |
| application.wildlife.isListedInSchedule4PartB: | False |
Then expect
Given these inputs
| @id: | YLVA5j1J1SF4lb3Id0BcT11A |
| @type: | Regsoft |
| @name: | Selecting basic licence selects licence type |
| application.licences.isAdvancedLicenceRequired: | False |
| application.licences.isBasicLicenceRequired: | True |
| application.licences.isControllerLicenceRequired: | False |
| application.licences.isDealerLicenceRequired: | False |
| application.licences.isDemonstratorLicenceRequired: | False |
| application.licences.isDisplayerLicenceRequired: | False |
| application.licences.isFarmerLicenceRequired: | False |
| application.licences.isGameBirdFarmerLicenceRequired: | False |
| application.licences.isProcessorLicenceRequired: | False |
| application.licences.isSpecimenLicenceRequired: | False |
| application.licences.isTaxidermistLicenceRequired: | False |
Then expect
Given these inputs
| @id: | YLVA5j1J1SF4lb3Id0BcT11A |
| @type: | Regsoft |
| @name: | Selecting basic licence selects licence type |
| application.licences.isAdvancedLicenceRequired: | False |
| application.licences.isBasicLicenceRequired: | True |
| application.licences.isControllerLicenceRequired: | False |
| application.licences.isDealerLicenceRequired: | False |
| application.licences.isDemonstratorLicenceRequired: | False |
| application.licences.isDisplayerLicenceRequired: | False |
| application.licences.isFarmerLicenceRequired: | False |
| application.licences.isGameBirdFarmerLicenceRequired: | False |
| application.licences.isProcessorLicenceRequired: | False |
| application.licences.isSpecimenLicenceRequired: | False |
| application.licences.isTaxidermistLicenceRequired: | False |
Then expect
Given these inputs
| @id: | zHlpHWukIdSX4AoEoZENXMBp |
| @type: | Regsoft |
| @name: | Individual applicant |
| application.businessPremises.country: | Australia |
| application.businessPremises.postcode: | 2439 |
| application.businessPremises.state: | Victoria |
| application.businessPremises.streetName: | Test |
| application.businessPremises.streetNumber: | 12 |
| application.businessPremises.suburb: | Conrad |
| application.desiredActivities.keepWildlife: | True |
| application.evidence.includesDemonstrationOfHandlingVenomousSnakes: | True |
| application.evidence.includesGuardianConsent: | False |
| application.evidence.includesProofOfAgeGreaterThan18: | True |
| application.evidence.includesProofOfDingoEnclosureConstruction: | False |
| application.isNaturalPerson: | True |
| application.licences.isAdvancedLicenceRequired: | False |
| application.licenceType: | Wildlife basic licence |
| application.nonPersonApplying.personResponsibleForLicencedActivities.isUnder18YearsOfAge: | True |
| application.nonPersonApplying.personResponsibleForLicencedActivities.name.familyName: | Value |
| application.nonPersonApplying.personResponsibleForLicencedActivities.name.givenName: | |
| application.purpose.isCommercial: | False |
| application.wildlife.isListedInSchedule3PartB: | True |
| application.evidence.includesCrueltyToAnimalsFindingsOfGuilt: | True |
| application.includesATravellingDisplay: | False |
| application.personApplying.name.familyName: | family |
| application.personApplying.name.givenName: | given |
| application.personApplying.name.title: | title |
| application.personApplying.residentialAddress.country: | Australia |
| application.personApplying.residentialAddress.postcode: | 3000 |
| application.personApplying.residentialAddress.state: | Victoria |
| application.personApplying.residentialAddress.streetName: | Brunton Ave |
| application.personApplying.residentialAddress.streetNumber: | 3 |
| application.personApplying.residentialAddress.suburb: | Richmond |
| application.personApplying.telephone: | (03) 9657 8888 |
| application.travellingEnclosure.plans.includesTheConstructionMaterials: | False |
| application.travellingEnclosure.plans.showsTheDimensionsOfTheEnclosure: | False |
| application.travellingEnclosure.plans.showsTheLayoutOfTheEnclosure: | False |
| application.wildlife.includesDangerousWildlife: | False |
| application.wildlife.includesVenemousWildlife: | False |
Then expect
Given these inputs
| @id: | zHlpHWukIdSX4AoEoZENXMBp |
| @type: | Regsoft |
| @name: | Individual applicant |
| application.businessPremises.country: | Australia |
| application.businessPremises.postcode: | 2439 |
| application.businessPremises.state: | Victoria |
| application.businessPremises.streetName: | Test |
| application.businessPremises.streetNumber: | 12 |
| application.businessPremises.suburb: | Conrad |
| application.desiredActivities.keepWildlife: | True |
| application.evidence.includesDemonstrationOfHandlingVenomousSnakes: | True |
| application.evidence.includesGuardianConsent: | False |
| application.evidence.includesProofOfAgeGreaterThan18: | True |
| application.evidence.includesProofOfDingoEnclosureConstruction: | False |
| application.isNaturalPerson: | False |
| application.licences.isAdvancedLicenceRequired: | False |
| application.licenceType: | Wildlife basic licence |
| application.nonPersonApplying.personResponsibleForLicencedActivities.isUnder18YearsOfAge: | False |
| application.nonPersonApplying.personResponsibleForLicencedActivities.name.familyName: | family |
| application.nonPersonApplying.personResponsibleForLicencedActivities.name.givenName: | given |
| application.purpose.isCommercial: | True |
| application.wildlife.isListedInSchedule3PartB: | False |
| application.evidence.includesCrueltyToAnimalsFindingsOfGuilt: | True |
| application.includesATravellingDisplay: | False |
| application.personApplying.name.familyName: | |
| application.personApplying.name.givenName: | |
| application.personApplying.name.title: | |
| application.personApplying.residentialAddress.country: | |
| application.personApplying.residentialAddress.postcode: | 3000 |
| application.personApplying.residentialAddress.state: | Victoria |
| application.personApplying.residentialAddress.streetName: | |
| application.personApplying.residentialAddress.streetNumber: | 3 |
| application.personApplying.residentialAddress.suburb: | |
| application.personApplying.telephone: | |
| application.travellingEnclosure.plans.includesTheConstructionMaterials: | True |
| application.travellingEnclosure.plans.showsTheDimensionsOfTheEnclosure: | True |
| application.travellingEnclosure.plans.showsTheLayoutOfTheEnclosure: | True |
| application.wildlife.includesDangerousWildlife: | False |
| application.wildlife.includesVenemousWildlife: | False |
| application.nonPersonApplying.personResponsibleForLicencedActivities.residentialAddress.country: | Australia |
| application.nonPersonApplying.personResponsibleForLicencedActivities.residentialAddress.postcode: | 3000 |
| application.nonPersonApplying.personResponsibleForLicencedActivities.residentialAddress.state: | Victoria |
| application.nonPersonApplying.personResponsibleForLicencedActivities.residentialAddress.streetName: | Street |
| application.nonPersonApplying.personResponsibleForLicencedActivities.residentialAddress.streetNumber: | 1 |
| application.nonPersonApplying.personResponsibleForLicencedActivities.residentialAddress.suburb: | Suburb |
| application.nonPersonApplying.personResponsibleForLicencedActivities.telephone: | 1234 |
| application.personApplying.dateOfBirth: | 2000-01-01T00:00 |
Then expect
Given these inputs
| @id: | MtsRqB512tIMX59XmUs6CUHC |
| @type: | Regsoft |
| @name: | Basic licence leads to basic licence |
| application.licences.isAdvancedLicenceRequired: | False |
| application.licences.isBasicLicenceRequired: | True |
| application.licences.isControllerLicenceRequired: | False |
| application.licences.isDealerLicenceRequired: | False |
| application.licences.isDemonstratorLicenceRequired: | False |
| application.licences.isDisplayerLicenceRequired: | False |
| application.licences.isFarmerLicenceRequired: | False |
| application.licences.isGameBirdFarmerLicenceRequired: | False |
| application.licences.isProcessorLicenceRequired: | False |
| application.licences.isSpecimenLicenceRequired: | False |
| application.licences.isTaxidermistLicenceRequired: | False |
Then expect
Given these inputs
| @id: | bdSPNPN6H58jwTSk2v5iSdKr |
| @type: | Regsoft |
| @name: | Basic plus advanced equals advanced |
| application.licences.isAdvancedLicenceRequired: | True |
| application.licences.isBasicLicenceRequired: | True |
| application.licences.isControllerLicenceRequired: | False |
| application.licences.isDealerLicenceRequired: | False |
| application.licences.isDemonstratorLicenceRequired: | False |
| application.licences.isDisplayerLicenceRequired: | False |
| application.licences.isFarmerLicenceRequired: | False |
| application.licences.isGameBirdFarmerLicenceRequired: | False |
| application.licences.isProcessorLicenceRequired: | False |
| application.licences.isSpecimenLicenceRequired: | False |
| application.licences.isTaxidermistLicenceRequired: | False |
Then expect
Given these inputs
| @id: | QTCY6V0aXlkEOYrTxL3op3c1 |
| @type: | Regsoft |
| @name: | Basic test |
| application.isNaturalPerson: | True |
| application.issueMonths: | 10 |
| application.licenceType: | Wildlife basic licence |
| application.personApplying.isEligibleForConcession: | False |
| configuration.costPerFeeUnit: | 180 |
Then expect
Given these inputs
| @id: | 23pVAKNw5mI3m8cZFuQJNO24 |
| @type: | Regsoft |
| @name: | 20 month basic licence |
| application.isNaturalPerson: | True |
| application.issueMonths: | 20 |
| application.licenceType: | Wildlife basic licence |
| application.personApplying.isEligibleForConcession: | False |
| configuration.costPerFeeUnit: | 180 |
Then expect
Given these inputs
| @id: | 23pVAKNw5mI3m8cZFuQJNO24 |
| @type: | Regsoft |
| @name: | 20 month basic licence |
| application.isNaturalPerson: | True |
| application.issueMonths: | 20 |
| application.licenceType: | Wildlife basic licence |
| application.personApplying.isEligibleForConcession: | True |
| configuration.costPerFeeUnit: | 180 |
Then expect
Points where the encoding is worth a second look. Encouragingly, three issues noted against an earlier version have since been fixed: the specimen convergence now issues a specimen licence (not a basic one), the dingo licence now has both a convergence line and a fee, and the fee amount now multiplies by the cost per unit and prorates the term correctly. The items below are what remains.
1 · A dingo-only application is issued but not “permissible”
Step 3 now sets licenceType = Dingo licence and step 5 prices it (9.6 units). But the permissibility roll-up (licenceTypesSelected) still ORs only the eleven non-dingo flags. So an application whose only match is a dingo licence is issued and priced, yet fails the “at least one licence selected” obligation. Adding isDingoLicenceRequired to the roll-up would close the gap.
2 · Import and export permits never converge or count
Section 115 sets isImportLicenceRequired / isExportLicenceRequired, but there is no convergence line for either and neither is in the permissibility roll-up. An import/export-only application therefore produces no recommended licenceType and reads as not permissible, even though the permit flag was set and its own name/address fields were required.
3 · The dingo gate's educational-display route doesn't check “is a dingo”
The S11 gate has three routes to requiring a dingo licence. Two test is a dingo; the third — “display wildlife + educational + non-commercial” — does not. Taken literally, any non-commercial educational display of any animal would set isDingoLicenceRequired. Worth confirming the “is a dingo” condition wasn't meant to apply here too.
4 · Field-rule wiring slips in Section 20 / 115
A few required-field rules cross the person / non-person boundary or repeat themselves: the natural-person “Name” block marks a non-person field (nonPersonApplying…name.otherNames) required; the import/export “Applicant's name” block requires givenName on the non-person path while its siblings use the person path; and the corporate address block lists suburb twice. The fee section likewise has the processor fee-unit line duplicated (both 49.2, so harmless). These look like copy-paste slips rather than intended behaviour.
5 · A test contradicts the rule it checks
The convergence scenario “Basic plus advanced equals advanced” asserts the issued type is advanced, but the rule as written resolves basic + advanced to basic (the tie-break in step 3, and matched by the sibling “Basic licence leads to basic licence” test). One of the two is wrong; today nothing forces the question because the convergence suite tests only these two cases.