📋 Rules explained · Conservation Regulator

Rules-as-code · Plain-English guide

Forests (Licences and Permits) Regulations 2019

How the digitised rules work out which licences and permits an activity in a Victorian State forest needs, and what the application must contain. Written for a non-technical reader.

Conservation Regulator 18 data types · 8 rule groups Version v2.0.0 Source: staging
01

The big picture

This ruleset asks one question: “which licences or permits does this application need?” The applicant describes what they intend to do in a State forest, and for each intended activity the rules switch on a matching requirement.

The core pattern

Intend an activity → a permit is required

Each regulated activity has a trigger. If the applicant's answers match it, the rules mark the matching Permit required.

One extra idea · lists

“For each” — repeating checks

Where an applicant lists several extra activities, the rules apply the same checks to each item in the list.

One extra idea · must-do

Obligated

Beyond permitted/forbidden, a rule can mark something Obligated — a step the applicant must complete (here, stating a purpose once any permit is triggered).

02

What the system asks about

You provide a fact · Rules work out a conclusion.

👤 Who is applying

An individual or a business, with an address and contact details.

Applicant typeYou provideIndividual · Business
Individual / Business detailsname · ABN/ACN · office address · contact
Applicant addressunit · street · suburb · state · postcode

🌲 What you intend to do

Yes/no intentions that drive every permit decision, plus supporting detail (area flags, equipment, cattle, written authorities).

Leave a gate open / damage a gate or fenceYou provide
Fell a survey-marked tree / deface a survey markYou provide
Enter an area (experimental · nursery · plantation · fenced · prohibited)You provide
Interfere with equipment (for experimentation? · used in research?)You provide
Sell goods or services · Enter forest with cattle · Cut/dig/take away produceYou provide
Additional activitiesYou providea list of written authorities

🧾 What the rules work out

Each switched on when its trigger is met.

Gate permit · Tree-felling licence · Restricted-area permit · Research permit · Permit to sell · Cattle-entry permit · Take-away permit requiredRules work out
Purpose specified (obligated)Rules work out
03

Which permit do you need?

Seven independent checks each look at what the applicant intends and, if it matches, switch on the matching requirement. They don't interact — an application can trigger any number.

If the applicant intends to……when this is trueThen this is
Leave gates open or damage a gateEither is “yes”Gate permit required
Fell a survey-marked tree / deface a survey markEither is “yes”Tree-felling licence required
Enter a restricted areaArea is experimental, nursery, plantation or fenced — and known to be prohibitedRestricted-area permit required
Interfere with research equipmentEquipment is for experimentation and used in researchResearch permit required
Sell goods or services“yes”Permit to sell required
Enter reserved forest with cattle“yes”Cattle-entry permit required
Cut, dig or take away forest produce“yes”Take-away permit required

Two triggers are compound — more than one condition must line up:

Restricted-area permit

Research-interference permit

04

Specifying a purpose

One final rule ties the checks together. If the application has triggered any licence or permit, stating a purpose becomes Obligated — the applicant must do it.

05

Required details & extra activities

Mandatory applicant details: title, given name and family name, plus the address's street number, street name, suburb, state and postcode are Required; the unit number is Optional.

Additional activities are handled with a “for each” check: for every extra activity the applicant lists, the permitted act and the person or class it applies to are required, and an additional-activity request is recorded (which in turn obliges a purpose).

06

Worked examples

🐄 A · A grazier bringing cattle in

Given Enter reserved forest with cattle Yes
Given Leave a gate open Yes
Given Everything else No
1 Cattle entry “yes” → Cattle-entry permit required
2 Gate open “yes” → Gate permit required
3 At least one permit required → specifying a purpose becomes obligated
📋 Two permits required, and the applicant must state a purpose.

🔬 B · A researcher near experimental equipment

Given Equipment for experimentation Yes
Given Used in research No
Given Everything else No
1 Research permit needs both halves true — only one is → not triggered
2 No permit required → specifying a purpose is not obligated
No licence or permit required from these answers.
07

Test cases

Coverage at a glance

9 test suite(s), 22 scenario(s), 19 expectation(s) in total. 19 scenario(s) assert an outcome; 3 assert nothing (inputs only).

Scenarios that assert nothing exercise the rules but cannot pass or fail — they are a coverage gap worth noting.

Coverage here is genuinely assertive: 19 of the 22 scenarios check an outcome, and the suites are organised one-per-permit. Most flag checks carry both a positive case (trigger present → permit required) and a negative one (trigger absent → not required), which is exactly the shape you want. The two compound triggers are tested on both sides — the restricted-area suite pairs a “known experimental area” (required) with an “unknown experimental area” (not required), and the research suite separates “for experimentation” from “used in research”.

The gaps worth closing: (1) the purpose-obligation rule is untested — no scenario checks that isPurposeSpecified becomes Obligated once any permit fires; (2) the grazing-licence flag is never asserted, which is consistent with no rule ever setting it (see Observations); (3) the “for each” additional-activities path has a single scenario that asserts nothing, so the per-item Written-Authority requirements and isAdditionalActivityRequested go unverified; (4) the applicant name/address requirements are unchecked — both “8 Applications” scenarios assert nothing; and (5) no scenario triggers several permits at once, so the independence of the checks is untested (low risk, but cheap to add). The restricted-area suite also omits the nursery and fenced branches, and the “prohibited, but not a special-area type” combination.

Gate permits

3 scenario(s) · rules 8kXptvWvNNfIhYHRN2QlAGEH→8kXptvWvNNfIhYHRN2QlAGEH
Gate permits

Given these inputs

@id:F6lsPSSQB3C68tf4g4LN4YqB
@type:Regsoft
@name:debug-hang-repro
application.damageGate:False
application.leaveGatesOpen:False

Then expect

  • value of Regsoft.application.isGatePermitRequiredTrue
Selecting openning gates requires gate permit

Given these inputs

@id:F6lsPSSQB3C68tf4g4LN4YqB
@type:Regsoft
@name:debug-hang-repro
application.damageGate:False
application.leaveGatesOpen:True

Then expect

  • value of Regsoft.application.isGatePermitRequired = True
Damaging gates requires permission

Given these inputs

@id:F6lsPSSQB3C68tf4g4LN4YqB
@type:Regsoft
@name:debug-hang-repro
application.damageGate:True
application.leaveGatesOpen:False

Then expect

  • value of Regsoft.application.isGatePermitRequired = True

Tree felling

3 scenario(s) · rules lvtysHVOqKJpUzaKSObzEDxa→lvtysHVOqKJpUzaKSObzEDxa
Not asking to feel does not receive a licence

Given these inputs

@id:k8ssAjfvJqd1bhQq8NTYcNcI
@type:Regsoft
@name:Not asking to feel does not receive a licence
application.defaceInscribedSurveyMark:False
application.fellTreeBearingInscribedSurveyMark:False

Then expect

  • value of Regsoft.application.isTreeFellingLicenceRequiredTrue
Defacing a tree with a research marking

Given these inputs

@id:k8ssAjfvJqd1bhQq8NTYcNcI
@type:Regsoft
@name:Not asking to feel does not receive a licence
application.defaceInscribedSurveyMark:True
application.fellTreeBearingInscribedSurveyMark:False

Then expect

  • value of Regsoft.application.isTreeFellingLicenceRequired = True
Felling a research tree requires a permit

Given these inputs

@id:k8ssAjfvJqd1bhQq8NTYcNcI
@type:Regsoft
@name:Not asking to feel does not receive a licence
application.defaceInscribedSurveyMark:False
application.fellTreeBearingInscribedSurveyMark:True

Then expect

  • value of Regsoft.application.isTreeFellingLicenceRequired = True

(4) Entering a restricted area

4 scenario(s) · rules bYB1LAyrXabQYk5ObanNu5tB→bYB1LAyrXabQYk5ObanNu5tB
Not entering restricted area = no permit required

Given these inputs

@id:qny2geqQe4pNOp7YeGvvl5Wl
@type:Regsoft
@name:Not entering restricted area = no permit required
application.enterArea.areaIsFenced:False
application.enterArea.isExperimentalArea:False
application.enterArea.isPlantation:False
application.enterArea.isTreeNursery:False
application.enterArea.knownToBeProhibited:False

