Diseño de Sistema para Farmacia, Manejo de productos por lotes

11,066 views
Skip to first unread message

David

unread,
Mar 24, 2014, 11:59:16 PM3/24/14
to publice...@googlegroups.com
Hola a todos, estoy diseñando un sistema para una farmacia y ya he leido otros temas similares en este foro pero no termino de entender, resulta que ya voy cambiando como 3 veces mi diseño de base de datos porque no le encuentro una solucion optima, la verdad he realizado sistemas pero hasta ahora me tope con uno que se tenga que manejar con lotes para ir controlando las fechas de vencimiento y por lo mismo ya no se que hacer, es por ello que acudo a ustedes porque se que existe gente con mucha experiencia que me puede orientar.

Pues para el manejo del Inventario ahorita tengo el siguiente diseño y quisiera que me hicieran algunas observaciones para no tener que cambiarlo nuevamente y perder mas tiempo del que ya perdi por tanto cambio..

Tengo una tabla de inventario donde registro la informacion de los medicamentos
Tengo una tabla de lotes donde ingreso los lotes de productos y fechas de vencimiento
Una tabla de detalle lotes donde asocio lotes de productos con productos
Una tabla de ventas, esta tabla me registra todas las ventas por lote
Una tabla de detalle_compras, igual esta tabla me registra todas las compras por lote.
Una tabla de Ajustes, para cuando cambios controlados al inventario, por ejemplo cambios o baja de productos por deterioro o vencimiento
Una tabla devoluciones, donde guardo las devoluciones que me hacen de las ventas que he realizado.

Tambien les comento que todas las transacciones que realizo (Ventas, compras, ajustes, etc) me actualizan la tabla detalle_lotes que es donde esta el producto, el lote y su existencia corresondiente. Lo que quiero saber es la forma optima de mostrar todos los movimientos a cierto producto porque ahorita segun mi diseño tengo que consultar la tabla ventas para ver todas las salidas, la tabla compras para ver todas las entradas, la tabla devoluciones para ver las entradas de algun producto en cuestion, sin embargo la dificultad que encuentro es hacer que esta consulta me aparezca toda en un solo reporte, no se si se me complica porque mi diseño esta mal o tengo o alguna sugerencia para obtener el reporte que necesito.

Les agradecere mucho me pueda apoyar con sus sugerencias ya que se me esta dificultando demasiado.

Pd. Este es mi diseño actual.

Idalberto Gonzalez

unread,
Mar 25, 2014, 1:13:19 AM3/25/14
to publice...@googlegroups.com
Hola David

La verdad es que la estructura de tus tablas no es la mas optima para estos casos y en todo el desarrollo de tu aplicacion te daras cuenta de lo complicada que es la situacion creada por una base de datos mal estructurada.

Tengo cierta experiencia programando para farmacias y me atrevo a decirte que aunque respeto tu deseo de incluir lotes como un componente de tu inventario, en la practica no da resultado, no por la aplicacion misma sino por los usuarios y por la importancia de despachar a un cliente el producto requerido aunque el inventario fisico no esté en consonancia con el inventario teorico.

Lo primero que debes saber es que un inventario de farmacia es muy particular, por el tipo de productos que maneja.

En productos farmaceuticos existe el producto, la presentacion y el lote, pero ademas existe la unidad de venta y la unidad de compra.

De entrada debes tener presente lo siguiente:

-El codigo del producto debe ser una combinacion del codigo del producto mas el codigo de la presentacion mas el codigo del lote.

-El nombre del articulo debe ser una combinacion del nombre del producto mas el nombre de la presentacion.

-Se debe establecer una relacion numerica entre la unidad de compra y la unidad de venta, o sea, cuantas veces esta contenida la unidad de venta en la unidad de compra y asi poder hacer una orden de compra expresada en la unidad de compra y al recibir los productos darle entrada al inventario por la unidad de venta.

-Olvidate del numero del lote que viene en el empaque ya que se tornaria inmanejable porque va a depender del pais de procedencia y en ocasiones el mismo producto se fabrica en varios paises diferentes. Lo mejor es crear un procedimiento que te asigne un lote interno dependiendo de un rango, generalmente mensual, de las fechas de vencimiento. Cuando tengas esto entonces estaras listo para asignar codigo a los productos, que podria estar conformado de la siguiente manera

  xxxxxxxxxxx donde los seis primeros caracteres corresponden al producto, los dos siguientes a la presentacion y los tres ultimos a tu numero interno de lote.

