casa-reoc-0.1.0.0: examples/src/ReOC/Example/WattleCreek.hs
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -Wall #-}
{- | A RePL training organisation near Geelong, which also conducts survey
operations. Its CEO is also its maintenance controller; its chief remote
pilot and chief RePL instructor are two other people. It applies for three
courses: an initial multirotor course, an upgrade to multirotor RPA over
7 kg, and an upgrade to aeroplanes, for which its chief RePL instructor does
not yet hold a RePL.
The application starts as 'mkUnfilledReOC', and each field is set with its
optic; 'fillReOC' then checks it. The company, its people, numbers and
addresses are made up.
-}
module ReOC.Example.WattleCreek (
wattleCreekInput,
wattleCreek,
) where
import Control.Lens ((&), (.~), (?~))
import Data.List.NonEmpty (NonEmpty)
import qualified Data.Time.Calendar.Month as Month
import ReOC.Example.Aircraft (agEagleEBeeX, aircraft, djiMatrice30T, djiMatrice350RTK, djiMavic3Classic, equipment, operatedType)
import ReOC.Example.Policies (examplePolicies)
import ReOC.Example.Risk
import ReOC.Fill (fillReOC)
import ReOC.Model
-- | The application of Wattle Creek Drone Academy Pty Ltd, as it is filled in.
wattleCreekInput :: UnfilledReOC
wattleCreekInput =
mkUnfilledReOC
-- the company
& operator . company . companyName ?~ "Wattle Creek Drone Academy"
& operator . company . abn ?~ "53 555 590 371"
& operator . company . arn ?~ "9990301"
& operator . company . registeredOffice . streetAddress .~ ["18 Saltmarsh Drive"]
& operator . company . registeredOffice . suburb ?~ "Moolap"
& operator . company . registeredOffice . stateOrTerritory ?~ Victoria
& operator . company . registeredOffice . postcode ?~ "3224"
& operator . company . operationalHeadquarters ?~ AtRegisteredOffice
& operator . company . phoneNumber ?~ "03 5550 7720"
& operator . company . emailAddress ?~ "enquiries@wattlecreekdrones.example"
& operator . company . businessName ?~ "Wattle Creek Drones"
-- the CEO, also the maintenance controller
& operator . keyPersonnel . chiefExecutive . nominee . person . fullName ?~ "Gemma Castellano"
& operator . keyPersonnel . chiefExecutive . nominee . person . arn ?~ "9990302"
& operator . keyPersonnel . chiefExecutive . nominee . person . phoneNumber ?~ "0491 572 549"
& operator . keyPersonnel . chiefExecutive . nominee . person . emailAddress ?~ "gemma@wattlecreekdrones.example"
& operator . keyPersonnel . chiefExecutive . nominee . otherQualifications
.~ ["a RePL, multirotor, up to 25 kg", "a Diploma of Leadership and Management"]
& operator . keyPersonnel . chiefExecutive . nominee . aviationExperience
?~ "seven years of RPA operations in survey and agriculture, and three years maintaining the RPA of a survey company"
& operator . keyPersonnel . chiefExecutive . directorStatus ?~ Director
& operator . keyPersonnel . chiefExecutive . managementExperience
?~ "Director of Wattle Creek Drone Academy Pty Ltd. Seven years in RPA survey operations, three as operations manager of a survey company with 12 staff. Also nominated as Maintenance Controller."
& operator . keyPersonnel . mcNominee ?~ MCIsCEO
-- the chief remote pilot
& operator . keyPersonnel . chiefPilot . crpNominee
?~ CRPNominated
( mkUnfilledNominee
& person . fullName ?~ "Hamish McAllister"
& person . arn ?~ "9990303"
& person . phoneNumber ?~ "0491 572 665"
& person . emailAddress ?~ "hamish@wattlecreekdrones.example"
& otherQualifications .~ ["a CASA aeronautical radio operator certificate"]
& aviationExperience ?~ "over 900 hours of RPA operations in survey and mapping, multirotor and aeroplane"
)
& operator . keyPersonnel . chiefPilot . rePLOrigin ?~ RePLTraining (Just "Bellarine Aviation Academy")
& operator . keyPersonnel . chiefPilot . rpaHistory
?~ "Holds RePL, multirotor up to 25 kg and aeroplane up to 7 kg. Over 900 hours on DJI Matrice 350 RTK, Matrice 30T, Phantom 4 RTK and AgEagle eBee X, in survey, mapping and inspection in Victoria."
& operator . keyPersonnel . chiefPilot . otherReOCRoles ?~ NoOtherReOCRoles
& operator . keyPersonnel . chiefPilot . radio ?~ RadioOperatorCertificate
-- the RPA for survey operations; the training RPA are given with the courses
& operator . fleet
.~ [operatedType djiMatrice30T [aircraft "1ZNBJ7B00E0148" [equipment "DJI RC Plus remote controller" "6TBCK7F0G20077"]]]
-- the rest of the form, with the question bank as another document
& applicationForm . primaryContact ?~ ApplicantIsPrimaryContact
& applicationForm . personnelHistory . actionTaken ?~ NoHistory
& applicationForm . personnelHistory . transportLicenceRefused ?~ NoHistory
& applicationForm . personnelHistory . criminalConviction ?~ NoHistory
& applicationForm . personnelHistory . suspensionPending ?~ NoHistory
& applicationForm . regulatoryHistory ?~ NoRegulatoryAction
& applicationForm . proceduresLibrary ?~ True
& applicationForm . otherDocuments .~ ["RePL theory exam question bank and answer key"]
& applicationForm . declaration ?~ DeclaredByCEO
-- the operations manual
& operationsManual . firstIssue . version . majorVersion ?~ 1
& operationsManual . firstIssue . version . minorVersion ?~ 0
& operationsManual . firstIssue . issueDate ?~ m
& operationsManual . firstIssue . effective ?~ "On issue of the ReOC"
& operationsManual . firstIssue . parts ?~ "All"
& operationsManual . firstIssue . details ?~ "Initial issue for the ReOC application, with RePL training."
& operationsManual . services
.~ [ "RePL training"
, "topographic and volumetric survey"
, "visual and thermal inspection of buildings and infrastructure"
]
& operationsManual . policies .~ examplePolicies
& operationsManual . riskRegister
.~ [peopleRisk m]
<> airspaceRisks m
<> [ commandLinkRisk m
, batteryRisk m
, weatherRisk m
, riskEntry
m
"Student error in flight training"
"Loss of control; collision with the instructor, other students or property"
"Instructor beside the student at all times; RePL training manual procedures"
(Occasional, Moderate)
"Instructor takes control before the RPA leaves the training area; students not flying stand behind the control point; training area clear of the public"
(Remote, Minor)
ChiefRemotePilot
, riskEntry
m
"Several RPA in the training area at once"
"Collision between training RPA"
"Training area divided into sectors; one RPA in each sector"
(Remote, Minor)
"Instructor briefs each sector's boundary and height band; at most two students flying for each instructor"
(Improbable, Minor)
ChiefRemotePilot
, riskEntry
m
"Hand launch and belly landing of the eBee X"
"Injury to the launcher from the propeller; damage on landing"
"Manufacturer launch procedure; landing area selection (App C)"
(Remote, Minor)
"Students launch only after a briefing and a dry run; landing area walked before each session"
(Improbable, Minor)
ChiefRemotePilot
, fitnessRisk ChiefExecutiveOfficer m
, recencyRisk m
, firmwareRisk m
]
& operationsManual . crew ?~ SoloAndMultiCrewOperations
& operationsManual . pilots ?~ OtherRemotePilots
-- RePL training
& maybeTrainingMaterial ?~ training
where
m = Month.YearMonth 2026 8
-- RePL training: a chief RePL instructor who is not otherwise key personnel, and three courses.
training :: UnfilledTrainingMaterial
training =
mkUnfilledTrainingMaterial
& criNominee
?~ CRINominated
( mkUnfilledNominee
& person . fullName ?~ "Aroha Tipene"
& person . arn ?~ "9990304"
& person . phoneNumber ?~ "0491 572 983"
& person . emailAddress ?~ "aroha@wattlecreekdrones.example"
& otherQualifications .~ ["a Certificate IV in Training and Assessment", "a RePL, multirotor, up to 25 kg"]
& aviationExperience ?~ "four years as a RePL instructor and over 600 hours of RPA operations in survey and inspection"
)
& rePLHolding
?~ RePLHoldingIntent
(Just "I hold a RePL for multirotor up to 25 kg. I will hold a RePL for aeroplanes up to 7 kg before the first aeroplane upgrade course.")
& teachingQualification ?~ TeachingQualificationHeld (Just "Certificate IV in Training and Assessment (TAE40122), 2023.")
& operationalExperience
?~ OperationalExperienceIntent
(Just "I have 20 hours of operational experience on multirotor. I will complete 20 hours of survey operations on the eBee X before the first aeroplane course.")
& criOtherReOCRoles ?~ NoOtherReOCRoles
& trainingCourses
.~ [ mkUnfilledTrainingCourse
& courseKind ?~ InitialCourse
& trainingRPA
.~ operatedType
djiMavic3Classic
[ aircraft "1581F4QWD23D0211" [equipment "DJI RC-N1 remote controller" "3NZCK5H0A10322"]
, aircraft "1581F4QWD23D0230" [equipment "DJI RC-N1 remote controller" "3NZCK5H0A10359"]
, aircraft "1581F4QWD23D0264" [equipment "DJI RC-N1 remote controller" "3NZCK5H0A10380"]
]
& complexities .~ [AutomatedAndManual]
, mkUnfilledTrainingCourse
& courseKind ?~ UpgradeSameCategory
& trainingRPA .~ operatedType djiMatrice350RTK [aircraft "1ZNDH3P00D1302" [equipment "DJI RC Plus remote controller" "6TBCK7F0G20101"]]
& complexities .~ [AutomatedAndManual]
, mkUnfilledTrainingCourse
& courseKind ?~ UpgradeDifferentCategory
& trainingRPA .~ operatedType agEagleEBeeX [aircraft "EBX-2-1045" [equipment "eBee ground modem" "GM2-30871"]]
& complexities .~ [AutomatedOnly]
]
& trainingArrangements . theoryVenues .~ ["the training room at 18 Saltmarsh Drive, Moolap VIC 3224"]
& trainingArrangements . practicalAreas
.~ ["a private training field on Wattle Creek Road, Leopold VIC 3224, used with the written permission of the landowner, clear of no-fly zones and populous areas"]
& trainingArrangements . maxStudentsPerCourse ?~ 6
& trainingArrangements . maxStudentsPerInstructor ?~ 2
& trainingArrangements . takeover ?~ SharedController
& trainingArrangements . theory ?~ BlendedTheory
& trainingArrangements . exam ?~ ComputerExamination
& trainingArrangements . examPassMark ?~ 80
& trainingArrangements . examiner ?~ IndependentExaminerWhereAvailable
& trainingArrangements . simulator ?~ "DJI Flight Simulator"
-- | The application of Wattle Creek Drone Academy Pty Ltd: valid, or every reason it is not.
wattleCreek :: Either (NonEmpty ReOCError) ReOC
wattleCreek =
fillReOC wattleCreekInput