Documente Academic
Documente Profesional
Documente Cultură
Sistema Farmacéutico:
El diagrama representa un modelo simplificado de farmacia. La farmacia tiene varias sucursales (localidades), y
cuenta con un STOCK de medicamentos en cada localidad. Existen ciertos medicamentos que tienen principios
activos CONTROLADOS por lo que exigen la receta de un profesional médico con registro vigente. De tanto
en tanto existen promociones, ya sea con un descuento global, o descuentos diferenciados por medicamentos.
Asimismo, se opera con seguros médicos que determinan cierto porcentaje de descuento para medicamentos
nacionales e importados. Finalmente, también se aplica un descuento del 5% al cliente fiel. En el momento de
la venta, se determinará el porcentaje de descuento, optando por el mayor.
a) El tipo TAB_EXISTENCIA como una tabla indexada con los siguientes componentes:
- ID_SUCURSAL
- STOCK_ACTUAL
b) El procedimiento P_VERICAR_STOCK, que recibe como parámetros de entrada el ID del MEDICAMENTO,
el ID de SUCURSAL, y tiene como parámetros de salida el PRECIO y la CANTIDAD.
c) El mismo procedimiento P_VERIFICAR_STOCK (sobrecargado), que recibe como parámetro de entrada el ID
del MEDICAMENTO, y tiene como parámetros de salida el PRECIO y una tabla indexada del tipo
TAB_EXISTENCIA con la lista de las sucursales que poseen en existencia el medicamento solicitado, y el stock
correspondiente.
d) La función F_VERIFICAR_CONTROLADO, que recibe como parámetro el ID del MEDICAMENTO y
retorna un valor booleano indicando si el medicamento posee (true) o no posee (false) alguna droga controlada en
su composición.
e) La función F_DETERMINAR_DESCUENTO que recibe como parámetro el ID de VENTA y el ID de
MEDICAMENTO y devuelve un número con el DESCUENTO que le corresponde al medicamento. La función
verifica, a partir del ID de VENTA, los datos de dicha venta, y realiza lo siguiente:
- Si la venta se realizó con algún seguro médico, verifica si el medicamento es de procedencia ‘PARAGUAY’
en cuyo caso corresponde el descuento para medicamentos nacionales, y en caso contrario, el de
medicamentos importados.
- Si la venta no identifica ningún seguro médico, verifica si la fecha está comprendida en un periodo de
promoción, en cuyo caso, verifica si el medicamento está incluido en dicha promoción, y obtiene el
porcentaje de promoción.
- Si la venta no se realizó con seguro médico ni el medicamento está en promoción, verifica si el cliente de la
venta es un cliente fiel, de ser así, asigna 5 al porcentaje de descuento.
- Si no se cumple ninguna de las condiciones anteriores, el valor retornado será 0
Trabajo Práctico BD II Página: 2/4
DESARROLLO DE LA SOLUCIÓN:
PARTE 2: TRIGGERS
Se definen las reglas de negocio que se implementarán con triggers:
1. Al INSERTAR en la tabla DETALLE VENTAS:
a) Verifica si el medicamento es controlado utilizando la función F_VERIFICAR_CONTROLADO.
Si el medicamento es controlado, verificará que posea un ID de RECETA, en caso contrario, dará error
exigiendo receta.
Adicionalmente, verificará que la receta haya sido expedida con una fecha cuya antigüedad no supere los 30
días, y que el médico que expidió la receta tenga un registro con vigencia no vencida con respecto a la fecha
de venta. (la vigencia debe ser >). De no ser así, dará error.
Verificará además el límite para la venta de medicamentos controlados en dicha sucursal, y controlará si
dicha venta, sumada a las demás ventas de dicho medicamento en la misma sucursal durante ese mes no
sobrepasa el límite para controlados. (verificar si no se produce el inconveniente de tabla mutante).
b) Asigna el precio final, para lo cual verifica si el medicamento tiene un descuento con la función de paquete
F_DETERMINAR_DESCUENTO. De esa manera, el precio final será el precio de lista - el mismo precio
multiplicado por el descuento que corresponde en la fecha de la venta.
c) Resta la cantidad vendida del stock de medicamentos que corresponde a la sucursal
d) Suma el precio final x la cantidad en el monto total de la venta.
DESARROLLO DE LA SOLUCIÓN:
PARTE 3: OBJETOS
La información de los medicamentos controlados vendidos durante el mes, debe ser remitida a través de un
servicio web a la SENAD (Secretaría Nacional de Anti Drogas). Para tal efecto, se define el siguiente objeto en
la base de datos:
1. El tipo T_CONTROLADOS que contenga los siguientes atributos:
FECHA_INFORME
ID_ENVIO VARCHAR2 (14)
MEDICAMENTOS como un varray de 100 elementos conteniendo los siguientes atributos
- NOMBRE_MEDICAMENTO
- NOMBRE_SUCURSAL_VENTA
- CANTIDAD_VENDIDA
- REGISTRO_PROFESIONAL (del médico que expidió la receta)
- FECHA_VENTA
La función estática F_GENERAR_ENVIO que devuelve un objeto del T_CONTROLADOS
o Declara e instancia un objeto del tipo T_CONTROLADOS
o Asigna la fecha de sistema a la fecha de informe
o Asigna el ID_ENVIO concatenando el prefijo ‘FARMA-’ con la fecha hora en el formato
YYYYMMDD
o Llena el varrary MEDICAMENTOS con los medicamentos vendidos durante el mes del
sistema.
o Finalmente devuelve el objeto instanciado.
DESARROLLO DE LA SOLUCIÓN:
PARTE 4: CONSULTA
1. Prepare un procedimiento que permita la consulta dinámica de medicamentos recibiendo los siguientes
parámetros:
Criterio:
- Nombre componente ( C )
- Nombre medicamento ( M )
Trabajo Práctico BD II Página: 4/4
- Nombre de la patología ( P )
Valor del criterio (Varchar2 con el valor del criterio elegido)
En todos los casos, deberá devolver
Nombre Presentación Nombre Sucursal Stock en sucursal Precio de lista
medicamento
DESARROLLO DE LA SOLUCIÓN:
CALIFICACIÓN: