System Design Document
PHARMAGC
System Design Document
Team OGC
Buffa Alexandro
Cascio Alessandra
Giambrone Simone
Miccichè Vincenzo
Architettura software proposta
Decomposizione in sottosistemi
Suddivisione degli oggetti all’interno dei sottosistemi e delle componenti
L'obiettivo del Sistema è quello di gestire le informazioni, la produzione, lo stoccaggio e la distribuzione di farmaci dell’azienda farmaceutica a una catena di farmacie affiliate. Il fine è pertanto quello di agevolare la comunicazione e l'interazione tra l'azienda e le farmacie.
Supponiamo che non esista nessuna soluzione software usata attualmente per svolgere le funzioni che il sistema proposto può effettuare.
Per la realizzazione del software è stata utilizzata un’architettura di tipo Repository, che garantisce il disaccoppiamento dei sottosistemi, i quali possono comunicare solo con il sottosistema di Storage, ma non tra loro. A loro volta i sottosistemi sono composti da un’interfaccia utente che comunica solo con il controllore sottostante, che contiene la logica del programma e che gestisce le richieste da rivolgere al sottosistema DBMSDaemon, che gestisce le comunicazioni al nodo di Storage. L’interfaccia utente, il controllore e il DBMSDaemon di ogni sottosistema risiedono sullo stesso nodo, mentre il sottosistema di Storage risiede su un nodo diverso.
Per funzionare correttamente, il Software necessita di:
La decomposizione del Sistema in sottosistemi viene definita qui di seguito:
Il sottosistema Gestione Farmaci consente al Farmacista di eseguire tutte le funzioni per lui previste, come visualizzare, effettuare e modificare ordini, caricare e scaricare farmaci e modificare la propria password, qualora fosse necessario.
Il sottosistema Gestione Corriere consente al Corriere di eseguire tutte le funzioni per lui previste, come visualizzare le consegne da effettuare e far firmare i colli ai farmacisti.
Il sottosistema Gestione Azienda consente agli impiegati dell’Azienda di eseguire tutte le funzioni per loro previste, come visualizzare le ricevute delle consegne, visualizzare gli ordini effettuati dalle farmacie e, in caso sia necessario, correggerli e modificare la produzione di farmaci.
Autenticazione:
Gestione Farmaci:
Gestione Consegna:
Gestione Azienda:
La mappatura è stata effettuata sulla base del modello architetturale Repository.
Su ogni nodo, a meno di DBHost, è installato il pacchetto Autenticazione, in quanto necessario per il corretto funzionamento del Sistema, oltre ai singoli pacchetti necessari a ogni Utente per svolgere le proprie funzioni.
Il nodo DBHost contiene i due DBMS necessari per memorizzare e fornire dati agli altri nodi tramite query.
DBMS Farmacie:
DBMS Azienda:
DBMS Farmacie:
I vincoli di tupla presenti sono i seguenti:
DBMS Azienda:
I vincoli di tupla presenti sono i seguenti:
DBMS Farmacie
Caricamenti:
Nome |
Tipo |
Vincoli |
Descrizione |
id_caricamento |
INTEGER |
PK, AUTO INCREMENT |
codice univoco del caricamento |
id_lotto |
INTEGER |
FK |
id del lotto caricato |
id_farmacia |
INTEGER |
FK |
id della farmacia che ha effettuato il caricamento |
data_caricamento |
DATE |
|
data in cui è stato effettuato il caricamento |
quantita |
INTEGER |
|
quantità caricata |
Farmacia:
Nome |
Tipo |
Vincoli |
Descrizione |
id_farmacia |
INTEGER |
PK, AUTO INCREMENT |
codice univoco della farmacia |
nome |
VARCHAR[255] |
|
nome della farmacia |
indirizzo |
VARCHAR[255] |
|
indirizzo della farmacia |
Farmacista:
Nome |
Tipo |
Vincoli |
Descrizione |
id_farmacista |
INTEGER |
PK, AUTO INCREMENT |
id univoco del farmacista |
id_farmacia |
INTEGER |
FK |
id della farmacia per cui lavora |
nome |
VARCHAR[255] |
|
nome del farmacista |
cognome |
VARCHAR[255] |
|
cognome del farmacista |
|
VARCHAR[255] |
|
email del farmacista |
password |
VARCHAR[255] |
|
password del farmacista(cifrata con SHA-256) |
Farmaco:
Nome |
Tipo |
Vincoli |
Descrizione |
id_farmaco |
INTEGER |
PK, AUTO INCREMENT |
id univoco del farmaco |
nome |
VARCHAR[255] |
|
nome del farmaco |
principio_attivo |
VARCHAR[255] |
|
principio attivo del farmaco |
da_banco |
TINYINT[1] |
|
indica se il farmaco è da banco oppure no |
Lotto:
Nome |
Tipo |
Vincoli |
Descrizione |
id_lotto |
INTEGER |
PK, AUTO INCREMENT |
id univoco del lotto |
id_farmacia |
INTEGER |
PK, FK |
id della farmacia che possiede il lotto |
id_farmaco |
INTEGER |
FK |
id del farmaco del lotto |
quantita |
INTEGER |
|
quantità del farmaco nel lotto |
DBMS Azienda
ComposizioneOrdine:
Nome |
Tipo |
Vincoli |
Descrizione |
id_lotto |
INTEGER |
FK, PK |
id del lotto |
id_ordine |
INTEGER |
FK, PK |
id dell’ordine |
quantita |
INTEGER |
|
quantità di farmaco appartenente a un lotto in un ordine |
quantita_consegnata |
INTEGER |
|
quantità consegnata di farmaco appartenente a un lotto in un ordine |
Corriere:
Nome |
Tipo |
Vincoli |
Descrizione |
id_corriere |
INTEGER |
PK, AUTO INCREMENT |
id univoco del corriere |
nome |
VARCHAR[255] |
|
nome del corriere |
cognome |
VARCHAR[255] |
|
cognome del corriere |
|
VARCHAR[255] |
|
email del corriere |
password |
VARCHAR[255] |
|
password del corriere(cifrata con SHA-256) |
Farmacia:
Nome |
Tipo |
Vincoli |
Descrizione |
id_farmacia |
INTEGER |
PK, AUTO INCREMENT |
codice univoco della farmacia |
nome |
VARCHAR[255] |
|
nome della farmacia |
indirizzo |
VARCHAR[255] |
|
indirizzo della farmacia |
Farmaco:
Nome |
Tipo |
Vincoli |
Descrizione |
id_farmaco |
INTEGER |
PK, AUTO INCREMENT |
id univoco del farmaco |
nome |
VARCHAR[255] |
|
nome del farmaco |
principio_attivo |
VARCHAR[255] |
|
principio attivo del farmaco |
da_banco |
TINYINT[1] |
|
indica se il farmaco è da banco oppure no |
Impiegato:
Nome |
Tipo |
Vincoli |
Descrizione |
id_impiegato |
INTEGER |
PK, AUTO INCREMENT |
id univoco dell’impiegato |
nome |
VARCHAR[255] |
|
nome dell’impiegato |
cognome |
VARCHAR[255] |
|
cognome dell’impiegato |
|
VARCHAR[255] |
|
email dell’impiegato |
password |
VARCHAR[255] |
|
password dell’impiegato (cifrata con SHA-256) |
Lotto:
Nome |
Tipo |
Vincoli |
Descrizione |
id_lotto |
INTEGER |
PK, AUTO INCREMENT |
id univoco del lotto |
id_farmaco |
INTEGER |
FK |
id del farmaco appartenente al lotto |
data_scadenza |
DATE |
|
data di scadenza del lotto |
quantita |
INTEGER |
|
quantità del farmaco nel lotto |
Ordine:
Nome |
Tipo |
Vincoli |
Descrizione |
id_ordine |
INTEGER |
PK, AUTO INCREMENT |
id univoco dell’ordine |
id_farmaco |
INTEGER |
FK |
id del farmaco presente nell’ordine |
id_farmacia |
INTEGER |
FK |
id della farmacia che effettua l’ordine |
id_collo |
INTEGER |
FK |
id del collo a cui appartiene l’ordine |
data_consegna |
DATE |
|
data di consegna dell’ordine |
quantità |
INTEGER |
|
quantità di farmaco presente nell’ordine |
stato |
VARCHAR[255] |
|
stato dell’ordine |
OrdinePeriodico:
Nome |
Tipo |
Vincoli |
Descrizione |
id_farmacia |
INTEGER |
FK,PK |
id della farmacia che effettua l’ordine periodico |
id_farmaco |
INTEGER |
FK,PK |
id del farmaco presente nell’ordine periodico |
quantita |
INTEGER |
|
quantità del farmaco presente nell’ordine periodico |
periodicita |
INTEGER |
|
giorno della settimana in cui viene effettuato l’ordine periodico (1=Lunedì…7=Domenica) |
ProduzionePeriodica:
Nome |
Tipo |
Vincoli |
Descrizione |
id_farmaco |
INTEGER |
FK, PK |
id del farmaco prodotto |
quantita |
INTEGER |
|
quantità prodotta |
giorni_scadenza |
INTEGER |
|
giorni dopo i quali il farmaco prodotto scade |
giorni_produzione |
INTEGER |
|
giorno della settimana in cui viene effettuata la produzione (1=Lunedì…7=Domenica) |
Collo:
Nome |
Tipo |
Vincoli |
Descrizione |
id_collo |
INTEGER |
PK, AUTO INCREMENT |
id univoco del collo |
id_farmacia |
INTEGER |
FK |
id della farmacia a cui va consegnato il collo |
data_consegna |
DATE |
|
data di consegna del collo |
firma |
VARCHAR[255] |
|
firma del Farmacista che certifica l’avvenuta consegna |