100% encontró este documento útil (1 voto)
63 vistas38 páginas

Grupo 11

El documento presenta el diseño e implementación de un Sistema de Servicio de Atención para una cafetería, enfocado en mejorar la interacción entre clientes, meseros y administración. Se identifican problemas como la falta de automatización y se establecen objetivos para optimizar la operatividad y la experiencia del cliente. Se detallan requerimientos funcionales y no funcionales, así como subsistemas que abarcan desde la gestión de pedidos hasta el control de inventario.

Cargado por

Brayan Hemer
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
63 vistas38 páginas

Grupo 11

El documento presenta el diseño e implementación de un Sistema de Servicio de Atención para una cafetería, enfocado en mejorar la interacción entre clientes, meseros y administración. Se identifican problemas como la falta de automatización y se establecen objetivos para optimizar la operatividad y la experiencia del cliente. Se detallan requerimientos funcionales y no funcionales, así como subsistemas que abarcan desde la gestión de pedidos hasta el control de inventario.

Cargado por

Brayan Hemer
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD MAYOR DE SAN ANDRÉS

FACULTAD DE CIENCIAS PURAS Y NATURALES


CARRERA DE INFORMÁTICA

“Sistema de Servicio
de Atención para una Cafetería”

Asignatura:
Base de Datos II
Estudiantes:
1.- Alvarez Cuaretti Hugo Ramiro
2.- Gutierrez Llanco Gary Alejandro
3.- Laura Mancilla Brayan Hemer
4.- Quispe Hinojosa Ruth

Docente:
Ph.D. Rogelio Mamani Ramos

La Paz – Bolivia
2025
ÍNDICE
ÍNDICE​ 2

I.​ INTRODUCCIÓN​ 4

1.1.​ BREVE DESCRIPCIÓN DEL PROYECTO​ 4

1.2.​ PROBLEMAS​ 4

1.2.1.​ PROBLEMAS SECUNDARIOS​ 4

1.2.2.​ PROBLEMA PRINCIPAL​ 4

1.3.​ OBJETIVOS​ 4

1.3.1.​ OBJETIVO GENERAL​ 4

1.3.2.​ OBJETIVOS ESPECÍFICOS​ 4

1.4.​ JUSTIFICACIÓN​ 4

II.​ REQUERIMIENTOS​ 5

2.1.​ DIAGNÓSTICO​ 5

2.2.​ REQUERIMIENTOS FUNCIONALES​ 5

2.3.​ REQUERIMIENTOS NO FUNCIONALES​ 5

III.​ ANÁLISIS​ 6

3.1.​ HERRAMIENTAS DE ANÁLISIS​ 6

3.2.​ COMPRENSIÓN DE LOS REQUERIMIENTOS​ 6

3.3.​ IDENTIFICACIÓN DE SUBSISTEMAS​ 6

IV.​ DISEÑO​ 7

4.1.​ HERRAMIENTAS DE DISEÑO​ 7

4.2.​ MODELO ENTIDAD RELACIÓN​ 7

4.3.​ DICCIONARIO DE DATOS​ 7

4.4.​ MODELO RELACIONAL​ 7

V.​ APLICACIÓN​ 8
5.1.​ CREACIÓN DE LA BASE DE DATOS​ 8

5.2.​ PRESENTACIÓN DEL DIAGRAMA​ 8

5.3.​ APLICACIÓN DE X​ 8

5.4.​ APLICACIÓN DE Y​ 8

5.5.​ APLICACIÓN DE LAS CONSULTAS DESDE EL LENGUAJE DE


PROGRAMACIÓN​ 8

VI.​ RESULTADOS​ 9

6.1.​ SELECCIÓN DE DATOS​ 9

6.2.​ RESULTADOS OBTENIDOS​ 9

VII.​ CONCLUSIONES​ 10

BIBLIOGRAFÍA​ 11
I.​ INTRODUCCIÓN
Un sistema de servicio de atención en una cafetería es una solución tecnológica diseñada
para gestionar de manera integral la interacción entre el cliente, el personal de servicio y las
áreas internas del negocio (cocina, caja, administración). Este tipo de sistema puede incluir
funcionalidades como la asignación de mesas, la toma digital de pedidos, el envío
automático de órdenes a cocina o barra, la gestión de cuentas y pagos, así como la
generación de reportes de desempeño.

La implementación de un sistema de atención no solo mejora la experiencia del cliente al


