Ir al contenido

FISCALISTO / API

Viáticos y gastos

Las comprobaciones de viáticos y gastos de quien viaja o gasta por el emisor: sus facturas revisadas contra la ley y la política, la aprobación, y los anticipos, reembolsos y devoluciones.

Cuando alguien viaja o gasta por el emisor, cada viaje (o cada mes de gastos de oficina) es una comprobación: la persona junta sus facturas, la envía, alguien la aprueba y el saldo se liquida con un reembolso o una devolución. Son las mismas de Gastos › Viáticos y gastos en la app: lo que haga con la API aparece ahí, y lo que hagan ahí aparece aquí.

Cada gasto se revisa contra la ley (los topes de LISR art. 28 fr. V para alimentos, hospedaje y renta de auto, los pagos de más de $2,000 y la gasolina, que no van en efectivo, la regla del 20% sin factura de RLISR art. 152) y contra la política del emisor. La comprobación dice cuánto se deduce, cuánto no y por qué, en issues.

Al aprobarla, sus facturas recibidas se deducen en los impuestos del emisor y la comprobación entra en las pólizas contra la cuenta 107.01 Funcionarios y empleados (employee_expenses en Contabilidad). Para un empleado de Nómina, lo que se liquida «en la nómina» va en su siguiente recibo: los viáticos comprobados como percepción 050 exenta y lo que ya se le dio como deducción 081.

Las personas

Agregue a quien viaja o gasta: un empleado de Nómina (employee) o alguien por honorarios (name y tax_id).

curl https://api.fiscalisto.com/v1/expense_people \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "empleado",
    "employee": "emp_OufpKqnrvx9p1",
    "email": "ana@example.com",
    "base_city": "Monterrey"
  }'

Contesta la persona (exp_…). base_city es donde trabaja: un viaje a más de 50 km de ahí es de viáticos (far en la comprobación). Para que suba sus facturas desde el teléfono, sin cuenta, dele su enlace:

curl https://api.fiscalisto.com/v1/expense_people/exp_OufpKqnrvx9p3/link \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

url es su enlace: ahí ve solo sus comprobaciones. Con "renew": true le da uno nuevo y el anterior deja de funcionar; DELETE /v1/expense_people/{id}/link lo apaga.

Abrir una comprobación

Una por viaje (kind viaje, por omisión) o una por periodo de gastos de oficina que la empresa reembolsa (gastos):

curl https://api.fiscalisto.com/v1/expense_reports \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "person": "exp_OufpKqnrvx9p3",
    "destination": "Guadalajara",
    "purpose": "Visita a clientes",
    "start_date": "2026-11-03",
    "end_date": "2026-11-05"
  }'

Queda draft (abierta). Si se le da dinero antes del viaje, regístrelo como anticipo:

curl https://api.fiscalisto.com/v1/expense_reports/exr_OufpKqnrvx9p4/movements \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "kind": "anticipo", "amount": 3000, "date": "2026-11-02" }'

method es transferencia (por omisión), efectivo, tarjeta o nomina: con nomina, el dinero va en el siguiente recibo de nómina del empleado.

Agregar los gastos

Con el UUID de una factura que el emisor recibió (Descargas del SAT), la fecha, el monto, el proveedor y la forma de pago salen de ella:

curl https://api.fiscalisto.com/v1/expense_reports/exr_OufpKqnrvx9p4/items \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "uuid": "6F1C2D3E-4A5B-4C6D-8E9F-0A1B2C3D4E5F", "category": "hospedaje" }'

Sin factura (un ticket, un comprobante del extranjero), mande category, date, amount y receipt (ticket, extranjero o ninguno). En payment diga cómo se pagó: lo que se pagó con tarjeta_empresa no se le reembolsa a la persona. Cada respuesta es la comprobación revisada: items[].deductible, items[].issues y el balance.

balance positivo es lo que la persona debe devolver; negativo, lo que la empresa le debe reembolsar.

Enviar, aprobar y liquidar

  • POST /v1/expense_reports/{id}/submit la envía a aprobar (submitted). Contesta expense_report_invalid si un gasto tiene un error (issues con level error).
  • POST /v1/expense_reports/{id}/items/{item} con "rejected": true y reject_reason rechaza un gasto al revisarla: no se paga ni se deduce. false lo vuelve a incluir.
  • POST /v1/expense_reports/{id}/return con note la devuelve a la persona para corregir (rejected).
  • POST /v1/expense_reports/{id}/approve la aprueba (approved). La API puede aprobar lo que envió un miembro del equipo; en la app nadie aprueba lo que envió.

Con el saldo en cero se cierra sola (closed). Si no, registre el reembolso o la devolución:

curl https://api.fiscalisto.com/v1/expense_reports/exr_OufpKqnrvx9p4/movements \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "kind": "reembolso", "amount": 1350, "date": "2026-11-07" }'

DELETE /v1/expense_reports/{id}/movements/{movement} deshace un movimiento, y POST /v1/expense_reports/{id}/reopen regresa una aprobada a abierta: sus facturas dejan de deducirse y sale de las pólizas. No se puede reabrir una que ya se reportó en un recibo de nómina.

La política

GET /v1/expense_policy trae los topes por categoría (limits, al día y por persona o por gasto, en México y en el extranjero), hasta cuánto se acepta sin factura (ticket_limit) y en cuántos días se comprueba (due_days). POST /v1/expense_policy cambia solo lo que manda:

curl https://api.fiscalisto.com/v1/expense_policy \
  -H "Authorization: Bearer $FISCALISTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "limits": { "alimentos": { "domestic": 750, "abroad": 1500, "per": "dia" } },
    "ticket_limit": 500
  }'

Un gasto que pasa un tope de la política no se rechaza: se marca (over_policy) para quien aprueba. Los topes de la ley se aplican siempre, a la deducción.