casa-reoc-0.1.0.0: examples/src/ReOC/Example/Ironbark.hs
{-# LANGUAGE OverloadedStrings #-}
{-# OPTIONS_GHC -Wall #-}
{- | An infrastructure inspection company in Perth. Each key position is held
by a different person; the company engages other remote pilots and conducts
multi-crew operations, with three types of multirotor including a medium
RPA. Its manual has been revised once, after CASA's assessment. Its chief
remote pilot is chief remote pilot of another ReOC holder, and was given an
infringement notice before holding 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.Ironbark (
ironbarkInput,
ironbark,
) where
import Control.Lens ((&), (.~), (?~))
import Data.List.NonEmpty (NonEmpty)
import Data.Time.Calendar (fromGregorian)
import qualified Data.Time.Calendar.Month as Month
import ReOC.Example.Aircraft (aircraft, djiMatrice30T, djiMatrice350RTK, djiMavic3Thermal, equipment, operatedType)
import ReOC.Example.Policies (examplePolicies)
import ReOC.Example.Risk
import ReOC.Fill (fillReOC)
import ReOC.Model
-- | The application of Ironbark Asset Inspection Pty Ltd, as it is filled in.
ironbarkInput :: UnfilledReOC
ironbarkInput =
mkUnfilledReOC
-- the company, with its operational headquarters away from its registered office
& operator . company . companyName ?~ "Ironbark Asset Inspection"
& operator . company . abn ?~ "79 866 898 501"
& operator . company . arn ?~ "9990201"
& operator . company . registeredOffice . streetAddress .~ ["Level 4", "160 Jarrah Terrace"]
& operator . company . registeredOffice . suburb ?~ "East Perth"
& operator . company . registeredOffice . stateOrTerritory ?~ WesternAustralia
& operator . company . registeredOffice . postcode ?~ "6004"
& operator . company . operationalHeadquarters
?~ OperationalHeadquartersAddress
( mkUnfilledAddress
& streetAddress .~ ["Unit 7", "22 Kurrajong Road"]
& suburb ?~ "Welshpool"
& stateOrTerritory ?~ WesternAustralia
& postcode ?~ "6106"
)
& operator . company . phoneNumber ?~ "08 5550 4410"
& operator . company . emailAddress ?~ "operations@ironbarkinspection.example"
-- the CEO
& operator . keyPersonnel . chiefExecutive . nominee . person . fullName ?~ "Daniel Okonkwo"
& operator . keyPersonnel . chiefExecutive . nominee . person . arn ?~ "9990202"
& operator . keyPersonnel . chiefExecutive . nominee . person . phoneNumber ?~ "0491 571 266"
& operator . keyPersonnel . chiefExecutive . nominee . person . emailAddress ?~ "daniel.okonkwo@ironbarkinspection.example"
& operator . keyPersonnel . chiefExecutive . nominee . otherQualifications
.~ ["a Bachelor of Engineering (Electrical)", "a Certificate IV in Work Health and Safety"]
& operator . keyPersonnel . chiefExecutive . nominee . aviationExperience
?~ "six years managing contractors who used RPA for asset inspection on transmission networks"
& operator . keyPersonnel . chiefExecutive . directorStatus ?~ Director
& operator . keyPersonnel . chiefExecutive . managementExperience
?~ "Director and general manager of Ironbark Asset Inspection Pty Ltd. Fifteen years in electricity transmission asset management, the last six managing inspection contracts that used RPA operators. Responsible for budgets of over $5 million and teams of up to 25."
-- the chief remote pilot, another person, who is also CRP of another ReOC holder
& operator . keyPersonnel . chiefPilot . crpNominee
?~ CRPNominated
( mkUnfilledNominee
& person . fullName ?~ "Rhiannon Walsh"
& person . arn ?~ "9990203"
& person . phoneNumber ?~ "0491 571 491"
& person . emailAddress ?~ "rhiannon.walsh@ironbarkinspection.example"
& otherQualifications .~ ["a CASA aeronautical radio operator certificate"]
& aviationExperience
?~ "over 1,200 hours of RPA operations, including five years as a remote pilot and two years as chief remote pilot of another ReOC holder"
)
& operator . keyPersonnel . chiefPilot . rePLOrigin ?~ RePLTraining (Just "Swan Valley Remote Pilot Training")
& operator . keyPersonnel . chiefPilot . rpaHistory
?~ "Holds RePL, multirotor, up to 25 kg. Over 1,200 hours on DJI Matrice 300 RTK, Matrice 350 RTK, Matrice 30T, Mavic 3 Thermal and Phantom 4 RTK, in powerline, telecommunications tower, mine site and solar farm inspection across WA. Chief remote pilot of Quenda Mapping Pty Ltd since 2024."
& operator . keyPersonnel . chiefPilot . otherReOCRoles
?~ OtherReOCRolesHeld
(Just "Chief remote pilot of Quenda Mapping Pty Ltd (ReOC holder, ARN 9990290), about 4 hours a week. Quenda Mapping has agreed in writing that Ironbark operations take priority. I will resign that position within 6 months of the issue of this ReOC.")
& operator . keyPersonnel . chiefPilot . radio ?~ RadioOperatorCertificate
-- the maintenance controller, a third person
& operator . keyPersonnel . mcNominee
?~ MCNominated
( mkUnfilledNominee
& person . fullName ?~ "Tomasz Nowak"
& person . arn ?~ "9990204"
& person . phoneNumber ?~ "0491 571 804"
& person . emailAddress ?~ "tomasz.nowak@ironbarkinspection.example"
& otherQualifications .~ ["a Certificate IV in Aeroskills (Avionics)", "a RePL, multirotor, up to 25 kg"]
& aviationExperience
?~ "ten years as an avionics technician on regional airline aircraft, and three years maintaining a fleet of medium multirotor RPA"
)
-- three types of RPA
& operator . fleet
.~ [ operatedType
djiMatrice350RTK
[ aircraft
"1ZNDH3P00C1042"
[equipment "Zenmuse H20T camera" "3D3BJ4H00A0567", equipment "DJI RC Plus remote controller" "6TBCK7F0F10233"]
, aircraft
"1ZNDH3P00C1187"
[equipment "Zenmuse H30T camera" "4F2DJ5K00B0091", equipment "DJI RC Plus remote controller" "6TBCK7F0F10498"]
]
, operatedType
djiMatrice30T
[ aircraft "1ZNBJ7B00D0315" [equipment "DJI RC Plus remote controller" "6TBCK7F0F10611"]
, aircraft "1ZNBJ7B00D0322" [equipment "DJI RC Plus remote controller" "6TBCK7F0F10652"]
]
, operatedType
djiMavic3Thermal
[ aircraft "1581F5BKD23C0072" [equipment "DJI RC Pro Enterprise remote controller" "5ZDCL1N0B30014"]
, aircraft "1581F5BKD23C0118" [equipment "DJI RC Pro Enterprise remote controller" "5ZDCL1N0B30066"]
, aircraft "1581F5BKD24A0005" [equipment "DJI RC Pro Enterprise remote controller" "5ZDCL1N0B30101"]
]
]
-- a primary contact other than the applicant, a regulatory action and other documents
& applicationForm . primaryContact
?~ PrimaryContactPerson
( mkUnfilledContactPerson
& fullName ?~ "Priya Raman"
& position ?~ "Operations coordinator"
& phoneNumber ?~ "08 5550 4412"
& emailAddress ?~ "priya.raman@ironbarkinspection.example"
)
& applicationForm . personnelHistory . actionTaken ?~ NoHistory
& applicationForm . personnelHistory . transportLicenceRefused ?~ NoHistory
& applicationForm . personnelHistory . criminalConviction ?~ NoHistory
& applicationForm . personnelHistory . suspensionPending ?~ NoHistory
& applicationForm . regulatoryHistory
?~ RegulatoryActionTaken
( mkUnfilledRegulatoryAction
& reocSuspendedOrCancelled ?~ False
& typeOfAction ?~ "Infringement notice"
& authorisationAction ?~ "None; the infringement notice was paid"
& actionDate ?~ fromGregorian 2019 5 14
& actionDetails
?~ "Rhiannon Walsh (nominated CRP): infringement notice for flying an excluded RPA within 30 m of a person, in Bunbury, before she held a RePL. Paid."
)
& applicationForm . proceduresLibrary ?~ True
& applicationForm . otherDocuments
.~ [ "Powerline and tower inspection procedures"
, "Site risk assessment template"
, "Remote pilot induction and training records template"
]
& applicationForm . declaration ?~ DeclaredByCEO
-- the operations manual, revised once
& 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."
& operationsManual . revisions
.~ [ mkUnfilledRevision
& versionIncrement ?~ MinorRevision
& monthsAfter ?~ 3
& effective ?~ "On issue of the ReOC"
& parts ?~ "1.2, 2.3, Appendix C"
& details
?~ "Changes requested in CASA's assessment: duties of the MC clarified, multi-crew briefing added, emergency actions of the DJI M350 RTK expanded."
]
& operationsManual . services
.~ [ "visual and thermal inspection of powerlines, substations and telecommunications towers"
, "solar farm thermal surveys"
, "inspection of mine site infrastructure, conveyors and stockpiles"
, "roof and facade condition surveys of commercial buildings"
]
& operationsManual . policies .~ examplePolicies
& operationsManual . policies . recencyDays ?~ 60
& operationsManual . policies . refresherMonths ?~ 6
& operationsManual . policies . alcoholHours ?~ 10
& operationsManual . policies . dutyHours ?~ 12
& operationsManual . policies . inspectionHours ?~ 30
& operationsManual . policies . backupFrequency ?~ Daily
& operationsManual . policies . checkingMonths ?~ 6
& operationsManual . riskRegister
.~ [peopleRisk m]
<> airspaceRisks m
<> [ commandLinkRisk m
, batteryRisk m
, weatherRisk m
, riskEntry
m
"Electromagnetic interference near energised powerlines and substations"
"Compass error, loss of command link or loss of position hold close to conductors"
"Compass calibration away from structures; GNSS status checked before take-off (3.1)"
(Occasional, Hazardous)
"Minimum distances from conductors in the network owner's procedures; RP proficiency in ATTI mode; observer calls distance to conductors in multi-crew operations"
(Improbable, Hazardous)
ChiefRemotePilot
, riskEntry
m
"Medium RPA (DJI M350 RTK) – higher energy on impact"
"Serious injury or property damage if the RPA falls"
"RePL for RPA up to 25 kg; 30 m from people; manufacturer limits (2.4.6)"
(Improbable, Hazardous)
"Flight path planned to keep the RPA clear of roads and workers; ground crew keep workers clear of the area below the RPA"
(ExtremelyImprobable, Hazardous)
ChiefRemotePilot
, riskEntry
m
"Multi-crew communication"
"Observer warning not heard or not understood; RP distracted"
"Crew briefing; standard calls (2.3.2)"
(Remote, Moderate)
"Two-way radios with headsets on every site; read-back of hazard calls; one person speaks to the client"
(Improbable, Minor)
ChiefRemotePilot
, riskEntry
m
"Heat and remote sites"
"Heat illness of the crew; battery overheating; delayed emergency response"
"Fitness for duty requirements (1.7); manufacturer temperature limits"
(Occasional, Moderate)
"Water, shade and first aid kit on every site; work stopped above 40 °C; batteries kept shaded; site emergency plan and satellite messenger at remote sites"
(Remote, Minor)
ChiefExecutiveOfficer
, riskEntry
m
"Remote pilots new to the company"
"Company procedures not followed"
"Induction and proficiency check (1.6)"
(Remote, Moderate)
"New RPs fly with the CRP or an experienced RP for their first three operations"
(Improbable, Minor)
ChiefRemotePilot
, fitnessRisk ChiefExecutiveOfficer m
, recencyRisk m
, firmwareRisk m
]
& operationsManual . crew ?~ SoloAndMultiCrewOperations
& operationsManual . pilots ?~ OtherRemotePilots
where
m = Month.YearMonth 2026 4
-- | The application of Ironbark Asset Inspection Pty Ltd: valid, or every reason it is not.
ironbark :: Either (NonEmpty ReOCError) ReOC
ironbark =
fillReOC ironbarkInput