DoorAndDoor Sales New - Explicacion del flujo liberacion por pago -> stock o fabricacion -> entrega
DoorAndDoor Sales New - Explicacion del flujo liberacion por pago -> stock o fabricacion -> entrega
Objetivo de esta explicacion
Este documento explica el segundo gran bloque funcional del proyecto:
- pago
- liberacion
- despacho por stock o fabricacion
- entrega
La idea es entender como el sistema pasa del seguimiento base creado desde la factura a la ejecucion operativa real.
Idea principal del bloque
Si el primer bloque del proyecto crea la trazabilidad base:
factura -> venta -> fulfillment
este segundo bloque convierte esa trazabilidad en accion operativa.
La logica general es esta:
- el cliente paga
- el sistema calcula que parte de la factura queda liberada
- cada linea de
fulfillmentactualiza sus cantidades - el sistema decide la ruta operativa
- puede crear despacho por stock
- puede crear orden de fabricacion
- al final, la entrega actualiza el estado real del cumplimiento
Vision general del flujo
La cadena funcional puede explicarse asi:
1. La factura ya existe y ya genero su sale.order y sus lineas de fulfillment.
2. Se aplica un pago o conciliacion contable.
3. El modulo recalcula cuanto de la factura esta autorizado para avanzar.
4. Cada linea recibe una cantidad liberada.
5. Segun la ruta, esa cantidad puede:
- salir por stock
- ir a fabricacion
6. Si sale por stock, se genera stock.picking.
7. Si va a fabricacion, se genera mrp.production.
8. Cuando la operacion termina, el fulfillment actualiza cantidades entregadas y estado.
Donde vive esta logica
La mayor parte de este flujo esta implementada en:
account_move.py
Y se apoya en:
account_partial_reconcile.pymrp_production.pystock_picking.pyfulfillment_line.py
Paso 1 - El pago dispara la sincronizacion
Cuando se crea o elimina una conciliacion contable parcial, el modulo actua.
En account_partial_reconcile.py:
- al crear una conciliacion, se llama a
_ddsn_sync_related_invoices() - al eliminarla, tambien se recalcula el estado relacionado
Eso hace que las facturas vinculadas vuelvan a ejecutar:
_ddsn_sync_release_from_payments()
Que significa esto funcionalmente
El sistema no espera a que un usuario vaya manualmente a actualizar el estado.
Cuando el pago impacta contablemente, el modulo usa esa señal para revisar cuanto puede liberarse operacionalmente.
Paso 2 - Se calcula cuanto de la factura esta pagado
Dentro de _ddsn_sync_release_from_payments(), el sistema toma:
- el total de la factura
- el residual pendiente
Con eso calcula cuanto ya fue cubierto por pago.
La idea funcional es esta:
- si no hay pago, no se libera nada
- si hay pago parcial, se libera parcialmente
- si el pago cubre todo, se libera completamente
Paso 3 - Se aplica una politica de liberacion
El modulo maneja politicas de liberacion.
Entre ellas aparecen:
proratedsequential_lineprioritymanual
Como entenderlas de forma simple
Prorrateada
Distribuye el pago proporcionalmente entre las lineas.
Ejemplo:
- si la factura esta pagada al 50 por ciento
- cada linea libera aproximadamente el 50 por ciento de su cantidad
Secuencial por linea
Va liberando lineas en orden, una detras de otra, segun alcance el monto pagado.
Prioridad
Existe como opcion funcional, aunque en la practica actual la logica base sigue una priorizacion simple por ordenamiento de lineas.
Manual
Evita la liberacion automatica.
Paso 4 - Cada linea de fulfillment actualiza sus cantidades
Cada doorandoor.fulfillment.line guarda cantidades clave del proceso.
Las mas importantes para esta etapa son:
qty_invoicedqty_releasedqty_pending_paymentqty_pending_deliveryamount_releasedstate
Significado practico de estos campos
qty_invoiced
Cuanto se facturo en esa linea.
qty_released
Cuanto de esa linea ya esta autorizado a avanzar operativamente por efecto del pago.
qty_pending_payment
Cuanto sigue bloqueado porque aun no esta cubierto por pago.
qty_pending_delivery
Cuanto aun falta por entregar.
amount_released
Valor monetario de lo ya liberado.
state
Estado operativo de la linea.
Puede pasar por valores como:
pending_paymentready_stockready_mrpin_processdelivered
Paso 5 - El sistema decide la ruta operativa
Despues de calcular la cantidad liberada, el sistema decide que camino sigue la linea.
La decision se hace en _ddsn_get_line_route() dentro de account_move.py.
Las rutas principales son:
ready_stockready_mrp
Como explicarlo de forma sencilla
Cuando una linea ya esta liberada por pago, el sistema necesita responder:
"Esto sale del inventario o se manda a fabricar"
Si la respuesta es inventario:
- la linea pasa a
ready_stock
Si la respuesta es fabricacion:
- la linea pasa a
ready_mrp
Importante para explicar bien el estado actual del proyecto
La base de esta decision ya existe.
Pero las reglas mas avanzadas de decision por stock real, faltantes parciales o estrategia por almacen todavia forman parte del siguiente nivel de refinamiento.
O sea:
- la estructura esta implementada
- la logica avanzada aun puede crecer
Paso 6 - Si la ruta es stock, se crea un picking
Cuando una linea esta en ready_stock y hay cantidad liberada pendiente de enviar, el sistema ejecuta:
_ddsn_sync_stock_fulfillment_documents()
Eso hace que:
- se obtenga o cree un
stock.picking - se creen
stock.movepara las cantidades liberadas - la linea quede enlazada al picking
qty_sent_stockaumente- el estado pase a
in_process
Proteccion contra duplicidad de salida
Antes de crear una nueva salida, el modulo revisa si ya existe un stock.picking abierto relacionado con la venta generada desde esa factura.
Si existe una salida abierta compatible:
- el sistema reutiliza ese picking
- evita crear una segunda salida para la misma operacion fisica
- evita duplicar
stock.movepara la misma linea de venta dentro del mismo picking
Que significa esto operativamente
Si una venta ya tenia una salida preparada y luego la factura intenta liberar esa misma mercancia, el sistema no debe dibujar dos despachos separados en historial.
La idea practica es:
- una salida fisica
- un solo documento logistico coherente
- una sola trazabilidad de movimientos para esa operacion
Que significa esto operativamente
La linea deja de estar solo autorizada en teoria y pasa a tener un documento logistico real asociado.
Ya no es solo "puede salir".
Ahora es:
- "ya tiene salida preparada o creada en inventario"
Paso 7 - Si la ruta es fabricacion, se crea una orden MRP
Cuando la linea queda en ready_mrp, el sistema ejecuta:
_ddsn_sync_mrp_fulfillment_documents()
Eso hace que:
- calcule la cantidad a fabricar
- busque la BoM del producto
- cree
mrp.production - confirme la orden de fabricacion
- enlace esa produccion a la linea de fulfillment
- aumente
qty_sent_mrp - cambie el estado a
in_process
Que significa esto operativamente
La liberacion por pago no solo autoriza despacho directo.
Tambien puede autorizar arranque de fabricacion.
Eso es importante porque conecta lo financiero con la operacion industrial.
Paso 8 - Cuando termina la fabricacion, se prepara la salida
En mrp_production.py, al marcar una produccion como terminada, el modulo ejecuta:
_ddsn_sync_invoice_fulfillment_after_done()
Eso busca las lineas de fulfillment relacionadas y llama a:
_ddsn_sync_finished_mrp_to_outgoing_picking()
Con eso, el sistema puede crear el picking de salida pendiente para lo fabricado.
Que significa esto funcionalmente
La fabricacion no queda aislada.
Cuando termina, alimenta el siguiente paso logistico.
O sea:
- fabricar no cierra el ciclo
- fabricar prepara la entrega
Paso 9 - La validacion del picking actualiza la entrega
En stock_picking.py, cuando se valida un picking:
- se detectan los pickings que pasaron a
done - se buscan las lineas de
fulfillmentrelacionadas - se actualizan cantidades entregadas
- se recalcula la cantidad pendiente
- se ajusta el estado
En la practica, que cambia
Cuando el picking se valida:
qty_deliveredsubeqty_pending_deliverybaja- si ya no queda pendiente, la linea pasa a
delivered
Ademas, la factura recalcula su release_state.
Regla adicional sobre ajustes manuales de inventario
El flujo ahora protege tambien la coherencia entre pago y stock fisico.
Si un usuario intenta hacer un ajuste manual de inventario y ese ajuste dejaria el stock por debajo de las cantidades ya liberadas por pago y aun no entregadas:
- el sistema bloquea la operacion
- obliga a resolver la diferencia desde el flujo logistico y no mediante un ajuste manual
Que significa esto funcionalmente
Una cantidad ya liberada por pago se considera comprometida para la operacion.
Por tanto:
- no debe reaparecer como libre por error
- no debe desaparecer por ajuste manual sin conciliacion
Impacto sobre la columna de stock visible en factura
La visibilidad de stock en lineas de factura ya no muestra solo stock fisico bruto.
Ahora muestra un stock mas cercano al realmente vendible porque descuenta:
- cantidades ya comprometidas por pagos anteriores
- cantidades aun pendientes de entrega dentro del flujo de fulfillment
Esto ayuda al usuario a no prometer o vender dos veces mercancia que ya quedo apartada por otra factura con pago aplicado.
Que significa el release_state de la factura
La factura tiene un estado general resumido.
Puede pasar por:
not_readypartially_releasedreleaseddelivered
Como entenderlo de forma practica
not_ready
Todavia no hay cantidades liberadas.
partially_released
Algo ya fue liberado, pero aun queda parte pendiente de pago.
released
Todo lo pagable ya fue liberado, pero aun falta entrega fisica.
delivered
Ya no queda pendiente de entrega.
Resumen corto del bloque
Una forma rapida de explicarlo en reunion es esta:
"Despues de crear el seguimiento base desde la factura, el sistema usa el pago como disparador operativo. Cuando entra dinero, calcula cuanto puede liberarse, actualiza las lineas de fulfillment y decide si esa parte va por stock o por fabricacion. A partir de ahi crea los documentos operativos y, cuando se valida la salida, actualiza la entrega real."
Como presentarlo en una demo
Se puede mostrar en este orden:
1. Crear y publicar una factura.
2. Mostrar el sale.order generado y las lineas de fulfillment.
3. Aplicar o simular liberacion.
4. Mostrar cambio de cantidades liberadas.
5. Mostrar generacion de Dispatches o Manufacturing.
6. Si hay picking, mostrar la operacion de salida.
7. Validar el picking.
8. Mostrar como cambia el estado de fulfillment y de la factura.
Que valor de negocio aporta este bloque
Este bloque aporta tres cosas muy importantes:
1. Conecta pago con operacion
La operacion no avanza solo por intuicion o coordinacion manual.
Avanza segun lo que financieramente ya esta autorizado.
2. Mejora trazabilidad
Cada paso queda enlazado a la factura original y a sus lineas de seguimiento.
3. Prepara automatizacion escalable
Con esta base se pueden endurecer despues:
- reglas por almacen
- reglas de stock parcial
- estrategias mixtas stock + fabricacion
- controles mas estrictos de despacho
Que conviene explicar con cautela
Para presentar el proyecto con precision, conviene aclarar esto:
La base del flujo esta implementada y es funcional.
Sin embargo, algunos criterios mas avanzados aun estan en evolucion, especialmente:
- decision sofisticada por stock real disponible
- comportamiento por varios almacenes
- politicas parciales de stock llevadas a toda su capacidad
Eso no invalida lo que ya existe.
Mas bien indica que:
- el flujo ya funciona
- el siguiente paso es refinar sus reglas de negocio
Conclusion
El bloque liberacion por pago -> stock o fabricacion -> entrega es el puente entre el control financiero y la ejecucion operativa.
Gracias a este flujo:
- el pago deja de ser solo un dato contable
- la liberacion se vuelve accionable
- el sistema puede disparar inventario o produccion
- la entrega actualiza el cumplimiento real
En resumen:
el proyecto no solo registra documentos, sino que empieza a orquestar el movimiento real del negocio dentro de Odoo.