Rules-as-code · Plain-English guide
How the digitised conditions of Victoria's Wildlife Regulations 2024 decide what each kind of wildlife licence lets its holder do, the conditions attached to using it — where and with whom you may trade, how dingoes must be kept — and the records and notifications the holder must keep up. No code, no jargon left unexplained.
How to read this guide
This ruleset is about licence holders, not applications. It assumes someone already holds (or is modelling) a wildlife licence, and works out three things: which handling activities that licence permits, the conditions attached to exercising them, and the record-keeping and notification duties it obliges. Sections 3–4 cover permissions; sections 5–6 cover duties; sections 7–10 cover the licence conditions (new in this revision of the encoding). The colour code is constant throughout: Permitted, Forbidden, 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. Each kind lets its holder do some things with wildlife (buy it, keep it, sell it, breed it, and so on) but not others, attaches conditions to how those things may be done, and adds ongoing paperwork duties.
This ruleset takes the details of a licence — its type, the wildlife it covers, the purpose, the source of the animals — and works out, automatically:
Everything below is worked out by the same rules, evaluated top-to-bottom: when two rules touch the same activity, the later one wins. That single idea explains the whole permission system — including how a condition can slam a permission shut again (a dingo pup under seven weeks turns "buy" back off unless the Secretary has approved).
This revision of the encoding roughly doubles the covered ground: alongside the permission matrix and the record-keeping duties, the licence conditions of regs 38–60 (transactions, displays, keeping, dingo safety, employees, signage, controller approvals) are now encoded, and reg 116 unlocks import/export for an import/export permit within its validity window. Regs 61–115 and 117–142 remain headings-only stubs — see Observations.
Idea 1
The rules begin by forbidding every wildlife activity. Each licence type then re-opens only the activities it is meant to allow. So a permission is really the answer to “does my licence unlock this?”.
Idea 2
The rules don't output a single verdict. They attach a status to each activity — may do (Permitted), must not (Forbidden), must do (Obligated) — so one licence produces a whole map of dos and don'ts.
Idea 3
Which licence covers which animal turns on the Schedules — official lists of taxa (Schedule 2, 3A, 3B, 4A, 4B, 5A, 5B, 6, 7). A licence unlocks its activities only when the animal is on the right Schedule for that licence.
You provide a fact that is entered about the licence. Rules work out a conclusion the rules calculate. The ruleset draws on a large shared data model; the entities that actually drive these rules are below.
The licence itself — the central thing these rules reason about.
A buy / sell / trade the holder wants to make — its location, the other party, and the wildlife involved. Drives the reg 38–50 conditions.
What the holder keeps, where, and the signage on commercial premises.
The holder's log of what they've done under the licence. Each entry can trigger required fields and a timeliness check.
Staff a commercial holder employs to act under the licence, and any later change to a name, address or telephone number that must be notified.
Before any licence-specific rule runs, an initialisation step sets every wildlife handling activity to Forbidden — buying, selling, acquiring, receiving, disposing, keeping, possessing, breeding, displaying, destroying, importing, exporting, and the rest. Nothing is allowed yet.
The same step switches on a handful of Obligated duties that apply to every holder regardless of licence type — chiefly the duties to notify a change of name, address or telephone number (for the holder, an employee, or an authorised person), to notify employee details, and to notify police of a wildlife theft.
Later still wins
Because the last rule to touch an activity wins, a licence rule can also switch something back to Forbidden after unlocking it — the taxidermist rules do this to a “sell” permission, and the dingo-pup rule (reg 50) does it to a whole set of transaction permissions (see §9).
Each licence type has its own rule. It first checks that the chosen licence type matches, then checks a gate — the right Schedule for the species, the right purpose, sometimes the right source — and only then flips its activities to Permitted. The general shape is the same for all twelve:
The matrix shows which activities each licence can unlock. A ✓ means the licence permits that activity once its gate is met; the gate is spelled out in the notes beneath. Some licences (processor, taxidermist) unlock different activities on different branches — the ✓ marks any activity the licence can reach.
| Licence type | Buy | Sell | Acquire | Receive | Dispose | Keep | Possess | Breed | Display | Process | Destroy |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Basic | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
| Advanced | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
| Specimen | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
| Dingo | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
| Controller | ✓ | ✓ | |||||||||
| Dealer | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
| Demonstrator | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
| Displayer | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
| Game bird farmer | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
| Processor | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||
| Farmer | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Taxidermist | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
The gate for each licence — the extra conditions beyond selecting the type:
Three licences also unlock a special “request approval to acquire wildlife from a specified source” permission (processor, taxidermist, and the farmer's egg branch).
Holding a licence isn't only about what you may do — it's about proving you did it properly. Four rule groups turn activities into record-keeping duties and then check the timing.
If the holder buys, acquires, disposes of or receives wildlife, they are Obligated to record transaction details in the log book. For each transaction, the species, quantity and transaction type become Required; a free-text description is required when the type is “other”. The rules then compute whether the entry was recorded on time:
When a holder becomes aware of a wildlife loss, recording it is Required. For each loss, type, species and quantity are required; if the animal is a dog (Canis familiaris) each microchip number is required too. A theft triggers extra duties, and the loss must be recorded within two days:
A displayer licence unlocks opening a wildlife display; once a display is open the holder may close it. Each opening and closing must be recorded, and recorded within two days of the event. A demonstrator licence unlocks conducting a demonstration and obliges recording each one's date and venue.
| Duty | Applies to | Deadline the rules check |
|---|---|---|
| Record a transaction | Any holder who buys / acquires / disposes / receives | Close of business, same day 48 h for game bird farmer |
| Record a loss | Any holder aware of a loss | Close of business, 2 days later |
| Notify police | Losses that are thefts | Obligated (no computed deadline) |
| Record display opened / closed | Displayer | Within 2 days of opening / closing |
| Record demonstration | Demonstrator | Obligated (date & venue required) |
When the holder flags a change — to a name, address or telephone number, for the holder, an employee or an authorised person — the rules record who the change is for and which detail changed, then make the relevant new detail Required: a name change asks for the new name, an address change for the full new address, a telephone change for the new number. The change must be reported within 10 business days (modelled as 12 calendar days); the rules compute the elapsed time and mark the “report within 10 business days” duty Obligated.
If the purpose is commercial and the holder employs a person with delegated authority, notifying the employee's details is Obligated. For each employee, name, date of birth, telephone, full address, capacity and start date are Required. The rules check the start date was reported within the 10-business-day window; while the employee has no end date, terminating them is Permitted; once an end date is entered, its reporting is checked against the same window and marked Obligated.
“10 business days” = 12 days
Throughout, the “10 business day” deadline is modelled as a flat 12 calendar days. It's a deliberate approximation, not a bug — but reviewers should confirm 12 is the intended figure, since 10 business days can span 14 calendar days across weekends and public holidays.
New in this revision. Being permitted to buy or sell wildlife is only half the story — regs 38–50 constrain where the transaction may happen and who the other party may be. Any buying, selling, acquiring, receiving or disposing counts as “transacting under the licence” and switches these conditions on.
A transaction location qualifies when the other party is not an exempt person and the deal happens at the other party's premises, a location approved by the relevant body, or an approved wildlife event. For basic, advanced and dingo licences, selling or disposing anywhere other than the holder's own premises also qualifies. Whenever the holder transacts, using an allowed location is Obligated — and applying to transact in an unapproved location is always Permitted (you can ask).
At an approved wildlife event, one more check runs: the event's own allow-list must include your licence type (basic, advanced, specimen, dealer, demonstrator, displayer and taxidermist are each checked). Holding a licence type the event permits is Obligated.
By default, transacting with the other party is Forbidden. It opens depending on your licence and the direction of the deal:
| Your licence | Deal | Permitted when the other party… |
|---|---|---|
| Basic / Advanced | Buy, acquire or receive | holds a licence authorising sale, is an exempt person, or the Secretary approved buying from them |
| Sell or dispose (not Schedule 7) | holds a licence authorising purchase, is exempt, or the Secretary approved the sale — otherwise Forbidden | |
| Sell or dispose (Schedule 7) | holds a basic or advanced licence, or the Secretary approved — otherwise Forbidden | |
| Specimen | Buy, acquire or receive | is authorised to sell, is exempt, or the Secretary approved |
| Dingo | Buy, acquire or receive | holds a dingo licence or a wildlife displayer licence |
Wildlife on a basic or advanced licence must not be sold or disposed of within six months of the licence being issued. The rules compute a “six months after issue” date (issue date + 6 months) and forbid any sale or disposal whose transaction date falls before it. (An earlier revision compared the issue date against itself — always true — so these sales were forbidden forever; the current encoding compares the transaction date, as intended.)
For basic, advanced and specimen licences, displaying wildlife is Forbidden — unless the display is at an approved wildlife event, where it becomes Permitted. Charging a fee for the display is Forbidden either way.
Holders who keep wildlife must keep it at the premises specified in the licence — an Obligated condition, Excused when the holder has an authorisation to keep it elsewhere or the wildlife is at an approved wildlife event. For basic and advanced licences the rules also tally the holder's total Schedule 7 head-count across all kept species (animals under four weeks old don't count).
For dingoes (reg 51) the keep-at-specified-premises rule is excused for recognised outings: exercising the dingo, education, a canine-association show, or a purpose approved by the Secretary. (This rule is now correctly limited to dingo licences — an earlier revision applied it to every holder.)
Dingoes get the regulation's most detailed welfare-and-safety conditions (regs 52–57), all encoded:
And the strongest condition of all, reg 50: transacting a dingo pup under seven weeks old without the Secretary's approval flips buy, sell, acquire, receive and dispose all back to Forbidden — overriding every permission the dingo licence granted.
A commercial holder who employs a person with delegated authority takes on three ongoing duties: ensuring all employees are aware of and competent in the licensed activities, providing a copy of the licence to each employee before they act under it, and ensuring the employee carries the copy while working. For controller licences there's a fourth: when an employee takes wildlife from the wild, the holder (if a natural person) — or the person responsible for licensed activities (if a company) — must be present.
Every commercial holder except a controller must display an appropriate sign: it must carry the two prescribed texts (“possessed under a licence…” and “wildlife must not be taken from the wild…”), sit at the main entrance in an obvious, readable position, use black block lettering at least 30 mm high on white, and be kept in good condition. All six attributes must hold for the computed “displays an appropriate sign” duty to be satisfied — and it is Obligated, ongoing.
Where a controller's wildlife is taken from the wild, receiving or destroying it is Forbidden until the holder has prior written approval — with approval, both become Permitted.
Coverage at a glance
13 test suites, 16 scenarios, 20 expectations. Fifteen scenarios assert an outcome; one exercises the rules but asserts nothing. This is new in this revision — the previous encoding shipped with no tests at all — but the coverage is thin and one-sided, as noted below.
The suites are organised one-per-regulation. Twelve of them (regs 8–19) are a single happy path per licence type: give the right licence type with a qualifying Schedule, purpose and source, then assert that one representative handling activity comes out Permitted. The thirteenth suite (reg 27, record books) is the most thorough — it checks the transaction-logging duty and its timing both ways. The table lists every scenario and what it pins down.
| Suite (reg) | Scenario sets up… | …and asserts |
|---|---|---|
| 8 · Basic | Non-commercial holder of a Schedule 7 species | buy → Permitted |
| 8 · Basic | A commercial purpose on a basic licence | nothing asserted |
| 9 · Advanced | Non-commercial, a Schedule 3B species | buy → Permitted |
| 10 · Specimen | Non-commercial, a mounted (non-living) specimen | sell → Permitted |
| 11 · Dingo | A dingo, non-commercial | keep → Permitted |
| 12 · Controller | A Schedule 6 animal, taken from the wild, a danger to property | destroy → Permitted |
| 13 · Dealer | Commercial, a living Schedule 2/7 animal | sell → Permitted |
| 14 · Demonstrator | Promote ecology & conservation, a Schedule 2 animal | keep → Permitted |
| 15 · Displayer | To display in commercial films | breed → Permitted |
| 16 · Game bird farmer | A captive-bred bird, for hunting | keep → Permitted |
| 17 · Processor | To provide products for sale, a Secretary-approved Schedule 5A animal, not alive | buy → Permitted |
| 18 · Farmer | For farming wildlife, a Schedule 7 animal | possess → Permitted |
| 19 · Taxidermist | Preserve / mount dead wildlife, a Schedule 2 animal | receive → Permitted |
| 27 · Record books | A buy, recorded the same day | logging duty Obligated; species & quantity Required |
| 27 · Record books | The same buy, recorded ~24 hours later | on-time duty Obligated, expected to be violated |
| 27 · Record books | A game bird farmer records within 48 hours | recorded-on-time = Yes |
What the tests do well. Every licence type has at least one scenario that opens its gate and confirms a permission, and the record-book suite genuinely tests timing in both directions — a same-day record (on time), a 24-hour-late record (obligation violated), and the game bird farmer's longer 48-hour window (on time). That trio is exactly the shape the rest of the ruleset needs.
Where the coverage is thin. With 124 rule groups and 41 of them carrying logic, sixteen scenarios leave most of the behaviour unpinned:
Points a reviewer or the rule author may want to check; these describe the encoding as published and are not legal advice. Several issues flagged against the previous revision are now fixed: the six-month sale hold (reg 41) now compares the transaction date rather than the issue date against itself, so it no longer forbids these sales forever; the dingo keeping rule (reg 51) is now limited to dingo licences; the controller's Schedule-6 branch (reg 60) is now filled in rather than empty; import/export (reg 116) is now unlocked for an import/export permit within its validity window; and the duplicate default-block Forbidden sets have been removed. The observations below describe what still stands. Note: the published version string did not change across these edits, so “version 1.0.0” alone does not identify which behaviour is live — compare the rules directly.
1 · One address-change branch mixes two different flags
In reg 36, the three change-of-detail branches for the holder and the authorised person each test a single flag consistently (its existence and its value). The employee address branch is the odd one out: it tests that the name-change flag exists but that the address-change flag is true — two different properties. Depending on which flag the form actually sets, an employee address change may register at the wrong time, or not at all.
2 · Notification duties are split across two data roots
The initialisation block obligates some notify-of-change duties on licence.activities and others on application.desiredActivities (for example, “notify of holder name change” sits on the application root while “notify of holder address change” sits on the licence root). Reg 33 obligates the police-theft duty on both roots. Whether a duty surfaces to the user therefore depends on which root the form writes — worth reconciling so every duty lands on one consistent path.
3 · A couple of activities are forbidden and never unlocked
Conduct a wildlife display is set Forbidden in the default block and never turned Permitted anywhere. Transact under licence has its value computed by reg 38 and used as a gate, but its Forbidden modality from the default block is never lifted — a vestige, since the property is used as a computed flag rather than a permission.
4 · Small copy-paste and duplicated-branch artefacts
Reg 45 (specimen counterparties) contains two nearly identical branches that permit transacting with the other party twice. Reg 51's excusal list tests “is for exercising” twice. Reg 40's Schedule-7 check reads the wildlife from the application in one branch and from the transaction in the next. Reg 34 states the display-record requirements twice (once per-display, once against the list as a whole). None changes an outcome today, but each is a trap for future editors.
5 · The import/export gate keys off a licence-type name the rest of the model doesn't use
Reg 116 unlocks import/export only when the licence type equals the exact string “Import/Export licence”. But the application's list of licence types names “Wildlife import licence” and “Wildlife export licence” as two separate categories. Unless a licence actually carries the “Import/Export licence” type string, reg 116 never fires — the two enumerations should be reconciled.
6 · Roughly two-thirds of the regulation is still a stub
41 of the 124 rule groups contain logic — regs 8–19 (permissions), 27–37 (records & notifications), 38–60 (the licence conditions) and 116 (import/export). The remaining 83 — “Return forms”, a scattering of condition regs (44, 48, 61–64…) and almost everything from reg 61 to reg 142 — are headings with no rules inside: codes of practice, housing and transport standards, the section 28A authorisation, and all the exemptions.
7 · Minor: an unused computed value
The computed value isProtectedSpecies is declared in the data model but no rule in this ruleset ever sets it.