Then expect

  • value of Regsoft.application.isRestrictedAreaPermitRequiredTrue
Entering a known experimental area

Given these inputs

@id:qny2geqQe4pNOp7YeGvvl5Wl
@type:Regsoft
@name:Not entering restricted area = no permit required
application.enterArea.areaIsFenced:False
application.enterArea.isExperimentalArea:True
application.enterArea.isPlantation:False
application.enterArea.isTreeNursery:False
application.enterArea.knownToBeProhibited:True

Then expect

  • value of Regsoft.application.isRestrictedAreaPermitRequired = True
Entering a known tree plantation area

Given these inputs

@id:qny2geqQe4pNOp7YeGvvl5Wl
@type:Regsoft
@name:Not entering restricted area = no permit required
application.enterArea.areaIsFenced:False
application.enterArea.isExperimentalArea:False
application.enterArea.isPlantation:True
application.enterArea.isTreeNursery:False
application.enterArea.knownToBeProhibited:True

Then expect

  • value of Regsoft.application.isRestrictedAreaPermitRequired = True
Entering an UNknown experiment area

Given these inputs

@id:qny2geqQe4pNOp7YeGvvl5Wl
@type:Regsoft
@name:Not entering restricted area = no permit required
application.enterArea.areaIsFenced:False
application.enterArea.isExperimentalArea:True
application.enterArea.isPlantation:False
application.enterArea.isTreeNursery:False
application.enterArea.knownToBeProhibited:False

Then expect

  • value of Regsoft.application.isRestrictedAreaPermitRequiredTrue

(5) Interfere with research

3 scenario(s) · rules 1wwWVP8L7wl9rw6tIvVCuWZK→1wwWVP8L7wl9rw6tIvVCuWZK
Not interfering does not require a permit

Given these inputs

@id:H4cj2ZRXvgOiPaf9nuhbg8m8
@type:Regsoft
@name:Not interfering does not require a permit
application.equipmentToInterfereWith.isForExperimentation:False
application.equipmentToInterfereWith.isUsedInConnectionWithResearchActivities:False

Then expect

  • value of Regsoft.application.isPermitToInterfereWithResearchActivityRequiredTrue
Interfering with a research project requires a permit

Given these inputs

@id:H4cj2ZRXvgOiPaf9nuhbg8m8
@type:Regsoft
@name:Not interfering does not require a permit
application.equipmentToInterfereWith.isForExperimentation:True
application.equipmentToInterfereWith.isUsedInConnectionWithResearchActivities:True

Then expect

  • value of Regsoft.application.isPermitToInterfereWithResearchActivityRequired = True
Interferring with non-research experiments does not require a permit

Given these inputs

@id:H4cj2ZRXvgOiPaf9nuhbg8m8
@type:Regsoft
@name:Not interfering does not require a permit
application.equipmentToInterfereWith.isForExperimentation:True
application.equipmentToInterfereWith.isUsedInConnectionWithResearchActivities:False

Then expect

  • value of Regsoft.application.isPermitToInterfereWithResearchActivityRequiredTrue

(6) sell goods

2 scenario(s) · rules M3fUV81coAmQA5ZNx30fkKih→M3fUV81coAmQA5ZNx30fkKih
Not selling goods does not require a permit

Given these inputs

@id:AT4rIdcnyHt0o8adZsP3zKUZ
@type:Regsoft
@name:Not selling goods does not require a permit
application.sellGoodsOrServices:False

Then expect

  • value of Regsoft.application.isPermitToSellRequiredTrue
Selling goods requires a permit

Given these inputs

@id:s0YjBa6nEECpMj9sTVznK6MW
@type:Regsoft
@name:Selling goods requires a permit
application.sellGoodsOrServices:True

Then expect

  • value of Regsoft.application.isPermitToSellRequired = True

7 Entry of cattle into reserved forest

2 scenario(s) · rules y1renWT4nWhk50zsM86NYxCF→y1renWT4nWhk50zsM86NYxCF
Not grazing does not require a licence

Given these inputs

