wiki:BozzaAnalisiFunzionale

Version 19 (modified by fero, 3 years ago) (diff)

specificato che il workflow analizzato e' quello di ordine e consegna

Processo di Ordine e Consegna

Nota: All'interno di questo documento, ogni riferimento ad un'entità soggettiva (Produttore, Gasista, Turnista, Motore ecc.) va letta come un riferimento a chi riveste il corrispondente ruolo all'interno della piattaforma informatica, che non coincide necessariamente con l'entità stessa. Ad esempio, quando si parla di "Produttore che aggiorna il listino", si intende colui che svolge questa operazione da parte del Produttore (che può essere il Produttore stesso, ma anche il figlio o il ReferenteProduttore...)

Inizializzazione

In questa sezione riportiamo le procedure che devono essere eseguite in via preliminare (una tantum) per consentire il regolare svolgimento delle attività connesse ai processi di Ordine e Consegna.

  • il Produttore crea e popola il suo CatalogoProduttore (valido per ogni GAS)
  • il Produttore definisce il suo ListinoProduttore valido per ogni GAS specificando, per ogni prodotto del suo CatalogoProduttore, il prezzo base
  • il Produttore sottoscrive il PattoDiSolidarietà con un GAS

Eventi

In questa sezione riportiamo gli eventi che possono verificarsi nel corso del processo di Ordine e Consegna, in maniera asincrona (indipendente) rispetto al workflow definito nella sezione successiva.

il Produttore aggiorna il prezzo di un Prodotto nel ListinoProduttore

Il Produttore, in qualsiasi momento, può aggiornare il suo ListinoProduttore (ovvero modificare i prezzi base applicati a tutti i GAS); in questo caso:

  • Il Produttore:
    • modifica il prezzo di un Prodotto
    • specifica la motivazione della variazione
  • Il Sistema :
    • registra il nuovo prezzo e la causale di modifica nello storico dei prezzi relativo al Produttore in questione (condiviso tra tutti i GAS)
    • per ogni GAS che gestisce:
      • notifica la variazione al ReferenteProduttore
      • aggiorna il ListinoProduttoreGAS e (di conseguenza) il ListinoProduttoreGasista
      • verifica se è aperto un OrdineProduttore per il Produttore in questione; in caso affermativo:
        • modifica le VociDiCarrello interessate dalla variazione
        • modifica gli OrdiniGasistaProduttore interessati dalla variazione
        • notifica la variazione ai Gasisti che hanno già inserito nel Carrello dei Prodotti toccati dalle variazioni di prezzo; se un Gasista non accetta la variazione, può rimuovere la relativa VoceDiCarrello; (sarebbe anche opportuno che il Sistema evidenziasse visivamente eventuali Prodotti che hanno subito variazioni di prezzo al momento della conferma dell'OrdineGasista)
        • notifica la variazione ai Gasisti che hanno già effettuato degli OrdiniGasistaProduttore comprendenti dei Prodotti toccati dalle variazioni di prezzo; se un Gasista non accetta la variazione, può modificare o revocare l'OrdineGasista corrispondente
definire che succede se l'OrdineGASProduttore è stato inviato ma non ancora consegnato

Nota: il legame di solidarietà reale (non gestito dalla piattaforma :)) fra GAS e Produttore evita che accadano eventi spiacevoli (ritocchi al rialzo dei prezzo "ad orologeria"); in caso contrario, il GAS può stracciare il Patto di Solidarietà.

il Produttore inserisce un nuovo Prodotto nel CatalogoProduttore

L'aggiunta, da parte di un Produttore, di un nuovo Prodotto al suo CatalogoProduttore non può causare una modifica automatica dei relativi Cataloghi/Listini a livello di GAS, in quanto è richiesta, eventualmente, una modifica preliminare al PattoDiSolidarietà tra il Produttore e ciascun GAS gestito dal Sistema, e questo comporta, ovviamente, un'approvazione da parte del GAS; tale processo può comunque essere assistito dalla piattaforma informatica.