reducir tiempos de espera y errores en los pedidos, sino que también permite al
administrador del negocio tener un mayor control operativo, identificar productos más
vendidos, y tomar decisiones basadas en datos reales. En cafeterías con atención en mesas,
este tipo de solución resulta especialmente valiosa, ya que permite gestionar de forma clara
y estructurada el flujo de trabajo entre meseros, baristas y cajeros.

Este documento (o proyecto) presenta el diseño y desarrollo de un sistema de servicio de


atención adaptado a las necesidades de una cafetería de tamaño pequeño o mediano, con
enfoque en eficiencia, simplicidad y mejora del servicio al cliente.

I.1.​ BREVE DESCRIPCIÓN DEL PROYECTO

El proyecto consiste en el diseño e implementación de un Sistema de Servicio de Atención


para una cafetería. Esta solución tecnológica tiene como objetivo mejorar la interacción
entre clientes, meseros, cocina/barra y administración. Este Proyecto se enfocara más en la
parte Administrativa donde se facilitara la gestión de inventario, reportes de ventas, mostrar
categorías, etc. buscando eficiencia operativa.

I.2.​ PROBLEMAS

PROBLEMAS SECUNDARIOS

●​ Falta de automatización en el registro de clientes.

●​ Dificultad para calcular las ventas por día de forma rápida.


●​ Complejidad para acceder al historial de pedidos.

●​ No se contaba con una forma eficiente de auditar precios y gestionar

promociones.

PROBLEMA PRINCIPAL

¿Cómo mejorar la eficiencia operativa y la atención al cliente en una cafetería mediante un


sistema que centralice la gestión de pedidos, ventas, inventario y administración de manera
automatizada y accesible?

I.3.​ OBJETIVOS

OBJETIVO GENERAL

Desarrollar un sistema de servicio de atención para una cafetería que integre de


forma eficiente la toma de pedidos, gestión de ventas, control de inventario, registro
de clientes y funciones administrativas, con el fin de optimizar el servicio al cliente
y mejorar la operatividad del negocio.

OBJETIVOS ESPECÍFICOS

●​ Automatizar el registro de clientes y su historial de compras.

●​ Facilitar el cálculo y visualización de ventas diarias, semanales y mensuales.

●​ Permitir el acceso rápido al historial de pedidos por cliente, fecha o mesa.

●​ Implementar una herramienta para gestionar precios y promociones activas o

futuras.

●​ Mejorar el seguimiento del estado de los pedidos desde la toma hasta la

entrega.

●​ Controlar el inventario con registros de ingresos, salidas, mermas y

disponibilidad de productos.
●​ Administrar los accesos del personal según roles y registrar horarios de

entrada y salida.

●​ Gestionar proveedores con historial de compras, productos suministrados y

control de pagos.

I.4.​ JUSTIFICACIÓN

El desarrollo de un sistema de servicio de atención para una cafetería responde a la


necesidad de optimizar los procesos internos y mejorar la experiencia del cliente en
establecimientos de tamaño pequeño o mediano. Actualmente, muchas cafeterías operan de
forma manual, lo que genera errores en pedidos, pérdida de tiempo y dificultades en la
administración del negocio. Este sistema facilitará la toma de decisiones mediante reportes
detallados, controlará el flujo de trabajo del personal y asegurará un mejor manejo del
inventario, promoviendo una atención más rápida, precisa y profesional. Además, permitirá
adaptarse a las nuevas tendencias tecnológicas en el sector gastronómico, brindando una
ventaja competitiva frente a negocios que aún no digitalizan sus operaciones.
II.​ REQUERIMIENTOS
II.1.​ DIAGNÓSTICO

El levantamiento de requerimientos se realizó mediante los siguientes métodos:

●​ Entrevistas al personal del negocio (meseros, administradores, cajeros y cocineros)


para conocer sus necesidades, frustraciones y expectativas.
●​ Encuestas a clientes frecuentes, con el fin de comprender su experiencia actual y
sus sugerencias de mejora.
●​ Observación directa de los procesos diarios en la cafetería, identificando tiempos
muertos, errores en la toma de pedidos y manejo de pagos.
●​ Análisis de documentación existente, como cuadernos de pedidos, registros de
ventas y reportes manuales.
●​ Prototipado rápido con esquemas de interfaz (mockups) que fueron validados con
los usuarios antes del desarrollo final.

Se utilizaron las siguientes técnicas y modelos en el proceso de levantamiento:

●​ Modelo de casos de uso de UML: utilizado para describir funcionalmente las


