Skip to main content
An Expense Claim (rendición) is one expense that a person paid with their own money and asks the Entity to pay back. You submit it in Sintropix itself, with no outside tool such as Rindegastos. It waits until the Organization’s Approver approves or rejects it:
  • Approved: Sintropix creates the person’s payable Invoice in a Source that holds Expense Renditions, and books it in the same request. From then on it’s an Expense Rendition like any other, and you pay it from a Payment Batch.
  • Rejected: the claim keeps the reason, and the decision is final. To try again, submit a new claim.
An Xpendit expense Feed also creates claims: each expense Xpendit approved lands as a claim that is already approved, with no wait for the Approver. While a claim waits, it is no Invoice. It isn’t listed among the Expense Renditions or in Compras, isn’t a payable to plan in a Payment Batch, and doesn’t count on the home dashboard.
Open in the app. This resource has a page in the Sintropix web app at https://app.sintropix.com/{entityId}/expense-renditions?expenseClaimStatus=submitted, where each id in braces is the same UUID as in the API route or response. Rendiciones, under Datos. Por aprobar (expenseClaimStatus=submitted) lists the claims that wait, with the Approve and Reject actions, and Rechazadas (expenseClaimStatus=rejected) lists the rejected ones. Both show each claim's Número. Drop the parameter for the Expense Renditions. Nueva rendición submits a claim. When you mention a record to a user, include that link. See Link to the App for the full URL grammar.

Concepts

  • Person. The Partner who paid the expense and is paid back, never the merchant.
  • Receipt Kind. What the person holds as proof: a boleta or a factura issued to the Entity. It decides what the approval debits. See What approving books.
  • Expense Category. What the expense was spent on, such as “Alimentación” or “Movilización”. Each Entity names its own categories, and each category can carry the expense account its claims propose. See Expense Categories.
  • Proposed expense account. The expense account the claim suggests: the account of the claim’s category, or one the submitter names. It must be an account of type cost_of_goods_sold, operating_expense, or other_expense. The Approver can pick another one on approval.
  • Number. Each claim takes the next number of its Entity when you submit it: 1, 2, 3, and so on. Numbers never repeat within an Entity. The Expense Rendition of an approved claim carries it as its Document Number, R-<number>, so a claim reads the same before and after approval.
  • Approver. The one User of the Organization who approves and rejects the claims of all its Entities. It must be a member with the client Role: someone of the client’s own team, never Sintropix staff or a viewer. The Approver role ends when the User’s Membership ends.
  • Status. Sintropix derives it, and never stores it:
    • submitted: the claim waits for the Approver.
    • approved: the claim has its Expense Rendition, in invoiceId.
    • rejected: the claim has a rejectionReason.
Who approved or rejected a claim, and when, is in the Audit Trail. Once a claim is approved, the Actividad of its Expense Rendition shows who submitted it and who approved it.

Before you submit claims

Approving needs two settings. Set them in Configuración → Rendiciones, at /{entityId}/settings/expense-claims, or through the API:
  1. The Approver of the Organization. Use PUT /organizations/:organizationId/expense-claim-approver.
  2. The booking setting of each Entity. Use PUT /expense-claim-setting. It names three things:
    • The Source the Expense Renditions land in. It must be a Source that holds Expense Renditions.
    • The Rendición por pagar account, which the approval credits with the person as Partner. It must be a liability account with the sub-type expense_rendition_payable. If the Entity already books renditions into a payable account, you can switch its sub-type to expense_rendition_payable even though it has entries.
    • The supplier payable account, which a factura claim debits. It must have the sub-type payable, and it must be the account the Entity’s SII invoices credit, so that you can match the two lines later.
