ATS: A TimeSheet experience, la genesi

lun 16 gennaio 2023 by Massimo Masson

tempo di lettura stimato: 12 minuti

Introduzione

Nel contesto di un master sul controllo di gestione, da un gruppo di studio che lavorava su un'ipotesi di implementazione di un sistema di controllo di gestione per uno studio professionale, si e' palesata la necessita' di rilevare i tempi dedicati alle diverse attivita' (pratiche/commesse).

Come "dimostrazione di fattibilita'" ho sviluppato un applicativo web per esemplificare una possibile interpretazione della rilevazione tempi in un ipotetico studio professionale.

L'applicativo viene eseguito su un server, a cui gli utenti accedono tramite normale browser web.

Nella "versione didattica" l'applicativo web sfrutta le seguenti tecnologie:

  • Framework genropy (Python based + Javascript)
  • Database PostgreSQL
  • Sistema operativo Debian GNU/Linux

Il codice sorgente e' rilasciato con licenza libera (GNU/GPL), disponibile su bitbucket all'indirizzo:

https://bitbucket.org/massimo_masson/safcg09g01

Nota: per utilizzo in locale (sia su singolo pc, sia in rete locale sul server della LAN) e' possibile avviare una macchina virtuale che esegue il server in locale.

Prima parte

Nella prima parte vedremo l'accesso al sistema da parte di un operatore, e gli elementi di configurazione.

Idealmente gli elementi di configurazione rappresentano la parte "statica" del sistema, quelli che una volta definiti probabilmente richiedono bassa (o nulla) manutenzione.

Accesso al sistema

Accedere al sistema e configurare le entita'.

L'ambiente prevede un sistema di autenticazione username/password. Se non si e' autenticati non si entra. Quando si e' autenticati si puo' fare solo quello che i permessi attribuiti consentono:

Schermata login

Una volta autenticati, si accede all'applicativo, diviso in 3 sezioni:

  • Rilevazioni
  • Anagrafiche
  • Configurazione
sezioni

Partiamo con la configurazione delle entita' coinvolte in una registrazione tempi:

configurazione

Per ciascuna di queste entita':

  • Sedi
  • Operatori
  • Unita' di misura
  • Categorie tipi lavoro
  • Tipologie lavori
  • Gruppi tariffari

Si puo' avere la lista degli elementi inseriti, inserirne di nuovi, modificare quanto fosse necessario.

Sedi

Selezionando sedi viene visualizzata la lista delle sedi inserite:

sedi

Operatori

Selezionando operatori viene visualizzata la lista degli operatori definiti:

operatori

Il dettaglio di configurazione di un operatore e' piu' interessante da approfondire:

dettaglio operatore

Unita' di misura

u.m.

Le unita' di misura sono a libera definizione. In futuro vorrei mettere un "moltiplicatore" per convertire in una misura standard di riferimento per la tariffa (ma ora non c'e' ancora nulla del genere).

Categorie tipi lavoro

Per agevolare le analisi ho pensato di costruire dei raggruppamenti logici delle tipologie di lavoro inseribili, che ho chiamato "categorie" dei tipi di lavoro:

categorie

Tipologie lavori

Rappresentano il dettaglio del tipo di lavoro registrato in ciascuna riga del timesheet:

dettaglio 1

Qui il dettaglio e' piu' interessante

dettaglio 2

Gruppi tariffari

I gruppi tariffari rappresentano il gruppo tariffa cui viene associato l'operatore (v. supra), e dove vengono definiti gli importi da tariffa:

gruppi tariffari

Seconda parte, le anagrafiche

Il secondo "ambiente" e' rappresentato dalle anagrafiche.

Ovviamente sono di manutenzione piu' frequente della configurazione (magari anche con limiti imposti a certi operatori, se desiderato...), in quanto... si spera di inserire quanti piu' clienti possibile, e per essi quante piu' pratiche possibile...

anagrafiche

Anagrafica cliente

anagrafica cliente

L'anagrafica e' sintetica e concettuale, ovviamente si potranno aggiungere tutti i campi desiderati.

Interessante invece notare che all'apertura del dettaglio anagrafica sono disponibili due "tab" costruiti dinamicamente con l'elenco delle pratiche intestate a quel cliente, e le singole attivita' intestate al cliente.

anagrafica cliente rilevazioni

Si puo' aprire il dettaglio pratica (v. infra) e questa riportera' le rilevazioni specifiche di tale pratica:

anagrafica cliente dettaglio rilevazioni

Oppure si possono vedere tutte le attivita' registrate su quel cliente:

anagrafica cliente, tutte le attivita'

Pratiche

Le pratiche sono le attivita' logiche associate al cliente (direi... "commesse")

pratiche

