Skip to content

Ask AI

Ask anything about Destesi — setup, products, APIs.

AI answers may be wrong — always verify against the docs.

Florin

Florin lives at finance.destesi.io. Sign in once at account.destesi.io and your session follows you across the suite.

Florin answers three questions: how much each unit costs you, how much the month made, and where the money went. Underneath is a small double-entry ledger: the owner records “what was paid, how much, to whom, for which area”, and the accountant works with documents, a chart of accounts and books. It works on its own; Stall’s former Gastos, Nómina and Contaduría live here now, and their history can be imported.

Money is integers in the books’ currency (COP). Requests take amounts as decimal strings in currency units ("1510000", "1510000.50"); responses carry *_cents integers. Dates are YYYY-MM-DD, months YYYY-MM.

The books are created on first use with a compact Colombian PUC chart (about 150 accounts, classes 1–7) and the document types below. Account codes are digits with an optional .NN auxiliary (111005.02); an account’s parent is its longest existing code prefix. Only leaf accounts take lines; an account with children is a heading. Nature comes from the first digit: classes 1, 5, 6 and 7 are debit, 2, 3 and 4 credit. The accountant adds, renames and archives accounts freely; an account with a balance cannot be archived.

An owner or admin can lock the books through a date: nothing dated on or before it may be posted or annulled.

Every movement is a document of one type, numbered per type when posted:

Prefix Document Default debit Default credit
FV Factura de venta (internal voucher, never an electronic invoice) 1305 4135
DV Devolución en venta 4175 1305
FC Factura de compra 1405 2205
DC Devolución en compra 2205 1405
RC Recibo de caja 111005 1305
CE Comprobante de egreso 2205 111005
CC Comprobante de contabilidad — —
CO Consumo de inventario / costo de ventas 6135 1430
NI Nota de inventario 1430 4295

A document is a draft (editable, deletable) until it is posted. Posting requires debits = credits > 0, leaf non-archived accounts, a date after the lock, and a third party on lines of 13xx, 22xx, 23xx and 25xx accounts. Posted documents never change: annul one and Florin posts a reversal of the same type with the lines swapped. The only edit a posted document allows is its fiscal support (electronic_invoice, support_document or none) and external reference, so a remission can be linked to its electronic invoice later. There is one ledger: reports always add everything and show the part without an electronic invoice. DIAN filing stays in your accounting software.

Every write carries a request_id: the same request twice records once; the same id with a different body is refused with request_conflict.

A cost center is an area money is spent for (ADM, CORTE, LAVANDERIA). Each belongs to one of four report groups, which decide where it lands in the production report: admin, financial, fixed_production and direct_production.

The owner’s forms post one document at once:

Kind Document Debit Credit
expense CE the expense/cost account, with cost center cash or bank
credit_purchase FC the account (default 1405 materias primas) 2205 supplier
sale FV cash/bank if paid now, else 1305 customer the income account (default 4135/4155)
payment_received RC cash or bank 1305, settling an FV
supplier_payment CE 2205, settling an FC cash or bank

Unpaid FC and FV appear under Por pagar and Por cobrar with their age.

Informe de producción is the accountant’s monthly cost report: each report group and its cost centers, their totals, the part with an electronic invoice, and the cost per unit (total ÷ the month’s units produced), next to the previous month’s. Set the month’s units first. Resumen adds income, cost of sales, the result, the accumulated result, average price, margin per unit, break-even units and what is owed both ways; when something is missing it says why. Payroll is always in the totals.

Cost of sales posts one CO document per month at each style’s standard cost (set by the accountant, effective from a date). A style sold without a standard cost is refused with missing_standard_cost.

Permission Lets you
books.read Read documents, books, reports, payables and receivables.
entries.record Create, post and annul documents, quick entries, imports, units of the month, cost of sales.
chart.manage Accounts, third parties, cost centers, standard costs. It is data, so an external accountant needs no admin role.
payroll.read Payroll documents line by line, employee ledgers and payroll imports. An explicit grant: a member gets it only through a Florin role that names it.

Owners and admins alone lock the books, change document-type defaults and run the Stall import. A member with no Florin role has full member access except payroll.read.

Preview first: nothing is written and every row shows ok or its error. Apply is all or nothing.

  • documents: header fecha,tipo,documento,concepto,cuenta,tercero_documento,tercero_nombre,centro_costo,debito,credito,soporte,referencia. Rows with the same tipo + documento form one document. Unknown third parties are created; unknown accounts or cost centers are row errors. soporte is fe, ds or ninguno.
  • payroll (the accountant’s quincena): header nombre,documento,centro_costo,salario,dias,devengado_sueldo,horas_extra,bonificacion,auxilio_transporte,salud,pension,prestamo,anticipo,neto,pagado_banco,pagado_efectivo, plus the document’s date and period. It becomes one payroll CC document: earnings to 51xx or 72xx by the cost center’s report group; salud and pensión to 2370, loans and advances to 1365, bank to 111005, cash to 110505. A row whose earnings minus deductions differ from bank + cash is an error.

Import from Stall brings payees, expenses and paid pay runs over as third parties and posted documents. Running it again creates nothing new.

Every verb above is also a finance_* MCP tool and a dst finance command, over the same routes and permissions:

Area MCP CLI
Books finance_get_books, finance_set_lock dst finance books, dst finance lock <date>
Chart finance_list_accounts, finance_create_account, finance_update_account dst finance accounts list|create|update
Third parties finance_list_third_parties, finance_create_third_party, finance_update_third_party dst finance third-parties list|create|update
Cost centers finance_list_cost_centers, finance_create_cost_center, finance_update_cost_center dst finance cost-centers list|create|update
Document types finance_list_doc_types, finance_update_doc_type dst finance doc-types list|update
Documents finance_list_documents, finance_get_document, finance_create_document, finance_update_document, finance_delete_document, finance_post_document, finance_annul_document, finance_set_document_fiscal dst finance documents list|get|create|update|delete|post|annul|fiscal
Quick entries finance_record_quick_entry dst finance record <kind>
Owed finance_list_open_items dst finance open-items <payable|receivable>
Reports finance_summary, finance_production_report, finance_production_trend, finance_trial_balance, finance_ledger dst finance reports summary|production|trend|trial-balance|ledger
Production finance_set_production_units, finance_list_standard_costs, finance_set_standard_cost, finance_post_cost_of_sales dst finance units <month> <n>, dst finance standard-costs list|set, dst finance cost-of-sales <month> --line style=units
Imports finance_preview_import, finance_apply_import, finance_import_commerce dst finance import preview|apply <kind> <file>, dst finance import commerce
Terminal window
dst finance record expense --date 2026-10-10 --amount 450000 \
--account 513530 --money-account 111005 --cost-center-id <id>
dst finance reports production --month 2026-09
dst finance -o json documents list --type FC --status posted

The CLI prints the --request-id it generates on stderr; pass it again to retry safely.