Skip to content

v0.14.0

Choose a tag to compare

@ami-facturadirecta ami-facturadirecta released this 15 Oct 21:42
· 1 commit to main since this release

Añadido

  • facturadirecta api <operación> [ids…] (ADR-0008): llama a cualquier
    operación de la API por su nombre de acción (el de describe y del servidor
    MCP) o su operationId, también las que no tienen comando propio (pedidos,
    órdenes de compra, versiones, campos personalizados, stock, actividad…).
    • Los ids de la ruta van como argumentos y la query con -p nombre=valor;
      el cuerpo, con --data '<json>', --data @fichero o por stdin.
    • --idempotency-key la envía donde la espera la operación; --dry-run
      imprime la petición, sin credenciales, sin enviarla; --output guarda la
      respuesta.
    • Las escrituras necesitan login --scope full y los borrados
      irreversibles, confirmación (--yes), como los comandos dedicados.
    • describe añade la invocación genérica (cli.api).
  • La salida JSON (también la de --jq y la de los errores en modo agente) ya
    no escapa <, > ni & como \u003c, \u003e y \u0026: los textos y las
    formas de uso (<id>) se leen tal cual. Sigue siendo el mismo JSON.
  • commands.json (la superficie que publica cada release) añade, en cada
    comando, las operaciones de la API a las que llama (operations, con
    operationId y action), y apiOnly, las operaciones sin comando
    dedicado, que se llaman con facturadirecta api. Son campos nuevos: los
    existentes no cambian.
  • facturadirecta describe [objetivo…] (ADR-0008 del monorepo): el contrato de
    cualquier operación de la API sin llamarla. Muestra parámetros, la forma y el
    esquema del cuerpo, el esquema de la respuesta, los ejemplos de la
    documentación, las notas de uso y los comandos del CLI que la llaman.
    • Admite la acción (create_invoice, con los nombres del servidor MCP), el
      operationId (createInvoice), la ruta de un comando (invoices create) o
      una sección (invoices, delivery-notes); sin objetivo, lista las
      secciones.
    • Con -j la salida es JSON. --schema body|response imprime solo el
      esquema completo, y --example [n] el cuerpo de ejemplo, listo para
      --data.
  • La ayuda (--help) de cada comando que llama a la API termina con la forma
    del cuerpo (Cuerpo (--data o stdin): {"content" (obligatorio), "tags"}) y
    el describe de su operación.
  • --search <texto> en invoices list, estimates list,
    delivery-notes list, bills list, payrolls list y recurring list:
    búsqueda aproximada en el texto del documento (título, líneas, notas) y en
    el nombre de su contacto, con el mismo criterio que la búsqueda rápida de la
    web (sale del contrato de la API).
  • Informes de FacturaDirecta en facturadirecta accounting, con las mismas
    cifras que la web y calculados en el servidor:
    • accounting results: ingresos, gastos y beneficio por origen, en todos los
      planes; --breakdown month|quarter|year (con --total) o
      --compare previousPeriod|previousYear (con --difference, --variance).
    • accounting results-documents --category <categoría>: los documentos que
      forman una cifra del resumen.
    • accounting profit-loss, accounting balance-sheet y
      accounting trial-balance: pérdidas y ganancias, balance de situación y
      sumas y saldos, para las empresas con el módulo de Contabilidad.
  • whoami indica en cada empresa si tiene el módulo de Contabilidad
    (accountingModule), con una conexión por empresa.
  • Adjuntos, como en el MCP: --summary indica en facturas, presupuestos y
    gastos cuántos ficheros adjuntos tiene cada documento (attachments, solo si
    tiene alguno), y fetch los enumera al final del texto y en
    metadata.attachments con su url, que es pública y permanente.
  • La ayuda de statements reconcile-new explica cómo cobrar o pagar una
    factura, un gasto o una nómina con el movimiento: {"document": "<id>"},
    también entre monedas; amount para un parcial entre monedas; lines solo
    para movimientos sin documento. La de invoices pay, bills pay y
    payrolls pay recomienda conciliar el movimiento cuando el cobro o pago sale
    del extracto bancario.