Quando un Produttore inserisce un nuovo Prodotto nel CatalogoProduttore:

  • il Sistema:
    • notifica il ReferenteProduttoreGAS di ogni GAS gestito dal Sistema, che abbia stipulato un PattoDiSolidarietà con il Produttore
  • il ReferenteProduttoreGAS di ogni GAS gestito dal Sistema, che abbia stipulato un PattoDiSolidarietà con il Produttore:
    • notifica il GAS del nuovo Prodotto
  • Il GAS:
    • valuta il nuovo Prodotto, e decide se includerlo nel CatalogoProduttoreGAS

In caso affermativo:

  • il ReferenteProduttoreGAS effettua le opportune modifiche al PattoDiSolidarietà (che si riflettono automaticamente sul CatalogoProduttoreGAS e il ListinoProduttoreGAS)

il Produttore rimuove un Prodotto dal CatalogoProduttore

La rimozione, da parte di un Produttore, di un Prodotto dal suo CatalogoProduttore comporta una modifica del PattoDiSolidarietà per tutti i GAS, gestiti dal Sistema, che annoverino il Produttore tra i loro fornitori. Dovrebbe comunque trattarsi di un evento sporadico e preceduto da una comunicazione, da parte del Produttore, nei confronti di tutti i ReferentiProduttoreGAS interessati; tale processo può comunque essere assistito dalla piattaforma informatica.

Quando un Produttore rimuove un Prodotto dal suo CatalogoProduttore:

  • il Sistema:
    • notifica il ReferenteProduttoreGAS di ogni GAS gestito dal Sistema, che abbia stipulato un PattoDiSolidarietà con il Produttore
    • apporta le necessarie modifiche al CatalogoProduttoreGAS (quindi, indirettamente, al PattoDiSolidarietà?) e le sottopone al ReferenteProduttoreGAS per conferma
  • verifica se è aperto un OrdineProduttore per il Produttore in questione; in caso affermativo:
    • elimina le VociDiCarrello in cui compare il Prodotto rimosso
    • modifica gli OrdiniGasistaProduttore in cui compare il Prodotto rimosso
    • notifica i Gasisti delle modifiche apportate

il Produttore aggiorna la disponibilità dei Prodotti nel !ListinoProduttoreGAS

il Produttore, in qualsiasi momento, può aggiornare la quantità disponibile dei Prodotti che compaiono nel ListinoProduttoreGAS; in questo caso, va definito cosa succede ai Gasisti che hanno inserito nel loro Carrello dei Prodotti la cui disponibilità sia stata rivista al ribasso; alcune strategie possibili:

  • definire un algoritmo che adegui i Carrelli alla nuova situazione (magari in base a criteri di equità/solidarietà tra Gasisti ;-)); può anche essere sufficiente il metodo del consenso
  • effettuare comunque l'OrdineProduttore senza interventi preliminari, notificando i Gasisti che il loro OrdineGasista potrebbe non essere soddisfatto in toto (la rettifica può comunque avvenire in fase di Ritiro o di Consegna)

Un caso particolare di questa problematica è quello in cui si modifica la disponibilità "assoluta" di un Prodotto (SI/NO, contrapposta a quella "relativa" in cui si modifica la quantità ma il Prodotto rimane comunque disponibile); ci sono due casi possibili:

  1. il Prodotto passa da NON DISPONIBILE (quantità = 0) a DISPONIBILE (quantità > 0)
  2. il Prodotto passa da DISPONIBILE (quantità > 0) a NON DISPONIBILE (quantità = 0)

Caso 1) Il Produttore:

  • incrementa la disponibilità di un Prodotto per un determinato GAS (modificando il relativo ListinoProduttoreGAS) da 0 ad un valore > 0

