Todos los montos son enteros en la unidad mínima de la moneda (por ejemplo, centavos). Las fechas son cadenas
YYYY-MM-DD. Las marcas de tiempo son fechas y horas ISO 8601.
Acceso
Un asiento intercompañía contiene los libros de dos Entidades, así que cada ruta pide acceso a la Organización completa:- Usa una clave de API de nivel Organización. Crea la clave con Todas las empresas en el selector Empresa (consulta Obtén una clave de API). Una clave acotada a una sola Entidad recibe
403conPERMISSION_DENIED_ERRORen todas las rutas de esta página, también al leer. - Escribir requiere un Rol que escriba.
POSTyDELETEnecesitan el Rolstaffoclient. Unviewerpuede listar y leer, y recibe403conPERMISSION_DENIED_ERRORal escribir. Consulta Acceso y roles. - Envía los encabezados de auditoría al escribir. Con una clave de API,
POSTyDELETEnecesitanx-audit-actoryx-audit-reason, como toda mutación. Consulta Autenticación.
404 con INTERCOMPANY_ENTRY_NOT_FOUND_ERROR.
El objeto asiento intercompañía
El asiento intercompañía no tiene fecha propia. La lista y el detalle agregan
entryDate, la fecha que llevan sus dos asientos contables.
GET /api/organizations/:organizationId/intercompany-entries
Lista los asientos intercompañía de la Organización en páginas por cursor (keyset), con elentryDate más reciente primero. La lista incluye los anulados, con status en deleted.
- Parámetro de ruta:
organizationId(UUID) - Parámetros de consulta:
No se acepta ningún otro parámetro de consulta. Uno desconocido devuelve
400.
- Respuesta exitosa: una página de asientos intercompañía
- Estado: 200
Cada elemento de
intercompanyEntries es el objeto asiento intercompañía más:
GET /api/organizations/:organizationId/intercompany-entries/:intercompanyEntryId
Lee un asiento intercompañía con sus dos asientos contables, sus líneas y sus Pares. Uno anulado sigue siendo legible.- Parámetros de ruta:
organizationId(UUID),intercompanyEntryId(UUID) - Respuesta exitosa: el detalle del asiento intercompañía
- Estado: 200
Cada elemento de
ledgerEntries:
Una línea que está en un Par lleva el id del Par en
intercompanyPairId. Una línea sin Par lleva null.
Cada elemento de pairs:
POST /api/organizations/:organizationId/intercompany-entries
Crea un asiento intercompañía. En una sola transacción, Sintropix registra un asiento contable en cada una de las dos Entidades, los vincula al asiento intercompañía y guarda los Pares. Si falla cualquier validación, no se escribe nada.- Parámetro de ruta:
organizationId(UUID) - Cuerpo:
Cada elemento de
newLedgerEntries:
Cada línea tiene los campos de una línea de
POST /api/entities/:entityId/ledger/entries: id, accountId, functionalAmount, side y, de forma opcional, partnerId, el trío de transacción (transactionCurrency, transactionAmount, transactionFxRate) y dimensionValueIds. Cada id de línea debe ser nuevo y único entre ambos asientos.
Cada elemento de newIntercompanyPairs:
Los Pares siguen estas reglas:
- Un Par por línea. Una línea está en un Par como máximo. Una línea sin Par es una línea normal de su asiento, como el lado del banco en un préstamo.
- Lados opuestos. Un Par es un debe en una Entidad y un haber en la otra, para que la eliminación lo cancele. Si no:
422conINTERCOMPANY_PAIR_SAME_SIDE_ERROR. - Mismo monto. Ambas líneas llevan la misma moneda y el mismo monto. Una línea en moneda extranjera lo lleva en su trío de transacción. Cualquier otra lo lleva en su
functionalAmount, en la moneda funcional de su Entidad. Si no:422conINTERCOMPANY_PAIR_AMOUNTS_DIFFER_ERROR. - Una moneda por asiento intercompañía. Su moneda es la de su primer Par. Un Par en otra moneda devuelve
422conINTERCOMPANY_PAIR_CURRENCY_DIFFERS_ERROR. - Un tipo de cambio por Entidad. Cuando una Entidad recibe la moneda del asiento intercompañía como moneda extranjera, sus líneas pareadas llevan un solo tipo de cambio.
"0.9"y"0.90"cuentan como el mismo. Si no:422conINTERCOMPANY_PAIR_RATES_DIFFER_ERROR, que nombra la Entidad. - Sin Partner en una línea pareada. Omite
partnerIdo envíalo ennull. Sintropix lo fija en el Partner que representa a la otra Entidad.
- Respuesta exitosa: el detalle del asiento intercompañía, con la misma forma que la lectura
- Estado: 201
functionalAmount:
DELETE /api/organizations/:organizationId/intercompany-entries/:intercompanyEntryId
Hace el Unbook (anulación) del asiento intercompañía. En una sola transacción, Sintropix anula ambos asientos contables y deja elstatus del asiento intercompañía en deleted. Cada asiento se anula igual que lo hace DELETE /api/entities/:entityId/ledger/entries/:entryId con un asiento. Se anulan ambos asientos o ninguno.
No es un borrado definitivo. El asiento intercompañía, sus dos asientos contables, sus líneas y los Pares siguen siendo legibles, con status en deleted. Su historial se mantiene en el registro de auditoría.
- Parámetros de ruta:
organizationId(UUID),intercompanyEntryId(UUID) - Respuesta exitosa: cada fila que cambió el Unbook
- Estado: 200
Como un Unbook normal, también corta las Asignaciones y las conciliaciones bancarias (Matches) que saldan las líneas de los asientos.
El Unbook se rechaza cuando:
- Cualquiera de los asientos tiene fecha igual o anterior a la Fecha de bloqueo de su Entidad. La solicitud devuelve
409conLEDGER_ENTRY_UNBOOK_FROZEN_ERROR.paramsnombra el asiento, su fecha y la Fecha de bloqueo de su Entidad. El asiento intercompañía y ambos asientos siguen enactive. - El asiento intercompañía ya está anulado. La solicitud devuelve
409conINTERCOMPANY_ENTRY_NOT_ACTIVE_ERROR.
Corregir un asiento intercompañía
No puedes editar un asiento intercompañía ni ninguno de sus dos asientos contables. Para cambiar su fecha, glosa, montos, cuentas, Entidades o Pares, anúlalo y créalo de nuevo:1
Lee el asiento intercompañía
GET /api/organizations/:organizationId/intercompany-entries/:intercompanyEntryId devuelve lo que necesitas para rehacerlo: la fecha, la glosa, ambos asientos con sus líneas y los Pares.2
Guarda las Asignaciones de sus asientos
El Unbook elimina las Asignaciones que saldan las líneas del asiento intercompañía. Para conservarlas, léelas antes con
GET /api/entities/:entityId/ledger/allocations?entryId=:entryId para cada asiento. Esta lectura solo acepta un asiento vigente, así que hazla antes del Unbook.3
Anúlalo con DELETE
DELETE /api/organizations/:organizationId/intercompany-entries/:intercompanyEntryId anula ambos asientos en una sola transacción. No es un borrado definitivo. El asiento intercompañía y sus asientos siguen siendo legibles con status en deleted, y el registro de auditoría conserva su historial.4
Crea el asiento corregido con POST
Envía
POST /api/organizations/:organizationId/intercompany-entries con el cuerpo corregido. Usa ids nuevos para el asiento intercompañía, para ambos asientos y para cada línea. El asiento anulado conserva sus ids, así que reutilizar su id devuelve 409 con INTERCOMPANY_ENTRY_ALREADY_EXISTS_ERROR, reutilizar el id de un asiento devuelve 409 con LEDGER_ENTRY_ALREADY_EXISTS_ERROR, y reutilizar un id de línea devuelve 409 con LEDGER_ENTRY_LINE_ALREADY_EXISTS_ERROR.Las líneas nuevas no heredan los valores de Dimensión de las líneas antiguas. Para conservar las etiquetas de una línea, envía el dimensionValueId de cada elemento de su lineDimensionValues en el dimensionValueIds de la línea nueva. Una línea enviada sin dimensionValueIds se crea sin etiquetas.5
Restaura las Asignaciones
Por cada Asignación guardada, envía
POST /api/entities/:entityId/ledger/allocations con un id nuevo, la línea nueva en lugar de la antigua, la misma otra línea y el mismo amount. Si la corrección cambió un monto y una Asignación ya no cabe en el monto abierto de la línea, la solicitud devuelve 409 con RECONCILIATION_ALLOCATION_AMOUNT_EXCEEDS_OPEN_AMOUNT_ERROR.409 con LEDGER_ENTRY_UNBOOK_FROZEN_ERROR y no puedes corregirlo así. Registra un asiento intercompañía de ajuste con fecha en un período abierto, o pide a quien administra los libros que mueva la Fecha de bloqueo.
Estas solicitudes no existen y devuelven 404:
PATCHoPUT /api/organizations/:organizationId/intercompany-entries/:intercompanyEntryIdPOST /api/organizations/:organizationId/intercompany-entries/:intercompanyEntryId/reversePOST /api/organizations/:organizationId/intercompany-entries/:intercompanyEntryId/unbook
409 con LEDGER_ENTRY_IN_INTERCOMPANY_ENTRY_ERROR, y params.intercompanyEntryId nombra el asiento intercompañía que debes anular. Todavía puedes etiquetar sus líneas con valores de Dimensión sin tocar el asiento intercompañía.
Encontrar el asiento intercompañía de un asiento contable
Un asiento contable que pertenece a un asiento intercompañía lo indica dondequiera que lo encuentres:- El objeto asiento contable lleva
intercompanyEntryId, el id del asiento intercompañía, onullen un asiento normal. - Las filas de
GET /api/entities/:entityId/ledger/entriesy el detalle del asiento llevanotherEntityOfIntercompanyEntry:{ id, name }de la otra Entidad, onull. - Una línea del libro mayor lleva el
intercompanyEntryIdde su asiento.
Historial
Cada creación y cada Unbook quedan en el registro de auditoría. Lee el historial de un asiento intercompañía a través de cualquiera de sus dos Entidades:tableName=ledger_entry y el id del asiento.
Códigos de error de dominio
Al crear, cada asiento contable también puede devolver cualquier error de asiento contable de una creación normal, como
LEDGER_ACCOUNT_NOT_FOUND_ERROR.

