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.
Books and the chart of accounts
Section titled “Books and the chart of accounts”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.
Documents
Section titled “Documents”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.
Cost centers and report groups
Section titled “Cost centers and report groups”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.
Quick entries
Section titled “Quick entries”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.
The production report
Section titled “The production report”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.
Permissions
Section titled “Permissions”| 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.
CSV imports
Section titled “CSV imports”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 sametipo+documentoform one document. Unknown third parties are created; unknown accounts or cost centers are row errors.soporteisfe,dsorninguno. - 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.
MCP tools and CLI
Section titled “MCP tools and CLI”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 |
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-09dst finance -o json documents list --type FC --status postedThe CLI prints the --request-id it generates on stderr; pass it again to
retry safely.