UNIVERSIDAD NACIONAL HERMILIO VALDIZÁN
FACULTAD DE INGENIERÍA INDUSTRIAL Y DE SISTEMAS
ESCUELA PROFESIONAL INGENIERÍA DE SISTEMAS
Base de datos Botica N&C
Asignatura:
Teoría y diseño de base de datos
Docente:
Elmer Chuquiyauri
Milton Pardave
Integrantes:
Campos Espinoza, Serghio
Chamorro Alva, Melvin
Quijano Montalvo, Elim
HUÁNUCO – 2021
RESEÑA DE BOTICA Y PRINCIPIOS GENERALES
Boticas N&C nace a raíz de la necesidad popular por conseguir medicamentos a
costos cómodos y disponibles a la cercanía del hogar. Es por ello, que asentándose
en el distrito de Amarilis dio inicio a un proyecto a fin de solucionar la problemática
descrita anteriormente. Con un puesto estratégico y productos de prima, el negocio
comenzó a tener una gran acogida de clientes por día y consigo un mayor
movimiento de productos.
DESCRIPCIÓN DE LA PROBLEMÁTICA
Con el transcurso de los meses el incremento de clientes simbolizó una ligera
desventaja en cuanto al campo administrativo y financiero del establecimiento. La
entrada y salida de medicinas, hizo difícil el control y búsqueda de los Inventarios
de forma manual (notas, cuadernos, boletas de venta, entre otros) ante el gran
número de clientes que recibía el establecimiento diariamente.
Actualmente en el país, específicamente en la ciudad de Huánuco, en el sector
salud se han presentado diferentes inconvenientes, como lo son la entrega errónea
de medicamentos a sus pacientes, la pérdida de medicamentos, la caducidad de
estos mismos por falta de venta o entrega, el tiempo de disponibilidad de
medicamentos o cómo puede presentarse el tiempo para atender a los pacientes.
Sin embargo, el proceso en la entrega de medicamentos es en donde se presentan
más dificultades, debido a factores como pueden ser, el mal proceso de inventario,
que se debe a no usar adecuadamente la organización del inventario o el personal
no está debidamente capacitado.
En 2016 un grupo de investigadores de farmacología de Audifarma publicaron
datos, en donde durante 8 años se presentaron 14.873 equivocaciones de
medicación, en donde 5.512 fueron errores al momento de la revisión de la fórmula
médica y 4.631 errores se relacionaron con la dispensación del medicamento. (Silva
Numa, 2020). De este reporte un 67% hace referencia a las personas encargadas
de formular y entregar los medicamentos, luego un 12% el cual se relaciona con la
confusión del medicamento.(Redacción salud, 2017)
Requerimientos funcionales y no funcionales
Mediante las técnicas de análisis de requerimientos se pueden especificar de manera
correcta las diferentes acciones, funcionalidades, tareas o comportamiento que tendrá el
sistema de información propuesto y así minimizar lo relacionado al momento de su
desarrollo. A continuación, se presentarán los diferentes requerimientos, tanto funcionales
como no funcionales del sistema.
Requerimientos funcionales
Cuadro 1. Registro del trabajador
Nombre del Registrar Administradores y trabajadores.
Requerimiento:
Características: Los administradores deberán registrarse para acceder a
cualquier función del sistema.
Descripción del El sistema permitirá al usuario (Trabajador, administrador)
requerimiento: registrarse. El usuario debe suministrar datos como: Nombre,
Apellidos, E-mail, Número celular y dependiendo el tipo Usuario
y contraseña.
Prioridad del requerimiento:
Alta
Cuadro 2. Gestión del trabajador
Nombre del Gestión de Usuarios.
Requerimiento:
Características: El sistema permitiría al usuario con rango de administrador
modificar datos que se encuentren en el sistema y con rango de
trabajador, realizar ventas.
Descripción del El administrador, podrá modificar los datos de los usuarios
requerimiento:
Prioridad del requerimiento:
Alta
Cuadro 3. Registro del medicamento.
Nombre del Registrar medicamentos .
Requerimiento:
Características: El usuario de la farmacia podrá registrar los diferentes
medicamentos en el sistema
Descripción del El sistema permitirá al usuario registrar las características del
requerimiento: medicamento para que sea guardado en la base de datos, se
suministrarán datos como: nombre, empaque, cantidad,
presentación, fecha de vencimiento, vía administración,
almacenamiento, especificaciones, precio.
Prioridad del requerimiento:
Alta
Cuadro 4. Gestión del medicamento.
Nombre del Gestión de medicamentos .
Requerimiento:
Características: Los usuarios podrán visualizar los datos de los medicamentos
Descripción del El sistema permitirá al usuario consultar los datos de cualquier
requerimiento: medicamento.
Prioridad del requerimiento:
Alta
Cuadro 5. Generación factura.
Nombre del Generar factura .
Requerimiento:
Características: El operario realizará el diligenciamiento de un formato en donde
se especifique el trámite realizado y se tendrá evidencia para el
cliente.
Descripción del El sistema permitirá gestionar información sobre la venta de un
requerimiento: medicamento en donde se recopilan datos como: nombre del
medicamento, precio, cantidad y fecha.
Prioridad del requerimiento:
Alta
Cuadro 6. Gestión factura.
Nombre del Gestión factura.
Requerimiento:
Características: El usuario podrá realizar acciones sobre las facturas
registradas
Descripción del El sistema permitirá al usuario consultar o eliminar cualquier
requerimiento: registro de factura
Prioridad del requerimiento:
Alta
Requerimientos no funcionales
Cuadro 7. Seguridad.
Nombre del Seguridad
Requerimiento:
Características: El sistema debe proveer un mecanismo de autenticación para
utilizar las diferentes funciones qué provee el sistema de
información.
Descripción del El sistema debe permitir una manera de autenticación de los
requerimiento: usuarios para ingresar al sistema
Prioridad del requerimiento:
Alta
Cuadro 8. Documentación.
Nombre del Documentación
Requerimiento:
Características: El sistema deberá de tener un manual de usuario para facilitar
los mantenimientos que serán realizados por el administrador.
Descripción del El sistema debe poseer una documentación calara y
requerimiento: comprensible para el usuario y fácil de actualizar.
Prioridad del requerimiento:
Alta
MODELO LÓGICO
1. Script del modelo
CREATE TABLE ANAQUEL
(
id_anaquel INTEGER(10) NOT NULL,
fila_anaquel CHAR(18) NULL,
columna_anaquel CHAR(18) NULL,
capacidad_anaquel CHAR(18) NULL
);
ALTER TABLE ANAQUEL
ADD PRIMARY KEY (id_anaquel);
CREATE TABLE CATEGORIA
(
id_categoria CHAR(18) NOT NULL,
nombre_categoria CHAR(18) NULL,
nota_categoria CHAR(18) NULL
);
ALTER TABLE CATEGORIA
ADD PRIMARY KEY (id_categoria);
CREATE TABLE CLIENTE
(
dni_cliente CHAR(18) NOT NULL,
nombre_cliente CHAR(18) NULL,
apellido_cliente CHAR(18) NULL,
direccion_cliente CHAR(18) NULL,
telefono_cliente CHAR(18) NULL
);
ALTER TABLE CLIENTE
ADD PRIMARY KEY (dni_cliente);
CREATE TABLE DETALLES_VENTA
(
id_detallecompra CHAR(18) NOT NULL,
id_venta CHAR(18) NULL,
id_producto CHAR(18) NULL,
cantidad_detallecompra CHAR(18) NULL
);
ALTER TABLE DETALLES_VENTA
ADD PRIMARY KEY (id_detallecompra);
CREATE TABLE LUGARES_ANAQUEL
(
n_filas CHAR(18) NULL,
n_columnas CHAR(18) NULL,
id_producto CHAR(18) NULL,
id_lugaraanaquel CHAR(18) NOT NULL,
id_anaquel INTEGER(10) NULL
);
ALTER TABLE LUGARES_ANAQUEL
ADD PRIMARY KEY (id_lugaraanaquel);
CREATE TABLE PRODUCTO
(
id_producto CHAR(18) NOT NULL,
nombre_producto CHAR(18) NULL,
stock_producto CHAR(18) NULL,
imagen_producto CHAR(18) NULL,
forma_producto CHAR(18) NULL,
preciocompra_producto CHAR(18) NULL,
precioventa_producto CHAR(18) NULL,
id_categoria CHAR(18) NULL,
ruc_proveedor CHAR(18) NULL,
marca_producto CHAR(18) NULL,
fecha_vencimiento CHAR(18) NULL,
feche_recepcion CHAR(18) NULL
);
ALTER TABLE PRODUCTO
ADD PRIMARY KEY (id_producto);
CREATE TABLE PROVEEDOR
(
ruc_proveedor CHAR(18) NOT NULL,
nombre_proveedor CHAR(18) NULL,
telefono_proveedor CHAR(18) NULL,
nombrecontacto_proveedor CHAR(18) NULL
);
ALTER TABLE PROVEEDOR
ADD PRIMARY KEY (ruc_proveedor);
CREATE TABLE TRABAJADOR
(
dni_trabajador CHAR(18) NOT NULL,
nombre_trabajador CHAR(18) NULL,
apellido_trabajdor CHAR(18) NULL,
nacimiento_trabajador CHAR(18) NULL,
direccion_trabajador CHAR(18) NULL,
correo_trabajador CHAR(18) NULL,
categoria_trabajador CHAR(18) NULL,
contraseña_trabajador CHAR(18) NULL
);
ALTER TABLE TRABAJADOR
ADD PRIMARY KEY (dni_trabajador);
CREATE TABLE VENTA
(
id_venta CHAR(18) NOT NULL,
fecha_venta CHAR(18) NULL,
dni_trabajador CHAR(18) NULL,
dni_cliente CHAR(18) NULL
);
ALTER TABLE VENTA
ADD PRIMARY KEY (id_venta);
ALTER TABLE DETALLES_VENTA
ADD FOREIGN KEY R_11 (id_venta) REFERENCES VENTA (id_venta);
ALTER TABLE DETALLES_VENTA
ADD FOREIGN KEY R_12 (id_producto) REFERENCES PRODUCTO (id_producto);
ALTER TABLE LUGARES_ANAQUEL
ADD FOREIGN KEY R_13 (id_producto) REFERENCES PRODUCTO (id_producto);
ALTER TABLE LUGARES_ANAQUEL
ADD FOREIGN KEY R_16 (id_anaquel) REFERENCES ANAQUEL (id_anaquel);
ALTER TABLE PRODUCTO
ADD FOREIGN KEY R_5 (id_categoria) REFERENCES CATEGORIA (id_categoria);
ALTER TABLE PRODUCTO
ADD FOREIGN KEY R_15 (ruc_proveedor) REFERENCES PROVEEDOR
(ruc_proveedor);
ALTER TABLE VENTA
ADD FOREIGN KEY R_9 (dni_trabajador) REFERENCES TRABAJADOR
(dni_trabajador);
ALTER TABLE VENTA
ADD FOREIGN KEY R_10 (dni_cliente) REFERENCES CLIENTE (dni_cliente);
2. Descripción de tablas
Tabla cliente: Se hace el registro de los datos importantes de los clientes, personas
recurrentes de la farmacia
● dni_cliente: Identificador del cliente.
● nombre_cliente: Nombres del cliente.
● apellido_cliente: Apellidos del cliente.
● direccion_cliente: Domicilio del cliente.
● telefono_cliente: Teléfono del cliente.
Tabla venta: Se realiza el registro de existencia de la venta, relacionando el
trabajador y el cliente.
● id_venta: Identificador de la venta.
● fecha_venta: Fecha en la que se realizó el pedido.
● dni_trabajador: Identificador del trabajador.
● dni_cliente: Identificador del cliente.
Tabla detalles_venta: Se realiza el registro de los productos que se realizaron en la
venta.
● id_detallecompra: Identificador del detalle venta.
● id_venta: Identificador de la venta.
● id_producto: Identificador del producto comprado.
● cantidad_detallecompra: Registra la cantidad de producto comprado.
Tabla trabajador: Se registran los datos más importantes del trabajador de la
botica.
● dni_trabajador: Identificador del trabajador.
● nombre_trabajador: Nombre del trabajador.
● nacimiento_trabajador: Fecha de nacimiento del trabajador.
● direccion_trabajador: Domicilio del trabajador.
● correo_trabajador: Correo electrónico del trabajador.
● categoria_trabajador: El puesto que ocupa (vendedor, administrador).
● contraseña_trabajador: Contraseña de la cuenta del trabajador.
Tabla proveedor: Se registran los datos más importantes de los proveedores de la
botica.
● ruc_proveedor: Identificador del proveedor.
● nombre_preveedor: Nombre comercial del proveedor.
● telefono_proveedor: Telefono de contacto del proveedor represnetante.
● nombrecontacto_proveedor: Nombre del contacto proveedor.
Tabla anaquel: Se registran el ingreso de los anaqueles a la botica.
● id_anaquel: Identificador anaquel.
● fila_anaquel: Cantidad de filas que contiene el anaquel.
● columna_anaquel: Cantidad de columnas o separaciones que tiene el
anaquel.
● capacidad_anaquel: Capacidad de cada espacio del anaquel.
Tabla lugare_anaquel: Se registran el posicionamiento de los productos
ingresados.
● id_lugaraanaquel: Identificador del espacio.
● n_filas: El número de fila.
● n_columnas: El número de columna al que pertenece.
● id_producto: Identificador del producto que se guardará en esa posición.
● id_anaquel: Identificador del anaquel al cual pertenece el espacio.
Tabla categoría: Guarda las categorías de los medicamentos.
● id_categoria: Identificador único de la categoría.
● nombre_categoria: Guarda el nombre de la categoría.
● nota_categoría: Guarda los datos de la categoría.
Tabla productos: Se registran los datos de los productos ingresados en la botica.
● id_producto: Identificador del producto.
● nombre_producto: Nombre comercial producto.
● stock_producto: Cantidad de producto ingresado.
● imgen_producto: Link de la imagen del producto.
● forma_producto: Presentación del producto (Líquidas, Sólidas, Semisólida,
Otras).
● preciocompra_producto: Ingresamos el precio de compra del producto.
● precioventa_producto: Ingreso del precio de venta del producto.
● id_catedoria: Identificador a la categoría que pertenece el fármaco.
● ruc_proveedor: Identificador del proveedor del producto.
● marca_producto: Ingreso de la marca del producto.
● fecha_vencimiento: fecha de vencimiento del producto.
● fecha_recepcion: Fecha de la recepción del pruducto.
3. CONSULTAS
CONSULTAS SQL
1. SELECT SUM(producto.preciocompra_producto *
producto.stock_producto) as compra,
SUM(producto.precioventa_producto * producto.stock_producto) as
venta FROM producto
Consulta utilizada para obtener el total de precio de compra de todos
los medicamentos así como para obtener el total de precio de venta de
todos los medicamentos y definir cuánto es el gasto total y mediante la
resta sacar la ganancia general.
2. SELECT COUNT(*) as cant FROM venta WHERE fecha_venta =
'{$fecha}'
Consulta utilizada para obtener la cantidad de ventas que existen de
una determinada fecha.
3. SELECT COUNT(*) as cant FROM proveedor
Consulta utilizada para obtener la cantidad de proveedores que existen
en la DB.
4. SELECT COUNT(*) as cant FROM trabajador WHERE
categoria_trabajador = 'Empleado'
Consulta utilizada para obtener la cantidad de trabajadores de rango
Empleado que existen en la DB.
5. SELECT SUM(stock_producto) as cant FROM producto
Consulta utilizada para obtener la cantidad real de medicamentos que
existen en la DB.
6. SELECT, INSERT, UPDATE, DELETE
Consultas básicas de todo proceso para un CRUD(Create, Read,
Update, Delete).
TRIGGERS Y PROCEDIMIENTOS DE ALMACENADO
Trigger insertado de fila: Se encarga del proceso de insertado automático
de filas con una columna llena de datos vacíos para “id_producto” en la tabla
“lugares_anaquel” usando los ciclos while.
Trigger insertado de identificador autoincrementable personalizado: Se
encarga del proceso de insertado automático de ID autoincrementables en
las tablas de “anaquel” y “categoría”.
Trigger insertado con procedimiento de almacenado para la gestión de
posición automático de productos en anaqueles: Se encarga del proceso
de llano automático de productos en la tabla “luagres_anaquel”.