Los recorridos reales de una lechería en Odoo: quién hace qué, qué hace el sistema solo, y en qué momento pasa cada cosa.
Los colores de los diagramas no son decoración: cada uno dice quién da el paso.
Vista general de las líneas de negocio de jb, cuáles llevan inventario y cuáles son puro servicio, y por dónde entra cada una al sistema. La leche es el grueso del negocio y tiene su propio flujo diario: sección 2, sección 3 y sección 4. Las demás líneas se venden con el camino normal de venta (sección «Los cuatro caminos de una venta» ↗ Manual General).
El catálogo de jb está organizado en siete categorías de producto, y esa categoría es lo que decide dos cosas a la vez: si el producto lleva inventario (kardex y valoración) y a qué cuenta va su ingreso. No son un capricho de clasificación: cada categoría agrupa una actividad real del negocio, y separarlas es lo que permite ver cuánto entra por leche, por alquileres o por transporte sin tener que revisar factura por factura.
| Categoría | Qué vende | ¿Lleva inventario? |
|---|---|---|
| Productos Agrícolas | Fruta, verdura, legumbre y madera en su estado natural. | Sí — es la única línea con existencias reales: entra a bodega, se valora y sale con kardex como cualquier producto almacenable. |
| Ganadería | Leche y ganado en pie. | No. La leche se ordeña y se despacha el mismo día: no hay stock que valorar (detalle en la siguiente sección). |
| Bazar (catálogo) | Reventa de catálogo de marca (cosmética, perfumería). | No. Es un bien —se compra y se vende— pero no se guarda en bodega: se pide y se entrega. |
| Alquiler de Vivienda | Arriendo de inmuebles residenciales. | No, es servicio puro. |
| Alquiler de Locales | Arriendo de locales y bodegas comerciales. | No, es servicio puro. |
| Transporte y logística | Fletes, transporte y servicios de logística. Van en una sola categoría a propósito, aunque son dos actividades del origen: en la práctica se facturan igual. | No, es servicio puro. |
| Servicios Prestados | El resto de servicios facturados que no encajan en las categorías anteriores. | No, es servicio puro. |
flowchart TD
A["Se vende algo en la finca"]:::caj
B{"¿Qué categoría
de producto es?"}:::sis
C["Leche (Ganadería)"]:::neu
D["Ganado en pie (Ganadería)
o Productos Agrícolas"]:::neu
E["Bazar (catálogo)"]:::neu
F["Alquiler de Vivienda / Locales,
Transporte y logística,
Servicios Prestados"]:::neu
G["Parte diario del ordeño:
reparto + control de calidad"]:::sis
H["Venta normal, con salida
de bodega si hay existencias"]:::sis
I["Se pide y se entrega,
sin kardex"]:::sis
J["Venta directa,
sin nada que mover en bodega"]:::sis
A --> B
B -->|Leche| C --> G
B -->|Ganado / Agrícola| D --> H
B -->|Bazar| E --> I
B -->|Alquiler / Transporte / Servicios| F --> J
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef neu fill:#E6F4F7,stroke:#2098AF,color:#111
Ganadería y Productos Agrícolas nacen de la misma familia migrada, pero se separaron porque no se parecen en nada: una es fruta y verdura con existencias reales, la otra es leche y ganado en pie sin inventario que valorar. Que compartan procedencia no significa que compartan tratamiento — cada producto se le asignó su categoría una vez y ahí queda, no hay que revisarlo entrega a entrega.
Hay un solo ordeño, por la mañana, y un solo documento por día: el parte registra cuánto se ordeñó y cómo se repartió. Enlaza con sección 3 (el detalle de cada línea) y sección 4 (mastitis y acidez, que viven en esas mismas líneas).
Lo anota quien tenga el perfil «Parte de Leche: Empleado», desde Parte de Leche → Partes diarios. La pantalla entra primero por tarjetas —pensada para el teléfono de la finca— y en escritorio se puede cambiar a lista. Solo hay un parte por fecha y por compañía: si ya existe uno para ese día, el sistema no deja crear otro y hay que editar el que ya está.
flowchart TD
A["Después del ordeño, se abre
Parte de Leche → Partes diarios"]:::caj
B["«Nuevo»: el reparto nace
precargado — clientes + autoconsumo,
todos en 0 litros"]:::sis
C["Se escribe «Total ordeñado (litros)»
y los litros de cada línea"]:::caj
D["Botón «Confirmar»"]:::caj
E{"¿Tiene al menos
una línea de reparto?"}:::sis
F["BLOQUEO:
«¿a quién fue la leche?»"]:::no
G{"¿Repartido = Ordeñado?"}:::sis
H["BLOQUEO:
«el parte no cuadra»"]:::no
I{"¿El producto de leche
lleva inventario?"}:::sis
J["Movimiento de bodega:
producción → bodega,
por el total ordeñado"]:::sis
K["Sin movimiento de bodega:
la leche no lleva inventario"]:::avi
L["Parte «Confirmado»"]:::ok
A --> B --> C --> D --> E
E -->|no| F
E -->|sí| G
G -->|no| H
G -->|sí| I
I -->|sí| J --> L
I -->|no| K --> L
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
classDef no fill:#DC2626,stroke:#991B1B,color:#fff
classDef avi fill:#B45309,stroke:#7C3D06,color:#fff
| Campo | Qué es |
|---|---|
| «Fecha del ordeño» | Obligatoria. Nace en el día de hoy y es lo que identifica al parte: no puede haber dos para la misma fecha. |
| «Total ordeñado (litros)» | Obligatorio y tiene que ser mayor que cero. Es el único dato que se mide con un instrumento; el resto son litros ya repartidos. |
| «Reparto» | La lista de líneas —clientes y autoconsumo— que tiene que sumar exactamente el total ordeñado. Ver sección 3. |
| «Total repartido» / «Diferencia» | Se calculan solos a medida que se escriben los litros de cada línea. La diferencia tiene que llegar a cero antes de poder confirmar. |
| «Reportado por» | Se propone el usuario que abrió el parte; se puede cambiar. |
| «Observaciones» | Texto libre, en su propia pestaña — para cualquier novedad que no tenga un campo propio. |
| Situación | Qué pasa |
|---|---|
| El parte no tiene ninguna línea de reparto. | Bloqueo: «¿a quién fue la leche? Si algo se quedó en la finca, regístralo como autoconsumo». |
| Lo repartido no coincide con lo ordeñado. | Bloqueo: «el parte no cuadra… lo que no vaya a un cliente se registra como autoconsumo, no se deja de anotar». |
| El parte ya está confirmado. | Bloqueo: no se puede confirmar dos veces. |
| La compañía no tiene un producto de leche configurado. | Bloqueo: «falta configurar el producto de leche en Ajustes › Parte de leche». Se configura ahí antes de poder confirmar cualquier parte, aunque ese producto termine sin llevar inventario. |
El parte confirmado genera como máximo un movimiento de inventario: de la ubicación de producción del ordeño a la bodega, por el total ordeñado completo. En jb ese movimiento no llega a crearse: el producto de leche no lleva inventario, así que confirmar deja el total ordeñado registrado en el parte, pero no genera ninguna entrada de stock. Es la misma regla que explica la sección 1: la leche se ordeña y se despacha el mismo día, no hay stock que valorar.
Sirve para deshacer una confirmación. En vez de borrar o editar el parte confirmado, el sistema revierte el movimiento con uno inverso —si es que llegó a crearse— y avisa antes de hacerlo: «Esto revierte el ingreso a bodega con un movimiento inverso. ¿Continuar?».
flowchart TD
A["Parte «Confirmado»"]:::ok
B["Botón «Volver a borrador»"]:::caj
C{"¿Alguna línea
ya facturada?"}:::sis
D["BLOQUEO: anula la
factura primero"]:::no
E["Movimiento inverso
(si el parte generó uno)"]:::sis
F["Parte «Borrador» de nuevo"]:::neu
A --> B --> C
C -->|sí| D
C -->|no| E --> F
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef no fill:#DC2626,stroke:#991B1B,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
classDef neu fill:#E6F4F7,stroke:#2098AF,color:#111
Cada línea del parte dice a quién fue una parte de la leche del día. Vive dentro del parte (sección 2) y es donde también se anota el control de calidad de esa entrega (sección 4).
El reparto nace precargado: una línea por cada cliente activo de leche —los que tienen configurado un ciclo de facturación en su ficha— más una línea fija de autoconsumo, todas en 0 litros. Quien llena el parte no busca clientes ni pulsa «Agregar»: solo escribe encima de las tarjetas que ya están puestas. La precarga engancha al pulsar «Nuevo»; editar un parte ya guardado o duplicarlo no la repite —duplicar copia las líneas reales del parte original, no una precarga nueva encima de ellas.
flowchart TD
A["El parte nace con una línea
por cada cliente de leche
+ una de autoconsumo"]:::sis
B{"¿Es la línea
de autoconsumo?"}:::sis
C["Cliente oculto:
la leche se queda en la finca"]:::neu
D["Cliente ya viene puesto
(solo clientes con ciclo
de facturación configurado)"]:::neu
E["Se escriben los «Litros»"]:::caj
F{"¿Cómo se entrega
hoy?"}:::sis
G["«Retira en la finca»"]:::neu
H["«Se le entrega»
(recargo al facturar)"]:::neu
I["Línea lista para
el control de calidad"]:::ok
A --> B
B -->|sí| C --> E
B -->|no| D --> E
E --> F
F -->|retira| G --> I
F -->|domicilio| H --> I
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
classDef neu fill:#E6F4F7,stroke:#2098AF,color:#111
| Campo | Qué es |
|---|---|
| «Autoconsumo» | Marca que esta línea es la leche que se queda en la finca. Al marcarla, el campo cliente se oculta y se vacía. |
| «Cliente» | Obligatorio si la línea no es autoconsumo. Solo aparecen los contactos que tienen configurado un ciclo de facturación de leche — el resto de contactos no sale ni buscándolo. |
| «Litros» | Obligatorios, nunca negativos. En 0 es un valor válido en cualquier estado: dice que ese cliente no recibió leche ese día, no que se olvidó anotar. |
| «Entrega» | «Retira en la finca» o «Se le entrega». Se propone según la forma habitual del cliente, pero manda la línea: un cliente que normalmente retira puede pedir un día que se le lleve, y ese día paga el recargo. |
El sistema no deja guardar una línea de autoconsumo con cliente puesto, ni una línea sin autoconsumo y sin cliente: toda leche que sale del ordeño tiene que poder decirse a dónde fue, sin huecos. El autoconsumo va como una línea más del reparto, sumando al total igual que cualquier cliente — no es una diferencia que se explica aparte ni una resta al final: es la forma en que el parte cuadra el día que toda la leche, o parte de ella, se queda en la finca.
El perfil «Parte de Leche: Empleado» crea y edita las líneas del reparto mientras el parte esté en borrador; una vez confirmado, el reparto queda de solo lectura para ese perfil. Borrar una línea o un parte completo es cosa del perfil «Parte de Leche: Manager» (sección «Quién puede qué» ↗ Manual General).
Se revisa cada entrega, no el tanque una vez al día: los campos de calidad viven en la línea del reparto (sección 3), no en el parte completo.
Mastitis y acidez se confunden fácil porque las dos son «un problema en la leche», pero el sistema las trata de forma completamente distinta. Esa distinción es lo primero que hay que tener claro:
| Mastitis | Acidez | |
|---|---|---|
| Qué es | Contaminación detectada en la leche de esa entrega. | El grado de acidez medido (°D) en esa entrega. |
| Qué pasa con los litros | Se descartan: no se entregan ni se cobran. | Se corrigen y se entregan igual: la acidez no descarta nada. |
| Campos | «Mastitis» (marca) + «Litros descartados». | «Acidez (°D)» (el grado medido) + «Acidez corregida» (marca). |
| Deja rastro | Litros que salieron del hato y no se cobran a nadie. | Un histórico del grado, útil para ver una tendencia antes de que se eche a perder una entrega entera. |
flowchart TD
A["Antes de despachar,
se revisa CADA entrega"]:::caj
B{"¿Qué encontró
el control?"}:::sis
C["Mastitis"]:::no
D["Acidez"]:::avi
E["Ninguna novedad"]:::ok
F["Marca «Mastitis» y anota
«Litros descartados»"]:::caj
G["Esos litros NO se entregan
ni se cobran"]:::no
H["Anota el grado en «Acidez (°D)»
y marca «Acidez corregida»"]:::caj
I["Se corrige y SE ENTREGA
igual: no descarta nada"]:::ok
J["Litros entregados = litros
de la línea"]:::ok
K["Litros entregados = litros
− litros descartados"]:::sis
A --> B
B -->|mastitis| C --> F --> G --> K
B -->|acidez| D --> H --> I --> J
B -->|sin novedad| E --> J
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
classDef no fill:#DC2626,stroke:#991B1B,color:#fff
classDef avi fill:#B45309,stroke:#7C3D06,color:#fff
Cada línea calcula sola cuánto llegó al cliente: los litros que se apartaron para él, menos lo que el control descartó por mastitis. Ese número —y no los litros apartados— es el que se factura: si el control tira parte de una entrega, el cliente recibe menos y paga menos, sin que nadie tenga que restar nada a mano.
| Situación | Qué pasa |
|---|---|
| Litros descartados negativos. | Bloqueo: no puede ser un número negativo. |
| Litros descartados mayores que los litros de la línea. | Bloqueo: «el control no puede quitar más leche de la que se apartó». |
| Hay litros descartados pero «Mastitis» no está marcada. | Bloqueo: «hay litros descartados sin marcar mastitis… no se resta leche sin decir por qué». Si el motivo del descarte es otro, se anota en las observaciones del parte, pero el campo mastitis tiene que quedar marcado igual. |
«Mastitis» y «Litros descartados» aparecen siempre en la lista del reparto del parte. «Acidez (°D)» y «Acidez corregida» están ocultas por defecto —se activan desde el selector de columnas de la lista— porque no son datos que haya que escribir todos los días: quedan disponibles para cuando el control mide la acidez, sin ensuciar la pantalla el resto del tiempo. Ninguno de los cuatro campos aparece en la línea de autoconsumo: el control de calidad comercial no aplica a la leche que se queda en la finca.
Cada línea del reparto del parte diario (sección 3) lleva un «Estado de cobro» que dice, en cualquier momento, por qué esa leche todavía no se ha facturado o por qué nunca se va a facturar. Enlaza con sección 4 (quién marca la mastitis), sección 6 (cuándo se recoge lo pendiente) y sección 7 (dónde se consolida).
La pregunta que más trae a alguien a este mapa es «¿por qué esta entrega no se ha facturado?». La respuesta siempre es uno de siete estados, y dos de ellos se confunden a primera vista porque los dos significan «no se cobra»: una entrega sin entrega ese día y una entrega descartada. No son lo mismo, y confundirlas es leer una alarma sanitaria donde no la hay, o al revés, no verla donde sí está.
| «Sin entrega ese día» | «Descartado, no se cobra» | |
|---|---|---|
| ¿Se le apartó leche a este cliente? | No. Cero litros para él ese día. | Sí: el control de calidad apartó leche para este cliente y la tiró entera. |
| ¿Por qué pasó? | El cliente no vino a retirar, o no le tocó entrega ese día. | El control marcó «Mastitis» en esa entrega: la leche contaminada no se entrega, nunca. |
| ¿Es una alarma sanitaria? | No. Es simplemente un día sin movimiento con ese cliente. | Sí: es la señal de que hubo mastitis en el hato ese día. |
| ¿Vuelve a facturarse alguna vez? | No, pero la línea de mañana es otra: si al día siguiente sí hay entrega, esa línea nueva nace en «Pendiente de facturar». | No, nunca: esos litros ya se descartaron y no hay nada que reponer con esta entrega. |
flowchart TD
A["Trabajador anota la línea
en el parte del día"]:::caj
Z{"¿Es autoconsumo?"}:::sis
ZA["AUTOCONSUMO, no se factura
(nunca entra a este ciclo)"]:::neu
B{"¿Litros > 0,
o el control marcó
mastitis?"}:::sis
C["SIN ENTREGA ese día
(0 litros, sin mastitis)"]:::neu
D{"¿El control descarta
TODOS los litros
por mastitis?"}:::sis
E["DESCARTADO, no se cobra"]:::no
F["PENDIENTE de facturar"]:::neu
G["Se arma su LIQUIDACIÓN
(§ciclo de facturación / §liquidación)"]:::sis
H["EN LIQUIDACIÓN,
esperando aprobación"]:::avi
N["Sale de la liquidación o
vuelve a PENDIENTE
(la novedad se corrigió a 0
o la liquidación entera)"]:::neu
I{"¿Se aprueba
la liquidación?"}:::sis
J["Nace el pedido de venta"]:::sis
K["EN PEDIDO, esperando
confirmación del
control de crédito"]:::avi
L["FACTURADO"]:::ok
M["Vuelve a PENDIENTE
(el pedido se cancela)"]:::neu
A --> Z
Z -->|sí| ZA
Z -->|no| B
B -->|no| C
B -->|sí, con litros| D
D -->|sí| E
D -->|no| F
F --> G --> H
H -->|con novedad, corregida a 0| N
H -->|se manda a revisión| I
I -->|aprobada| J --> K
I -->|con novedad| H
K -->|el control de crédito deja pasar,
se factura| L
K -->|el pedido se cancela| M
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
classDef no fill:#DC2626,stroke:#991B1B,color:#fff
classDef avi fill:#B45309,stroke:#7C3D06,color:#fff
classDef neu fill:#E6F4F7,stroke:#2098AF,color:#111
| Estado | Qué significa | Quién o qué lo pone |
|---|---|---|
| Pendiente de facturar | Tiene litros entregados y todavía no está en ninguna liquidación. | Se calcula solo: es el punto de partida de cualquier entrega con litros reales. |
| En liquidación, esperando aprobación | Estos litros ya se juntaron con el resto del período de este cliente, en una liquidación que sigue «Pendiente de aprobación» o «Con novedad». Todavía no existe ningún pedido de venta. | Se pone al armar la liquidación —automático, en el día de corte del cliente, o al pulsar «Facturar seleccionadas»—. |
| En pedido, esperando confirmación | La liquidación ya se aprobó y el pedido de venta ya existe, pero el control de crédito todavía no lo deja llegar a confirmado. No es un fallo: es lo habitual cuando el cliente arrastra saldo pendiente. | Se pone al aprobar la liquidación (sección 8). |
| Facturado | La línea ya tiene su línea de factura propia. Es el final del camino. | Se pone cuando el pedido se confirma y la factura sale. |
| Sin entrega ese día | Cero litros, sin mastitis: no se le apartó nada a este cliente. | Se calcula solo con lo que anotó quien llenó el parte. |
| Descartado, no se cobra | El control de calidad apartó leche para este cliente y la tiró entera por mastitis. No se cobra y no va a quedar esperando una factura que nunca va a llegar. | Lo dispara quien marca «Mastitis» y anota los litros descartados en el parte (sección 4). |
| Autoconsumo, no se factura | Leche que se queda en la finca. Nunca tiene cliente y nunca entra a ningún proceso de facturación. | Se marca en la línea al anotar el parte. |
No se puede descartar más leche de la que se apartó en la línea, ni dejar un número en «Litros descartados» sin marcar «Mastitis»: el sistema rechaza el parte en los dos casos. El descarte es la señal sanitaria del hato y no puede colarse sin que quede dicho el porqué (sección 4).
Cada comprador de leche se cobra distinto, y ese dato vive en su propia ficha, no en un parámetro único de la finca. Enlaza con sección 5 (qué pasa con cada litro mientras espera) y sección 7 (dónde se consolida lo que junta el corte).
El «Ciclo de facturación de leche» se configura en la ficha del contacto, pestaña «Leche» —vacía, ese contacto no es cliente de leche y no aparece como destino en el reparto del parte (sección 3)—. Tres valores posibles, y cada uno cambia por completo cómo y cuándo se le cobra:
| Ciclo | Qué hace | Qué pide |
|---|---|---|
| Mensual | Se acumulan los litros del mes y se factura una sola vez, en el día de corte. | «Día de corte (mensual)», del 1 al 31. |
| Semanal | Igual, pero por semana. | «Día de corte (semanal)». |
| Solo cobro | El parte registra igual el día, los litros y a quién fue esa leche, pero a este cliente nunca se le emite comprobante desde este ciclo: el mecanismo de cobro de esos litros lo define contabilidad, no el parte de leche. | Ningún día de corte: no hay nada que programar. |
flowchart TD
A["Ficha del cliente,
pestaña «Leche»"]:::caj
B{"«Ciclo de
facturación»"}:::sis
C["Mensual: día del mes"]:::neu
D["Semanal: día de
la semana"]:::neu
E["Solo cobro: sin corte,
nunca entra a este proceso"]:::neu
F["Vacío: no es cliente
de leche"]:::no
G["El proceso diario revisa,
cliente por cliente,
si hoy es su corte"]:::sis
H{"¿Hoy toca?"}:::sis
I["Se arman sus entregas
pendientes en una LIQUIDACIÓN"]:::ok
J["Se sigue esperando"]:::neu
A --> B
B -->|Mensual| C --> G
B -->|Semanal| D --> G
B -->|Solo cobro| E
B -->|vacío| F
G --> H
H -->|sí| I
H -->|no| J
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
classDef no fill:#DC2626,stroke:#991B1B,color:#fff
classDef neu fill:#E6F4F7,stroke:#2098AF,color:#111
El proceso corre una vez al día y decide, cliente por cliente, si hoy es su corte —usando la fecha de la finca, no la de donde se ejecute el proceso—. En «Semanal» compara contra el día de la semana configurado; en «Mensual» compara contra el día del mes.
Cada cliente puede tener su propio precio, y sale de su lista de precios —el campo estándar de precios de la ficha del contacto—. Si el cliente no tiene una lista propia, o la que tiene no resuelve un precio, se usa el precio de catálogo del producto de leche. Es el mismo cálculo, con el mismo resultado, tanto en la vista previa de la liquidación como en el pedido de venta real que sale al aprobar (sección 7): nunca hay dos números distintos para la misma entrega.
Al litro que se entrega a domicilio se le suma un recargo. No es un dato del cliente ni de la entrega: es un parámetro de la compañía, se configura en Ajustes › Parte de leche, bloque «Facturación de la leche», y aplica igual a cualquier cliente que ese día reciba su leche a domicilio.
La ficha del cliente también guarda «Cómo recibe la leche» —retira en la finca, o se le entrega—. Ese valor es únicamente lo que se propone al anotar una línea nueva del parte para ese cliente: la forma de verdad va en cada línea del reparto, porque un cliente que normalmente viene puede pedir un día que se le lleve, y ese día paga el litro con el recargo de domicilio. Cambiar el hábito en la ficha no reescribe entregas ya anotadas.
Desde la lista «Entregas pendientes de facturar», el botón «Facturar seleccionadas» arma la liquidación de inmediato para los clientes marcados —con todas sus entregas pendientes, no solo las líneas que se seleccionaron: partir el ciclo de un cliente en dos liquidaciones por una selección a medias dejaría litros sueltos que después nadie relaciona—. Este botón no salta la aprobación: deja la liquidación igual de pendiente que el proceso automático, y tampoco crea ningún pedido de venta por sí solo (sección 7).
Al llegar el corte de un cliente, todos sus litros pendientes del período se consolidan en un documento propio —la liquidación— antes de que exista ningún pedido de venta. Enlaza con sección 6 (qué dispara el corte), sección 5 (el estado de cada línea mientras espera) y sección 8 (qué pasa al aprobar o marcar novedad).
🔴 La orden de venta no existe todavía en este punto. La liquidación es el paso donde alguien revisa que los litros del período están correctos antes de que haya ningún documento de venta comprometido. Mientras la liquidación siga «Pendiente de aprobación» o «Con novedad», no hay pedido, no hay entrega y no hay factura — solo litros contados y un total en vista previa.
Una liquidación es de un solo cliente y cubre las entregas confirmadas de un rango de fechas —desde la más antigua hasta la más reciente de sus líneas—. La misma pantalla junta dos niveles, porque aprobar un total sin poder ver de dónde sale es firmar a ciegas:
| Nivel | Qué trae |
|---|---|
| El detalle, día por día | Cada entrega del período: fecha, litros apartados, litros descartados, si hubo mastitis, litros entregados y la modalidad de esa entrega. |
| Los totales | Litros apartados, litros descartados y el «Total a cobrar» —el mismo cálculo de precio que va a usar el pedido real si la liquidación se aprueba: nunca da un número distinto antes y después. |
| Estado | Qué significa |
|---|---|
| Pendiente de aprobación | Recién armada, o ya corregida y reenviada. Esperando que alguien revise el detalle y decida. |
| Con novedad | El aprobador encontró algo que no cuadra y lo rechazó con un motivo. No hay pedido ni factura, y no los va a haber hasta que se corrija el parte y se vuelva a enviar. |
| Aprobada | Los litros quedaron confirmados. Recién aquí nace el pedido de venta —y, si el control de crédito lo deja pasar, la entrega y la factura. |
flowchart TD
A["Entregas PENDIENTES de un
mismo cliente"]:::caj
B{"¿Ya hay una liquidación
Pendiente o Con novedad
de este mismo cliente?"}:::sis
C["Se SUMAN a la que
ya está abierta"]:::ok
D["Nace una liquidación nueva:
«Pendiente de aprobación»"]:::sis
E["Detalle día por día +
totales, en la misma pantalla"]:::neu
F["Se manda a revisión"]:::caj
G["Aprobada:
recién aquí nace el pedido"]:::ok
H["Con novedad:
ni pedido ni factura"]:::no
I["Se corrige el parte
y se reenvía"]:::caj
A --> B
B -->|sí| C
B -->|no| D --> E --> F
F --> G
F --> H
H --> I --> F
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
classDef no fill:#DC2626,stroke:#991B1B,color:#fff
classDef neu fill:#E6F4F7,stroke:#2098AF,color:#111
Eso también es lo que hace que armar una liquidación dos veces seguidas, sin que haya nada nuevo de por medio, no encuentre nada que sumar: una entrega que ya quedó dentro de una liquidación viva deja de estar «Pendiente de facturar» (sección 5), así que ningún segundo armado la vuelve a tomar.
De dos formas, y las dos producen el mismo tipo de documento:
La liquidación (sección 7) llega aquí «pendiente» y sin ningún pedido detrás. Esta pantalla es donde se decide si los litros están correctos — y de aquí sale, o no, el pedido de venta que enlaza con sección 9.
La aprobación no vive en un mecanismo propio del parte de leche: pasa por el módulo de Aprobaciones del sistema, con una categoría exclusiva para esto, «Liquidación de leche». Es la misma maquinaria que usa el control de crédito de las ventas (sección 9) o la liberación de pagos en otras áreas del sistema: una solicitud, uno o varios aprobadores, un estado que nadie escribe a mano.
Puede aprobar cualquiera de los aprobadores que el sistema tiene resueltos para la categoría «Liquidación de leche»: basta con que firme uno solo, no hace falta que firmen todos. Es la misma regla que usa el control de crédito de las ventas: si uno no está disponible, el otro desatasca la liquidación sin tener que esperar.
Aparte de los aprobadores, quien tenga el rol «Encargado: Aprobar todas las solicitudes» del módulo de Aprobaciones puede forzar la aprobación sin que ninguno de los aprobadores asignados haya firmado: la acción «Forzar aprobación», en el menú de acciones (⚙) sobre la solicitud, tanto desde la lista como desde la ficha. Forzar dispara exactamente lo mismo que una aprobación normal — nace el pedido igual — solo que salta la firma de los aprobadores de turno; queda igual el rastro de quién lo hizo y cuándo.
La misma pantalla que muestra el total muestra también el desglose que lo respalda — no hay que ir a otra parte a cruzar cifras. Arriba, los totales del período:
| Dato | Qué es |
|---|---|
| Litros apartados | Lo que el trabajador anotó en el parte, antes de cualquier descarte. |
| Litros descartados | Lo que el control de calidad tiró por mastitis en el período — la primera cifra que hay que poder cruzar contra el detalle. |
| Total a cobrar | Vista previa de lo que va a costar el pedido si se aprueba, calculada con la misma fórmula que arma el pedido real: tiene que dar el mismo número antes y después de aprobar. |
Debajo, en la pestaña «Detalle día por día», cada entrega del período: fecha, litros apartados, litros descartados, si hubo mastitis, litros entregados y la modalidad de entrega. Es de solo lectura — la corrección no se hace aquí, se hace en el parte del día (ver más abajo). Y una pestaña aparte, «Ciclos de revisión», con el historial de cada solicitud de aprobación que pasó por esta liquidación: nunca se borra ninguna, así que queda el rastro completo de qué se objetó y cuándo.
flowchart TD
A["Liquidación «Pendiente»,
litros condensados del período"]:::neu
B["El aprobador revisa el
detalle día por día"]:::caj
C{"¿Los litros
están correctos?"}:::sis
D["Botón «Aprobar»"]:::caj
E["Botón «Marcar novedad»
(con motivo obligatorio)"]:::caj
F["Nace el PEDIDO DE VENTA
y se confirma"]:::ok
G["Estado «Con novedad»:
NO se crea nada"]:::avi
H["Se corrige el parte
del día correspondiente"]:::caj
I["«Corregir y reenviar
a aprobación»"]:::caj
J["Nuevo ciclo de revisión:
vuelve a «Pendiente»"]:::sis
A --> B --> C
C -->|sí| D --> F
C -->|no| E --> G --> H --> I --> J --> B
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
classDef avi fill:#B45309,stroke:#7C3D06,color:#fff
classDef neu fill:#E6F4F7,stroke:#2098AF,color:#111
El botón «Aprobar» pide confirmación con el texto exacto: «Al aprobar se crea el pedido de venta y, si el control de crédito lo deja pasar, la factura. ¿Confirmas que los litros están correctos?». Al aceptar, la liquidación pasa a «Aprobada» y, en el mismo movimiento, se arma el pedido de venta — ver sección 9 para qué pasa con él después.
🔴 Si algo no cuadra, el botón es «Marcar novedad», y su confirmación lo dice sin rodeos: «No se crea ningún pedido ni factura: la liquidación queda esperando que se corrija el parte. ¿Continuar?». Antes de poder marcarla hay que escribir el motivo de la novedad — sin texto, el sistema no deja continuar, porque sin eso nadie sabe qué corregir en el parte.
La liquidación pasa a «Con novedad» y ahí se queda. Las entregas que la componen siguen reservadas —no vuelven a aparecer como pendientes de facturar en ningún otro proceso—, así que no hay riesgo de que el cron de facturación arme una segunda liquidación por los mismos litros mientras esta sigue abierta.
La corrección de verdad se hace en el parte del día afectado, no en la liquidación. Ya corregido, se vuelve a la liquidación y se pulsa «Corregir y reenviar a aprobación» —confirmación: «Se resincroniza con el parte ya corregido (las entregas en 0 litros salen, las nuevas entran) y se abre un nuevo ciclo de aprobación. ¿Continuar?»—. Dos movimientos a la vez: las entregas que quedaron en cero litros salen de la liquidación, y cualquier entrega nueva del mismo cliente que estuviera pendiente entra a sumarse. La liquidación vuelve a «Pendiente» y se abre un nuevo ciclo de aprobación — no se reescribe la solicitud anterior: queda en «Ciclos de revisión» como el rastro de qué se objetó la primera vez.
Al pulsar «Aprobar» en sección 8 se dispara una cadena que, en el caso normal, termina en una factura sin que nadie tenga que tocar nada más. En el caso no tan normal, se detiene a la mitad — y ese caso es el que más conviene conocer de antemano.
Con la liquidación ya aprobada nace el pedido de venta, a nombre del cliente de la liquidación. No lleva una sola línea con el total: lleva una línea por modalidad de entrega — retirada en la finca y entrega a domicilio, como máximo dos—, porque el litro no se cobra igual en las dos: al que se le lleva la leche se le suma el recargo de domicilio configurado en la compañía (0,10 por litro salvo que se cambie en Ajustes › Parte de leche). El precio de cada línea sale de la lista de precios propia del cliente si la tiene, o del precio de catálogo del producto de leche.
Esa separación por modalidad no es solo cosmética: cada línea del pedido queda marcada internamente con su modalidad, y esa marca es lo que permite, más adelante, devolver cada litro del parte a la línea de factura que le corresponde — así en la factura final se ve exactamente qué litros se cobraron a qué precio, sin tener que adivinarlo por la descripción.
flowchart TD
A["Liquidación «Aprobada»"]:::ok
B["Nace el PEDIDO:
una línea por modalidad"]:::sis
C["Aprobación comercial
automática (sin clic)"]:::sis
D{"Control de crédito:
¿el cliente pasa?"}:::sis
E["Pedido llega a «Venta»"]:::ok
F["Entrega (si el producto
lleva inventario) y FACTURA"]:::ok
G["Pedido se queda en
«Aprobado»"]:::no
H["Litros marcados
«esperando confirmación»,
nada se pierde ni se duplica"]:::avi
I["Alguien con permiso de Ventas
reconfirma el pedido"]:::caj
J["Se resuelve el crédito
(o se cancela la venta)"]:::sis
A --> B --> C --> D
D -->|sí| E --> F
D -->|no| G --> H --> I --> J --> D
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
classDef avi fill:#B45309,stroke:#7C3D06,color:#fff
classDef no fill:#DC2626,stroke:#991B1B,color:#fff
Un pedido normal de la casa espera un clic en «Confirmar Venta» tras su aprobación comercial. El pedido de leche se salta ese clic: en cuanto nace, el sistema mismo le aplica esa aprobación comercial y lo intenta llevar a «Venta». Lo que no se salta es el control de crédito: esa capa sigue corriendo exactamente igual que en cualquier otra venta a crédito de la casa (ver sección «La cartera del cliente» ↗ Manual General).
Mientras el pedido está en ese punto muerto, las entregas del parte que lo componen quedan marcadas como «En pedido, esperando confirmación»: ya no están sueltas ni vuelven a aparecer como pendientes en ningún otro proceso, pero tampoco están facturadas. No se pierde nada y no se duplica nada: cuando el crédito se resuelva y alguien vuelva a confirmar ese mismo pedido, la entrega y la factura salen exactamente igual que si el crédito nunca hubiera frenado nada.
Para destrabarlo hace falta entrar al pedido desde Ventas y pulsar «Confirmar Venta» de nuevo — botón que exige el permiso correspondiente de Ventas. Ahí se abre el asistente de «Control de Crédito», con dos salidas: «Cancelar Transacción» o «Crear Solicitud de Aprobación», que pide una aprobación de crédito aparte (otra solicitud de Aprobaciones, distinta de la que aprobó los litros). Solo cuando esa segunda aprobación se resuelve a favor, el pedido llega a «Venta» y dispara la entrega y la factura.
En cuanto el pedido llega de verdad a «Venta» —al aprobar la liquidación, o días después al reconfirmarlo tras resolver el crédito— se dispara siempre lo mismo: se valida la entrega (si el producto de leche lleva inventario; hoy no lo lleva, así que este paso normalmente no genera ningún albarán) y se emite la factura. Cada línea de cada entrega del parte queda enlazada a su línea de factura correspondiente, por modalidad.
Un proceso diario revisa, empresa por empresa, qué días se quedaron sin parte de ordeño y le deja una tarea pendiente a quien tiene que reportarlo. Enlaza con sección 2, que es el documento que este aviso reclama.
No pasa por el motor general de avisos del sistema (sección «Impresiones y avisos» ↗ Manual General, «Quién recibe qué»): es un mecanismo propio y más simple, que deja directamente una actividad pendiente — la misma «tarea» que aparece en la campanita de notificaciones — a quien tiene el grupo de Parte de Leche, sin que haga falta configurar ninguna suscripción.
El proceso no se limita a comprobar si falta el parte de ayer: mira hacia atrás una ventana de varios días. La razón es de sentido común y es la que más se olvida: quien vuelve un lunes después de estar unos días fuera tiene que ver todos los días sueltos que dejó atrás, no solo el más reciente. Un aviso que solo mirara «ayer» dejaría esos días enterrados sin que nadie se entere.
| Qué mira | Detalle |
|---|---|
| Hasta cuándo | Ayer, no hoy: el ordeño de esta mañana puede no estar capturado todavía a la hora en que corre el aviso, y contarlo como «falta» sería avisar de algo que ni siquiera es tarde. |
| Desde cuándo | Tantos días atrás como diga la ventana configurada, sin saltarse fines de semana: la finca ordeña los siete días, no hay turno que no reportar. |
| Qué cuenta como «reportado» | Que exista un parte de ese día, aunque todavía esté en borrador sin confirmar. Un parte a medio llenar ya no dispara el aviso de esa fecha — lo que sigue pendiente es confirmarlo, no crearlo. |
La ventana se configura en Ajustes → Ecuador → Parte de Leche, apartado «Aviso de partes faltantes», campo «Días a revisar para el aviso de partes faltantes». Por defecto son 14 días. Ese mismo apartado del módulo, en Ajustes, es solo para esto: quién aprueba la liquidación no se configura ahí ni en ningún otro campo de Ajustes — ver sección 8.
flowchart TD
A["Proceso diario, por compañía"]:::sis
B["Calcula la ventana:
de HOY-N días hasta AYER"]:::sis
C{"¿Hay fechas de la ventana
sin ningún parte?"}:::sis
D["Arma el texto con
TODAS las fechas sueltas"]:::sis
E["Una tarea pendiente por
destinatario, actualizada
cada día (no se acumulan)"]:::avi
F["Se cierran las tareas
abiertas: «se puso al día»"]:::ok
A --> B --> C
C -->|sí| D --> E
C -->|no| F
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
classDef avi fill:#B45309,stroke:#7C3D06,color:#fff
A todos los usuarios de esa compañía que tengan el grupo «Parte de Leche: Empleado» o «Parte de Leche: Manager» — es decir, a quien reporta el parte y a quien administra el módulo, sin distinguir uno de otro. No hace falta suscribir a nadie a mano: entrar al grupo ya incluye a la persona en el aviso, y salir del grupo la saca.
Cada destinatario tiene una sola tarea pendiente por este motivo, que el proceso reescribe cada día con la lista vigente de fechas faltantes — no se crea una tarea nueva cada vez que el proceso corre. El mismo mecanismo la cierra sola, con la nota «Se puso al día: ya no hay partes pendientes», en cuanto ya no falta ningún día. Y si alguien deja de pertenecer a los grupos del módulo, su tarea abierta se cierra con la nota «El destinatario ya no reporta partes de leche» en vez de quedar colgada para siempre.
El parte se llena en pantalla (sección 2), pero quien ordeña y quien reparte trabajan en el establo y en la camioneta, no frente a un computador. El papel es lo que de verdad viaja: lo que se lleva el repartidor y lo que firma quien recibe la leche.
Botón «Imprimir» sobre la ficha de un Parte diario de leche. Lo puede usar cualquiera con acceso al módulo — el mismo grupo que lleva el parte, sin un permiso aparte para imprimir.
El parte impreso existe en dos diseños distintos, y cuál sale no se elige al imprimir: lo decide el estilo de impresión de la compañía, en Ajustes → Ecuador → «Formato de Reportes» — el mismo selector y el mismo mecanismo que gobierna el resto de documentos impresos del sistema (sección «Impresiones y avisos» ↗ Manual General). Elegir el estilo «GalapagosTech» ahí no añade una segunda entrada al menú «Imprimir»: sigue habiendo un solo botón, y lo único que cambia es el diseño del PDF que sale.
| Estilo | Cuándo sale |
|---|---|
| Nativo de Odoo | Cuando la compañía no tiene elegido el estilo «GalapagosTech» en Ajustes — o lo tiene, pero ese estilo no cubriera este documento. |
| GalapagosTech | Cuando la compañía sí tiene elegido ese estilo en Ajustes. Cabecera propia con acento teal, y el mismo contenido reordenado en un diseño distinto. |
flowchart TD
A["«Imprimir» sobre
un Parte diario"]:::caj
B{"¿La compañía tiene elegido
el estilo GalapagosTech
en Ajustes?"}:::sis
C["Sale el diseño NATIVO"]:::neu
D["Sale el diseño GALAPAGOSTECH"]:::neu
E["El repartidor se lo lleva.
Quien recibe la leche firma"]:::ok
A --> B
B -->|no| C --> E
B -->|sí| D --> E
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
classDef neu fill:#E6F4F7,stroke:#2098AF,color:#111
Los dos estilos llevan la misma información, solo que dibujada distinto: quién reportó y el estado del parte, el total ordeñado y —solo si hubo— el total descartado por mastitis; luego una fila por cada destino (cada cliente, y «Autoconsumo» para lo que se queda en la finca) con su modalidad de entrega, los litros apartados, los descartados, los entregados —siempre resaltados, porque son los que de verdad recibe cada uno— y el grado de acidez si se midió. Al final, el total repartido y, si aplica, cuánto de eso no se factura a nadie.
El diseño nativo agrega una columna con el estado de cobro de cada línea; el de GalapagosTech no la lleva, y en su lugar cierra con un total de litros entregados destacado en un bloque de color.
Las dos versiones cierran igual: dos líneas para firmar, «Entregado por» y «Recibido por». Es la constancia física de que la leche cambió de manos — el sistema registra el reparto en pantalla, pero quien confirma que ese litraje llegó de verdad es la firma en el papel.
La finca también vende quesos, fruta y ganado, alquila vivienda y locales, hace transporte y logística, presta otros servicios y revende un bazar residual. Nada de eso tiene pantalla propia: se vende, se cobra y se contabiliza exactamente igual que cualquier otro producto del catálogo.
El parte diario del ordeño (sección 2) es un documento pensado para UN producto: la leche, en litros, repartida cada día entre clientes y autoconsumo. Todo lo demás que la finca vende —quesos, fruta, ganado, un cuarto alquilado, un flete, una comisión de venta a catálogo— es un producto de catálogo corriente, con su propio precio y su propia categoría, que se vende por los cuatro caminos de una venta ↗ Manual General igual que en cualquier otra empresa. No hay un asistente de «alquileres» ni uno de «transporte»: la diferencia entre estas líneas de negocio vive en la ficha del producto, no en un flujo aparte.
Todo producto que no es leche cae en una de estas categorías, y lo que las distingue es una sola pregunta: ¿lleva inventario? Un alquiler o un servicio no tiene nada que descontar de bodega; un queso o un artículo del bazar sí se entrega físicamente, aunque no todos llevan el mismo control de existencias.
| Línea de negocio | ¿Lleva inventario? | Cómo se vende |
|---|---|---|
| Productos agrícolas y ganado (quesos, fruta, ganado) | Sí, con existencias valoradas: entra por compra o producción y sale por venta, igual que cualquier producto almacenable. | Producto normal de catálogo, por los cuatro caminos de una venta ↗ Manual General. |
| Bazar (reventa de catálogo) | Se compra y se entrega, pero sin control de existencias: no lleva kardex ni valoración de inventario, porque se pide y se despacha en el momento, no se guarda en bodega. | Se compra a quien lo provee (comprar y pagar ↗ Manual General) y se revende igual que el resto del catálogo. |
| Alquiler de vivienda y de locales | No. Es un servicio: no genera ningún movimiento de bodega ni albarán. | Una línea de venta más, del producto «alquiler» que corresponda. |
| Transporte y logística | No. | Igual: producto de servicio, sin entrega física que validar. |
| Otros servicios prestados | No. | Igual. |
Cada una de estas líneas cuelga de su propia categoría de producto, con su propia cuenta de ingreso: así el asiento de una noche de alquiler no cae en la misma cuenta que una venta de queso, sin que nadie tenga que corregirlo a mano al cerrar el mes. Qué cuenta usa cada categoría se configura en la ficha de la categoría de producto, y qué diario y qué asiento genera cada documento está en sección «Los asientos: qué cuenta y qué diario usa cada operación» ↗ Manual General.
flowchart TD
A["Producto que NO es leche
(queso, alquiler, flete, bazar…)"]:::caj
B{"¿El producto está
marcado como almacenable?"}:::sis
C["Al vender, descuenta bodega
y genera su albarán"]:::sis
D["Al vender, NO hay entrega
que validar: solo la factura"]:::sis
E["Se vende por los cuatro
caminos de una venta"]:::caj
F["Se cobra en caja o
queda en cartera"]:::ok
G["El asiento va a la cuenta
de la categoría del producto"]:::ok
A --> B
B -->|sí: agrícola, ganado, bazar| C --> E
B -->|no: alquiler, transporte, servicio| D --> E
E --> F --> G
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
Marcar novedad no crea ningún pedido ni ninguna factura. La liquidación se queda abierta con el motivo por escrito, alguien corrige el parte, y se vuelve a aprobar sobre la misma liquidación — nunca sobre una copia.
Antes de que exista ningún pedido de venta, los litros del período pasan por una liquidación que alguien tiene que aprobar (sección 8): el detalle día por día está en la misma pantalla que el total, para que aprobar no sea firmar a ciegas. Si al revisarlo algo no cuadra —un litraje mal anotado, una entrega que no correspondía a este cliente—, el aprobador no tiene que rechazar en el aire ni pedir que alguien arregle el dato por fuera del sistema: marca la novedad ahí mismo, y el proceso sabe exactamente qué hacer con eso.
flowchart LR
APR(["Aprobador"]):::act
TRA(["Trabajador de la finca"]):::act
SIS(["Liquidación
(motor de aprobaciones)"]):::act
UC["El aprobador encuentra
un error en los litros"]:::uc
APR --> UC
TRA --> UC
SIS --> UC
UC -.->|se apoya en| S1["Aprobar la liquidación"]:::ref
UC -.->|se apoya en| S2["La liquidación del período"]:::ref
UC -.->|se apoya en| S3["El parte diario del ordeño"]:::ref
UC -.->|se apoya en| S4["De la liquidación aprobada
a la factura"]:::ref
classDef act fill:#2098AF,stroke:#186B7A,color:#fff
classDef uc fill:#E6F4F7,stroke:#2098AF,color:#111
classDef ref fill:#fff,stroke:#9CA3AF,color:#374151
flowchart TD
A["Liquidación «Pendiente de
aprobación»: detalle día
por día + total"]:::caj
B["El aprobador revisa
el detalle"]:::caj
C{"¿Los litros
están correctos?"}:::sis
D["«Aprobar»: se crea
el pedido y la factura"]:::ok
E["Escribe el motivo:
qué litros no cuadran"]:::caj
F["«Marcar novedad»:
NO se crea nada"]:::no
G["Estado: «Con novedad».
Sin pedido, sin factura"]:::avi
H["Alguien corrige el parte
del día correspondiente"]:::caj
I["Vuelve a la liquidación:
«Corregir y reenviar
a aprobación»"]:::caj
J["Se resincroniza con el
parte YA corregido"]:::sis
K["Estado vuelve a
«Pendiente». Nuevo ciclo
de aprobación, se abre otro"]:::sis
L["El aprobador revisa
de nuevo, sobre el total
ya corregido"]:::caj
A --> B --> C
C -->|sí| D
C -->|no| E --> F --> G --> H --> I --> J --> K --> L --> C
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
classDef avi fill:#B45309,stroke:#7C3D06,color:#fff
classDef no fill:#DC2626,stroke:#991B1B,color:#fff
«Corregir y reenviar a aprobación» no vuelve a mirar el parte entero: se limita a poner la liquidación al día con lo que cambió, en dos direcciones:
| Qué pasó en el parte | Qué hace la liquidación |
|---|---|
| Una línea que estaba en la liquidación se corrigió a 0 litros (no era de este cliente, o no le tocaba) | Sale de la liquidación. Aprobar un total que la siguiera contando sería aprobar un total viejo. |
| Una entrega nueva, ya confirmada, quedó pendiente de facturar para este mismo cliente | Entra a esta misma liquidación, aunque sea de un día distinto al que motivó la novedad. |
Si tras corregir el parte la liquidación se queda sin ninguna entrega que facturar, el sistema no la reenvía a una aprobación vacía: avisa que hay que revisar el parte antes de volver a intentarlo.
Cada vez que se reenvía a aprobación se abre un ciclo de revisión nuevo, y ninguno borra al anterior: la pestaña de ciclos de revisión de la liquidación conserva los dos —el que se marcó con novedad y el que terminó aprobado—, cada uno con su fecha y su estado. Quien mire la liquidación más tarde puede ver que hubo una corrección, no solo el resultado final.
Ese día no se le apartó nada. La línea se queda en cero, no se borra, y no se factura: es la constancia de que ese día no hubo entrega para ese cliente.
Cada mañana el parte del ordeño (sección 2) nace con una línea precargada por cada cliente activo, todas en cero litros. Quien lo llena escribe encima de las que sí tuvieron entrega y deja las demás tal como nacieron. Una de ellas puede ser la de un cliente que ese día no vino a retirar su leche, o al que ese día no le tocaba entrega. El sistema no distingue el porqué: solo ve una línea en cero, sin mastitis marcada, y la trata como lo que es —un día sin movimiento para ese cliente— sin sacarla del parte ni tratarla como un error.
flowchart LR
TRA(["Trabajador de la finca"]):::act
SIS(["Parte diario
(cálculo automático)"]):::act
UC["El cliente no vino
por su leche"]:::uc
TRA --> UC
SIS --> UC
UC -.->|se apoya en| S1["El parte diario del ordeño"]:::ref
UC -.->|se apoya en| S2["El reparto: a quién
va cada litro"]:::ref
UC -.->|se apoya en| S3["En qué estado queda
cada entrega"]:::ref
UC -.->|se apoya en| S4["El ciclo de facturación
de cada cliente"]:::ref
classDef act fill:#2098AF,stroke:#186B7A,color:#fff
classDef uc fill:#E6F4F7,stroke:#2098AF,color:#111
classDef ref fill:#fff,stroke:#9CA3AF,color:#374151
flowchart TD
A["El parte nace con una línea
en 0 litros para este cliente"]:::sis
B["El trabajador no anota nada:
la deja en 0"]:::caj
C{"¿Se marcó mastitis
en esa línea?"}:::sis
D["Confirmar el parte:
0 litros no descuadra nada"]:::caj
E["estado_cobro = «Sin entrega
ese día»"]:::neu
F["No entra a ninguna
liquidación: nunca se factura"]:::ok
G["La línea se queda en el parte,
como constancia del día"]:::ok
H["Va por el camino de una
entrega descartada (otro caso)"]:::avi
A --> B --> C
C -->|no| D --> E --> F --> G
C -->|sí, sí se apartó y se botó| H
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
classDef avi fill:#B45309,stroke:#7C3D06,color:#fff
classDef neu fill:#E6F4F7,stroke:#2098AF,color:#111
El parte se puede confirmar con esa línea en cero sin ningún problema: el cuadre que exige la confirmación es que lo ordeñado sea igual a lo repartido, y una línea en cero aporta cero a ambos lados de la cuenta — no descuadra nada, solo dice que ese cliente no participó del reparto de ese día.
Antes de que existiera esta regla, la tentación natural era quitar del parte al cliente que no tuvo movimiento ese día, para que la lista quedara «limpia». El problema es que borrar esa línea borra también la única prueba de que ese día se revisó a ese cliente y, sencillamente, no le tocaba nada. Con la línea en cero, el parte impreso (sección 11) y el histórico del cliente siguen diciendo la verdad completa: quién recibió leche cada día, y quién no.
Cada cliente puede tener su propio precio por litro. No es una excepción que haya que forzar cada vez: se configura una sola vez en su ficha, y de ahí en adelante la liquidación lo respeta sola.
El precio del litro no es un número fijo escrito en un solo sitio. La liquidación de cada cliente (sección 7) calcula su propio precio base buscando primero si ese cliente tiene una lista de precios asignada; solo si no la tiene, usa el precio de catálogo del producto de leche. Así, dos clientes con exactamente los mismos litros y la misma modalidad de entrega pueden terminar pagando dos totales distintos, y los dos son correctos.
flowchart LR
ADM(["Quien administra
los clientes de leche"]):::act
SIS(["Liquidación
(cálculo automático)"]):::act
UC["Un cliente paga la leche
más cara que los demás"]:::uc
ADM --> UC
SIS --> UC
UC -.->|se apoya en| S1["La liquidación del período"]:::ref
UC -.->|se apoya en| S2["El ciclo de facturación
de cada cliente"]:::ref
UC -.->|se apoya en| S3["Un día se le lleva
la leche"]:::ref
UC -.->|se apoya en| S4["De la liquidación aprobada
a la factura"]:::ref
classDef act fill:#2098AF,stroke:#186B7A,color:#fff
classDef uc fill:#E6F4F7,stroke:#2098AF,color:#111
classDef ref fill:#fff,stroke:#9CA3AF,color:#374151
| Dónde | Qué hace |
|---|---|
| Ficha del cliente → pestaña de ventas, campo «Lista de precios» | Si tiene una asignada, la liquidación calcula el precio base del litro con ella. Se ve solo si la función de varias listas de precios está activada. |
| Ventas › Configuración › Ajustes, apartado Precios, casilla «Listas de precios» | Activa la función. Sin ella, el campo de la ficha del cliente no aparece, y todos los clientes de leche pagan el precio de catálogo del producto. |
| Producto de leche, campo «Precio de venta» | El precio de catálogo: el que paga cualquier cliente sin lista de precios propia. |
flowchart TD
A["Se activa «Listas de precios»
en Ajustes de Ventas"]:::caj
B["Se crea una lista de precios
con el precio del litro para
este cliente"]:::caj
C["Se asigna esa lista en la
ficha del cliente"]:::caj
D["El cliente recibe leche
normal, por el parte diario"]:::caj
E["Al armar la liquidación,
busca si el cliente tiene
lista de precios propia"]:::sis
F{"¿Tiene lista
propia?"}:::sis
G["Precio base = el de
SU lista de precios"]:::ok
H["Precio base = el de
catálogo del producto"]:::ok
I["El mismo precio se usa en
la vista previa del aprobador
y en el pedido real"]:::ok
A --> B --> C --> D --> E --> F
F -->|sí| G --> I
F -->|no| H --> I
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
El recargo por entrega a domicilio (caso 16) es independiente de todo esto: se suma encima del precio base que le toque a cada cliente, sea el de su propia lista o el de catálogo. Un cliente con precio propio que además recibe la leche en casa paga su precio más el recargo, nunca uno de los dos solos.
La forma habitual de recibir la leche vive en la ficha del cliente. La de verdad vive en cada línea del reparto: ese día paga el recargo, y en la factura se ve separado de lo demás.
Un cliente que casi siempre viene a la finca a retirar su leche, un día no puede — y alguien se la lleva. No hace falta cambiar nada en su ficha para que ese día quede registrado como corresponde: la modalidad de entrega es una propiedad de cada entrega, no del cliente, y se anota en la línea del reparto de ese día (sección 3). El recargo por llevarle la leche se aplica solo, y solo a esos litros.
flowchart LR
CLI(["Cliente"]):::act
TRA(["Trabajador de la finca"]):::act
SIS(["Liquidación
(cálculo automático)"]):::act
UC["Un día se le lleva la leche
a quien normalmente retira"]:::uc
CLI --> UC
TRA --> UC
SIS --> UC
UC -.->|se apoya en| S1["El reparto: a quién
va cada litro"]:::ref
UC -.->|se apoya en| S2["La liquidación del período"]:::ref
UC -.->|se apoya en| S3["De la liquidación aprobada
a la factura"]:::ref
UC -.->|se apoya en| S4["El ciclo de facturación
de cada cliente"]:::ref
classDef act fill:#2098AF,stroke:#186B7A,color:#fff
classDef uc fill:#E6F4F7,stroke:#2098AF,color:#111
classDef ref fill:#fff,stroke:#9CA3AF,color:#374151
| Dónde está | Qué es | Quién manda |
|---|---|---|
| Campo «Cómo recibe la leche» en la ficha del cliente | Su forma habitual. Es solo el punto de partida que se propone al anotar el parte. | No decide nada por sí sola: solo sugiere. |
| Campo «Entrega» de la línea del reparto, ese día | Lo que de verdad pasó esa entrega en concreto. | Manda ella. Se propone con el valor de la ficha, pero se puede cambiar en esa línea sin tocar la ficha del cliente. |
flowchart TD
A["Cliente: «Cómo recibe
la leche» = Retira en la finca"]:::caj
B["Ese día no puede venir"]:::caj
C["En la línea del reparto de HOY,
el trabajador cambia «Entrega»
a «Se le entrega»"]:::caj
D["Se confirma el parte
normal, con esa marca"]:::sis
E["Al llegar el día de corte,
la liquidación agrupa las
entregas por modalidad"]:::sis
F["Dos grupos como máximo:
«Retira» y «Se le entrega»"]:::sis
G["Al grupo «Se le entrega» se
le suma el recargo configurado"]:::sis
H["Al aprobar: el pedido nace
con una línea por cada
modalidad usada"]:::ok
I["La factura separa el precio
base del recargo: se ve
claro cuánto costó ese día"]:::ok
A --> B --> C --> D --> E --> F --> G --> H --> I
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
Si en el mismo período el cliente tuvo días de retiro y días de entrega a domicilio, la liquidación no los mezcla en una sola cifra: agrupa los litros de cada modalidad por separado, y esos dos grupos se convierten en dos líneas del pedido y, después, en dos líneas de la factura — una por «Leche entregada… (retirada en la finca)» y otra por «Leche entregada… (con entrega a domicilio)». El cliente ve exactamente cuántos litros le costaron el recargo y cuántos no.
La leche salió del hato y cuenta en el ordeño del día. El cliente, sin embargo, no recibe nada: ni se entrega ni se cobra, y esa línea queda cerrada para siempre.
El control de calidad no revisa el tanque una vez al día: revisa cada entrega, antes de despacharla (sección 4). Un cliente tiene su línea apartada con litros de verdad —no está en cero, alguien sí ordeñó y separó esa leche para él— pero al revisarla aparece mastitis. Esa leche no se entrega: se descarta, entera o en parte, y el cliente se queda sin su leche ese día sin que se le cobre un centavo.
flowchart LR
TRA(["Trabajador de la finca
(control de calidad)"]):::act
SIS(["Parte diario
(cálculo automático)"]):::act
UC["Una entrega se descarta
entera por mastitis"]:::uc
TRA --> UC
SIS --> UC
UC -.->|se apoya en| S1["El control de calidad"]:::ref
UC -.->|se apoya en| S2["El reparto: a quién
va cada litro"]:::ref
UC -.->|se apoya en| S3["En qué estado queda
cada entrega"]:::ref
UC -.->|se apoya en| S4["El parte diario del ordeño"]:::ref
classDef act fill:#2098AF,stroke:#186B7A,color:#fff
classDef uc fill:#E6F4F7,stroke:#2098AF,color:#111
classDef ref fill:#fff,stroke:#9CA3AF,color:#374151
flowchart TD
A["Se aparta leche para el cliente:
línea con litros > 0"]:::caj
B["Control de calidad revisa
ANTES de despachar"]:::caj
C{"¿Encuentra mastitis?"}:::sis
D["Marca «Mastitis» y anota
los litros descartados"]:::caj
E{"¿Cuánto descarta?"}:::sis
F["Descarta TODO: litros
entregados queda en 0"]:::no
G["Descarta una parte:
el resto SÍ se entrega"]:::avi
H["El parte se confirma igual:
lo descartado cuenta en el
ordeño, no en lo entregado"]:::sis
I["estado_cobro = «Descartado,
no se cobra»"]:::no
J["No entra a ninguna
liquidación, nunca"]:::ok
A --> B --> C
C -->|no| K["Se entrega normal"]:::ok
C -->|sí| D --> E
E -->|todo| F --> H
E -->|parte| G --> H
H --> I --> J
classDef caj fill:#2098AF,stroke:#186B7A,color:#fff
classDef sis fill:#7C3AED,stroke:#5B21B6,color:#fff
classDef ok fill:#037F58,stroke:#026345,color:#fff
classDef avi fill:#B45309,stroke:#7C3D06,color:#fff
classDef no fill:#DC2626,stroke:#991B1B,color:#fff
Los litros descartados sí cuentan en el ordeño del día: salieron del hato, se apartaron, y por eso siguen sumando en «Total repartido» y en el cuadre del parte. Lo que cambia es cuánto de esa línea se entrega de verdad: los «Litros entregados» son siempre los litros apartados menos los descartados, y es esa cifra —no la apartada— la que se factura.
| Campo | Qué significa aquí |
|---|---|
| Litros | Lo que se apartó para el cliente. No baja aunque se descarte todo: es lo que realmente salió del hato para esa entrega. |
| Litros descartados | Lo que el control botó por mastitis. No puede ser mayor que los litros apartados, y no se puede anotar nada aquí sin marcar «Mastitis» primero. |
| Litros entregados | Litros menos descartados. Es lo único que el cliente recibe, y lo único que se factura. |