FINORA Core · How-to guide
Configuración contable como código
This content is not available in your language yet.
Cuando la parametría contable vive solo en pantallas, nadie sabe quién cambió qué ni cómo dejar el sandbox igual a producción. Con la configuración como código, esa parametría es un documento YAML: se exporta, se revisa en un repositorio, se prueba sin escribir y se aplica de una vez.
Qué cubre el documento
Sección titulada «Qué cubre el documento»apiVersion: finora.config/v1kind: AccountingConfigurationcia: "001"transactionChannels: - code: CAJA name: Caja de agencias glAccount: "1101010001" currency: VES # vacío = cualquier moneda usage: CASH # CASH, TRANSFER, CARD, MOBILE o INTERNAL active: trueproductAccountingRules: - product: CRED-PER rules: - role: PRINCIPAL # el rol contable, por nombre o por código glAccount: "1310100001"licenseModules: [...] # solo lectura| Sección | Qué es | Al aplicar |
|---|---|---|
transactionChannels | Los canales con su cuenta del mayor | Se crean, cambian o desactivan |
productAccountingRules | Por producto, qué cuenta usa cada rol contable | Se crean, cambian o desactivan |
licenseModules | El catálogo de módulos de licencia | Nunca se aplica: si difiere, solo avisa. Los módulos se habilitan con su llave de licencia |
Las cuentas son las del plan del Banco Demo; usa las de tu plan.
Las reglas que te protegen
Sección titulada «Las reglas que te protegen»- Solo se toca lo que nombras. Una sección que no está en el documento no se toca. Un producto que no aparece en
productAccountingRulesno se toca. - Nada se borra. Lo que existe y falta en el documento solo se desactiva, y solo si lo pides con
allowDeletes=true. Sin él, recibes un aviso y sigue igual. dryRunestá encendido por defecto. UnPUTsin parámetros no escribe nada: calcula el plan. Para aplicar hay que pedirdryRun=falsede forma expresa.- Todo o nada. Si un cambio falla al aplicarse, no queda ninguno.
- El ensayo es real.
dryRunejecuta los cambios dentro de una transacción que se revierte, así que también detecta lo que solo aparece al guardar (una cuenta no postable en un canal, un producto que no está aprobado).
flowchart LR A["GET accounting.yaml"] --> B["Editar en el repositorio<br/>revisión a cuatro ojos"] B --> C["PUT dryRun (por defecto)"] C -->|"errores"| B C -->|"plan correcto"| D["PUT dryRun=false"] D --> E["Cambios confirmados<br/>en una transacción"]
Los pasos
Sección titulada «Los pasos»-
Exporta la configuración vigente (alcance
config:read):Ventana de terminal curl -s "$GW/v1/configuration/accounting.yaml" -H "Authorization: Bearer $TOKEN" -o accounting.yamlLlega en
application/yaml. Guárdalo en tu repositorio: es la línea base. -
Edita el archivo y pide la revisión de otra persona antes de aplicarlo, como con cualquier cambio de código.
-
Ensaya el cambio (alcance
config:write). SindryRun, no escribe:Ventana de terminal curl -s -X PUT "$GW/v1/configuration/accounting.yaml" -H "Authorization: Bearer $TOKEN" \-H "Content-Type: application/yaml" --data-binary @accounting.yaml | jqVerás el plan:
{"dryRun": true,"applied": false,"allowDeletes": false,"summary": { "create": 1, "update": 0, "deactivate": 0, "unchanged": 4 },"changes": [{ "section": "transactionChannels", "key": "CAJA", "action": "CREATE","fields": [ { "field": "glAccount", "from": null, "to": "1101010001" } ] }],"warnings": [],"errors": []}Lee
changesuno por uno. Sierrorsno está vacío, la respuesta es 422 con este mismo informe y no se aplicó nada: corrige y repite. Un YAML ilegible responde 400CORE_INVALID_YAML. -
Aplica cuando el plan sea exactamente lo que esperas:
Ventana de terminal curl -s -X PUT "$GW/v1/configuration/accounting.yaml?dryRun=false" -H "Authorization: Bearer $TOKEN" \-H "Content-Type: application/yaml" --data-binary @accounting.yaml | jq '.applied, .summary'applied: trueconfirma que los cambios quedaron. -
Vuelve a exportar y compara con tu archivo: deben coincidir. Haz commit del resultado.
Desactivar lo que ya no está
Sección titulada «Desactivar lo que ya no está»Si quitaste un canal del documento y quieres que el core lo desactive, agrega allowDeletes=true:
curl -s -X PUT "$GW/v1/configuration/accounting.yaml?allowDeletes=true" -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/yaml" --data-binary @accounting.yaml | jq '.changes[] | select(.action == "DEACTIVATE")'Ensáyalo primero (sin dryRun=false) y revisa cada DEACTIVATE. Un canal desactivado no se borra: su historia sigue en
el core.
Si algo falla
Sección titulada «Si algo falla»| Lo que ves | Por qué | Qué hacer |
|---|---|---|
415 GW_TIPO_NO_SOPORTADO | Content-Type no es YAML | Usa application/yaml |
413 YAML_DEMASIADO_GRANDE | El documento supera 2 MiB | Divídelo: aplica una sección por vez |
403 GW_ALCANCE_INSUFICIENTE | Tu credencial no tiene config:write | Lo decide el banco |
422 con errors | Una cuenta, producto o rol no existe o no es válido | Corrige según el mensaje |
| Un aviso «allowDeletes=false» | Algo existe y no está en tu documento | Agrégalo, o usa allowDeletes=true si de verdad quieres desactivarlo |
Para seguir
Sección titulada «Para seguir»- Ciclo de vida de un concepto contable: qué es una regla contable y por qué un rol apunta a una cuenta.
- El gateway de API del core.