A 🗺️ Tech Tasks can have 5 statuses:

<aside> 🗣️ Statuses 0 - Pending Workforce, 1 - Started, and 2 - On Hold are said to be Open, whereas 3 - Done and -1 - Dropped are said to be Closed.

A task is said to be Open when its Status is open and Closed when its Status is closed.

</aside>

🖊️ Internal Status

The Internal Status is a required input to be written in Status Intl.

⬆️ External Status

The External Status is computed by taking the minimum Status of its prerequisites following this order:

<aside> 🔝 Started < Pending Workforce < On Hold < Done < DroppedIn this situation “<” means “takes priority over

</aside>

⚖️ Rules that apply and calculation method

The Status of a task is computed from its Internal and External Status according to the following match:

<aside> 🤯 It’s basically the minimum of the External and Internal Status except in a few cases:

External Status $(E)$ Internal Status$(I)$ Status Output $f(E{;}\,I)$
1 - Started 1 - Started 1 - Started
1 - Started 0 - Pending Workforce 1 - Started
1 - Started 2 - On Hold 1 - Started
1 - Started 3 - Done 1 - Started
1 - Started -1 - Dropped -1 - Dropped ⚠
0 - Pending Workforce 1 - Started 1 - Started
0 - Pending Workforce 0 - Pending Workforce 0 - Pending Workforce
0 - Pending Workforce 2 - On Hold 0 - Pending Workforce
0 - Pending Workforce 3 - Done 0 - Pending Workforce
0 - Pending Workforce -1 - Dropped -1 - Dropped
2 - On Hold 1 - Started ⚠️ 2 - On Hold ⚠️
2 - On Hold 0 - Pending Workforce ⚠️ 2 - On Hold ⚠️
2 - On Hold 2 - On Hold 2 - On Hold
2 - On Hold 3 - Done 2 - On Hold
2 - On Hold -1 - Dropped -1 - Dropped
3 - Done 1 - Started 1 - Started
3 - Done 0 - Pending Workforce 0 - Pending Workforce
3 - Done 2 - On Hold 2 - On Hold
3 - Done 3 - Done 3 - Done
3 - Done -1 - Dropped -1 - Dropped
-1 - Dropped 1 - Started 1 - Started
-1 - Dropped 0 - Pending Workforce 0 - Pending Workforce
-1 - Dropped 2 - On Hold 2 - On Hold
-1 - Dropped 3 - Done 3 - Done
-1 - Dropped -1 - Dropped -1 - Dropped

🧮 Implementation

graph LR
classDef Value stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 4
classDef NothingAround stroke-width:0px

	 IN["Internal Status input" ]:::empty --> Status_Intl
   Status_Intl["🧪Status Intl"]-->status_intl_as_int["🧪status_intl_as_int"]

   DPD["Prerequisites input"]:::empty --> nb_prerequisites["🧪nb_prerequisites"]

   status_out_fc["🧪status_out from Prerequisites"]:::empty -->status_ext_fc["🧪status_ext_fc"]
   status_out_fc-->status_ext_fc
   status_out_fc-->status_ext_fc

   status_intl_as_int -->IV
   status_ext_fc-->EV
   nb_prerequisites-->EV

   IV[Internal value]:::Value---F
   EV[External value]:::Value---F
   F["...⚙️..."]:::NothingAround
   F --> status_out["🧪status_out"]
   status_out --> O["
					          🔵/🔴/🟠/🟣/⚪"]
   classDef empty width:0px,height:0px

Archive