interacciones entre los actores (meseros, cajeros, administradores, etc.) y el sistema.
●​ Técnica de entrevistas estructuradas y semiestructuradas: permite obtener
información directa de los usuarios finales sobre sus necesidades reales, de manera
detallada.
●​ Prototipado rápido: herramienta de desarrollo ágil que permite presentar posibles
soluciones a los usuarios mediante interfaces preliminares, obteniendo
retroalimentación inmediata.
●​ Checklist de requerimientos funcionales y no funcionales: para asegurar la
cobertura total de aspectos como usabilidad, seguridad, disponibilidad, entre otros.
●​ Observación participante: para comprender de forma práctica y contextual los
flujos operativos del negocio.
II.2.​ REQUERIMIENTOS FUNCIONALES

Los requerimientos funcionales definen las acciones específicas que el sistema debe ser
capaz de realizar, relacionadas directamente con los procesos del negocio y las
necesidades de los usuarios. Estos incluyen desde la toma de pedidos, la gestión de clientes
y promociones, hasta el control del inventario y los reportes de ventas. Cada requerimiento
funcional se orienta a resolver uno o más objetivos específicos del proyecto.

ID Nombre del Descripción Prioridad


Requerimiento

RF01 Registro de clientes Registrar datos personales del cliente y Alta


almacenar su historial de compras.

RF02 Consulta del historial de Permitir consultar rápidamente las Alta


clientes compras de un cliente por fecha o
monto.

RF03 Reportes de ventas por Generar reportes automáticos de ventas Alta


período por día, semana, mes o año.

RF04 Reporte por forma de Mostrar totales por tipo de pago, Media
pago y productos vendidos productos más vendidos y ventas por
categoría.

RF05 Historial de pedidos Permitir buscar pedidos anteriores por Alta


cliente, fecha o número de mesa.

RF06 Gestión de promociones Crear, activar y programar promociones Alta


(2x1, combos, descuentos, etc.).

RF07 Gestión de precios Modificar precios por producto o por Alta


categoría con control de cambios.

RF08 Seguimiento del estado de Cambiar y visualizar estados como Alta


los pedidos “Tomado”, “En preparación”, “Listo”,
“Entregado”.

RF09 Control de inventario Registrar entradas y salidas, mermas, Alta


generar alertas de stock bajo.
RF10 Relación entre productos e Asignar ingredientes a productos del Alta
ingredientes menú para control automático de
insumos.

RF11 Gestión de proveedores Registrar proveedores, sus productos y Alta


ver historial de compras y pagos.

RF12 Visualización del menú Mostrar productos clasificados (bebidas Alta


por categorías calientes, frías, postres, promociones,
etc.).

RF13 Toma digital de pedidos Seleccionar productos desde una Alta


interfaz táctil o PC, con opciones y
observaciones.

RF14 Envío automático del Al confirmar un pedido, enviarlo Alta


pedido a cocina/barra automáticamente a la estación
correspondiente.

RF15 Emisión de factura o Emitir comprobante físico o digital con Alta


recibo QR y desglose de productos e
impuestos.

RF16 Administración de roles y Asignar permisos según el rol (mesero, Alta


accesos del personal cajero, administrador).

RF17 Registro de horarios del Registrar hora de ingreso y salida de Media


personal cada trabajador.

II.3.​ REQUERIMIENTOS NO FUNCIONALES

Los requerimientos no funcionales establecen las condiciones de calidad, rendimiento,


seguridad y disponibilidad que debe cumplir el sistema. No están ligados directamente a
una funcionalidad específica, pero son fundamentales para garantizar que el sistema sea
usable, confiable, seguro y adaptable a distintos entornos tecnológicos. Incluyen aspectos
como el tiempo de respuesta, la escalabilidad, la usabilidad y la protección de los datos.
ID Nombre del Descripción Prioridad
Requerimiento

RNF01 Tiempo de respuesta El sistema debe responder a las solicitudes Alta


en menos de 2 segundos.

RNF02 Disponibilidad del El sistema debe estar disponible al menos Alta


sistema el 99% del tiempo.

RNF03 Seguridad de datos Los datos deben estar cifrados y protegidos Alta
mediante autenticación.

RNF04 Escalabilidad Capacidad para crecer en número de Media


usuarios sin afectar el rendimiento.

RNF05 Mantenibilidad El código debe estar modularizado y Alta


documentado para facilitar mejoras.

RNF06 Usabilidad Interfaz amigable para usuarios sin Alta


conocimientos técnicos.

RNF07 Portabilidad Ejecutarse en diferentes dispositivos y Media


sistemas operativos.

RNF08 Compatibilidad con Compatible con impresoras de tickets, Alta


hardware pantallas táctiles y lectores de código QR.

RNF09 Respaldo automático Copias de seguridad generadas Alta


