casa-reoc-0.1.0.0: examples/src/ReOC/Example/BanksiaPoint.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -Wall #-}
{- | A one-person aerial photography business on Sydney's northern beaches.
Its sole director holds every key position, is its only remote pilot and
conducts only solo operations, with two of one type of small multirotor. Its
application form is signed with a written signature, read when the package
is compiled.
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.BanksiaPoint (
banksiaPointInput,
banksiaPoint,
) where
import Control.Lens ((&), (.~), (?~))
import Data.List.NonEmpty (NonEmpty)
import qualified Data.Time.Calendar.Month as Month
import ReOC.Example.Aircraft (aircraft, djiMavic3Pro, equipment)
import ReOC.Example.Policies (examplePolicies)
import ReOC.Example.Risk
import ReOC.Fill (fillReOC)
import ReOC.Model
import ReOC.Render.Embed (embedFileBytes)
-- | The application of Banksia Point Aerial Media Pty Ltd, as it is filled in.
banksiaPointInput :: UnfilledReOC
banksiaPointInput =
mkUnfilledReOC
-- the company (questions 1 and 4 to 6)
& operator . company . companyName ?~ "Banksia Point Aerial Media"
& operator . company . abn ?~ "15 092 285 142"
& operator . company . arn ?~ "9990101"
& operator . company . registeredOffice . streetAddress .~ ["Suite 3", "41 Bungan Lane"]
& operator . company . registeredOffice . suburb ?~ "Mona Vale"
& operator . company . registeredOffice . stateOrTerritory ?~ NewSouthWales
& operator . company . registeredOffice . postcode ?~ "2103"
& operator . company . operationalHeadquarters ?~ AtRegisteredOffice
& operator . company . phoneNumber ?~ "02 5550 1182"
& operator . company . emailAddress ?~ "hello@banksiapointaerial.example"
& operator . company . businessName ?~ "Banksia Point Aerial"
-- the CEO, who holds every key position (questions 7 to 12)
& operator . keyPersonnel . chiefExecutive . nominee . person . fullName ?~ "Mei-Ling Hartley"
& operator . keyPersonnel . chiefExecutive . nominee . person . arn ?~ "9990102"
& operator . keyPersonnel . chiefExecutive . nominee . person . phoneNumber ?~ "0491 570 156"
& operator . keyPersonnel . chiefExecutive . nominee . person . emailAddress ?~ "meiling@banksiapointaerial.example"
& operator . keyPersonnel . chiefExecutive . nominee . otherQualifications .~ ["a Diploma of Screen and Media"]
& operator . keyPersonnel . chiefExecutive . nominee . aviationExperience ?~ "four years of excluded-category RPA operations for real estate and tourism clients"
& operator . keyPersonnel . chiefExecutive . directorStatus ?~ SoleDirector
& operator . keyPersonnel . chiefExecutive . managementExperience
?~ "Sole director of Banksia Point Aerial Media Pty Ltd since 2022. Eight years running a photography and video business, including client contracts, insurance and work health and safety. Also nominated as Chief Remote Pilot and Maintenance Controller."
& operator . keyPersonnel . chiefPilot . crpNominee ?~ CRPIsCEO
& operator . keyPersonnel . chiefPilot . rePLOrigin ?~ RePLTraining (Just "Pelican Drone School")
& operator . keyPersonnel . chiefPilot . rpaHistory
?~ "Holds RePL, multirotor, up to 7 kg. About 350 hours on DJI Mavic 2 Pro, Mavic 3 Pro and Mini 3 Pro, in excluded-category operations for real estate, construction progress and tourism imagery in the Sydney region."
& operator . keyPersonnel . chiefPilot . otherReOCRoles ?~ NoOtherReOCRoles
& operator . keyPersonnel . chiefPilot . radio ?~ RadioOperatorCertificate
& operator . keyPersonnel . mcNominee ?~ MCIsCEO
-- the RPA (question 27)
& operator . fleet
.~ [ mkUnfilledOperatedType
& rpaType .~ djiMavic3Pro
& airframes
.~ [ aircraft "1581F5FHD23A0012" [equipment "DJI RC Pro remote controller" "5WKCL3R0A20118"]
, aircraft "1581F5FHD23B0347" [equipment "DJI RC remote controller" "5EBCL2K0C40295"]
]
]
-- the rest of the form (questions 2, 19 to 26 and 30 to 32)
& applicationForm . primaryContact ?~ ApplicantIsPrimaryContact
& applicationForm . personnelHistory . actionTaken ?~ NoHistory
& applicationForm . personnelHistory . transportLicenceRefused ?~ NoHistory
& applicationForm . personnelHistory . criminalConviction ?~ NoHistory
& applicationForm . personnelHistory . suspensionPending ?~ NoHistory
& applicationForm . regulatoryHistory ?~ NoRegulatoryAction
& applicationForm . proceduresLibrary ?~ False
& applicationForm . declaration ?~ DeclaredByCEO
& applicationForm . signature ?~ WrittenSignatureImage (Just $(embedFileBytes "examples/signatures/banksia-point.png"))
-- 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."
& operationsManual . services
.~ [ "real estate and property marketing imagery"
, "construction progress photography"
, "tourism and hospitality promotion imagery"
, "roof and gutter condition photography for building inspectors"
]
& operationsManual . policies .~ examplePolicies
& operationsManual . policies . batteryReserve ?~ 25
& operationsManual . riskRegister
.~ [peopleRisk m]
<> airspaceRisks m
<> [ commandLinkRisk m
, batteryRisk m
, weatherRisk m
, riskEntry
m
"Coastal operations – sea breeze, salt spray and gulls"
"Loss of control in gusts; corrosion of the RPA; bird strike"
"Manufacturer wind limits; onsite validation (2.3.1)"
(Occasional, Minor)
"Coastal flights planned for the morning, before the sea breeze; RPA wiped down after coastal flights; climb away from birds that approach the RPA"
(Remote, Minor)
ChiefRemotePilot
, riskEntry
m
"Solo operation – RP workload and distraction"
"Conflicting aircraft or person not detected"
"Self-briefing; Flight Record checklists (2.3.2)"
(Remote, Moderate)
"RPA held in hover while changing camera settings; land before talking with clients or the public"
(Improbable, Minor)
ChiefRemotePilot
, fitnessRisk ChiefExecutiveOfficer m
, recencyRisk m
, firmwareRisk m
]
& operationsManual . crew ?~ SoloOperationsOnly
& operationsManual . pilots ?~ CRPIsOnlyRemotePilot
where
m = Month.YearMonth 2026 9
-- | The application of Banksia Point Aerial Media Pty Ltd: valid, or every reason it is not.
banksiaPoint :: Either (NonEmpty ReOCError) ReOC
banksiaPoint =
fillReOC banksiaPointInput