System Design Document


 

PHARMAGC 

System Design Document

Team OGC

Buffa Alexandro

Cascio Alessandra

Giambrone Simone

Miccichè Vincenzo


Indice

Obiettivo del Sistema

Architettura software attuale

Architettura software proposta

Panoramica

Decomposizione in sottosistemi

Suddivisione degli oggetti all’interno dei sottosistemi e delle componenti

Mappatura Hardware/Software

Gestione dei dati persistenti

Modello E-R

Modello Relazionale

Struttura delle Tabelle


Obiettivo del Sistema

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.

Architettura software attuale

Supponiamo che non esista nessuna soluzione software usata attualmente per svolgere le funzioni che il sistema proposto può effettuare.

Architettura software proposta

Panoramica

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.

Requisiti minimi per l’utilizzo del software proposto

Per funzionare correttamente, il Software necessita di:


Decomposizione in sottosistemi

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.

Suddivisione degli oggetti all’interno dei sottosistemi e delle componenti

Autenticazione:


Gestione Farmaci:

Gestione Consegna:

Gestione Azienda:


Mappatura Hardware/Software

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.


Gestione dei dati persistenti

Modello E-R

DBMS Farmacie:

DBMS Azienda:


Modello Relazionale

DBMS Farmacie:

I vincoli di tupla presenti sono i seguenti:


DBMS Azienda:

I vincoli di tupla presenti sono i seguenti:

        

Struttura delle Tabelle

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

email

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

email

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

email

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