automáticamente cada día.

RNF10 Gestión de accesos Permisos diferenciados por roles del Alta


personal.
III.​ ANÁLISIS
III.1.​ HERRAMIENTAS DE ANÁLISIS

Para el análisis del sistema se utilizaron herramientas como:

●​ Diagramas de Casos de Uso (UML): Para representar las interacciones entre los
actores (mesero, cajero, administrador, cocina) y el sistema.
●​ Diagramas Entidad-Relación (ER): Para estructurar las tablas y relaciones de la
base de datos.
●​ Historias de usuario y flujos de trabajo: Para describir escenarios reales que
ocurren dentro de la cafetería.
●​ Herramientas de modelado como Draw.io: Para elaborar diagramas y visualizar la
arquitectura general del sistema.
III.2.​ COMPRENSIÓN DE LOS REQUERIMIENTOS

Los requerimientos obtenidos a través de entrevistas, observación directa y análisis de


procesos fueron organizados por categorías funcionales: gestión de pedidos, gestión de
clientes, inventario, ventas, promociones, y administración. Esta clasificación permitió
identificar prioridades, dependencias entre módulos y necesidades específicas de cada tipo
de usuario del sistema. El análisis detallado ayudó a traducir estas necesidades en
funcionalidades concretas que guiarán el desarrollo de los módulos principales del sistema.

III.3.​ IDENTIFICACIÓN DE SUBSISTEMAS

A partir del análisis de requerimientos, el sistema fue dividido en los siguientes


subsistemas:

1.​ Subsistema de Pedidos: Para tomar, gestionar y monitorear los pedidos


realizados en mesa o para llevar.
2.​ Subsistema de Cocina/Barra: Encargado de recibir y actualizar el estado de los
pedidos en preparación.

3.​ Subsistema de Clientes: Registro, historial de compras y beneficios por fidelidad.


4.​ Subsistema de Facturación y Pagos: Procesamiento de pagos, generación de
facturas y manejo de métodos de pago.

5.​ Subsistema de Reportes: Generación de estadísticas de ventas, productos más


vendidos, ingresos por día, etc.

6.​ Subsistema de Inventario: Gestión de stock de productos e ingredientes, control


de entradas, salidas y mermas.

7.​ Subsistema de Administración: Gestión del personal, control de accesos por rol y
administración de promociones.

8.​ Subsistema de Proveedores: Registro de proveedores, productos suministrados e


historial de compras.
IV.​ DISEÑO
IV.1.​ HERRAMIENTAS DE DISEÑO

Para la etapa de diseño se utilizaron las siguientes herramientas:

●​ Draw.io: Utilizado para la elaboración del modelo Entidad-Relación (ER),


representando gráficamente las entidades del sistema, sus atributos y relaciones entre
tablas.
●​ Figma: Herramienta de diseño UI/UX empleada para crear mockups o vistas previas de
la interfaz web, permitiendo visualizar la disposición de los componentes (botones,
menús, formularios, etc.).
●​ PostgreSQL: Utilizado para estructurar y crear la base de datos relacional del sistema.
●​ Laravel (PHP): Framework backend elegido para implementar la lógica de negocio,
controladores, rutas y conexión con la base de datos.
●​ React: Librería de JavaScript seleccionada para desarrollar el frontend del sistema web,
brindando una interfaz dinámica e interactiva para los usuarios (cajeros, meseros,
administradores).
IV.2.​ MODELO ENTIDAD RELACIÓN
Usuario(id_usuario, user, password, rol, nombre)

Cliente(id_cliente, nombre, telefono, correo_cli)

Mesa(id_mesa, estado, capacidad)

Pedido(id_pedido, tipo_entrega, estado, es_para_llevar, fecha_hora, id_usuario, id_cliente,


id_mesa)

Producto(id_producto, nombre, precio, categoria, stock)

Promocion(id_promocion, nombre, descripcion, tipo, fecha_inicio, fecha_fin)

Detalle_Pedido(id_detalle, cantidad, observaciones, id_pedido, id_producto, id_promocion)

Ingrediente(id_ingrediente, nombre, unidad_medida, cantidad, punto_reorden)

Producto_Ingrediente(id_producto, id_ingrediente, cantidad)

Proveedor(id_proveedor, nombre, contacto)

Proveedor_Ingrediente(id_proveedor, id_ingrediente)

Factura(id_factura, total, impuestos, metodo_pago, id_pedido)

Promocion_Producto(id_promocion, id_producto)

IV.3.​ DICCIONARIO DE DATOS

Entidad: Usuario

Nombre del Tipo de Dato Tamaño Descripción Formato Restricciones