Il Sistema:

  • verifica se è aperto un OrdineProduttore per il Produttore in questione; in caso affermativo:
    • notifica il ReferenteProduttoreGAS e i Gasisti della disponibilità di un nuovo Prodotto (il ListinoGasista viene aggiornato automaticamente)

Caso 2) Il Produttore:

  • annulla la disponibilità di un Prodotto per un determinato GAS (modificando il relativo ListinoProduttoreGAS)

Il Sistema:

  • verifica se è aperto un OrdineProduttore per il Produttore in questione; in caso affermativo:
    • elimina le VociDiCarrello in cui compare il Prodotto rimosso
    • modifica gli OrdiniGasistaProduttore in cui compare il Prodotto rimosso
    • notifica i Gasisti delle modifiche apportate
    • notifica il ReferenteProduttoreGAS e i Gasisti della indisponibilità del Prodotto

L'OrdineProduttore viene annullato (non verrà consegnato)

Si elimina tutto quello che riguarda L'OrdineProduttore + Carrello + VoceDiOrdine + listini.


Workflow di aggiornamento prezzi

  • visualizza lo stato attuale del ListinoProduttoreGAS (in particolare, il Sistema mostra solo i Prodotti attualmente disponibili ed evidenzia le eventuali variazioni di prezzo rispetto al precedente OrdineProduttore)
  • il Sistema visualizza il ListinoProduttoreGasista, a partire dal ListinoProduttoreGAS (applicando le eventuali modifiche ai prezzi)
  • il ReferenteProduttoreGAS applica le eventuali modifiche al ListinoProduttoreGasista (ad es. ritoccando i prezzi??? o impostando una quantità massima ordinabile in caso di scarsa disponibilità del Prodotto)
  • il ReferenteProduttoreGAS conferma il ListinoProduttoreGasista, e il Sistema lo assegna automaticamente all'OrdineProduttore in questione

Workflow di ordine e consegna

In questa sezione riportiamo il workflow di base che fornisce un'implementazione del processo di Ordine e Consegna. Alcune delle azioni descritte nel workflow sono a carico del Sistema, altre richiedono un intervento umano; comunque, il confine è sfumato e dipende anche dalle scelte organizzative di ogni singolo GAS (ad es., GAS diversi potrebbero decidere di fare un uso più o meno esteso della piattaforma informatica di cui dispongono).


