📘

Para el Arquitecto (Geeksoft)

La Biblia del Costo Porcino

De la Biología al SQL. Esta presentación fusiona la teoría del libro (con dibujitos para entender el negocio) y su traducción exacta a esquemas de Base de Datos y código Python.

1. El Ciclo de Vida

La Granja como una Cadena de Ensamblaje

El experto no ve animales caminando; ve Centros de Costo Biológicos en constante evolución y absorción de inversión.

👩‍👧
Reproducción
➡️
🍼
Lactancia
➡️
🐷
Destete
➡️
🥩
Engorde

El Ciclo Biológico

Fase 1: Reproducción

Verracos y Marranas (Gestación ~114 días)

👩‍👧
La Maquinaria
Aquí las madres NO son producto para la venta. Todo el alimento consumido aquí es Costo Indirecto para la futura camada.
Traducción a SQL
Tabla: cost_centersTipo
idUUID (PK)
nameVARCHAR ('Reproducción')
allocation_typeENUM ('INDIRECT')
Al ser INDIRECT, el sistema sabe que el alimento consumido aquí debe ser prorrateado a fin de mes.

El Ciclo Biológico

Fases 3 y 4: Gorrinera y Engorde

Donde los lechones se convierten en lotes productivos y consumen el 70% del alimento.

🥩
El Lote es el Rey
Los cerdos dejan de ser individuos y se agrupan en corrales (Ej: Lote E045). El costeo del alimento se vuelve completamente Directo a ese lote.
Traducción a SQL
Tabla: production_batchesDato
id'LOTE-E045'
initial_heads100 cerdos
current_heads100 cerdos
accumulated_costS/. 0.00
Este lote pertenece a un Centro de Costo de tipo DIRECT.

Regla Financiera 1

La Marrana es un Tractor (Activo Fijo)

Una premisa de la Norma NIC 41. La marrana pierde valor cada mes (Depreciación Biológica) y ese monto se suma como CIF a Maternidad.

Schema (SQL)
Tabla: biological_assetsDescripción
id (Ej: M001)UUID de la Marrana
initial_valueS/. 1,500.00
useful_life_monthsEj: 36 meses
Python (FastAPI Cron Job a fin de mes)
def depreciate_sows(): sows = db.query(Asset).filter(status="ACTIVE").all() total_depreciation = 0 for sow in sows: dep_mensual = sow.initial_value / sow.useful_life_months total_depreciation += dep_mensual # Inyectamos la depreciación a Maternidad insert_cif_record(center="MATERNITY", amount=total_depreciation)

Regla Financiera 2

Valorización del Alimento (Kárdex)

El experto prohíbe usar FIFO. Cada compra de alimento recalcula el precio del almacén. Los cerdos comen al costo de ese día exacto.

El Problema (Teoría)
Ayer compraste soya a S/. 10. Hoy compraste a S/. 15. Si despachas hoy al corral, debes cobrar el saco al promedio ponderado exacto del inventario total.
Python (Trigger en el Despacho)
def recalc_avg_cost(item_id, new_qty, new_price): stock = get_current_stock(item_id) # 100 kg a S/. 10 = S/. 1000 new_total_value = stock.total_value + (new_qty * new_price) new_total_qty = stock.qty + new_qty # La fórmula de oro (FCR) new_avg_cost = new_total_value / new_total_qty update_item_cost(item_id, new_avg_cost) return new_avg_cost

Regla Financiera 3

La Matemática de la Muerte (Mermas)

Si tienes 100 cerdos que ya consumieron S/. 1,000 en alimento y se mueren 10... El dinero de los muertos lo heredan los 90 sobrevivientes.

Teoría: El Costo se Hereda
El autor dictamina que los S/. 1,000 invertidos no se restan jamás. En su lugar, el divisor (cabezas de ganado) se reduce. La muerte infla matemáticamente el costo de los vivos.
Python: Registrar Muerte (Endpoint)
def register_mortality(batch_id, dead_qty): batch = db.get_batch(batch_id) # RESTAMOS las cabezas, pero JAMÁS tocamos el dinero batch.current_heads -= dead_qty db.save(batch) # El costo unitario subió automáticamente: # Antes: 1000 / 100 = S/. 10.00 # Ahora: 1000 / 90 = S/. 11.11

Regla Financiera 4

Prorrateos y el Cost Driver

Luz, agua, y sueldo de los peones. ¿Cómo se reparte todo eso a fin de mes entre cientos de cerdos?

Cost Driver: Días de Estancia
Si el Lote A existió 30 días, y el Lote B solo 15 días... El Lote A absorberá exactamente el doble de costos indirectos (CIF) que el Lote B.
Python: Motor de Cierre de Mes
def allocate_cif(total_cif, month): active = db.get_active_batches(month) global_days = sum(b.days * b.current_heads for b in active) for batch in active: batch_driver = batch.days * batch.current_heads percentage = batch_driver / global_days # Sumamos al costo acumulado del lote batch.accumulated_cost += (total_cif * percentage) db.save(batch)

Ingeniería Inversa (TDD)

Auditoría Matemática del Lote E001

Los números exactos extraídos del libro (Pág 104-143) para hacer pruebas de nuestro motor.

Datos de Prueba (Input BD)
- Saldo Anterior BD: S/. 4,890
- Cerdos Activos: 20
- Días en el mes: 10 (Total: 200 días/gorrino)
- Consumo (Kárdex): S/. 395
- CIF Granja Total (SAP): S/. 380
- Días Totales Granja: 3,225
Resultado Esperado (Output API)
1. Factor Prorrateo = 200/3225 = 0.062015
2. CIF Asignado = 380 * 0.062 = S/. 23.56
3. Costo Lote = 4890 + 395 + 23.56 = S/. 5308.56
4. Costo por Kilo = 5308.56 / 1960 kg = 2.71 S/.
* Si nuestra API en Python bota 2.71, hemos replicado la mente del autor a la perfección.

Resumen Ejecutivo

Tu Guión y Endpoints

Lo que tienes que decir en la reunión y lo que vamos a programar en el backend.

El Guión para el Experto
"Comprendemos que la marrana es un Activo Biológico que se deprecia. El alimento no usa FIFO sino Promedio Diario Ponderado. Si un cerdo muere, el costo jamás se resta, sino que se divide entre los sobrevivientes; y a fin de mes, todos los Gastos Indirectos (CIF) se prorratean en base a los Días de Estancia."
Endpoints de Python (FastAPI) a construir
ReqRuta
POST/api/inventory/dispatch
POST/api/biology/mortality
POST/api/accounting/cif
POST/api/engine/close-month