You can submit claims before you set either one. Only approving and rejecting need them. To let submitters pick a category instead of an account, also create the Entity’s Expense Categories and assign each one its expense account. In the app, each pick saves at once, with no Guardar button. The booking setting saves once the Source and both accounts are set. While the setting names a Source, you can’t unmark the Source as one that holds Expense Renditions, or delete it. Sintropix refuses both with 409 and SOURCE_PINNED_ERROR. Each account also keeps its sub-type while the setting names it: a change is refused with 409 and LEDGER_ACCOUNT_FACT_PINNED_ERROR. To change any of them, set another one first.

Report a rendition to Erwin

A person can also report a rendition to Erwin, for example in a Slack channel bound through an Agent Channel: “pagué un almuerzo con cliente con mi tarjeta, ¿me lo devuelven?”. Erwin submits it as an Expense Claim, and the Approver approves or rejects it like any other claim. Erwin never approves, rejects, or books the claim himself.
  1. Erwin checks the setup. When the Entity has no booking setting or the Organization has no Approver, Erwin submits nothing. He tells you that Rendiciones isn’t set up yet, and that someone who keeps the books sets it in Configuración → Rendiciones.
  2. He gets the facts. Erwin asks for a proof if you sent none: a photo, a receipt, or a screenshot. He reads the date, the merchant, and the amount from it, and asks only for what it doesn’t show. The amount is what the Entity pays back, in its functional currency. When the proof is in another currency, he asks what was charged to you in the functional currency, as your card statement shows it. The claim is a factura when the proof is a factura electrónica issued to the Entity’s RUT, and a boleta otherwise, including when there’s no document.
  3. He submits the claim. The person who paid is the claim’s Partner, never the merchant. Erwin creates the Partner when there’s none. The memo holds the merchant, what the expense was, and the other facts the Approver needs, such as the payment method, the document number, and the original currency and amount. A claim holds no file, so when you report it from Slack, the memo ends with a link to the Slack message that holds the proof.
  4. He proposes what it was spent on. Erwin names an Expense Category when one clearly fits the expense and has an expense account. Otherwise he proposes an expense account, following your Organization’s practices in his wiki. He never creates a category, and the Approver can book to another account.
Erwin answers that the rendition is submitted and waits for the Approver, with its amount, its memo, and a link to Rendiciones → Por aprobar. He doesn’t say which account he proposed: that’s for the Approver.

What approving books

Approving creates one payable Invoice and books it in the same request: The booking entry is dated on the expense date. Its Control Line credits the Rendición por pagar account with the person as Partner. The debit depends on the Receipt Kind: For a factura, the claim keeps the expense account as the suggestion for booking the SII invoice. The debit to the supplier payable stays open until you settle it against the Control Line of the SII invoice with POST /ledger/allocations/match. The SII invoice then reads as paid. If you unbook the Expense Rendition and delete it, the claim loses its invoiceId and is submitted again.

Access

A viewer who writes receives 403 with PERMISSION_DENIED_ERROR. Anyone but the Approver who approves or rejects receives 403 with EXPENSE_CLAIM_NOT_APPROVER_ERROR, even a staff member. See Access and roles.

The Expense Claim object

POST /expense-claims

Submit an Expense Claim. It starts as submitted, with the next number of its Entity. Body Send exactly one of expenseCategoryId and expenseAccountId. A body with both, or with neither, receives 400. In the app, Nueva rendición asks for a Categoría, and the picker shows each category’s account or Sin cuenta asignada. A category without an account is refused, and the dialog keeps your draft so you can assign the account in Configuración → Rendiciones and submit again. Response (201): the Expense Claim object.

GET /expense-claims

List the Entity’s Expense Claims, newest expense first. Claims with the same expenseDate come in a stable order. Query parameters Response

GET /expense-claims/:expenseClaimId

Read one Expense Claim. Response: the Expense Claim object. An unknown id receives 404 with EXPENSE_CLAIM_NOT_FOUND_ERROR.

POST /expense-claims/:expenseClaimId/approve

Approve a submitted claim. Sintropix creates its Expense Rendition and books it, as What approving books describes. Only the Approver can call it. Body Response (200)

POST /expense-claims/:expenseClaimId/reject