Cambiado

  • products list --search usa ahora la búsqueda global de la API (título,
    referencia y descripciones del producto); el filtro por nombre que antes
    hacía --search es ahora --title.
  • journal solo responde para las empresas con el módulo de Contabilidad (con
    una conexión por empresa): sin él, falla con plan_limit_exceeded y la pista
    facturadirecta accounting results.
  • Los límites del plan (plan_limit_exceeded, exit 3) y los informes que
    tardan demasiado (report_query_timeout, exit 6) tienen su propio error: ya
    no sugieren login --scope full ni «revisa los parámetros».
  • Los errores de validación de la API (invalid_input) traen en detail los
    mensajes de errors[] con su campo y, cuando el cuerpo no cumple el esquema
    («Documento con formato incorrecto»), la ruta y el motivo de cada campo
    rechazado (hasta 5), como el MCP. Antes detail solo traía el mensaje
    genérico y un agente no sabía qué corregir.
  • --help de los subcomandos muestra su descripción antes del uso, como la
    ayuda por defecto de Cobra. Antes solo mostraba el uso, y los textos largos
    (accounting, auth logout, auth permissions…) no se veían.

Cambiado (BREAKING)

  • Los borrados irreversibles piden confirmación: los delete de facturas,
    presupuestos, albaranes, gastos, nóminas, recurrentes, contactos, productos,
    métodos de pago, API keys y webhooks, y los attachments delete.
    • En una terminal preguntan [s/N].
    • En scripts y agentes (sin terminal, o con -j, -q, --agent o --jq)
      hace falta --yes. Sin él fallan con confirmation_required (exit 2) y no
      llaman a la API.
    • inbox archive y statements unreconcile no la piden porque se pueden
      deshacer.
    • La API pública y los SDK no cambian: la confirmación es solo del CLI.

Eliminado (BREAKING)

  • accounting summary y accounting accounts. Sumaban el diario en el CLI,
    recorriendo hasta 10.000 apuntes, y en las empresas grandes eran lentos e
    incompletos.

Corregido

  • <recurso> attachments list -q devuelve la lista de adjuntos, como el resto
    de listados (imprimía el objeto {"items": …} entero), y admite --ids-only
    y --count. Encontrado probando contra el sandbox.
  • describe de update_bill y de los update_* de documentos numerados avisa
    de los campos de la lectura que la escritura no admite
    (content.accounting, content.books y content.import en los gastos, y
    content.main.manualTotals en los documentos numerados), y la skill lo
    dice. Reenviar el content de un gasto tal como lo devuelve get daba 400.
  • Ejemplos de la skill y del README: las altas y modificaciones usaban
    {"main": {...}}, y el contrato exige
    {"content": {"type": "<tipo>", "main": {...}}}. Los envíos por email
    van con {"to": [...]} (no emails), invoices substitution con
    {"contact", "substitutedInvoices"}, los pagos llevan bank y el alta de
    webhooks, name. El alta de contactos lleva currency y accounts (vacío =
    cliente) y la de productos, sales.account: comprobado contra la API, que
    los exige aunque algunos ejemplos de api-docs los omitan.
  • La skill explica además que update sustituye el contenido completo (hay
    que partir de get), que invoices list y bills list solo muestran
    borradores con --draft only|all, cómo conciliar con document, cómo
    tratar los adjuntos y que search no busca en el texto de los documentos
    (para eso, --search en los listados). Ya no dice que search use la misma
    heurística que el MCP, que ahora usa la búsqueda global de la API.
  • La regla de update de la skill dice lo que hace la API (comprobado contra
    el sandbox): en contactos, productos y métodos de pago los obligatorios se
    envían siempre (no conservan su valor) y no hay líneas ni docNumber; en
    los documentos solo se conservan los campos que FacturaDirecta completa por
    su cuenta, y docNumber va tal cual solo en facturas, presupuestos y
    albaranes. tags y webhooks endpoints update no sustituyen el contenido.
  • describe de las operaciones de endpoints y eventos de webhooks y de los
    adjuntos de gastos, pedidos, albaranes, presupuestos, nóminas, órdenes de
    compra y recurrentes daba la descripción y los ejemplos de otra operación.
    Por ejemplo, la del PUT de un endpoint describía el alta, y ahora dice
    que es una actualización parcial. Ahora cada una tiene los suyos y su
    enlace a la documentación lleva a su sección. Los enlaces con tilde en el
    encabezado (23 operaciones) tampoco llevaban a su sección en GitHub.

Migración

  • Scripts y agentes que borran: añade --yes a delete y attachments delete
    después de confirmar el borrado.
  • accounting summary → accounting results para ingresos, gastos y
    beneficio (--group-by month → --breakdown month), o
    accounting trial-balance --account <prefijo> para los totales de una
    cuenta o grupo.
  • accounting accounts → accounting trial-balance, que lista las cuentas con
    movimientos y su saldo.