Atributo

id_usuario INTEGER Identificador Numérico PRIMARY KEY, NOT


único del NULL
usuario
nombre VARCHAR(50) 50 Nombre Texto simple NOT NULL
completo del
usuario

rol VARCHAR(20) 20 Rol asignado Texto simple NOT NULL


(Ej:
administrador,
mesero)

usuario VARCHAR(30) 30 Nombre de Alfanumérico UNIQUE, NOT NULL


usuario para
login

contraseña VARCHAR(100) 100 Contraseña Hashed string NOT NULL


cifrada para
login

Entidad: Cliente

Nombre del Tipo de Dato Tamaño Descripción Formato Restricciones


Atributo

id_cliente INTEGER Identificador Numérico PRIMARY KEY,


único del NOT NULL
cliente

nombre VARCHAR(50) 50 Nombre Texto simple NOT NULL


completo
del cliente

teléfono VARCHAR(15) 15 Número de (+XX)XXXXXXX Formato válido,


teléfono del opcional
cliente

correo_cli VARCHAR(15) 15 Correo del Texto simple NOT NULL


cliente

Entidad: Mesa

Nombre del Tipo de Dato Tamaño Descripción Formato Restricciones


Atributo
id_mesa INTEGER Identificador Numérico PRIMARY KEY, NOT
de la mesa NULL

estado VARCHAR(20) 20 Estado de la Libre, NOT NULL


mesa Ocupada,
Reservada

capacidad INTEGER Cantidad Numérico CHECK (capacidad > 0)


máxima de
personas

Entidad: Pedido

Nombre del Tipo de Dato Tamaño Descripción Formato Restricciones


Atributo

id_pedido INTEGER Identificador Numérico PRIMARY KEY, NOT


único del NULL
pedido

fecha_hora TIMESTAMP Fecha y hora aaaa-mm-dd NOT NULL


del pedido hh:mm:ss

estado VARCHAR(20) 20 Estado del Pendiente, NOT NULL


pedido Preparación,
Entregado

tipo_entrega VARCHAR(20) 20 Tipo de En mesa, NOT NULL


entrega Delivery

total DECIMAL(10,2) Total del Decimal CHECK (total >= 0)


pedido positivo

Entidad: Producto

Nombre del Tipo de Dato Tamaño Descripción Formato Restricciones


Atributo

id_producto INTEGER Identificador Numérico PRIMARY KEY, NOT


único del NULL
producto
nombre VARCHAR(50) 50 Nombre del Texto NOT NULL
producto

precio DECIMAL(10,2) Precio Decimal CHECK (precio >= 0)


unitario del
producto

categoría VARCHAR(30) 30 Categoría Ej: NOT NULL


del producto Bebida,
Comida

stock INTEGER Cantidad Entero CHECK (stock >= 0)


disponible
en
inventario

es_para_llevar BOOLEAN Indica si es true / NOT NULL


para llevar false

Entidad: Detalle_Pedido

Nombre del Atributo Tipo de Dato Tamañ Descripción Formato Restricciones


o

id_detalle INTEGER Identificador Numérico PRIMARY KEY,


del detalle del NOT NULL
pedido

cantidad INTEGER Cantidad del Entero CHECK (cantidad


producto en el > 0)
pedido

observaciones TEXT Observacione Texto Opcional


s del cliente libre

status_preparacion VARCHAR(20 20 Estado de Pendiente NOT NULL


) preparación , En
proceso,
Listo

Entidad: Ingrediente
Nombre del Tipo de Dato Tamaño Descripción Formato Restricciones
Atributo

id_ingrediente INTEGER Identificador Numérico PRIMARY KEY,


único del NOT NULL
ingrediente

nombre VARCHAR(50) 50 Nombre del Texto NOT NULL


ingrediente

cantidad DECIMAL(10,2) Cantidad Decimal CHECK (cantidad >=


disponible 0)

unidad_medida VARCHAR(20) 20 Unidad de Ej: NOT NULL


medida gramos,
litros

punto_reorden DECIMAL(10,2) Cantidad Decimal CHECK


mínima (punto_reorden >= 0)
antes de
reordenar

Entidad: Proveedor

Nombre del Tipo de Dato Tamaño Descripción Formato Restricciones


Atributo

id_proveedor INTEGER Identificador Numérico PRIMARY KEY,


único del NOT NULL
proveedor

nombre VARCHAR(50) 50 Nombre del Texto NOT NULL


proveedor

contacto VARCHAR(100) 100 Información Teléfono, Opcional


de contacto email

Entidad: Factura

