📘
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_centers | Tipo |
| id | UUID (PK) |
| name | VARCHAR ('Reproducción') |
| allocation_type | ENUM ('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_batches | Dato |
| id | 'LOTE-E045' |
| initial_heads | 100 cerdos |
| current_heads | 100 cerdos |
| accumulated_cost | S/. 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_assets | Descripción |
| id (Ej: M001) | UUID de la Marrana |
| initial_value | S/. 1,500.00 |
| useful_life_months | Ej: 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
| Req | Ruta |
| POST | /api/inventory/dispatch |
| POST | /api/biology/mortality |
| POST | /api/accounting/cif |
| POST | /api/engine/close-month |