wiki:BozzaAnalisiFunzionale

Version 10 (modified by dom_thual, 4 years ago) (diff)

--

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.


  • aggiornamento dei prezzi: il Produttore, in qualsiasi momento, può aggiornare il ListinoProduttore (modifica dei prezzi base applicati a tutti i GAS);
    • registra il prezzo prima della modifica nello storico prezzo.
    • modifica gli OrdineGasista
    • notificare la variazione al ReferenteProduttore

se questa modifica avviene mentre, per un determinato GAS, è aperto un OrdineProduttore per il Produttore in questione, il Sistema:

  • notificare 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 il relativo Prodotto dal Carrello; sarebbe anche opportuno che il Sistema evidenziasse visivamente eventuali Prodotti che hanno subito variazioni di prezzo al momento della conferma dell'OrdineGasista

Il legame di solidarietà 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à.

  • aggiornamento della disponibilità dei Prodotti: il Produttore, in qualsiasi momento, può aggiornare la disponibilità 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)
  • aggiornamento della stagionalità dei Prodotti: Il prodotto c'è o non c'è. (disponibilità = MAX o 0)
    • Il prodotto c'è: se è aperto un OrdineProduttore il prodotto viene notificato ai Gasisti. Il prodotto appare sul ListinoGasista
    • Il prodotto non c'è: se è aperto o chiuso ma non ancora consegnato un OrdineProduttore
      • i OrdineGasista con questo prodotto vengono eliminati.
      • i Gasisti interessati dalla modifica vengono notificati della non consegna del prodotto
      • Il prodotto scompare del ListinoGasista


Nota: in una prima fase si può semplificare la gestione delle disponibilità dei Prodotti limitandosi ai due stati "disponibile" e "non disponibile". NON è una semplificazione: sono 2 approcci totalmente differente:

Uno è il concetto di STOCK (è una cifra, implica una seria di logiche che condiziona fortemente il sistema e implica un impegno forte per farlo funzionare) L'altro è il concetto di STAGIONALITA (è un flag, che mostra nasconde il prodotto e non fa operazione sugli attributi a lui associati -tipo la quantità-) che corrisponde più al funzionamento attuale dei GAS e delle informazione trasmesse tra il Produttore è il ReferenteProduttore?

L'unico punto comune: la logica di programmazione permette di gestire questi 2 concetti con le stesse variabile (mediante una forzatura).

Workflow

In questa sezione riportiamo il workflow di base che fornisce un'implememtazione 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).

La definizione delle regole che permettono la sincronizzazione sono definite:

  1. a livello di GAS
  2. a livello di PattoDiSolidarietà

Queste regole, se presente, permettono al Motore di sostituire l'impegno del volontariato.

  1. 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 --> NON) è una modalità manuale che è sempre coordinata. Ad esempio, diversi ReferentiProduttore possono aprire e chiudere gli Ordini manualmente.

Regola base: un OrdineProduttore alla volta per produttore per GAS. questa regola vale per gli OrdineProduttore che non hanno raggiunto lo stato Chiuso. Un OrdineProduttore chiuso non può essere riaperto se esiste un altro OrdineProduttore allo stato aperto.

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.


All'interno del GAS un ReferenteProduttoreGAS:

  • Seleziona il produttore con cui intende aprire un ordine: Il sistema presenta la lista dei produttori che appartengono alla lista dei patti di solidarietà attivi e che non hanno già un OrdineProduttore allo stato aperto.
  • se necessario definisce la data di chiusura. Il sistema propone un default in base alle regole di sincronizzazione.
  • se necessario definisce la data della Consegna. Il sistema propone un default in base alle regole di sincronizzazione.
  • Preme sul pulsante "APRI ORDINI"
  • Il sistema genera OrdineProduttore, imposta in automatico lo stato aperto e la data di apertura
  • opzionale:
    • Rilascia una note generale che appare sulla(e) pagina(e) dove i Gasisti compongono il ordinare
    • tipo di ordine
      1. A data: definisce la data di chiusura e la data di consegna (prevista, probabile)
      2. A quantità: definisce la soglia minima di prodotti da ordinare per poter chiudere un ordine. Data di consegna: incerta. Esiste la data di chiusura per limitare nel tempo.
      3. A prezzo: definisce la soglia economica da superare prima di poter chiudere un ordine. Data di consegna: incerta. Esiste la data di chiusura per limitare nel tempo.
    • 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)
  • ?
    • 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 genera 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


Non esiste la data di apertura, Esiste la data di creazione dell'ordine gestita in automatico dal sistema. ListinoProduttore ListinoProduttoreGAS ListinoProduttoreGasista ListinoGasista il ListinoProduttore modificato dalla % del PattoDiSolidarietà viene generato al volo quando un Gasista entra su una pagina per fare degli OrdineGasista Dobbiamo discutere se viene generato un listino e se questo listino viene associato a un OrdineProduttore