Nombre del Tipo de Dato Tamaño Descripción Formato Restricciones


Atributo
id_factura INTEGER Identificador Numérico PRIMARY KEY,
de la factura NOT NULL

metodo_pago VARCHAR(30) 30 Método de Efectivo, NOT NULL


pago Tarjeta,
QR

impuestos DECIMAL(10,2) Monto de Decimal CHECK (impuestos


impuestos >= 0)
aplicados

total DECIMAL(10,2) Total Decimal CHECK (total >= 0)


facturado

Entidad: Promoción

Nombre del Tipo de Dato Tamaño Descripción Formato Restricciones


Atributo

id_promocion INTEGER Identificador Numérico PRIMARY KEY,


de la NOT NULL
promoción

descripcion TEXT Descripción Texto NOT NULL


de la
promoción

tipo VARCHAR(30) 30 Tipo de Ej: NOT NULL


promoción Descuento,
Combo

fecha_inicio DATE Fecha de aaaa-mm-d NOT NULL


inicio d

fecha_fin DATE Fecha de aaaa-mm-d NOT NULL


finalización d
IV.4.​ MODELO RELACIONAL
V.​ APLICACIÓN
V.1.​ CREACIÓN DE LA BASE DE DATOS
CREATE DATABASE sistema_cafeteria;

CREATE TABLE Usuario (

id_usuario SERIAL PRIMARY KEY,

nombre VARCHAR(100),

rol VARCHAR(50),

usuario VARCHAR(50) UNIQUE,

contraseña VARCHAR(100)

);

CREATE TABLE Cliente (

id_cliente SERIAL PRIMARY KEY,

nombre VARCHAR(100),

telefono VARCHAR(20),

correo_cli VARCHAR(50)

);

CREATE TABLE Mesa (

id_mesa SERIAL PRIMARY KEY,

estado VARCHAR(50),

capacidad INT

);
CREATE TABLE Pedido (

id_pedido SERIAL PRIMARY KEY,

fecha_hora TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

estado VARCHAR(50),

tipo_entrega VARCHAR(50),

total NUMERIC(10,2),

id_usuario INT REFERENCES Usuario(id_usuario),

id_cliente INT REFERENCES Cliente(id_cliente),

id_mesa INT REFERENCES Mesa(id_mesa)

);

CREATE TABLE Producto (

id_producto SERIAL PRIMARY KEY,

nombre VARCHAR(100),

precio NUMERIC(10,2),

categoria VARCHAR(50),

stock INT,

es_para_llevar BOOLEAN

);

CREATE TABLE Detalle_Pedido (

id_detalle SERIAL PRIMARY KEY,


cantidad INT,

observaciones TEXT,

status_preparacion VARCHAR(50),

id_pedido INT REFERENCES Pedido(id_pedido),

id_producto INT REFERENCES Producto(id_producto)

);

CREATE TABLE Ingrediente (

id_ingrediente SERIAL PRIMARY KEY,

nombre VARCHAR(100),

cantidad NUMERIC(10,2),

unidad_medida VARCHAR(50),

punto_reorden NUMERIC(10,2)

);

CREATE TABLE Proveedor (

id_proveedor SERIAL PRIMARY KEY,

nombre VARCHAR(100),

contacto VARCHAR(100)

);

CREATE TABLE Factura (

id_factura SERIAL PRIMARY KEY,


metodo_pago VARCHAR(50),

impuestos NUMERIC(10,2),

total NUMERIC(10,2),

id_pedido INT UNIQUE REFERENCES Pedido(id_pedido)

);

CREATE TABLE Promocion (

id_promocion SERIAL PRIMARY KEY,

descripcion TEXT,

tipo VARCHAR(50),

fecha_inicio DATE,

fecha_fin DATE

);

CREATE TABLE Producto_Ingrediente (

id_producto INT REFERENCES Producto(id_producto),

id_ingrediente INT REFERENCES Ingrediente(id_ingrediente),

cantidad_usada NUMERIC(10,2),

PRIMARY KEY (id_producto, id_ingrediente)

);

CREATE TABLE Proveedor_Ingrediente (


id_proveedor INT REFERENCES Proveedor(id_proveedor),

id_ingrediente INT REFERENCES Ingrediente(id_ingrediente),

PRIMARY KEY (id_proveedor, id_ingrediente)

);

CREATE TABLE Promocion_Producto (

id_promocion INT REFERENCES Promocion(id_promocion),

id_producto INT REFERENCES Producto(id_producto),

PRIMARY KEY (id_promocion, id_producto)

);
V.2.​ PRESENTACIÓN DEL DIAGRAMA