Reject a submitted claim. The rejection is final. Only the Approver can call it. Body Response (200): the Expense Claim object, now rejected.

Expense Categories

An Expense Category names what an expense was spent on, such as “Alimentación”, “Movilización”, or “Hospedaje”. Each Entity keeps its own list. A category can carry an expense account: a claim that names the category proposes that account, so the submitter picks what the expense was, not where it books.
  • A category’s name is unique within its Entity. Sintropix trims surrounding spaces, so " Taxi " and "Taxi" are one name.
  • A category starts with no account. Assign one before a claim names it.
  • You can rename a category and assign it another account, but you can’t clear an account once it’s assigned.
  • The account must be an expense account of the Entity: of type cost_of_goods_sold, operating_expense, or other_expense.
  • You can delete a category while no Expense Claim names it. Once a claim names it, whatever the claim’s status, the category stays: rename it instead.
In the app, open Configuración → Rendiciones. The Categorías card lists the Entity’s categories. Add one with Agregar categoría, rename it in place, and pick its Cuenta de gasto. To remove a category, click the trash icon on its row and confirm. A name can’t be blank: clearing it is refused with El nombre es obligatorio. Para quitar la categoría, elimínala.
Open in the app. This resource has a page in the Sintropix web app at https://app.sintropix.com/{entityId}/settings/expense-claims, where each id in braces is the same UUID as in the API route or response. When you mention a record to a user, include that link. See Link to the App for the full URL grammar.

The Expense Category object

GET /expense-categories

GET /api/entities/:entityId/expense-categories List the Entity’s Expense Categories, in name order. Response: an array of Expense Category objects.

POST /expense-categories

POST /api/entities/:entityId/expense-categories Create an Expense Category. Body Response (201): the Expense Category object.

PATCH /expense-categories/:expenseCategoryId

PATCH /api/entities/:entityId/expense-categories/:expenseCategoryId Rename a category, assign its expense account, or both. Send at least one field. A field you omit keeps its value. Claims already submitted keep the account they proposed. Body Response (200): the Expense Category object. An unknown id receives 404 with EXPENSE_CATEGORY_NOT_FOUND_ERROR.

DELETE /expense-categories/:expenseCategoryId

DELETE /api/entities/:entityId/expense-categories/:expenseCategoryId Delete a category that no Expense Claim names, such as one created by mistake. The call has no body.
  • A category that any Expense Claim names, whatever the claim’s status, is refused with 409 and EXPENSE_CATEGORY_IN_USE_ERROR. The category and its claims stay as they are. Rename the category instead.
  • An unknown id receives 404 with EXPENSE_CATEGORY_NOT_FOUND_ERROR.
A category that an expense Feed brought comes back the next time the Feed reads an expense of that category. It returns with no expense account, so the expense is rejected with expense_category_unassigned until you assign one again. In the app, the delete confirmation of such a category says so.
Response (200): the deleted Expense Category object.

GET /expense-claim-setting

Read the Entity’s booking setting. Response

PUT /expense-claim-setting

Create or replace the Entity’s booking setting. A change applies to the claims you approve after it. Expense Renditions already created keep their Source and booking. Body An account without the right sub-type receives 400 with EXPENSE_CLAIM_SETTING_ACCOUNT_INELIGIBLE_ERROR. Its params.role says which one: rendition_payable or supplier_payable. Response: the same shape as GET /expense-claim-setting.

GET /organizations/:organizationId/expense-claim-approver

Read the Organization’s Approver, and the members offered as one. Response approver and each element of candidates carry userId (uuid), name (string), and email (string).

PUT /organizations/:organizationId/expense-claim-approver

Set or change the Organization’s Approver. The new Approver decides every claim that still waits, in every Entity of the Organization. Body Response: the same shape as GET /organizations/:organizationId/expense-claim-approver.

Status codes

Domain error codes

A Merge of Partners moves the merged Partner’s claims to the kept one.