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