@id:cBh7YLaZjGoUChfZJeYjWNTd
@type:Regsoft
@name:Not grazing does not require a licence
application.enterForestWithCattle:False

Then expect

  • value of Regsoft.application.isPermitToEnterForestWithCattleRequiredTrue
Entering with cattle requires a licence

Given these inputs

@id:77aePcGrPkdDar3OxuSpyxqk
@type:Regsoft
@name:Entering with cattle requires a licence
application.enterForestWithCattle:True

Then expect

  • value of Regsoft.application.isPermitToEnterForestWithCattleRequired = True

8 Applications for licences and permits

2 scenario(s) · rules 7OdsLZvVrdtcGUzajmHt2lti→7OdsLZvVrdtcGUzajmHt2lti
Information not required if not applying for licence

Given these inputs

@id:IGdismlXnANaGE5uv5A89nCa
@type:Regsoft
@name:Information not required if not applying for licence
application.isAdditionalActivityRequested:False
application.isGatePermitRequired:False
application.isGrazingLicenceRequired:False
application.isPermitToEnterForestWithCattleRequired:False
application.isPermitToInterfereWithResearchActivityRequired:False
application.isPermitToSellRequired:False
application.isRestrictedAreaPermitRequired:False
application.isTreeFellingLicenceRequired:False

Then expect

Nothing asserted — this scenario has no expectations.

Data required for licence

Given these inputs

@id:S3GGBDe83rRcLZqHMhahF63I
@type:Regsoft
@name:Data required for licence
application.isAdditionalActivityRequested:False
application.isGatePermitRequired:True
application.isGrazingLicenceRequired:False
application.isPermitToEnterForestWithCattleRequired:False
application.isPermitToInterfereWithResearchActivityRequired:False
application.isPermitToSellRequired:False
application.isRestrictedAreaPermitRequired:False
application.isTreeFellingLicenceRequired:False

Then expect

Nothing asserted — this scenario has no expectations.

10 Conditions of licences and permits to cut, dig or take away forest produce

2 scenario(s) · rules x0zrppFf1z8BuC576e12f9XI→x0zrppFf1z8BuC576e12f9XI
Not cutting does not require a licence

Given these inputs

@id:iu7N0WLfzF5C6JDBOSZgPQm1
@type:Regsoft
@name:Not cutting does not require a licence
application.cutDigOrTakeAwayForestProduce:False

Then expect

  • value of Regsoft.application.isPermitToTakeAwayForestProduceRequiredTrue
Removing forest produce needs a licence

Given these inputs

@id:Jy01VlXXpN461UhzTj6Z5eMU
@type:Regsoft
@name:Removing forest produce needs a licence
application.cutDigOrTakeAwayForestProduce:True

Then expect

  • value of Regsoft.application.isPermitToTakeAwayForestProduceRequired = True

(7) Additional activities

1 scenario(s) · rules 4m502nfDzQUWqPmABcqtgoFo→4m502nfDzQUWqPmABcqtgoFo
No additional activities does not require additional permissions

Given these inputs

@id:gPIKTADD8pIz4WkpkGtF2yXx
@type:Regsoft
@name:No additional activities does not require additional permissions

Then expect

Nothing asserted — this scenario has no expectations.

08

Observations

1 · A grazing licence that's never decided

The data model defines a “grazing licence required” conclusion, and the purpose test checks for it — but no rule ever sets it. The gate section is even labelled “to decide if a grazier licence is required”, yet it switches on the gate permit. The grazing-licence path looks unfinished.

2 · Duplicated requirement rules

The applicant's name is made required in two places, and the street number both inside the address group and again as a stray standalone rule. Harmless but redundant.

3 · An empty section

“9 Conditions of all licences and permits” contains no rules yet — a placeholder for logic not added.

4 · “Worked-out” flags labelled as user input

Several “is a permit required” flags are calculated by the rules but tagged in the data model as things the applicant enters — it works, but could mislead a reader or the question wizard.

Glossary

Permit / licence required
A worked-out conclusion that the application needs a particular authorisation before the activity may proceed.
Obligated
A status meaning the applicant must do something — here, state a purpose once a permit is required.
“For each” (list check)
When an applicant lists several items, the rules apply the same checks to every item.