V.3.​ APLICACIÓN - AUDITAR PRODUCTOS

Implementación de un mecanismo de auditoría automática para los cambios de los precios


de la tabla Producto.
La tabla Historial precios almacena el id_producto, su precio anterior, su precio nuevo
además la fecha y hora en la que ocurrió el cambio.

Función fn_auditar_precio() es de tipo TRIGGER, lo que significa que será llamada


automáticamente cuando se actualicen el precio de la tabla producto.

Trigger trg_auditar_precio que se activará después de actualizar un precio de la tabla


producto.

V.4.​ APLICACIÓN - ELIMINACIÓN DE PROVEEDORES

Se implementó un mecanismo de auditoría y respaldo automático para controlar las


operaciones de eliminación (baja) de registros en la tabla Proveedor.

La tabla proveedores_eliminados almacena el id_proveedor, su nombre, el


contacto, y la fecha y hora en la que se realizó la eliminación. Esto permite
conservar un historial de proveedores eliminados para fines de trazabilidad y auditoría.

La función fn_borrar_relaciones_proveedor() es de tipo TRIGGER


BEFORE DELETE, y se encarga de eliminar previamente todas las relaciones del
proveedor con los ingredientes registrados en la tabla Proveedor_Ingrediente,
evitando errores de integridad referencial.

La función fn_backup_proveedor() también es de tipo TRIGGER, y se activa


después de eliminar un proveedor. Su objetivo es guardar automáticamente una copia de
los datos eliminados en la tabla proveedores_eliminados.

El trigger trg_borrar_relaciones_proveedor se activa antes de eliminar un


proveedor, y ejecuta la función que limpia sus relaciones.

El trigger trg_backup_proveedor se activa después de la eliminación, y llama a la


función que registra el respaldo del proveedor eliminado.

Esta implementación garantiza que no queden registros huérfanos en otras tablas y que toda
eliminación tenga un respaldo automático sin intervención manual.

---eliminar un proveedor:

-- 1. Crear tabla para respaldo de proveedores eliminados

CREATE TABLE IF NOT EXISTS proveedores_eliminados (

id_backup SERIAL PRIMARY KEY, -- Identificador único


del respaldo

id_proveedor INT, -- ID del proveedor


eliminado

nombre VARCHAR(100), -- Nombre del proveedor

contacto VARCHAR(100), -- Contacto del


proveedor

fecha_eliminacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- Fecha y


hora del respaldo automático

);

-- 2. Función para borrar relaciones antes de eliminar un proveedor

CREATE OR REPLACE FUNCTION fn_borrar_relaciones_proveedor()


RETURNS TRIGGER AS $$

BEGIN

DELETE FROM Proveedor_Ingrediente WHERE id_proveedor =


OLD.id_proveedor;

RETURN OLD;

END;

$$ LANGUAGE plpgsql;

-- 3. Trigger BEFORE DELETE para ejecutar la función anterior

DROP TRIGGER IF EXISTS trg_borrar_relaciones_proveedor ON Proveedor;

CREATE TRIGGER trg_borrar_relaciones_proveedor

BEFORE DELETE ON Proveedor

FOR EACH ROW

EXECUTE FUNCTION fn_borrar_relaciones_proveedor();

-- 4. Función para respaldar proveedor eliminado

CREATE OR REPLACE FUNCTION fn_backup_proveedor()

RETURNS TRIGGER AS $$

BEGIN

-- Insertar los datos del proveedor que se está eliminando en la


tabla de respaldo

INSERT INTO proveedores_eliminados (id_proveedor, nombre,


contacto)

VALUES (OLD.id_proveedor, OLD.nombre, OLD.contacto);


-- Devolver la fila antigua para continuar con la operación de
eliminación

RETURN OLD;

END;

$$ LANGUAGE plpgsql;

-- 5. Trigger AFTER DELETE para ejecutar la función de respaldo

-- Primero eliminamos el trigger si ya existe para evitar errores al


crear uno nuevo

DROP TRIGGER IF EXISTS trg_backup_proveedor ON Proveedor;

-- Creamos un nuevo trigger llamado 'trg_backup_proveedor' que se


ejecuta después de eliminar un registro

CREATE TRIGGER trg_backup_proveedor

AFTER DELETE ON Proveedor -- Se activa justo después de


borrar un proveedor

FOR EACH ROW -- Se ejecuta una vez por cada fila


eliminada

EXECUTE FUNCTION fn_backup_proveedor(); -- Llama a la función que


guarda el respaldo del proveedor eliminado

SELECT * FROM proveedor;

