Ramificar según type. Cada rama construye un arreglo lines[]; el Paso 4 valida antes de escribir.
accrual
Devengo de fin de período (ingresos no facturados, nómina devengada, interés devengado). Debitar la línea de gasto / ingreso, acreditar Accrued Liabilities (o debitar Accrued Revenue más acreditar ingreso). reversing: true por defecto. Anexar a accruals.json: {id, type, active: true, reversing: true, period, amount, glCode, counterGlCode, memo, createdAt, updatedAt}.
Submodo mode=reversing. Leer accruals.json, encontrar cada entrada con active=true AND reversing=true AND period < current. Para cada una, producir un asiento de reversión con reversesEntryId apuntando al original y la convención de signo invertida. Marcar el original active: false y establecer reversedOn. Escribir cada reversión como un asiento contable separado.
prepaid
Amortizar prepagos (renta, SaaS, seguro). Debitar la cuenta de gasto, acreditar la cuenta de activo prepagado. reversing: false. Memo: "Amortize {asset} - {period}".
payroll
Resumen del período de pago. Orden de origen: app conectada (composio search payroll → Gusto / Rippling / Justworks / Deel / ADP, esquema vía --get-schema) > resumen pegado {gross, taxes, benefits, netPay, byDepartment: {rd, sm, ga}}. Líneas: debitar Wages - R&D / Sales & Marketing / General & Admin según el plan de cuentas, debitar Payroll Taxes, debitar Employee Benefits; acreditar Wages Payable (o Cash si se pagó dentro del período, preguntar una vez), Payroll Tax Liabilities, Benefits Payable. Memo: "Payroll - {period} - {provider}".
revrec
Leer cada revrec/**/*.json, elegir las filas con period = current. Debitar Deferred Revenue, acreditar cuenta de ingresos. Multi-moneda: consolidar en la moneda local (ya está en el cronograma). Memo: "Revenue recognition - {period} - {N} contracts".
depreciation
Leer config/fixed-assets.json (forma: [{id, description, class, cost, salvage, usefulLifeMonths, inServiceOn, method: "straight-line"}]). Si no existe, pedir UNA vez el cronograma (archivo > pegar), NUNCA inventar. Calcular (cost - salvage) / usefulLifeMonths por activo, agrupar por clase. Debitar Depreciation Expense - {class}, acreditar Accumulated Depreciation - {class}. Memo: "Depreciation - {period} - {N} assets".
stock-comp
Leer config/stock-comp.json (forma: {valuation: {fmv, asOf}, grants: [{employeeId?, grantDate, shares, strike, vestingMonths, cliff}]}). Si no existe, pedir UNA vez la 409A más el cronograma de vesting. Gasto lineal después del cliff según ASC 718. Debitar Stock-Based Compensation Expense (dividido por I+D / Ventas y Marketing / Administración General si el plan de cuentas lo permite), acreditar Additional Paid-in Capital. Memo: "Stock-based compensation - {period} - {N} grants". Si context/bookkeeping-context.md marca la compensación en acciones como un no rotundo sin aprobación previa, detenerse y presentar el borrador para aprobación.
adjustment
Ajuste manual general. Tú dictas {glCode, debit, credit, memo} por línea (2 o más líneas). Fuentes comunes: comisiones no registradas de las conciliaciones, redondeo cambiario, correcciones de codificación previas.
reclass
Entradas {fromGlCode, toGlCode, amount, memo}. Debitar toGlCode, acreditar fromGlCode. Ambas deben ser líneas de gasto o activo; una sección cruzada (gasto → pasivo) requiere type=adjustment en su lugar.