Introduction to Civillo permits
Civillo permits are designed to simplify and optimize the management of paper-based permit systems. It offers a robust templating system that allows organizations to create and customize permits according to their specific requirements. Some of the key features are:
- Templating system The Civillo permits templating system enables users to design and modify permit templates with ease. It offers an intuitive interface, allowing administrators to define and incorporate the necessary fields and information required for each permit. Users can easily tailor permits to various permit types, ensuring consistency and compliance throughout the process.
- Streamlined permit lifecycle When a new permit is requested, all parties responsible for the safe execution of the permit are notified and prompted to signoff on their relevant sections. Civillo users can easily view pending permits and their active status through the map view. Once approved permits become active and expire automatically based on their pre-defined expiry lengths. If necessary, users can easily and quickly renew expired permits. By automating large parts of the permits process organizations can streamline workflows, reduce administrative burdens, and ensure compliance.
- Active permit document
Once a permit is approved by all responsible parties the permit document is viewable and signable by anyone, including non-Civillo users. This allows the active permit to be easily distributed to anyone who needs it in order to be compliant on a work site.
A flowchart of the permit lifecycle, detailed further in the “Lifecycle states” and “How to” subsections, is shown in Figure 3. It builds on two reference diagrams: Figure 1 shows what can happen to a permit at any stage, and Figure 2 shows the signoff loop that the lifecycle repeats. To read them:
- Rectangles are tasks carried out by a user, written as User: Task.
- Colored words are permit states. Larger words are final states.
- Hexagons are conditions Civillo checks automatically, such as a date passing.
- In Figure 3, groups with a blue border repeat, groups with a red border only apply when a condition is met, and groups with a purple border are optional.
flowchart LR
accTitle: Permit events at any stage
accDescr: A requestor can cancel a permit. Civillo moves it to renewal required when its valid date passes, to expired when its expiry date passes, and to lapsed after 60 days with no activity.
cancel["`**Requestor:** Cancel permit`"] --> cancelled(["`**CANCELLED**`"])
validDate{{Valid date passed}} --> renewalRequiredAny(["`**RENEWAL REQUIRED**`"])
expiryDate{{Expiry date passed}} --> expired(["`**EXPIRED**`"])
inactive{{No activity for 60 days}} --> lapsed(["`**LAPSED**`"])
classDef state fill:transparent,stroke-width:0px
classDef final font-size:1.4em
class cancelled,renewalRequiredAny,expired,lapsed state
class cancelled final
class cancelled,renewalRequiredAny,expired,lapsed error
flowchart TD accTitle: Signoff loop accDescr: User 1 responds to the C/P. User 2 either signs off, which ends the loop, or requests changes, which puts the permit in changes requested until user 1 makes at least one change and updates it, after which user 1 responds again. loopStart((Start)) --> respond["`**User 1:** Respond to the C/P`"] respond --> signOff["`**User 2:** Sign off on the C/P`"] signOff --> loopEnd((End)) respond --> requestChanges["`**User 2:** Request changes to the C/P`"] requestChanges --> changesRequested(["`**CHANGES REQUESTED**`"]) changesRequested --> update["`**User 1:** Make at least one change to the C/P then update`"] update --> respond classDef state fill:transparent,stroke-width:0px class changesRequested state class changesRequested error
flowchart TD
accTitle: Permit lifecycle
accDescr: From a requestor requesting a permit, through category and permit signoff loops, approval, activation, close off and completion, with optional renewal, progression and revocation.
start(["`**START**`"]) --> request["`**Requestor:** Request the permit`"]
request --> pcs(["`**PENDING CATEGORY SIGNOFF**`"])
subgraph eachCategory [For each regular category attached to the permit]
categoryLoop[["`**Signoff loop** with **Responder** as **User 1** and **Category signoff user** as **User 2**`"]]
end
pcs --> eachCategory
eachCategory --> ps(["`**PENDING SIGNOFF**`"])
subgraph eachSignoffUser [For each permit signoff user]
permitLoop[["`**Signoff loop** with **Requestor** as **User 1** and **Permit signoff user** as **User 2**`"]]
end
ps --> eachSignoffUser
eachSignoffUser --> approved(["`**APPROVED**`"])
subgraph holders [If possible permit holders are specified]
relinquish["`**Permit holder:** Relinquish hold on the permit`"] --> hold["`**Possible permit holder:** Hold the permit`"]
end
subgraph openCategories [Optional: if open categories are specified]
applyOpen["`**Requestor:** Apply open categories to permit`"]
end
approved --> holders
holders --> openCategories
openCategories --> validFrom{{Once valid from date is passed}}
validFrom --> active(["`**ACTIVE**`"])
active --> close["`**Requestor or permit signoff user:** Close off permit`"]
close --> pco(["`**PENDING CLOSE OFF**`"])
subgraph closeOff [For each close-off category if any are specified]
designate["`**Requestor:** Designate category signoff user`"] --> closeOffLoop[["`**Signoff loop** with **Requestor** as **User 1** and **Category signoff user** as **User 2**`"]]
end
pco --> closeOff
closeOff --> completed(["`**COMPLETED**`"])
subgraph renewal [Optional: renew permit]
renew["`**Requestor:** Renew permit (given maximum renewals not yet exceeded)`"]
end
subgraph progression [Optional: if progression categories are specified]
progress["`**Requestor:** Apply progression category to permit`"]
end
subgraph revocation [Optional: revoke permit]
revoke["`**Permit signoff user:** Revoke permit`"]
end
%% a junction gathers the approved and active branches, like the shared line in the original deck
actionsJunction@{ shape: f-circ }
approved & active --> actionsJunction
actionsJunction --> renewal & progression & revocation
renewalRequired(["`**RENEWAL REQUIRED**`"]) --> renewal
renewal & progression --> pcs
revocation --> revoked(["`**REVOKED**`"])
classDef state fill:transparent,stroke-width:0px
classDef final font-size:1.4em
class start,pcs,ps,approved,active,pco,completed,renewalRequired,revoked state
class start,completed,revoked final
class start,completed primary
class pcs,ps,pco warning
class approved,active success
class renewalRequired,revoked error
class eachCategory,eachSignoffUser repeated
class holders,closeOff conditional
class openCategories,renewal,progression,revocation optional