Nota preliminare: al fine di modellizzare il processo di ordine e di consegna, è possibile partire da assunzioni diverse:

  1. si può assumere che le interazioni GAS-Produttori avvengano in maniera sincrona, cioè siano scandite da un "clock" condiviso tra GAS e Produttori; in questo caso, il processo di ordine e consegna sarebbe un ciclo che si compie a cadenza fissata, ad esempio settimanale (l'ordine si apre il Lunedì e si chiude il Venerdì per tutti i Produttori che servono un GAS)
  2. si può assumere che le interazioni GAS-Produttori avvengano in maniera asincrona, ovvero che il GAS e i Produttori interagiscano in modo non necessariamente coordinato. Ad esempio, diversi ReferentiProduttore possono aprire e chiudere gli Ordini in autonomia, i Produttori possono variare i prezzi di listino in qualsiasi momento, ecc.

Nel nostro caso, riteniamo che il secondo scenario sia più realistico nei contesti operativi dei GAS. Da notare che l'assenza di sincronizzazione a priori non esclude la sussistenza di meccanismi di coordinamento intra-GAS (e inter-GAS, in uno scenario di Retina); anzi, è probabile (e auspicabile) che questi meccanismi sorgano spontaneamente come buone pratiche a livello di GAS (o di Retina), ma il Sistema non cerca in alcun modo di imporli.


Nota: in una prima fase si può semplificare la gestione delle disponibilità dei Prodotti limitandosi ai due stati "disponibile" e "non disponibile".

All'interno del GAS:

  • per un Produttore, il ReferenteProduttoreGAS:
    • apre un nuovo OrdineProduttore, definendo:
      • la data di apertura e chiusura
      • le modalità di ritiro (vanno concordate con il Produttore, anche in un secondo momento)
      • le modalità di consegna; per definirle il ReferenteProduttoreGAS può:
        1. creare una nuovo appuntamento di consegna (Consegna), definendo:
          • il PuntoDiConsegna
          • la data della Consegna
          • l'ora di inizio e fine della Consegna
          • il Turnista (o i Turnisti) responsabili della Consegna; è compito del ReferenteProduttoreGAS verificare l'effettiva disponibilità del Turnista/i
        2. selezionare una (appuntamento di) Consegna già definita da un altro !ReferenteProduttoreGAS (oppure la (appuntamento di) Consegna di default)
      • aggiunge una nota
      • importo minimo (opzionale)
  • valida il listino
    • Sotto-workflow: aggiornamento prezzi

Nota: il Sistema evidenzia eventuali altri OrdineProduttore? aperti, ma non impedisce l'apertura di un nuovo OrdineProduttore?

A questo punto l'ordine è aperto e i Gasisti possono iniziare ad ordinare.

Quando un Gasista accede al Sistema:

  • il Sistema visualizza il ListinoGasista attuale, filtrando gli eventuali Prodotti la cui disponibilità è scesa a zero; la visualizzazione può essere fatta in forma aggregata per Produttore o per altri parametri (ad esempio la data di consegna) oppure come lista "flat"; questo comportamento può essere definito a livello di sistema o di utente (?), in base alle specifiche esigenze/sensibilità del GAS
  • il Gasista seleziona alcuni Prodotti dal ListinoGasista attuale, indicando le quantità desiderate per ciascun Prodotto; il Sistema si occupa di implementare eventuali restrizioni sulle quantità ordinabili (minima/step_incremento/massima)
  • il Sistema aggiorna il Carrello, compreso il totale corrente
  • finchè l'Ordine è aperto, il Gasista può modificare il contenuto del Carrello (in aggiunta o in sottrazione)
  • quando il Gasista è soddisfatto del contenuto del suo Carrello (in relazione all'Ordine corrente) può finalizzare l'ordine; il Sistema genera automaticamente un OrdineGasista in base al contenuto del Carrello (conferma automatica configurabile a livello di GAS)
  • la conferma avviene a livello di VoceDiCarrello?
  • gestione della revoca/modifica degli ordini

Quando un ReferenteProduttore? accede al Sistema:

  • il Sistema visualizza la situazione corrente di !OrdineGASProduttore per ogni Produttore per cui è attivo un OrdineProduttore

Al momento della data di chiusura dell'ordine

  • per ogni Produttore, il Sistema aggrega tale !OrdineGASProduttore con quelli già inviati dagli altri Gasisti, a beneficio del ReferenteProduttoreGAS

Quando la finestra temporale per un OrdineProduttore? si chiude, i Gasisti non sono più in grado di effettuare OrdiniGasista per quel Produttore (fino all'apertura di un nuovo OrdineProduttore?).

A questo punto, ogni ReferenteProduttore:

  • visualizza la situazione finale dell'!OrdineGASProduttore , con alcune viste in forma aggregata (quantità per prodotto, totale, ...)
  • valida l'!OrdineGASProduttore; se necessario, effettua le modifiche del caso (specificare quali azioni sono consentite!) e/o riapre l'OrdineProduttore? in via temporanea per consentirne il completamento, per soddisfare eventuali vincoli posti dal Produttore (importo minimo, quantità minime. ecc.) automatismi da prevedere
  • se necessario, definisce con il Produttore le modalità di consegna
  • finalizza l'OrdineProduttore; il Sistema genera e invia al produttore un documento di Ordine

Ora, si entra nel processo di Consegna:

  • il Produttore consegna la merce relativa all' OrdineProduttore secondo le modalità stabilite in precedenza
  • se necessario, qualcuno del GAS si occupa del trasferimento della merce dal PuntoDiRitiro al PuntoDiConsegna

TODO: definire una procedura di validazione della consegna da parte del Produttore (gestione delle eccezioni: prodotti mancanti o difformi,..)

  • in prossimità di una (appuntamento di) Consegna, il Sistema invia una notifica/reminder a:
    • i Gasisti che devono ritirare dei Prodotti nel corso della Consegna (in base agli OrdiniGasista che hanno eseguito)
    • il Turnista incaricato a gestire la Consegna
  • durante al Consegna, presso il PuntoDiConsegna, il Turnista coordina il ritiro della Partita (risultato dell'aggregazione degli OrdiniProduttore assegnati alla Consegna in oggetto) osservando la seguente procedura:
    • per ogni Gasista che si reca al PuntoDiConsegna:
      • il Sistema genera la lista dei Prodotti/quantità ordinati dal Gasista
      • preleva i Prodotti nella lista e li consegna al Gasista
      • chiede al Gasista di validare il ritiro e, in base all'esito, aggiorna lo stato della consegna:
        • se il Gasista conferma che il ritirato corrisponde (in quantità e qualità) all'ordinato, il Turnista marca i Prodotti corrispondenti come consegnati (con l'ausilio del Sistema)
      • se si presentano difformità (in quantità e qualità) tra il ritirato e l'ordinato, il Turnista inserisce nel Sistema le anomalie (gestione delle eccezioni; definire meglio i dettagli!)

Note:

  • in uno scenario inter-GAS, per condividere entità come Produttori, Prodotti, PuntiDiConsegna, PuntiDiRitiro è necessario definire degli ID univoci (UUID); quelli "interni" al Sistema per ogni GAS non sono sufficienti;
  • per il momento, la gestione degli Stock a disposizione dei GAS è a carico del Produttore;
  • sarebbe auspicabile gestire a livello inter-GAS gli Stock messi a disposizione dai produttori; altrimenti, potrebbe accadere che in un GAS lo Stock si esaurisca, mentre in un altro rimanga un invenduto. Si potrebbe ovviare con un sistema di notifiche al Produttore nel caso un GAS abbia esaurito lo Stock a sua disposizione in modo che il Produttore aggiusti "dinamicamente" la suddivisione (oppure un meccanismo di adattamento in base allo storico).

OrdiniPeriodici

Al fine di semplificare al massimo la vita del !Gasista, è importante implementare un meccanismo che consenta la pianificazione (scheduling) degli Ordini ricorrenti (che avvengono periodicamente con cadenze fissate). Il !Gasista dovrebbe poter inserire nel Sistema gli Ordini che si trova ad eseguire periodicamente (OrdiniPeriodici), specificando:

  • prodotto
  • # di unità da ordinare
  • cadenza dell'ordine
  • (opzionale) data di inizio e fine della validità dell' OrdinePeriodico in questione

Workflow

  1. Il GasistaAcquirente inserisce uno o più OrdiniPeriodici
  2. ogni giono, il Sistema
    1. verifica se ci sono OrdiniPeriodici previsti per il giorno corrente
    2. per ogni OrdinePeriodico
      1. verifica se l' OrdinePeriodico può essere soddisfatto (ovvero, per ogni Prodotto indicato nell' OrdinePeriodico, esiste almeno uno Stock "attivo" e non vuoto in grado di soddisfare la richiesta)
      • se l' OrdinePeriodico può essere soddisfatto:
        • genera e invia un OrdineGasista (senza chiedere conferma al GasistaAcquirente)
        • invia una notifica al GasistaAcquirente
      • se l' OrdinePeriodico può essere soddisfatto (parzialmente o in toto)
        • invia una notifica al GasistaAcquirente

Gestione Multi-GAS (livello di Retina)

TODO

Scratch

  • L' UM dovrebbe permettere di calcolare in automatico il prezzo per Kilo o litro quando possibile)
  • gestione degli storici (prezzi, ordini, ..)