Al principio te comentaba que los lotes generalmente no son practicos para control de inventario ya que no es lo mismo un distribuidor o fabricante de medicamentos que despacha pedidos a las farmacias con una logistica bien definida y todo el tiempo disponible a su favor que una farmacia que tiene un empleado presionado por el cliente que esta en el counter y retira de la trameria un producto(el primero que encuentra sin importar el lote) y lugo digita en el sistema cualquier lote. Y de cualquier forma aun si se detiene a ver los lotes y fisicamente tiene existencia pero en el sistema ese lote se agotó por mal manejo de otras ventas, entonces tendrá que sacar cualquier otro lote del sistema y de esta forma el mal manejo del inventario se convierte en una bola de nieve.

Saludos,

Idalberto.
Message has been deleted
Message has been deleted

David

unread,
Mar 25, 2014, 2:09:49 AM3/25/14
to publice...@googlegroups.com
Hola Idalberto muchas gracias por tus observaciones, te comento que en un principio habia pensado trabajar sin lotes por lo que tu acerdamente comentas, de la complicacion de que la cantidad de producto por lotes en el sistema coincida con lo que existe fisicamente, ya que depende mucho del usuario del sistema o vendedor. Como te comente anteriormete cambie mi diseño original en donde no trabajaba los productos por lotes, por el hecho de que por requerimiento el sistema debe alertar sobre los productos con lotes a punto de caducar. Entonces que me sugieres para cumplir con este requerimiento, yo habia pensado en un principio en que el usuario manualmente sacara el reporte de los lotes a punto de vencer (Por decirte los que fueran a vencer en un mes), y que en base al reporte revisara fisicamente si todavia existian productos con ese lote para sacarlos lo mas pronto posible, pero no lo veia tan funcional y muy complicado para el usuario, por el hecho de que el sistema le reportaria demasiados lotes (Todos los que tuvieran un mes o menos de fecha de caducidad) por la situacion de que el sistema no tiene registro de que lotes aun tienen unidades disponibles y cuales no, y mostrar solamente los que efectivamente tuvieran unidades en existencia. Por esta razon decidi cambiar mi diseño, pero creo que volvere a dejarlo como al principio, si es que no existe otra forma mas adecuada de realizarlo.

Otra cosa es si me pudieras explicar la utilidad de manejar el codigo del producto y el nombre de la manera que dice, y la verdad no mucho entiendo lo de las unidades de compra y venta, te agradeceria mucho si me pudieras aclarar esto.

Nuevamente te indico que estoy contra el tiempo para la entrega de este proyecto por la cantidad de tiempo que he perdido cambiando mi diseño, te agradeceria me pudieras orientar con la situacion de los avisos de los lotes de productos que estan a punto de vencer, y me digas si la solucion que te explique anteriormente es la mas adecuada en este caso.

Daniel Sánchez

unread,
Mar 25, 2014, 6:50:11 PM3/25/14
to Comunidad de Visual Foxpro en Español
Hola David, te comento mas o menos como es que trabajo, en el caso de los lotes te recomendaría en el almacén principal y que al almacén de venta vaya una cantidad mínima, porque esto porque en el almacén principal manejaría el control del ingreso de los lotes y las salidas hacia el almacén venta, ya que al momento de la venta es muy difícil ir indicando que lote entregas, cosa que si podrías indicar cuando lo sacas o trasladas del almacén principal hacia el de venta, al menos mi enfoque seria de esa manera.
Ahora en cuanto a la estructura o tablas a utilizar yo utilizo lo siguiente:
Catalogo ----> es la tabla donde tengo indicada toda la lista de los productos con sus características de cada producto, precios y demás.
Maestro -----> tabla donde se indica la referencia del producto cuyo origen es del catálogo, código, rubro (clasificación), subrubro (sub clasificación), el almacén, referencia de stock de existencia, es decir en catalogo podría tener 10 mil productos, pero en maestro en un almacén determinado solo podría manejar 3 mil productos y en otro almacén 5 mil, es decir solo los productos que mueve dicho almacén, pero el origen de todo es del catalogo, ahora en maestro podría también manejar precios si en cada punto se maneja un precio diferente, según la política de la empresa.
En mi caso para los lotes lo dividí en dos tablas
Lotes -------> donde se indica la referencia del lote con su fecha de vencimiento y de ingreso, documento de ingreso, código del producto y almacén a donde ingresa.
Kardexlotes -------> en esta tabla indico todas las salidas de los lotes existente de la tabla lotes, porque lo hice? así porque fácilmente con una relación puedo indicar las salidas de la tabla lotes realizar una suma rápida de todas las salidas y determinar la cantidad o existencias faltantes o muchas cosas más relacionadas con los lotes como vencimientos y cualquier cosa relacionada con lotes.
Kardex ------> esta tabla contendrá una copia de cada movimiento de cada producto cuyo origen puede ser de una compra, venta, traslado o cualquier movimiento permitido en almacén, de esta manera fácilmente tienes un kardex del producto consultando en una sola tabla indicando el código del producto y el almacén a consulta, también con esta tabla fácilmente obtienes el stock de un producto o de todos los productos, pero también fácilmente puedes relacionarlo con los documentos de origen y obtener su referencia de ellos.