A questo punto, i Gasisti possono iniziare ad ordinare. Quando un Gasista accede al Sistema: Ci sono 2 visualizzazione: la visualizzazione può essere fatta in forma aggregata per Produttore oppure come lista "flat"; questo comportamento può essere definito in base alle specifiche esigenze/sensibilità del GAS *Il Gassista ordina:

  • visualizza il ListinoGasista attuale che presenta solo i prodotti disponibili
  • può filtrare per nome del prodotto
  • può filtrare per categorie/sotto-categoria
  • seleziona un prodotto
  • aggiusta la quantità desiderata. Non dovrebbe inserire una quantità ma andare passo passo: il Sistema si occupa di implementare eventuali restrizioni sulle quantità ordinabili (minima/step_incremento/massima)
  • Visualizza il prezzo reale da pagare in funzione della quantità definita
  • può rilasciare una nota al livello di OrdineGasista
  • preme su un pulsante "ORDINO"
  • il Sistema genera un OrdineGasista che si aggiunge al Carrello, compreso il totale corrente
  • finché l'Ordine è aperto, il Gasista può modificare il contenuto del Carrello: in aggiunta, in sottrazione o eliminare un OrdineGasista
  • il Gasista può rilasciare una nota generale al livello di OrdineProduttore a destinazione del referente e/o del produttore.
  • il Gasista Consulta e/o stampa OrdiniGasistaProduttore: lista dei prodotti ordinati per questo produttore
  • il Gasista Consulta e/o stampa Carrello: lista dei prodotti ordinati per tutti produttori


  • 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
  • il Sistema scorpora l'OrdineGasista in un OrdineGasistaProduttore per ogni Produttore presente nell'OrdineGasista
  • per ogni Produttore, il Sistema aggrega tale OrdineGasistaProduttore con quelli già inviati dagli altri Gasisti, a beneficio del ReferenteProduttoreGAS


Il motore chiude in automatico l'ordine. La stessa cosa puo essere fatta manualmente dal Produttore. Quando la finestra temporale per l'Ordine si chiude, i Gasisti non sono più in grado di effettuare OrdiniGasista (fino all'apertura di un nuovo Ordine); a questo punto, ogni ReferenteProduttore:

  • visualizza l'OrdiniGasistiProduttore [la situazione finale dell'OrdineProduttore] (risultato dell'aggregazione degli OrdiniGasistaProduttore effettuati nel corso dell' Ordine)
  • valida l'OrdineProduttore; se necessario, effettua le modifiche:
    • "Puo succedere di tutto" LORIS
    • un ReferenteProduttoreRetina puo passare in modalità INTERGAS: Ordine complesso per completare il massimo di cartone non completi
      • Aggregazione di varie ordini chiusi di varie GAS sullo stesso produttore. Richiede coordinamento.
        1. Il ReferenteProduttoreRetinapuo avviare la procedura "Completa Cartone". Porta l'ordine in modalità (Stato Chiuso_Replay)
        2. I Gassisti ricevono un email valido per alcuni giorni con un link ad una pagina temporaneo (UUID) dove si può ordinare le confezione mancante per portare a completamento l'ultimo cartone.
        3. Il ReferenteProduttoreRetina o Motore rilanscia il "Replay" ogni giorno con la nuova situazione.
        4. Il ReferenteProduttoreRetina o Motore chiude definitivamente l'ordine
        5. Il ReferenteProduttoreRetina o Motoredecide quali prodotti cancellare. email agli gassisti che hanno ordinato per informare della non consegna del prodotto appena cancellato
      • Se il GAS è grande è l'ordine viene gestito al livello di cartone (configurazione del sistema: modalità magazzino = true )

Il referente completa i cartoni al livello di un entita GAS (senza account) che rappresenta il Magazzino

  • Invio email, report al produttore.
  • non valida e decide di riaprire l'OrdineProduttore? in via temporanea per consentirne il completamento, per soddisfare eventuali vincoli posti dal Produttore (importo minimo, quantità minime. ecc.)


Il problema però di togliere il concetto di tipo di ordine a scopo (raggiungere una soglia economica o quantitativa) per volere definire a tutti costi una data di consegna fa si che si chiude e riapre l'ordine (email, notifiche logiche programmazione). Questo non va bene. quindi vi ripeto ancora una volta: !!!ESISTONO DEGLI ORDINI DOVE LA DATA SI CONSEGNA NON E CONOSCIUTA!!! Mi dispiace per i sistemi centrato sulle consegne ma questo deve essere digerito. è inutile di provare a incastrare il concetto al livello di listino. Nota: la visualizzazione 'flat' puo benissimo mostrare gli ordini per la prossima consegna più quelli che non hanno una data di consegna definita.

  • se necessario, ri-definisce con il Produttore le modalità di consegna
  • finalizza l'OrdineProduttore; il Sistema genera e invia al produttore un documento di Ordine secondo le regole di sincronizzazione definite al livello di PattoDiSolidarietà
    • Famiglia + Articoli
    • solo Articoli

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, ..)