Reales vs. presupuesto vs. período anterior vs. mismo período del año anterior. Descompongo cada línea material en factores de precio / volumen / mezcla / eventos únicos, cada uno vinculado a ids de asientos contables o conjuntos de transacciones específicos. La narrativa se enfoca en los 3 a 5 movimientos más grandes para que leas una historia, no una hoja de cálculo. Todo lo que no puedo explicar lo etiqueto como residuo en lugar de inventar una causa.
Ejecuto el trabajo externo a través de Composio. Antes de correr este skill verifico que las categorías de abajo estén conectadas. Si falta alguna, nombro la categoría, te pido que la conectes desde la pestaña de Integraciones, y me detengo.
Este skill nunca se bloquea por una conexión faltante.
Primero leo tu contexto de contabilidad. Por cada campo requerido que falte, hago UNA pregunta en lenguaje sencillo (mejor modalidad: app conectada > archivo > URL > pegar) y espero.
-
Leer el contexto. Cargar context/bookkeeping-context.md, config/context-ledger.json (para domains.budget, cadencia más ruta), config/chart-of-accounts.json. Leer config/budget.json si existe ([{period, glCode, amount, note?}]).
-
Elegir las líneas base de comparación. Para el period solicitado (YYYY-MM o YYYY-QN), reunir hasta tres líneas base:
- Presupuesto, filas de
config/budget.json para el período. Si no existe, se omite y se anota "sin presupuesto registrado".
- Período anterior,
financials/{prior-YYYY-MM}/pnl.md si existe; de lo contrario recalcular sobre la marcha desde journal-entries.json.
- Mismo período del año anterior,
financials/{prior-YYYY-MM-12}/pnl.md si existe; de lo contrario recalcular.
-
Cargar los reales del período. Leer el estado de resultados del período desde financials/{YYYY-MM}/pnl.md (generado por prepare-my-financials). Si falta, recalcular desde journal-entries.json sobre la marcha y anotar que el estado de resultados oficial aún no se ha escrito.
-
Calcular las variaciones por línea de código de cuenta. Para cada línea de código de cuenta en cualquiera de: reales, presupuesto, período anterior, año anterior, calcular:
actual_minus_budget, pct_vs_budget
actual_minus_prior_period, pct_vs_prior_period
actual_minus_prior_year, pct_vs_prior_year
-
Aplicar el umbral de materialidad. Por defecto: abs(variance) > 5% AND abs(variance) > $1000. Configurable por ejecución mediante argumento. Solo las variaciones materiales reciben descomposición de factores. Las no materiales se resumen en una sola tabla al final.
-
Descomponer cada variación material en factores. Fundamentar cada factor en asientos contables o transacciones específicas:
- Precio, el costo unitario cambió a la misma cantidad (por ejemplo, aumento de precio de un proveedor de SaaS). Citar los ids de asientos contables donde aparece el nuevo precio por primera vez.
- Volumen, más o menos unidades al mismo precio unitario (por ejemplo, más gasto de hosting porque el uso se duplicó). Citar el conteo de transacciones contra la línea base más ids de asientos contables representativos.
- Mezcla, una combinación distinta de SKUs / proveedores / categorías. Citar los asientos contables entrantes más los proveedores que salieron.
- Evento único, no recurrente (ajuste puntual, reembolso único, renovación anual registrada en el mes). Citar el id del asiento contable más el memo.
Cada factor tiene: {driver, amount, jeRefs: [id…], transactionRefs?: [ids…], narrative}. El amount debe sumar el total de la variación con una diferencia de hasta $1.00. El residuo sin explicar se registra explícitamente, nunca se absorbe en silencio.
-
Escribir la narrativa en español sencillo sobre los 3 a 5 movimientos más grandes. La narrativa nombra cada movimiento, el impacto en dólares, el factor principal, la evidencia específica (id de asiento contable o proveedor o conjunto de transacciones). Nada de causas inventadas. Si la evidencia es débil, decirlo. "sin factor obvio, se recomienda que lo revises" es aceptable. El relleno especulativo no lo es.
-
Escribir el artefacto de variación. Ruta: variance-analyses/{YYYY-MM}.md. Escritura atómica: .tmp → renombrar. Estructura:
- Encabezado: período, líneas base usadas, umbral de materialidad, método contable.
- Titular, resumen de 1 a 2 oraciones (por ejemplo, "Los gastos operativos subieron $45k (+12%) contra presupuesto, impulsados por la duplicación del hosting y un ajuste legal puntual").
- Narrativa, 3 a 5 párrafos sobre los movimientos más grandes, cada uno citando ids de asientos contables / proveedores / conteos de transacciones.
- Tabla de variaciones materiales, una fila por línea de código de cuenta material con reales, cada línea base, variación, descomposición de factores.
- Variaciones no materiales, tabla resumen compacta.
- Residuos sin explicar, cualquier descomposición de factores que no cuadre dentro de $1.00.
- Pie de página: fuentes (ruta del archivo del estado de resultados, ruta del archivo de presupuesto, rutas de estados de resultados de períodos anteriores, hash de journal-entries.json).
-
Anexar a outputs.json. Lectura-fusión-escritura. Fila: {id, type: "variance-analysis", title: "Variance - {YYYY-MM}", summary: "<the headline>", path: "variance-analyses/{YYYY-MM}.md", status: "draft", domain: "reporting"}.
-
Resumirte. Un párrafo: titular más los 3 a 5 movimientos más grandes con impacto en dólares más factor principal, más los residuos sin explicar que necesitan revisión. Señalar el archivo escrito.