La singola pratica riporta le rilevazioni ad essa attribuite:

pratica

Ovviamente e' possibile averne il dettaglio:

dettaglio pratica

Impostazione dei "default" sulla pratica per le successive registrazioni

Alcuni campi della pratica consentono di impostare dei "default" per le singole registrazioni.

In questo modo, l'inserimento di una singola registrazione beneficia della compilazione di molti campi non appena selezionata la pratica di riferimento.

I campi sono:

Cliente di riferimento

cliente di riferimento

Categoria lavoro

categoria lavoro

Stabilita la categoria lavoro, si puo' impostare il tipo lavoro preferenziale tra quelli appartenenti alla categoria scelta

lavoro preferenziale

Ed infine l'unita' di misura preferenziale

unita' di misura preferenziale

Questi default sono proposti nella registrazione addebito una volta selezionata la pratica, ma in caso di necessita' sono modificabili a livello di singola riga del timesheet (v. infra).

Terza parte, operativita'

Per ultima la parte piu' frequentemente utilizzata, la parte operativa, la gestione della rilevazione dei tempi attivita'.

Va detto che la rilevazione puo' essere fatta partendo dal cliente/pratica tramite l'anagrafica, o direttamente dalla pratica specifica.

Tuttavia la gestione attivita' consente di inserire direttamente la riga di addebito selezionando solo l'indispensabile (in generale la pratica) ed il tempo/descrizione.

In questo modo l'idea e' che l'operatore abbia la web-app sempre aperta a computer, quando finisce l'attivita' inserisce il tempo dedicato con poco sforzo.

rilevazione

Dettaglio dell'attivita' rilevata:

dettaglio rilevazione

Scegliendo la pratica vengono da essa derivati tutti i default, come precedentemente illustrato. Una funzionalita' utile e' la "duplicazione" della registrazione corrente:

duplicazione

Che duplica il record corrente, e sul duplicato potranno essere modificati i dati variati.

La duplicazione, se si preme anche il tasto SHIFT, consente di predisporre "n" duplicati del record corrente, da sistemare successivamente (consente di inserire massivamente registrazioni tra loro "uguali", in cui magari cambiare solo un elemento distintivo successivamente)

quante duplicazione

a fine giornata si chiude il collegamento, ed i dati "ci sono", senza troppa fatica...

(grazie, genropy...)

Quarta parte, analisi

Dalle rilevazioni si possono fare analisi dei dati inseriti dall'interno dell'applicativo.

Le analisi sono delle "viste raggruppate", come delle tabelle "pivot". Consentono di navigare gerarchicamente i dati.

Ne ho predefinite 2, ma in realta' l'operatore puo' costruire dinamicamente la gerarchia semplicemente "trascinando" i nomi dei campi nella vista.

La vista di default visualizza la gerarchia cliente - categoria lavoro - pratica unita' di misura. Vengono quindi riportate le durate (es. ore) ed il numero di rilevazioni. Viene anche conteggiato il costo da tariffa, prendendo il valore della tariffa dal gruppo tariffario dell'operatore che ha inserito l'addebito.

Nella parte destra vengono visualizzate le righe addebito che contribuiscono a formare il totale indicato. Ovviamente sono navigabili:

analisi 1

Si puo' passare ad un'altra struttura di visualizzazione pre-configurata, ad esempio "Analisi per categorie attivita'":

analisi 2

Ed il risultato sara' diverso come struttura di raggruppamenti e subtotali, ma sulla base degli stessi dati:

analisi 2, risultato

Nella prossima schermata si vede il "cassetto" aperto sulla destra da cui attingere ai campi disponibili per costruire in autonomia le gerarchie.

Una volta costruite le visualizzazioni desiderate, l'utente puo' salvarle (per se' o per tutti gli utenti).

cassetto campi

Quarta parte, "all the rest..."

Essendo i dati disponibili in un database relazionale, vi si puo' accedere anche indipendentemente dall'applicativo di gestione.

Ad esempio, si possono predisporre i collegamenti tramite PowerBI, ricostruire il modello di analisi, ed utilizzare tutta la potenza espressiva dello strumento di business intelligence.

Ovviamente fatta la connessione e impostato il modello, per aggiornare i dati basta premere il pulsante aggiorna.

Esempi di interrogazioni con modello PowerBI costruito "al volo"

Riepilogo generale...

riepilogo generale

Clienti e ore lavorate/improduttive per categoria e tipo lavoro...

cliente e ore lavorate per categoria e tipo

Visualizzazione attivita' per sede - navigazione clienti/pratiche:

sede clienti e pratiche

Analisi categorie/pratiche

categorie e pratiche

Ovviamente qui il limite e' la fantasia, si puo' fare tutto quello che puo' venire in mente...

That's all, folks!