-- Borra un proveedor (por ejemplo el id 20)

DELETE FROM Proveedor WHERE id_proveedor = 20;

-- Verifica que se borraron sus relaciones

SELECT * FROM Proveedor_Ingrediente WHERE id_proveedor = 20;

-- Verifica el respaldo del proveedor eliminado

SELECT * FROM proveedores_eliminados WHERE id_proveedor = 20;


Select * From proveedor;

V.5.​ APLICACIÓN DE LAS CONSULTAS DESDE EL LENGUAJE DE


PROGRAMACIÓN

Para interactuar con la base de datos PostgreSQL, se utilizó el lenguaje de programación


PHP mediante el framework Laravel. Laravel proporciona herramientas poderosas para
ejecutar consultas SQL de forma segura y estructurada a través de su sistema de Eloquent
ORM y del componente Query Builder.

Consultas realizadas:

1.​ Consulta para listar los clientes registrados

Se implementó un controlador en Laravel (ClienteController) que consulta


la tabla cliente y devuelve todos los registros en orden descendente por el ID:

Esta consulta es consumida desde el frontend (React) mediante una petición


axios.get(...) al endpoint /api/cliente.
2.​ Consulta para calcular el total de ventas por fecha específica

Se implementó una función almacenada en PostgreSQL llamada


registrar_ventas_diarias_proc(fecha_input DATE), la cual
calcula el total de ventas para un día determinado. Luego, desde Laravel, se ejecuta
esta función mediante el siguiente código:

Esta consulta permite que el frontend consulte el total de ventas diario con solo
ingresar una fecha, a través de una petición axios.get(...).

3.​ Consulta para adicionar datos a la tabla clientes

Este método permite registrar un nuevo cliente desde una interfaz web (por ejemplo, un
formulario en React) y guarda automáticamente los datos en la tabla cliente de la base
de datos.
4.​ Implementación de un mecanismo de auditoría automática para los cambios de
los precios de la tabla Producto.

Para comprobar el funcionamiento del Trigger actulizaremos el precio a 60 del


producto de ID 2.

Una vez insertado el nuevo precio se mostrará la Tabla Historial Precios donde
podremos apreciar la actualización realizada.
VI.​ RESULTADOS
VI.1.​ SELECCIÓN DE DATOS

Para el Trigger de “Implementación de un mecanismo de auditoría automática para los


cambios de los precios de la tabla Producto” se utilizó la Tabla Producto donde se
actualizarán los precios.

Además se utilizó la Tabla Historial Precios donde se mostrará el cambio de los últimos 5
cambios de precios registrados.

VI.2.​ RESULTADOS OBTENIDOS

El resultado obtenido del Trigger de “Implementación de un mecanismo de auditoría


automática para los cambios de los precios de la tabla Producto” es el esperado. Este
resultado es apreciado en PHP.
VII.​ CONCLUSIONES
Desde una perspectiva administrativa, el desarrollo del sistema de atención para la cafetería
representa una herramienta útil para optimizar la gestión interna del negocio. La
automatización de procesos como el registro de clientes, el control de inventario, auditoria
de precios, alertas, mostrar productos por categoría y el seguimiento de ventas permite al
administrador contar con información clara, precisa y en tiempo real, lo cual facilita la toma
de decisiones más efectivas y oportunas.

El sistema también mejora significativamente la coordinación entre áreas operativas, al


permitir un control detallado de la gestión de promociones, el historial de consumo por
cliente y la administración del personal.

En conjunto, esta solución tecnológica no solo optimiza los recursos disponibles, sino que
también fortalece el control y la supervisión general del negocio, permitiendo al
administrador enfocar sus esfuerzos en estrategias de mejora continua y crecimiento
sostenible.
BIBLIOGRAFÍA
Alarcón Herrera, E., & Crovetto Huerta, C. (2004). Bases de Datos en SQL Server 2005.
Megabyte.

De Miguel Castaño, A., Martínez Fernández, P., & Castro Galán, E. (2001). Diseño de
Bases de Datos: Problemas resueltos. Alfaomega Grupo Editor / Ra-ma.

Matsukawa Maeda, S. (2006). Oracle: Implementación y operación de una base de datos


para versiones 8i, 9i y 10g. Empresa Editora Macro E.I.R.L.

Shvets, A. (2019). Sumérgete en los patrones de diseño. Refactoring.Guru.

Robles, J. (2023). Máster en Laravel: Guía completa para el desarrollo web. Laravel Daily.

[Autor no especificado]. (2005). Programación en SQL 2005. Megabyte.

También podría gustarte