# Modello concettuale iniziale Il modello deve essere abbastanza generale da non ripetere i limiti del legacy, ma non cosi' astratto da bloccare lo sviluppo. ## Entita' principali ### LogisticUnit Rappresenta una qualsiasi unita' fisica movimentabile. Esempi: - pallet; - cassa; - cartone; - bobina; - contenitore; - roll; - collo; - unita' specifica del cliente. Attributi iniziali: - codice barcode; - tipo unita'; - stato logico; - peso lordo; - peso netto; - tara; - dimensioni; - volume; - data creazione; - origine dati; - riferimento ERP. Una LogisticUnit puo' esistere in FlyWMS Core anche prima del primo movimento fisico registrato nel WMS. In questo caso la sua origine e' ERP e la sua posizione iniziale e' una location virtuale di ingresso, normalmente NON_SHELVED. ### LogisticUnitContent Descrive il contenuto di una unita' logistica. Serve per gestire: - una UDC con un solo lotto; - una UDC con piu' lotti; - una UDC con piu' articoli; - quantita' parziali. ### Location Rappresenta una posizione logica o fisica. Tipi iniziali: - magazzino; - area; - corsia; - scaffale; - livello; - cella; - location virtuale. Le location virtuali sostituiscono i codici convenzionali legacy. Location virtuali obbligatorie nella prima versione: - NON_SHELVED; - SHIPPED. Location virtuali opzionali o future: - RECEIVING; - QUALITY_HOLD; - DAMAGED; - STAGING. Ogni location virtuale deve avere codice interno, label utente e, se necessario, barcode convenzionale configurabile. ### InventoryMovement Registra ogni movimento. Campi concettuali: - unita' logistica; - location sorgente; - location destinazione; - operatore; - timestamp; - causale; - documento sorgente; - origine del movimento; - transazione. Il movimento deve essere espresso sempre come trasferimento: ```text from_location -> to_location ``` Le due operazioni elementari esposte al barcode sono: - prelievo: rimozione da una location sorgente; - versamento: inserimento in una location destinazione. Nel modello applicativo un'azione operativa puo' combinare prelievo e versamento in una sola transazione. ### CurrentInventory Rappresenta la giacenza corrente materializzata. Puo' essere calcolata dai movimenti oppure mantenuta come tabella aggiornata per performance. ## Stati logici iniziali - PRODUCED_BY_ERP; - RECEIVED; - NON_SHELVED; - SHELVED; - RESERVED_FOR_PICKING; - SHIPPED; - BLOCKED; - UNKNOWN. ## Relazione con ERP Il modello deve prevedere una fonte ERP per le LogisticUnit. Il primo obiettivo non e' importare tutto l'ERP, ma creare una vista o tabella di staging che dica: - codice UDC; - data creazione; - articolo o articoli; - lotto o lotti; - quantita'; - peso; - dimensioni; - documento o contesto di origine; - stato ERP rilevante. Le UDC presenti nello staging ERP ma non ancora movimentate nel WMS devono risultare in CurrentInventory come NON_SHELVED logiche.