Ahora para genera los movimientos de almacén estos como comente vienen dados por compras, ventas, movimientos de almacén (ingresos/salidas/traslados), devoluciones por nota de crédito, movimientos de producción (ingresos de nuevos productos producidos y salidas de los insumos para esos productos producidos) en este caso manejo las tablas correspondientes para cada caso

compras ----> cabecera de compras con un campo autoincremental para relacionado con la tabla siguiente
comprasitem ----> aquí indico los productos que contiene la compra relacionada por el campo autoincremental de compras

ventas ----> cabecera de venta igualmente con el campo autoincremental para relacionar la tabla siguiente
ventasitem ----> items de la venta donde se indica los productos de venta

notacredito -----> cabecera de las notas de crédito
notacreditoitem ----> referencia de los productos de la nota de crédito

movalmacen ----> cabecera del movimiento de almacén
movalmacenitem -----> items del movimiento de almacén con la referencia de productos

producccion y produccion item ----> idem que las tablas anteriores.

Ahora por cada ingreso de producto en cada uno de los casos se hace un ingreso igualmente o simultáneamente en la tabla kardex, ahora las tablas maestro tienen integridad referencial con la tabla catalogo, y kardex con la tabla maestro, igualmente las demás tablas.

Espero que lo indicado te de una idea de lo que necesitas trabajar.

Saludos




El 25 de marzo de 2014, 1:00, David <davi...@gmail.com> escribió:
Hola muchas gracias por tus observaciones, te comento que en un principio habia pensado trabajar sin lotes por lo que tu acerdamente comentas, de la complicacion de que la cantidad de producto por lotes en el sistema coincida con lo que existe fisicamente, ya que depende mucho del usuario del sistema o vendedor. Como te comente anteriormete cambie mi diseño original en donde no trabajaba los productos por lotes, por el hecho de que por requerimiento el sistema debe alertar sobre los productos con lotes a punto de caducar. Entonces que me sugieres para cumplir con este requerimiento, yo habia pensado en un principio en que el usuario manualmente sacara el reporte de los lotes a punto de vencer (Por decirte los que fueran a vencer en un mes), y que en base al reporte revisara fisicamente si todavia existian productos con ese lote para sacarlos lo mas pronto posible, pero no lo veia tan funcional por el hecho de que el sistema le reportaria demasiados lotes (Todos los que tuvieran un mes o menos de fecha de caducidad) por la situacion de que el sistema no tiene registro de que lotes aun tienen unidades disponibles y cuales no, por esta razon decidi cambiar mi diseño, pero creo que volvere a dejarlo asi, si es que no existe otra forma mas adecuada de realizarlo.


Otra cosa es si me pudieras explicar la utilidad de manejar el codigo del producto y el nombre de la manera que dice, y la verdad no mucho entiendo lo de las unidades de compra y venta, te agradeceria mucho si me pudieras aclarar esto.

Nuevamente te indico que estoy contra el tiempo para la entrega de este proyecto por la cantidad de tiempo que he perdido cambiando mi diseño, te agradeceria me pudieras orientar con la situacion de los avisos de los lotes de productos que estan a punto de vencer, y me digas si la solucion que te explique anteriormente es la mas adecuada en este caso.




--
Daniel Sánchez Escobar
Investigación y Desarrollo
Reset Software & Sistemas
Móvil +051-949398047
Trujillo - Perú

David

unread,
Mar 26, 2014, 12:10:07 PM3/26/14
to publice...@googlegroups.com
Gracias por tu respuesta tan detallada!!!
Reply all
Reply to author
Forward
0 new messages