AchieveApex: app finance
Generado desde
achieveApex-Frontend/public/ai-docsel 2026-10-15. Contiene 133 archivos de la appfinance. Para el contexto general del producto verapex-resumen.md.
Finance
Cuentas por cobrar (AR) y cuentas por pagar (AP).
- Etapa: Beta
- Landing:
/{orgId}/finance/estimates
Modulos
| Modulo | Slug | Estado | Proposito |
|---|---|---|---|
| Estimates | estimates |
shipped | Cotizaciones, conversion a invoice y preview publico. |
| Orders | orders |
beta | Pedidos del catalogo, la IA o manuales con pago, entrega y checkouts abandonados. |
| Invoices | invoices |
shipped | Facturacion AR y historial de cambios. |
| Payments received | payments-received |
shipped | Pagos de clientes y asignacion a facturas. |
| Payment Links | payment-links |
shipped | Checkout publico Stripe / Wompi. |
| Recurring Invoices | recurring-invoices |
beta | Perfiles de facturacion recurrente. |
| Vendors | vendors |
beta | Maestro de proveedores AP. |
| Expenses | expenses |
beta | Gastos directos ya pagados. |
| Recurring Expenses | recurring-expenses |
beta | Gastos periodicos. |
| Bills | bills |
beta | Cuentas por pagar a vendors. |
| Recurring Bills | recurring-bills |
beta | Cuentas por pagar periodicas. |
| Payments Made | payments-made |
beta | Pagos a vendors y allocations. |
| Document templates | document-templates |
shipped | PDF, numbering, messages y page templates. |
| Taxes y currencies | taxes-currencies |
shipped | Impuestos, monedas y FX. |
| Payment gateways | payment-gateways |
shipped | Credenciales Stripe / Wompi. |
Funcionalidades internas
117 funcionalidades documentadas en 15 modulos. Ver la tabla de cada modulo.
id: bills app: finance nombre: Bills estado: beta permiso: can_access_bills
Bills
Registra facturas de proveedores que crean una cuenta por pagar y se cancelan mediante Payments Made.
Para que sirve
- Una distribuidora registra facturas de inventario para conocer lo que debe pagar a cada proveedor.
- Una clínica prioriza facturas vencidas y próximas a vencer desde el resumen de cuentas por pagar.
- Una agencia aplica pagos parciales a una factura de producción y sigue el saldo que queda pendiente.
- Un coworking convierte la factura mensual de internet en una recurrencia para crear los próximos bills.
Que lo hace diferente
- Conecta proveedores, cuentas por pagar y Payments Made dentro de la misma plataforma donde viven el CRM y las operaciones.
- Los pagos asignados actualizan automáticamente saldo y estado de cada bill, incluidos pagos parciales y completos.
- Comparte monedas, impuestos, partidas, reglas de numeración y plantillas documentales con los documentos de venta de Finance.
- El resumen operativo identifica total pendiente, vencimientos del día, próximos 30 días y documentos atrasados.
- No es contabilidad de partida doble; tampoco incluye órdenes de compra, créditos de proveedor ni adjuntos de facturas.
Acceso
- Ruta principal:
/[orgId]/finance/bills - Como se llega:
Header app switcher > Alpha & Beta > Finance > Purchases > Bills - Permiso requerido:
can_access_billsy permisos del módulo para ver, crear, editar o eliminar.
Alcance tecnico
- Frontend: rutas de lista, creación, detalle y edición;
BillsView,BillEditForm,BillDetailyBillItemsTable. - Backend:
bills,bill-itemsy las asignacionesbill-payments. - Superficies publicas: ninguna.
- Integraciones externas: ninguna.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar cuentas por pagar | bill-list.md | Lista bills y resumen de vencimientos. |
| Crear y editar bills | bill-form.md | Registra la factura y sus condiciones. |
| Gestionar partidas | bill-items.md | Configura conceptos, descuentos e impuestos. |
| Abrir, pagar parcialmente, anular o eliminar | bill-lifecycle.md | Controla el ciclo del bill. |
| Registrar un pago | record-bill-payment.md | Inicia Payments Made con el bill seleccionado. |
| Numerar documentos | bill-numbering.md | Finaliza el número cuando se abre. |
| Convertir en bill recurrente | make-recurring-bill.md | Crea un perfil periódico desde el bill. |
Relaciones
- Depende de: Vendors, Currencies, Payments Made y Document Templates.
- Usado por: Recurring Bills genera bills y Payments Made actualiza su saldo.
- La configuración de numeración AP vive en
settings/document-settings; no se documenta aquí.
Limitaciones y notas
- Un bill requiere proveedor, fecha de documento y fecha de vencimiento.
- Solo puede anularse si no tiene monto pagado.
id: bill-form modulo: bills app: finance nombre: Crear y editar bills tipo: accion
Crear y editar bills
Registra una factura de proveedor como borrador o cuenta por pagar abierta.
Que se logra
- Resultado: una factura de proveedor se convierte en una cuenta por pagar con importe, vencimiento y saldo controlables.
- Caso de uso: una clínica registra la factura de un proveedor médico a 30 días para planificar su pago.
- Se combina con: Vendors, partidas de bill, Payments Made, Currencies y Document Templates.
Donde esta
- Ruta:
/[orgId]/finance/bills/newy/[orgId]/finance/bills/[id]/edit - Acceso en UI:
Bills > New Billo detalle >Edit - Componente(s):
BillEditForm.tsx
Como funciona
- Selecciona proveedor y responsable.
- Define fecha del bill, vencimiento y términos de pago.
- Elige moneda, regla de numeración o plantilla cuando aplique.
- Añade partidas, notas y términos.
- Usa
Save as DraftoSave as Open.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Proveedor | Selección | Sí | Identifica a quién se debe. |
| Fecha y vencimiento | Fecha | Sí | Los términos pueden completar el vencimiento. |
| Moneda | Selección | Sí | Determina los importes. |
| Referencia, notas y términos | Texto/editor | No | Contexto de la factura. |
Reglas y validaciones
- Se requiere al menos una partida con nombre.
- Los términos rápidos incluyen
Due on Receipty opciones Net.
Backend
- Servicios:
bills(create, patch).
Relaciones
- Requiere: Vendors y Currencies.
- Dispara / afecta: un bill abierto empieza con saldo por pagar.
id: bill-items modulo: bills app: finance nombre: Gestionar partidas de bill tipo: accion
Gestionar partidas de bill
Define los conceptos e importes de una factura de proveedor.
Que se logra
- Resultado: el saldo inicial del bill se calcula a partir de sus conceptos, descuentos e impuestos.
- Caso de uso: un hotel detalla habitaciones, servicios y tasas de una factura de mantenimiento para revisar el total que debe.
- Se combina con: creación y edición de bills y Payments Made.
Donde esta
- Ruta:
/[orgId]/finance/bills/newy/[orgId]/finance/bills/[id]/edit - Acceso en UI: formulario > tabla de partidas
- Componente(s):
BillItemsTable.tsx
Como funciona
- Añade, cambia o elimina una partida.
- Indica concepto, cantidad, unidad y tarifa.
- Aplica descuentos e impuestos si aplican.
- Guarda para recalcular el bill.
Reglas y validaciones
- Cada partida calcula su importe.
- Los cambios financieros recalculan los totales de la cabecera.
Backend
- Servicios:
bill-items(find, create, patch, remove).
Relaciones
- Requiere: un bill.
- Dispara / afecta: total, saldo inicial y pago disponible.
id: bill-lifecycle modulo: bills app: finance nombre: Gestionar estado de bills tipo: accion
Gestionar estado de bills
Controla el paso del borrador a la deuda abierta y el cierre por pagos.
Que se logra
- Resultado: la deuda avanza de borrador a abierta y luego refleja automáticamente pagos parciales o completos.
- Caso de uso: una empresa de logística abre una factura de combustible y ve su estado actualizarse a medida que aplica pagos.
- Se combina con: Payments Made y numeración de bills.
Donde esta
- Ruta:
/[orgId]/finance/bills/[id] - Acceso en UI: detalle >
Mark as Open,VoidyDelete - Componente(s):
BillDetail.tsx
Como funciona
- Un
Draftse abre conMark as Open. - Las asignaciones de pagos actualizan automáticamente a
Partially PaidoPaid. - Un bill abierto sin pagos puede pasar a
Void. Deletesolo está disponible enDraft.
Reglas y validaciones
- El ciclo es
Draft→Open→Partially Paid→Paid, oVoid. - No se puede anular un bill con monto pagado.
- Los saldos no se modifican manualmente en el flujo normal.
Backend
- Servicios:
bills(patch, remove),bill-payments(create, patch, remove).
Relaciones
- Requiere: permisos de Bills.
- Dispara / afecta: Payments Made actualiza monto pagado, saldo y estado.
id: bill-list modulo: bills app: finance nombre: Consultar cuentas por pagar tipo: vista
Consultar cuentas por pagar
Lista las facturas de proveedor y resume el saldo pendiente y sus vencimientos.
Que se logra
- Resultado: el equipo ve qué facturas de proveedor siguen por pagar, cuáles vencen pronto y cuáles están atrasadas.
- Caso de uso: una distribuidora prioriza los bills vencidos de sus proveedores para organizar los pagos de la semana.
- Se combina con: detalle de bill y Payments Made.
Donde esta
- Ruta:
/[orgId]/finance/bills - Acceso en UI:
Purchases > Bills - Componente(s):
BillsView.tsx
Como funciona
- Revisa
Total Outstanding,Due Today,Due Within 30 DaysyOverdue Bills. - Busca, filtra por estado, ordena o elige columnas.
- Abre un bill desde la tabla paginada.
Reglas y validaciones
- Un bill abierto o parcialmente pagado con vencimiento anterior muestra
Overdue by N days.
Backend
- Servicios:
bills(find, get). - Efectos: el resumen calcula saldos de bills abiertos y parcialmente pagados.
Relaciones
- Requiere: acceso a Bills.
- Dispara / afecta: enlaza con el detalle y Payments Made.
id: bill-numbering modulo: bills app: finance nombre: Numerar documentos de bill tipo: configuracion
Numerar documentos de bill
Finaliza el número de una factura de proveedor al abrirla.
Que se logra
- Resultado: los bills abiertos reciben una referencia final alineada con las reglas documentales de Finance.
- Caso de uso: una empresa de servicios abre una factura recibida y obtiene el número con el que la controlará en su flujo de pagos.
- Se combina con: ciclo de vida de bills y Document Templates.
Donde esta
- Ruta:
/[orgId]/finance/bills/newy/[orgId]/finance/bills/[id] - Acceso en UI: formulario > regla de numeración; detalle >
Mark as Open - Componente(s):
BillEditForm.tsx,BillDetail.tsx
Como funciona
- Un borrador conserva un número pendiente.
- Guarda sus partidas.
- Al cambiar a
Open, se asigna el número final.
Reglas y validaciones
- El número pendiente es de solo lectura.
- Las reglas y plantillas compartidas se gestionan en Document Templates.
Backend
- Servicios:
bills(create, patch).
Relaciones
- Requiere: configuración de
billensettings/document-settingssi usa una regla. - Dispara / afecta: consistencia de numeración AP.
id: make-recurring-bill modulo: bills app: finance nombre: Convertir un bill en recurrente tipo: accion
Convertir un bill en recurrente
Crea un perfil de bill recurrente a partir de un bill y sus partidas.
Que se logra
- Resultado: un bill existente aporta sus datos y partidas a un perfil para repetir futuras cuentas por pagar.
- Caso de uso: un coworking reutiliza el bill mensual de internet para automatizar la creación de sus próximas obligaciones.
- Se combina con: Recurring Bills y partidas de bill.
Donde esta
- Ruta:
/[orgId]/finance/bills/[id] - Acceso en UI: detalle de bill >
Make Recurring - Componente(s):
BillDetail.tsx,MakeRecurringBillDialog.tsx
Como funciona
- Abre el bill de origen.
- Selecciona
Make Recurring. - Completa la programación del perfil.
- Guarda y gestiona el perfil desde Recurring Bills.
Reglas y validaciones
- Se copian proveedor, moneda y partidas del bill.
Backend
- Servicios:
recurring-bills,recurring-bill-items(create).
Relaciones
- Requiere: un bill existente.
- Dispara / afecta: crea un perfil de Recurring Bills.
id: record-bill-payment modulo: bills app: finance nombre: Registrar pago de un bill tipo: accion
Registrar pago de un bill
Abre el registro de pago con el proveedor y bill preseleccionados.
Que se logra
- Resultado: se inicia un pago con el proveedor y el saldo del bill preparados, reduciendo errores de selección.
- Caso de uso: una agencia paga una factura de producción desde su detalle sin volver a buscar el proveedor ni el documento.
- Se combina con: Payments Made y asignación de pagos a bills.
Donde esta
- Ruta:
/[orgId]/finance/bills/[id] - Acceso en UI: detalle >
Record Payment - Componente(s):
BillDetail.tsx,RecordVendorPaymentForm.tsx
Como funciona
- Abre un bill
OpenoPartially Paid. - Selecciona
Record Payment. - El formulario de Payments Made precarga el proveedor y el saldo del bill.
- Guarda el pago y la asignación.
Reglas y validaciones
- La acción no se muestra para bills sin saldo pagable.
Backend
- Servicios:
vendor-paymentsybill-payments(create).
Relaciones
- Requiere: un bill abierto o parcialmente pagado.
- Dispara / afecta: Payments Made y estado/saldo del bill.
id: document-templates app: finance nombre: Plantillas de documentos estado: shipped permiso: can_manage_document_templates
Plantillas de documentos
Configura el diseño que usan estimates, invoices, expenses, bills y recibos al previsualizar o exportar PDF.
Para que sirve
- Una consultora estandariza cotizaciones, facturas y recibos con su identidad visual y condiciones comerciales.
- Una inmobiliaria agrega una página de términos en Markdown a sus propuestas sin editar cada documento desde cero.
- Una empresa de obra entrega un calendario de pagos calculado en una tabla inteligente dentro de una cotización o factura.
- Un negocio multi-moneda presenta importes y variables documentales con el formato de la moneda elegida.
Que lo hace diferente
- Una misma plantilla se usa para previsualización, PDF y documentos públicos, reduciendo diferencias entre canales de entrega.
- El constructor ofrece diseño visual y un flujo asistido por IA/HTML, además de plantillas por tipo documental.
- Las páginas adicionales son una biblioteca reutilizable de Markdown y tablas inteligentes con fórmulas, no simples adjuntos.
- Las cotizaciones y facturas incorporan campos personalizados del CRM en el diseño y en el PDF.
- La numeración, mensajes predefinidos, condiciones y datos bancarios se conectan con el mismo flujo de documentos financieros.
Acceso
- Ruta principal:
/[orgId]/settings/document-templates - Como se llega:
Avatar menu > Settings > Billing & Finance > Document Templates - Permiso requerido:
can_manage_document_templates
Alcance tecnico
- Frontend: rutas de Settings; bibliotecas y
document-template-builder - Backend:
document-templates,document-setting,document-predefined-messages,document-page-templates,document-template-preview,pdf-generator - Superficies publicas: ninguna
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Añadir página Markdown | additional-pages-markdown.md | Crea páginas adicionales con texto y variables. |
| Añadir tabla inteligente | additional-pages-smart-table.md | Crea páginas de hoja con fórmulas y calendario. |
| Crear plantilla de documento | create-document-template.md | Añade una plantilla por tipo documental. |
| Gestionar vencimiento de documentos | document-expiry.md | Cron de expiración. |
| Gestionar mensajes predefinidos | document-messages.md | Notas, términos y datos bancarios. |
| Configurar numeración de documentos | document-numbering.md | Prefijos y secuencias. |
| Gestionar plantillas de páginas adicionales | document-page-templates.md | Biblioteca Markdown u hoja. |
| Generar PDF de documento | document-pdf-generation.md | Generación servidor con URL firmada. |
| Usar constructor de plantillas | document-template-builder.md | Diseño visual o AI/HTML. |
| Definir plantillas predeterminadas | document-template-defaults.md | Selección inicial por tipo. |
| Previsualizar documento | document-template-preview.md | Render de diseño y datos. |
| Editar plantilla de documento | edit-document-template.md | Renombra, clona o elimina una plantilla. |
Relaciones
- Depende de: Estimates, Invoices, Payments received y Currencies.
- Usado por: módulos y documentos del flujo financiero.
Limitaciones y notas
- Los permisos granulares pueden restringir acciones según el rol de la organización.
id: additional-pages-markdown modulo: document-templates app: finance nombre: Añadir página Markdown tipo: configuracion
Añadir página Markdown
Añade una página adicional escrita en Markdown a un estimate o invoice.
Que se logra
- Resultado: el documento incorpora textos comerciales reutilizables y variables del propio documento.
- Caso de uso: una consultora adjunta términos de servicio a cada propuesta.
- Se combina con: Plantillas de páginas adicionales, PDF y documentos públicos.
Donde esta
- Ruta:
/[orgId]/settings/document-page-templates - Acceso en UI:
Page Templates > Add > Type > Markdown - Componente(s):
DocumentPageTemplatesList.tsx,DocumentMarkdownEditor.tsx
Como funciona
- Crea una plantilla Markdown y define su alcance.
- Escribe el contenido y guarda; después se aplica en los documentos compatibles.
Reglas y validaciones
- El render de preview y PDF sustituye variables y coloca las páginas al final del documento.
- Servicios:
document-page-templates(create, patch) ydocument-template-preview(create).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: additional-pages-smart-table modulo: document-templates app: finance nombre: Añadir tabla inteligente tipo: configuracion
Añadir tabla inteligente
Añade una página de hoja de cálculo con fórmulas o generador de calendario.
Que se logra
- Resultado: el documento presenta cálculos o un calendario dentro de una página adicional.
- Caso de uso: una constructora entrega la programación de cuotas de una obra junto a la factura.
- Se combina con: Plantillas de páginas adicionales, PDF y Cotizaciones.
Donde esta
- Ruta:
/[orgId]/settings/document-page-templates - Acceso en UI:
Page Templates > Add > Type > Smart table - Componente(s):
DocumentPageTemplatesList.tsx,SimpleSpreadsheetEditor.tsx
Como funciona
- Crea una plantilla y selecciona
Smart table. - Diseña las celdas, fórmulas o calendario en la hoja y pulsa
Save.
Reglas y validaciones
- La página tiene máximo 120 filas, 20 columnas y 10 páginas por documento.
- Servicios:
document-page-templates(create, patch) ydocument-template-preview(create).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: create-document-template modulo: document-templates app: finance nombre: Crear plantilla de documento tipo: configuracion
Crear plantilla de documento
Crea una plantilla para un tipo de documento antes de editar su diseño.
Que se logra
- Resultado: la organización establece una base de diseño reutilizable para sus documentos financieros.
- Caso de uso: una empresa crea una plantilla de factura con su identidad antes de emitir el primer cobro.
- Se combina con: Constructor de plantillas, Numeración de documentos y Previsualizar documento.
Donde esta
- Ruta:
/[orgId]/settings/document-templates - Acceso en UI:
Settings > Billing & Finance > Document Templates > Add Template - Componente(s):
DocumentTemplatesList.tsx,AddTemplateDialog.tsx
Como funciona
- Selecciona el tipo: estimate, invoice, expense, bill, received payment o vendor payment.
- Indica el nombre y crea la plantilla; luego usa el editor visual o AI.
Reglas y validaciones
- Free limita templates de estimate e invoice a una por tipo; planes superiores no tienen ese límite en la UI.
- Servicios:
document-templates(find, create).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-expiry modulo: document-templates app: finance nombre: Gestionar vencimiento de documentos tipo: automatizacion
Gestionar vencimiento de documentos
El cron revisa documentos con vencimiento y aplica la transición de expiración correspondiente.
Que se logra
- Resultado: los documentos vencidos dejan de mostrarse como vigentes sin una revisión manual diaria.
- Caso de uso: una inmobiliaria evita que una propuesta con vigencia pasada siga disponible para aceptación.
- Se combina con: Estado de cotización y Estado de factura.
Donde esta
- Ruta: no tiene pantalla de configuración propia en las rutas asignadas.
- Acceso en UI: la fecha se configura al crear o editar el documento.
Como funciona
- Un documento guarda su fecha de expiración.
- El cron ejecuta la revisión y actualiza los documentos vencidos.
Reglas y validaciones
- Servicios:
cron-expire-documents(create). - Las facturas enviadas con saldo pendiente pasan a
overduedespués de su vencimiento; las cotizaciones enviadas pasan aexpireddespués de su fecha de expiración, según la zona horaria de la organización.
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-messages modulo: document-templates app: finance nombre: Gestionar mensajes predefinidos tipo: configuracion
Gestionar mensajes predefinidos
Guarda textos reutilizables de notas, términos y datos bancarios para documentos.
Que se logra
- Resultado: los documentos se completan con condiciones y datos de cobro homogéneos.
- Caso de uso: un despacho inserta sus términos de pago y datos bancarios en cada factura.
- Se combina con: Cotizaciones, Facturas y Plantillas de documentos.
Donde esta
- Ruta:
/[orgId]/settings/document-messages - Acceso en UI:
Settings > Billing & Finance > Document Messages > Notes,Terms & ConditionsoBank Details - Componente(s):
DocumentMessagesList.tsx,AddEditMessageDialog.tsx
Como funciona
- Abre una pestaña y pulsa
Add Note,Add Terms & ConditionsoAdd Bank Details. - Escribe nombre y contenido; edita con lápiz o elimina con papelera.
Reglas y validaciones
- Se muestran primero los mensajes
Default; se pueden aplicar desde formularios de invoice y recurring invoice. - Servicios:
document-predefined-messages(find, create, patch, remove).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-numbering modulo: document-templates app: finance nombre: Configurar numeración de documentos tipo: configuracion
Configurar numeración de documentos
Define prefijos, número siguiente y relleno de numeración por tipo documental.
Que se logra
- Resultado: cada documento emitido recibe una referencia consecutiva conforme a la regla de la organización.
- Caso de uso: un proveedor separa series de cotizaciones, facturas y recibos de pago.
- Se combina con: Cotizaciones, Facturas y Pagos recibidos.
Donde esta
- Ruta:
/[orgId]/settings/document-settings - Acceso en UI:
Settings > Billing & Finance > Document Numbering > Add numbering scheme - Componente(s):
DocumentSettingsList.tsx,AddDocumentSettingDialog.tsx
Como funciona
- Filtra por tipo o pulsa
Add numbering scheme. - Define nombre, tipo, prefijo, siguiente número, padding, descripción y
Default.
Reglas y validaciones
- La tabla muestra una vista previa del próximo número. Free permite una regla estimate/invoice; Basic dos; otros planes sin límite.
- Servicios:
document-setting(find, create, patch).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-page-templates modulo: document-templates app: finance nombre: Gestionar plantillas de páginas adicionales tipo: configuracion
Gestionar plantillas de páginas adicionales
Administra páginas reutilizables que se agregan a estimates e invoices.
Que se logra
- Resultado: los equipos reutilizan anexos consistentes en múltiples propuestas y facturas.
- Caso de uso: una empresa de obra mantiene una página estándar de alcance para sus documentos.
- Se combina con: Páginas Markdown, Tablas inteligentes, Cotizaciones y Facturas.
Donde esta
- Ruta:
/[orgId]/settings/document-page-templates - Acceso en UI:
Settings > Billing & Finance > Page Templates > Add - Componente(s):
DocumentPageTemplatesList.tsx
Como funciona
- Pulsa
Add, escribeNamey elige tipo y aplicación. - Usa el editor Markdown o la hoja según el tipo y pulsa
Save.
Reglas y validaciones
Applies toadmite estimate, invoice o ambos;Defaultmarca la plantilla por defecto.- Servicios:
document-page-templates(find, create, patch, remove).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-pdf-generation modulo: document-templates app: finance nombre: Generar PDF de documento tipo: accion
Generar PDF de documento
Genera un PDF servidor para estimates, invoices y recibos usando la plantilla seleccionada.
Que se logra
- Resultado: se obtiene una versión descargable y compartible que conserva el diseño del documento.
- Caso de uso: una empresa B2B entrega una factura PDF al área de compras de su cliente.
- Se combina con: Plantillas de documentos, Cotizaciones y Facturas.
Donde esta
- Ruta:
/[orgId]/document-template-builder/[id]y el detalle de cada documento. - Acceso en UI:
Template Previewo controles PDF del documento.
Como funciona
- Selecciona una plantilla en el documento o abre el preview.
- Solicita el PDF desde la interfaz correspondiente.
Reglas y validaciones
- Incluye variables renderizadas, artículos, imágenes de producto y páginas adicionales.
- Servicio:
pdf-generator(create); devuelve una URL firmada del archivo.
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-template-builder modulo: document-templates app: finance nombre: Usar constructor de plantillas tipo: configuracion
Usar constructor de plantillas
Edita dos diseños independientes de una plantilla: visual Builder y HTML asistido por AI.
Que se logra
- Resultado: el negocio adapta la presentación de sus documentos sin cambiar cada cotización o factura.
- Caso de uso: una agencia crea una propuesta visual desde
Buildery ajusta una variante conAI. - Se combina con: Previsualizar documento, PDF y Campos personalizados.
Donde esta
- Ruta:
/[orgId]/document-template-builder/[id] - Acceso en UI:
Document Templates > icono de lápiz - Componente(s):
EasyTemplateBuilder.tsx,AITemplateEditorPanel.tsx,TemplatePreview.tsx
Como funciona
- Abre
AIoBuilder; la pestaña inicial es el diseño que el documento usa. - En
Builder, ajusta acordeones; enAI, conversa o abreEdit HTML. - Revisa
Template Previewy pulsaSave BuilderoSave AI design.
Reglas y validaciones
- Guardar la pestaña que no está activa pide confirmación para cambiar el diseño usado.
- La vista previa se actualiza con espera de 800 ms.
- Servicios:
document-templates(get, patch) ydocument-template-preview(create).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-template-defaults modulo: document-templates app: finance nombre: Definir plantillas predeterminadas tipo: configuracion
Definir plantillas predeterminadas
Marca la plantilla que se propone primero para un tipo de documento.
Que se logra
- Resultado: los documentos nuevos parten del diseño aprobado por la organización.
- Caso de uso: una empresa establece su plantilla fiscal como opción inicial para todas las facturas.
- Se combina con: Crear plantilla de documento y Cotizaciones.
Donde esta
- Ruta:
/[orgId]/settings/document-templates - Acceso en UI:
Document Templates > icono de herramienta > Set as default - Componente(s):
DocumentTemplatesList.tsx,EditTemplateDialog.tsx
Como funciona
- Abre la configuración de una plantilla.
- Marca
Set as defaulty guarda.
Reglas y validaciones
- La tabla identifica la selección con estrella e insignia
Default. - Servicios:
document-templates(patch).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: document-template-preview modulo: document-templates app: finance nombre: Previsualizar documento tipo: vista
Previsualizar documento
Renderiza el diseño guardado o los cambios sin guardar con datos de muestra, de un documento o de un perfil recurrente.
Que se logra
- Resultado: el equipo valida el contenido y presentación antes de compartir o exportar un documento.
- Caso de uso: una firma revisa que su nueva plantilla muestre correctamente los datos de una factura.
- Se combina con: Constructor de plantillas, PDF y Páginas adicionales.
Donde esta
- Ruta:
/[orgId]/document-template-builder/[id] - Acceso en UI:
Document Template Builder > Template Preview - Componente(s):
TemplatePreview.tsx
Como funciona
- Edita
BuilderoAI. - Espera la actualización de la vista derecha o solicita guardar desde ella.
Reglas y validaciones
- Sustituye datos de organización, cliente, propietario, líneas, importes, moneda, mensajes y páginas adicionales.
- Servicios:
document-template-preview(create) ydocument-templates(get).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: edit-document-template modulo: document-templates app: finance nombre: Editar plantilla de documento tipo: configuracion
Editar plantilla de documento
Gestiona el nombre y ciclo de vida de una plantilla desde su listado.
Que se logra
- Resultado: la biblioteca de diseños se mantiene actualizada sin afectar las operaciones ajenas.
- Caso de uso: un despacho archiva una plantilla antigua y conserva la vigente para nuevos documentos.
- Se combina con: Plantillas predeterminadas y Constructor de plantillas.
Donde esta
- Ruta:
/[orgId]/settings/document-templates - Acceso en UI:
Document Templates > icono de herramienta,Clone Templateo papelera - Componente(s):
DocumentTemplatesList.tsx,EditTemplateDialog.tsx
Como funciona
- Filtra por tipo si es necesario.
- Usa herramienta para editar configuración, copia para clonar o papelera para borrar.
Reglas y validaciones
- La papelera está deshabilitada en la plantilla
Default. - Servicios:
document-templates(find, patch, create, remove).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: estimates app: finance nombre: Cotizaciones estado: shipped permiso: can_access_estimates
Cotizaciones
Las cotizaciones reúnen el cliente, artículos, condiciones y una posible solicitud de cobro antes de emitir una factura. El mismo flujo se abre desde CRM y desde Finance.
Para que sirve
- Una agencia de marketing prepara una propuesta con servicios, impuestos y condiciones para convertir una oportunidad del CRM en un documento comercial compartible.
- Una clínica envía una cotización con un anticipo para que el paciente pueda pagar antes de confirmar el tratamiento.
- Una inmobiliaria registra la aceptación o rechazo de una propuesta y conserva el contexto del contacto, empresa y deal.
- Un negocio de servicios convierte una cotización aceptada en una factura sin reconstruir artículos ni datos comerciales.
Que lo hace diferente
- La cotización nace conectada al contacto, compañía y deal del CRM, en lugar de quedar como un documento aislado.
- Se puede compartir por correo y desde el contexto de la conversación, con una vista pública donde el cliente decide.
- El asistente IA dispone de una herramienta interna para crear cotizaciones cuando tiene los datos comerciales necesarios.
- Registra aperturas, tiempo visible y descargas de la vista pública, excluyendo las consultas internas del equipo.
- Puede incluir páginas Markdown o tablas inteligentes y usar plantillas que también determinan la previsualización y el PDF.
- El importe a cobrar puede sincronizar un Payment Link de Stripe o Wompi sin convertir la cotización en una factura.
Acceso
- Ruta principal:
/[orgId]/estimatesy/[orgId]/finance/estimates - Como se llega: sidebar CRM >
Estimateso selector de aplicación >Finance>Sales>Estimates - Permiso requerido:
can_access_estimates
Alcance tecnico
- Frontend: rutas CRM/Finance de listado, creación, detalle y edición;
EstimatesView,EstimateDetail,EstimateEditFormyDocumentPreview - Backend:
estimates,estimate-items,estimate-duplicate,estimate-convert-to-invoice,estimates-change-historyysales-document-engagement-events - Superficies publicas:
/e/[path] - Integraciones externas: PDF, correo, S3, Stripe y Wompi mediante Payment Links
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear cotización | create-estimate.md | Captura cliente, moneda, numeración, fechas y artículos. |
| Editar cotización | edit-estimate.md | Modifica el documento y sus adjuntos. |
| Gestionar artículos | estimate-line-items.md | Añade productos, precios, impuestos y recurrencia. |
| Calcular importes | estimate-totals.md | Compone subtotal, descuento, impuestos y ajustes. |
| Configurar cobro esperado | expected-collection.md | Sincroniza un enlace de pago desde el importe a cobrar. |
| Cambiar estado | estimate-status.md | Controla la entrega, aceptación, rechazo y anulación. |
| Convertir en factura | convert-to-invoice.md | Genera una factura borrador con los artículos de la cotización. |
| Duplicar cotización | duplicate-estimate.md | Crea una copia con nueva numeración. |
| Enviar por correo | send-estimate-email.md | Envía el documento y su enlace público a destinatarios elegidos. |
| Compartir cotización pública | public-estimate.md | Expone la vista para cliente en /e/[path]. |
| Aceptar o rechazar públicamente | public-estimate-decision.md | Registra la decisión del cliente desde la vista pública. |
| Descargar PDF | estimate-pdf.md | Genera el PDF usando la plantilla seleccionada. |
| Consultar actividad del cliente | estimate-engagement.md | Muestra aperturas y descargas de la vista pública. |
| Añadir páginas adicionales | estimate-additional-pages.md | Agrega Markdown o tablas inteligentes al documento. |
| Usar campos personalizados | estimate-custom-fields.md | Completa campos compartidos de Sales document. |
Relaciones
- Depende de: Contactos, Compañías, Deals, Productos, Currencies y Document Templates.
- Usado por: Invoices, Payment Links, Payments received y Automatizaciones.
Limitaciones y notas
- Una cotización convertida se bloquea en
Invoiced; no se puede cambiar nuevamente su estado. Amount to collectcrea o actualiza un Payment Link abierto; no registra por sí solo un pago.
id: convert-to-invoice modulo: estimates app: finance nombre: Convertir cotización en factura tipo: accion
Convertir cotización en factura
Genera una factura borrador desde la cotización y conserva el vínculo entre ambos documentos.
Que se logra
- Resultado: una propuesta aprobada pasa a cobro formal sin volver a capturar sus datos comerciales.
- Caso de uso: una consultora factura un proyecto aceptado conservando cliente, artículos y condiciones.
- Se combina con: Facturas, Pagos recibidos y Payment Links.
Donde esta
- Ruta:
/[orgId]/estimates/[id]o/[orgId]/finance/estimates/[id] - Acceso en UI: barra de documento >
Convert
Como funciona
- Pulsa
Converten la cotización. - Selecciona
Invoice Numberingy, si hay plantillas,Invoice Template. - Confirma con
Convert to Invoice; se abre la factura creada.
Reglas y validaciones
- Exige una regla de numeración de Invoice; el botón de confirmación queda deshabilitado sin ella.
- Copia artículos, relaciones, páginas adicionales y campos personalizados de Sales document.
- La cotización pasa a
invoiced, guarda la factura destino y no admite otra conversión.
Backend
- Servicios:
estimate-convert-to-invoice(create),invoices(create),invoice-items(create). - Efectos: la nueva factura inicia en
draft; los pagos de la cotización pueden sugerirla para asignación.
Relaciones
- Requiere: cotización no anulada y regla de numeración de Invoice.
- Dispara / afecta: factura destino y bloqueo
Invoicedde la cotización.
id: create-estimate modulo: estimates app: finance nombre: Crear cotización tipo: accion
Crear cotización
Guarda una cotización inicialmente en draft y asigna su número desde la regla seleccionada.
Que se logra
- Resultado: se crea una propuesta comercial identificable y vinculada al cliente para continuar la venta.
- Caso de uso: una agencia convierte un deal de servicios en una cotización lista para completar y compartir.
- Se combina con: Contactos, Deals, Document Templates y Payment Links.
Donde esta
- Ruta:
/[orgId]/estimates/newo/[orgId]/finance/estimates/new - Acceso en UI:
Estimates > New Estimate - Componente(s):
EstimateEditForm.tsx
Como funciona
- Selecciona el
Ownery un contacto enContact, Company & Deal; compañía y deal son opcionales. - Elige
Currency,Numbering Rule, fechas y, si corresponde,Document Template. - Añade artículos en
Estimate line items, revisa los totales y pulsaCreate Estimate. - El sistema abre el detalle de la nueva cotización.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Contact | selector | Sí | Puede acompañarse de Company y Deal. |
| Currency | lista | Sí | Solo muestra monedas habilitadas en la organización. |
| Numbering Rule | lista | Sí | Se autoselecciona la predeterminada o la primera disponible. |
| Estimate Date | fecha | Sí | Inicia con la fecha actual. |
| Expiry Date | fecha | No | Quick fill ofrece fin de semana/mes/trimestre y 1–90 días. |
| Document Template | lista | No | En nuevas cotizaciones se preselecciona la predeterminada. |
Reglas y validaciones
Create Estimatequeda deshabilitado sinNumbering Ruleo mientras carga el catálogo de campos personalizados.- Al pulsar el botón valida contacto, moneda y campos obligatorios de Sales document; los faltantes muestran un aviso y desplazan a esa sección.
- Si no hay reglas de Estimate, el formulario enlaza a
Document Numbering.
Backend
- Servicios:
estimates(create),estimate-items(create). - Efectos: genera número, ruta pública y versión; calcula totales y registra el primer historial de cambios.
Relaciones
- Requiere: Contactos, Currencies y Document Numbering.
id: duplicate-estimate modulo: estimates app: finance nombre: Duplicar cotización tipo: accion
Duplicar cotización
Crea otra cotización editable a partir de una existente sin reutilizar su identidad comercial.
Que se logra
- Resultado: se reutiliza la estructura de una propuesta sin alterar el documento original ni su seguimiento.
- Caso de uso: una empresa de eventos adapta una cotización previa para una nueva fecha y cliente.
- Se combina con: Artículos de cotización y Document Templates.
Donde esta
- Ruta:
/[orgId]/estimates/[id]o/[orgId]/finance/estimates/[id] - Acceso en UI: menú
More>Duplicate
Como funciona
- Abre el menú
More. - Pulsa
Duplicate. - Espera la confirmación; se abre el detalle de la nueva cotización.
Reglas y validaciones
- La copia conserva los artículos y los valores de Sales document.
- Genera su propia numeración, ruta pública y versión; no reemplaza la cotización original.
Backend
- Servicios:
estimate-duplicate(create),estimatesyestimate-items(create internos).
Relaciones
- Requiere: una cotización existente.
- Dispara / afecta: una nueva cotización y sus líneas copiadas.
id: edit-estimate modulo: estimates app: finance nombre: Editar cotización tipo: accion
Editar cotización
Modifica una cotización existente, incluidos sus artículos, relaciones, mensajes, archivos y configuración de cobro.
Que se logra
- Resultado: la propuesta se mantiene alineada con el acuerdo comercial antes de enviarla o cobrarla.
- Caso de uso: una clínica ajusta servicios y anticipo tras una consulta sin perder el vínculo con el paciente.
- Se combina con: Artículos de cotización, Payment Links y Document Templates.
Donde esta
- Ruta:
/[orgId]/estimates/[id]/edito/[orgId]/finance/estimates/[id]/edit - Acceso en UI: vista de cotización >
Edit - Componente(s):
EstimateEditForm.tsx
Como funciona
- Pulsa
Edit, actualiza los campos necesarios y ajusta los artículos. - Usa
Document filespara añadir o administrar adjuntos de la cotización ya guardada. - Pulsa
Save Estimate; al terminar vuelve al detalle.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Estimate Number | texto | No | Solo aparece al editar y permite corregir el número. |
| Contact, Company & Deal | selector | Contact sí | Company y Deal se pueden desvincular. |
| Customer Notes / Terms & Conditions / Bank Details | Markdown | No | Permiten aplicar mensajes predefinidos. |
| Document files | adjuntos | No | No aparece al crear, porque aún no existe el documento. |
Reglas y validaciones
- Conserva las mismas validaciones de contacto, moneda,
Numbering Rule, cobro esperado y campos personalizados que la creación. - Quitar una fila existente llama a la eliminación de ese artículo; las filas restantes se guardan en su orden actual.
- Una cotización
invoicedno puede recuperar otro estado desde el detalle.
Backend
- Servicios:
estimates(get/patch),estimate-items(find/create/patch/remove),files(find). - Efectos: recalcula importes, crea una nueva versión de historial y vuelve a sincronizar el Payment Link si cambió el importe o método de cobro.
Relaciones
- Requiere: la cotización existente.
id: estimate-additional-pages modulo: estimates app: finance nombre: Añadir páginas adicionales tipo: configuracion
Añadir páginas adicionales
Adjunta páginas de contenido adicional a la cotización para su vista previa, enlace público y PDF.
Que se logra
- Resultado: la propuesta incluye anexos comerciales reutilizables dentro del mismo documento entregado al cliente.
- Caso de uso: una empresa de obra agrega un cronograma calculado y condiciones especiales a una cotización.
- Se combina con: Plantillas de páginas adicionales, Cotización pública y PDF.
Donde esta
- Ruta:
/[orgId]/estimates/newy/[orgId]/estimates/[id]/edit(también bajo/finance) - Acceso en UI: formulario >
Additional pages
Como funciona
- Abre creación o edición y baja a
Additional pages. - Agrega una página Markdown o una
Smart table; también puedes aplicar una plantilla de páginas. - Guarda la cotización y revisa el resultado con
PDFo el enlace público.
Reglas y validaciones
- Se admiten hasta 10 páginas; las tablas inteligentes se limitan a 120 filas y 20 columnas.
- Las fórmulas de la tabla se reevalúan para preview y PDF; no se usa una captura de la interfaz.
- Estas páginas se copian al convertir o duplicar una cotización.
Backend
- Servicios:
estimates(create/patch),document-page-templates(find).
Relaciones
- Requiere: creación o edición de una cotización.
- Dispara / afecta: vista previa, PDF, enlace público y factura convertida.
id: estimate-custom-fields modulo: estimates app: finance nombre: Usar campos personalizados tipo: configuracion
Usar campos personalizados
Captura valores de los campos configurados para Sales document en la cotización.
Que se logra
- Resultado: la propuesta incorpora datos comerciales específicos del negocio y puede mostrarlos en su diseño.
- Caso de uso: una inmobiliaria añade referencia de propiedad y vigencia a cada propuesta.
- Se combina con: Custom Fields, Document Templates, PDF y Convertir en factura.
Donde esta
- Ruta:
/[orgId]/estimates/newy/[orgId]/estimates/[id]/edit(también bajo/finance) - Acceso en UI: formulario >
Custom Fields
Como funciona
- Crea definiciones en Settings >
Custom Fieldscon tipoSales document. - Completa los valores que aparecen en
Custom Fieldsde la cotización. - Pulsa
Create EstimateoSave Estimate.
Reglas y validaciones
- Las mismas definiciones aparecen en facturas, pero cada documento conserva sus propios valores.
- Los obligatorios se validan al pulsar Guardar, no mientras se edita; el botón solo se bloquea mientras carga el catálogo.
- Un valor vacío se envía como limpieza del campo; los requeridos no se imponen globalmente a integraciones o borradores.
Backend
- Servicios:
custom-fields(find),estimates(create/patch). - Efectos: el backend valida tipo y claves y reconstruye los valores mostrables; las plantillas pueden usar esos valores.
Relaciones
- Requiere: definiciones activas de
Sales document. - Dispara / afecta: plantilla, preview, PDF y factura convertida.
id: estimate-engagement modulo: estimates app: finance nombre: Consultar actividad del cliente tipo: vista
Consultar actividad del cliente
Muestra cómo se usó la cotización publicada, sin atribuir la actividad a una persona concreta.
Que se logra
- Resultado: ventas puede confirmar si una propuesta fue abierta, cuánto tiempo estuvo visible y si se descargó.
- Caso de uso: una agencia prioriza el seguimiento de propuestas que un prospecto ya revisó.
- Se combina con: Cotización pública, PDF y cronología del CRM.
Donde esta
- Ruta:
/[orgId]/estimates/[id]o/[orgId]/finance/estimates/[id] - Acceso en UI: detalle > tarjeta
Customer activity
Como funciona
- Abre la cotización y ubica
Customer activity. - Revisa aperturas, días distintos, tiempo visible, descargas y el feed reciente.
- Consulta
Document viewsen el historial de contacto, deal o compañía vinculados para el mismo evento.
Reglas y validaciones
- Registra
view_start, latidos y cierre de la página, descarga PDF/archivo y clic de pago; el tiempo visible se limita a 30 minutos por sesión. - Las visitas de miembros de la misma organización autenticados se marcan internas y no incrementan los totales de cliente.
Backend
- Servicios:
public-quote-engagement(create),sales-document-engagement-events(find/get),estimates(actualización interna de agregados).
Relaciones
- Requiere: una cotización publicada que haya sido visitada.
- Dispara / afecta: historial de contacto, compañía y deal vinculados.
id: estimate-line-items modulo: estimates app: finance nombre: Gestionar artículos de cotización tipo: accion
Gestionar artículos de cotización
Construye las líneas comerciales que alimentan el total y el resumen de cobro de la cotización.
Que se logra
- Resultado: el cliente recibe un desglose verificable de productos o servicios, cantidades e importes.
- Caso de uso: una empresa de instalación cotiza equipos y mano de obra en una sola propuesta.
- Se combina con: Productos, Taxes y Calcular importes de cotización.
Donde esta
- Ruta:
/[orgId]/estimates/new - Acceso en UI: formulario >
Estimate line items - Componente(s):
EstimateItemsTable.tsx
Como funciona
- Busca un producto o agrega una fila.
- Indica nombre, descripción, cantidad, unidad y tarifa.
- Configura descuento por porcentaje o importe, impuesto y tipo de cobro
one-timeorecurring. - Reordena o elimina filas y guarda la cotización.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Product / Name | buscador o texto | Sí | El producto puede completar datos de la fila. |
| Quantity y Rate | número | Sí | Determinan el importe base. |
| Discount | porcentaje o importe | No | Se calcula por fila antes del total del documento. |
| Tax | selector | No | Aporta porcentaje e importe de impuesto. |
| Billing type | lista | No | recurring habilita intervalo y frecuencia. |
Reglas y validaciones
- La primera fila nueva inicia con cantidad 1, tarifa 0 y cobro
one-time. - Las líneas se enumeran al guardar según el orden visible.
Backend
- Servicios:
estimate-items(find/create/patch/remove),estimates(patch). - Efectos: cada cambio recalcula subtotal, impuestos, total y resumen por cadencia antes de guardar.
id: estimate-pdf modulo: estimates app: finance nombre: Descargar cotización PDF tipo: accion
Descargar cotización PDF
Genera un PDF server-side de la cotización con la misma plantilla de la vista previa.
Que se logra
- Resultado: se obtiene un PDF descargable que conserva el diseño y datos de la propuesta.
- Caso de uso: una constructora adjunta una cotización formal a un proceso de compras.
- Se combina con: Document Templates, Páginas adicionales y Cotización pública.
Donde esta
- Ruta:
/[orgId]/estimates/[id]o/[orgId]/finance/estimates/[id] - Acceso en UI: barra de documento >
PDF
Como funciona
- Abre una cotización con plantilla disponible.
- Pulsa
PDF. - El PDF generado se abre en otra pestaña desde una URL temporal.
Reglas y validaciones
- El botón requiere que la vista previa HTML haya cargado y que exista una plantilla activa.
- Las páginas adicionales y valores de campos personalizados se vuelven a calcular al renderizar el PDF.
Backend
- Servicios:
pdf-generator(create),document-template-preview(create). - Efectos: sube el PDF a S3 y devuelve una URL firmada.
Relaciones
- Requiere: cotización guardada con plantilla activa.
- Dispara / afecta: archivo PDF disponible mediante URL firmada.
id: estimate-status modulo: estimates app: finance nombre: Cambiar estado de cotización tipo: accion
Cambiar estado de cotización
Actualiza la fase comercial de una cotización desde su vista previa.
Que se logra
- Resultado: el equipo distingue propuestas en preparación, enviadas, aceptadas, rechazadas o anuladas.
- Caso de uso: una inmobiliaria identifica las propuestas aceptadas que ya puede convertir en facturas.
- Se combina con: Cotizaciones públicas, Convertir en factura y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/estimates/[id]o/[orgId]/finance/estimates/[id] - Acceso en UI: barra de documento >
Mark as
Como funciona
- Abre la cotización guardada.
- Abre
Mark asy seleccionaSent,Accepted,DeclinedoVoided. - Para
Declined, selecciona o escribe el motivo en el diálogo.
Reglas y validaciones
- Estados disponibles:
draft,sent,accepted,declined,expired,invoicedyvoided. Invoicedes terminal: si existe factura convertida,Mark asqueda deshabilitado y muestra su número o referencia.- El cobro exitoso de un enlace asociado también acepta automáticamente una cotización que estuviera en
draftosent.
Backend
- Servicios:
estimates(patch),estimates-declined-reasons(find). - Efectos: registra fechas de transición y una versión en
estimates-change-history.
Relaciones
- Requiere: una cotización accesible para edición.
- Dispara / afecta: fechas de estado e historial de cambios.
id: estimate-totals modulo: estimates app: finance nombre: Calcular importes de cotización tipo: vista
Calcular importes de cotización
El panel Totals calcula el importe comercial de las líneas y separa importes únicos de los recurrentes.
Que se logra
- Resultado: el precio presentado al cliente incorpora descuentos, impuestos, envío y ajustes de forma consistente.
- Caso de uso: una agencia separa la implementación inicial de la mensualidad propuesta a un nuevo cliente.
- Se combina con: Artículos de cotización, Taxes y Facturas recurrentes.
Donde esta
- Ruta:
/[orgId]/estimates/new - Acceso en UI: formulario > panel
Totals - Componente(s):
EstimateEditForm.tsx
Como funciona
- Añade o cambia una línea, descuento, envío o ajuste.
- Revisa
Subtotal,Discount amount,Tax totalyTotal. - Consulta
Payment summarypara los subtotalesone-timey por intervalo recurrente.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Discount | porcentaje o importe fijo | No | Se aplica al subtotal de líneas. |
| Shipping charge | importe | No | Se añade al total. |
| Adjustment | importe positivo o negativo | No | Admite una descripción. |
Reglas y validaciones
- Total = subtotal de líneas − descuento del documento + impuestos de líneas + envío + ajuste.
- El formulario calcula en pantalla y el servicio vuelve a calcular al crear o actualizar.
Backend
- Servicios:
estimates(create/patch),estimate-items(create/patch/remove).
Relaciones
- Requiere: artículos e impuestos configurados.
id: expected-collection modulo: estimates app: finance nombre: Configurar cobro esperado tipo: integracion
Configurar cobro esperado
Define un depósito o el total que se cobrará mediante un Payment Link asociado a la cotización.
Que se logra
- Resultado: una cotización puede solicitar un anticipo o su importe total mediante un enlace de cobro público.
- Caso de uso: un estudio creativo cobra el 50 % de una propuesta antes de iniciar el proyecto.
- Se combina con: Payment Links, Payment Gateways y Pagos recibidos.
Donde esta
- Ruta:
/[orgId]/estimates/[id]/edit - Acceso en UI: panel
Totals > Amount to collect - Componente(s):
EstimateEditForm.tsx
Como funciona
- En
Amount to collect, escribe un importe o pulsa50%oUse total. - Elige
Payment numbering, unPayment provideractivo yHow to collect. - Guarda la cotización; el enlace abierto aparece en Finance >
Payment Links.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Amount to collect | importe | Condicional | Un valor cero lo elimina. |
| Payment numbering | lista | Sí, con importe | Es una regla de Received Payment distinta a la de Estimate. |
| Payment provider | lista | Sí, con importe | Muestra gateways activos de la organización. |
| How to collect | lista | Sí, con importe | Stripe/Wompi ofrecen Apex Checkout y Provider Checkout. |
| Payment URL | URL | Según método | Se exige cuando el método necesita una URL externa. |
Reglas y validaciones
- El importe positivo exige numeración, gateway y método; no se puede guardar si falta alguno.
- Si el gateway es Wompi, la moneda seleccionada debe ser COP.
- Cuando el cliente paga, se crea un Received Payment con la regla elegida y la cotización pasa de
draftosentaaccepted.
Backend
- Servicios:
estimates(create/patch),payment-links(create/patch),payments(create al capturar).
Relaciones
- Dispara / afecta: Payment Links y Payments received.
id: public-estimate-decision modulo: estimates app: finance nombre: Aceptar o rechazar cotización públicamente tipo: publico
Aceptar o rechazar cotización públicamente
Permite que el destinatario responda a una cotización desde su enlace público.
Que se logra
- Resultado: la aceptación o rechazo queda reflejado en la cotización que gestiona el equipo comercial.
- Caso de uso: un proveedor B2B recibe la aprobación de una propuesta sin intercambiar documentos firmados por correo.
- Se combina con: Estado de cotización, Convertir en factura y Payment Links.
Donde esta
- Ruta:
/e/[path] - Acceso en UI: página pública de cotización >
AcceptoDecline
Como funciona
- El destinatario abre
/e/[path]. - Selecciona
AcceptoDeclineen las acciones públicas. - La respuesta actualiza el estado de la cotización.
Reglas y validaciones
- La decisión se resuelve usando el tipo y
public_path; el cliente no envía el identificador interno de la cotización. - Un cobro correcto de un Payment Link ligado también puede marcar
acceptedsi el documento seguía endraftosent.
Backend
- Servicios:
public-quote-action(create),estimates(patch interno).
Relaciones
- Requiere: enlace
/e/[path]válido. - Dispara / afecta: estado comercial de la cotización.
id: public-estimate modulo: estimates app: finance nombre: Compartir cotización pública tipo: publico
Compartir cotización pública
Comparte la representación de la cotización que se sirve sin iniciar sesión.
Que se logra
- Resultado: el cliente puede consultar la propuesta desde un enlace sin acceso a AchieveApex.
- Caso de uso: una firma de servicios comparte una propuesta con un prospecto por correo o WhatsApp.
- Se combina con: Decisión pública, PDF, Payment Links y Actividad del cliente.
Donde esta
- Ruta:
/e/[path] - Acceso en UI: detalle de cotización >
Share>Direct link
Como funciona
- Abre una cotización con vista previa.
- Pulsa
ShareyDirect link. - Copia o envía la URL pública generada para la cotización.
Reglas y validaciones
- La ruta pública se genera al crear el documento y la vista usa la plantilla de la cotización.
- La página puede mostrar
Pay nowcuando existe un Payment Link abierto relacionado.
Backend
- Servicios:
public-quote-preview(create),public-quote-pdf(create),public-quote-filesypublic-quote-engagement(create).
Relaciones
- Requiere: una cotización guardada con ruta pública.
- Dispara / afecta: actividad de cliente, PDF público y posible cobro por Payment Link.
id: send-estimate-email modulo: estimates app: finance nombre: Enviar cotización por correo tipo: accion
Enviar cotización por correo
Envía la cotización desde el diálogo de entrega, con destinatarios elegidos y su enlace público.
Que se logra
- Resultado: el destinatario recibe una vía directa para revisar y decidir sobre la propuesta.
- Caso de uso: una agencia envía una propuesta al responsable de compras y mantiene el documento disponible en línea.
- Se combina con: Cotización pública, Actividad del cliente y Conversaciones.
Donde esta
- Ruta:
/[orgId]/estimates/[id]o/[orgId]/finance/estimates/[id] - Acceso en UI:
Share>Send email
Como funciona
- Pulsa
Sharey luegoSend email. - Completa
To, asunto y contenido; puedes añadir una dirección a un contacto relacionado conSave and add. - Envía desde el diálogo y vuelve a cargar la cotización.
Reglas y validaciones
- Debe existir al menos un destinatario.
- Contacto, contacto del deal y contactos de la compañía se ofrecen como candidatos; se puede escribir cualquier dirección.
Backend
- Servicios:
send-document-email(create),estimates(get). - Efectos: entrega el email y refresca el documento para reflejar estado y ruta pública actuales.
Relaciones
- Requiere: una cotización guardada y al menos una dirección destinataria.
- Dispara / afecta: entrega por correo y consulta pública de la cotización.
id: expenses app: finance nombre: Expenses estado: beta permiso: can_access_expenses
Expenses
Registra gastos directos ya pagados, sin crear saldo pendiente ni un pago separado.
Para que sirve
- Un restaurante registra compras ya pagadas de suministros sin crear una deuda pendiente.
- Una agencia documenta el alquiler ya abonado de un equipo, con sus conceptos, descuentos e impuestos.
- Una clínica deja un gasto en
Draftpara revisión y lo activa cuando su equipo confirma el importe. - Un negocio con suscripciones convierte un gasto frecuente en un perfil para generarlo periódicamente.
Que lo hace diferente
- Distingue expresamente gasto directo de cuenta por pagar: Expenses no crea saldo ni exige el flujo de Payments Made.
- Comparte monedas, impuestos, partidas, reglas de numeración y plantillas documentales con los documentos de venta de Finance.
- Puede partir de un proveedor de Purchases sin obligarlo, útil para desembolsos que no corresponden a un suplidor registrado.
- Un gasto puede convertirse en Recurring Expenses reutilizando su información y partidas.
- No incluye adjuntos de recibos ni es un sistema de contabilidad de partida doble.
Acceso
- Ruta principal:
/[orgId]/finance/expenses - Como se llega:
Header app switcher > Alpha & Beta > Finance > Purchases > Expenses - Permiso requerido:
can_access_expensesy permisos de ver, crear, editar o eliminar gastos.
Alcance tecnico
- Frontend: rutas de lista, creación, detalle y edición;
ExpensesView,ExpenseEditForm,ExpenseDetailyExpenseItemsTable. - Backend: servicios Feathers
expensesyexpense-items. - Superficies publicas: ninguna.
- Integraciones externas: ninguna.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar gastos | expense-list.md | Lista, busca, filtra y ordena gastos. |
| Crear y editar gastos | expense-form.md | Registra cabecera, totales, notas y moneda. |
| Gestionar partidas | expense-items.md | Define conceptos, descuentos e impuestos. |
| Activar o anular gastos | expense-lifecycle.md | Gestiona el ciclo Draft, Active y Void. |
| Numerar documentos | expense-numbering.md | Finaliza el número al activar el gasto. |
| Convertir en gasto recurrente | make-recurring-expense.md | Crea un perfil periódico desde un gasto. |
Relaciones
- Depende de: Vendors (opcional), Currencies y plantillas de documento.
- Usado por: Recurring Expenses puede originarse desde un gasto.
- La configuración de numeración AP vive en
settings/document-settings; no se documenta en este módulo.
Limitaciones y notas
- Un expense no se paga desde
Payments Made; ese flujo corresponde exclusivamente a bills. - No hay adjuntos de recibos implementados.
id: expense-form modulo: expenses app: finance nombre: Crear y editar gastos tipo: accion
Crear y editar gastos
Registra un gasto ya realizado, como borrador o como gasto activo.
Que se logra
- Resultado: queda documentado un desembolso ya realizado, con sus conceptos, impuestos y total calculado.
- Caso de uso: una productora registra el alquiler ya pagado de un equipo para conservar una referencia financiera interna.
- Se combina con: partidas de gasto, Vendors, Currencies y Document Templates.
Donde esta
- Ruta:
/[orgId]/finance/expenses/newy/[orgId]/finance/expenses/[id]/edit - Acceso en UI:
Expenses > New Expenseo detalle >Edit - Componente(s):
ExpenseEditForm.tsx
Como funciona
- Completa la fecha, moneda y, opcionalmente, proveedor, responsable, referencia y descripción.
- Selecciona una regla de numeración o plantilla cuando aplique.
- Añade conceptos y revisa los totales calculados.
- Incluye notas y usa
Save as DraftoSave as Active.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Fecha y moneda | Fecha y selección | Sí | Identifican el gasto y su importe. |
| Proveedor | Selección | No | Un gasto puede no estar ligado a proveedor. |
| Referencia y descripción | Texto | No | Contexto del documento. |
| Notas | Editor Markdown | No | Información adicional. |
Reglas y validaciones
- La fecha y moneda son obligatorias.
- Debe existir al menos una partida con nombre antes de guardar.
- Los totales se recalculan a partir de los conceptos.
Backend
- Servicios:
expenses(create, patch).
Relaciones
- Requiere: Currencies, y Vendors si se selecciona proveedor.
- Dispara / afecta: la activación finaliza su numeración.
id: expense-items modulo: expenses app: finance nombre: Gestionar partidas de gasto tipo: accion
Gestionar partidas de gasto
Define los conceptos que componen un gasto y actualiza sus importes.
Que se logra
- Resultado: el importe del gasto refleja sus conceptos individuales, descuentos e impuestos en lugar de un total sin detalle.
- Caso de uso: un restaurante separa alimentos, transporte y tasas de una compra para conocer cómo se formó el total.
- Se combina con: creación y edición de gastos, Products e impuestos cuando están configurados.
Donde esta
- Ruta:
/[orgId]/finance/expenses/newy/[orgId]/finance/expenses/[id]/edit - Acceso en UI: formulario de gasto > tabla de partidas
- Componente(s):
ExpenseItemsTable.tsx
Como funciona
- Añade, edita o elimina una partida.
- Indica nombre, cantidad, unidad y tarifa.
- Aplica descuento o impuesto cuando corresponda.
- Guarda el gasto para recalcular partidas y totales.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Nombre | Texto | Sí | Identifica el concepto. |
| Cantidad, unidad y tarifa | Número y texto | Sí, excepto unidad | Calculan el importe de la partida. |
| Producto, descuento e impuesto | Selección y número | No | Ajustan el importe. |
Reglas y validaciones
- El importe de cada partida se calcula en el backend.
- Las modificaciones de importes actualizan los totales del gasto.
Backend
- Servicios:
expense-items(find, create, patch, remove).
Relaciones
- Requiere: un expense.
- Dispara / afecta: subtotal, descuentos, impuestos y total del gasto.
id: expense-lifecycle modulo: expenses app: finance nombre: Activar, anular y eliminar gastos tipo: accion
Activar, anular y eliminar gastos
Controla el ciclo de vida de un gasto directo.
Que se logra
- Resultado: los gastos distinguen entre preparación, registro definitivo y anulación, conservando trazabilidad del estado.
- Caso de uso: una agencia deja un gasto en
Drafthasta validar el importe y luego lo activa para incorporarlo a su control de compras. - Se combina con: numeración de gastos y consulta de gastos.
Donde esta
- Ruta:
/[orgId]/finance/expenses/[id] - Acceso en UI: detalle >
Mark as Active,VoidyDelete - Componente(s):
ExpenseDetail.tsx
Como funciona
- Un gasto inicia como
Drafto se guarda directamente comoActive. - Usa
Mark as Activepara registrar definitivamente un borrador. - Usa
Voidpara cancelar un gasto activo. - Usa
Deletesolo mientras es borrador.
Reglas y validaciones
- El ciclo permitido es
DraftaActiveoVoid. - Un gasto anulado no vuelve a activo.
- Un gasto activo no se puede eliminar; debe anularse.
Backend
- Servicios:
expenses(patch, remove). - Efectos: registra las fechas de activación o anulación.
Relaciones
- Requiere: permiso de edición o eliminación de gastos.
- Dispara / afecta: al activarlo, se asigna el número final.
id: expense-list modulo: expenses app: finance nombre: Consultar gastos tipo: vista
Consultar gastos
Presenta los gastos directos registrados y permite localizar un documento.
Que se logra
- Resultado: el negocio encuentra y revisa el gasto directo ya registrado sin confundirlo con una deuda pendiente.
- Caso de uso: una tienda local localiza el gasto de una compra urgente de suministros para verificar su importe y estado.
- Se combina con: detalle de gasto, Vendors y Recurring Expenses.
Donde esta
- Ruta:
/[orgId]/finance/expenses - Acceso en UI:
Purchases > Expenses - Componente(s):
ExpensesView.tsx
Como funciona
- Consulta la lista paginada.
- Busca por texto o filtra por estado.
- Ordena, ajusta columnas visibles o cambia de página.
- Abre una fila para acceder al detalle.
Reglas y validaciones
- La tabla incluye fecha, número, referencia, proveedor, estado y total.
- La búsqueda también considera el proveedor asociado cuando exista.
Backend
- Servicios:
expenses(find, get).
Relaciones
- Requiere: acceso a Expenses.
- Dispara / afecta: enlaza con el detalle, edición o creación de un gasto.
id: expense-numbering modulo: expenses app: finance nombre: Numerar documentos de gasto tipo: configuracion
Numerar documentos de gasto
Aplica la numeración de cuentas por pagar al registrar definitivamente un gasto.
Que se logra
- Resultado: los gastos definitivos reciben una referencia final coherente con la configuración documental de Finance.
- Caso de uso: una consultora activa un gasto aprobado y obtiene el número con el que su equipo lo identificará en revisiones internas.
- Se combina con: ciclo de vida de gastos y Document Templates.
Donde esta
- Ruta:
/[orgId]/finance/expenses/newy/[orgId]/finance/expenses/[id] - Acceso en UI: formulario > regla de numeración; detalle >
Mark as Active - Componente(s):
ExpenseEditForm.tsx,ExpenseDetail.tsx
Como funciona
- Al guardar un borrador, el documento conserva un número pendiente.
- Guarda sus partidas.
- Al pasar a
Active, el sistema asigna el número final.
Reglas y validaciones
- El número pendiente es de solo lectura en edición.
- La configuración compartida de reglas y plantillas pertenece a Document Templates.
Backend
- Servicios:
expenses(create, patch). - Efectos: la transición de estado activa la asignación del número.
Relaciones
- Requiere: configuración de
expenseensettings/document-settingscuando se usa una regla. - Dispara / afecta: consistencia de la numeración AP.
id: make-recurring-expense modulo: expenses app: finance nombre: Convertir un gasto en recurrente tipo: accion
Convertir un gasto en recurrente
Crea un perfil de gasto recurrente reutilizando los datos y partidas de un gasto.
Que se logra
- Resultado: un gasto existente se convierte en la base reutilizable de futuros gastos periódicos, sin volver a capturar sus conceptos.
- Caso de uso: una agencia transforma el gasto mensual de su software de diseño en un perfil recurrente para reducir registro manual.
- Se combina con: Recurring Expenses y partidas de gasto.
Donde esta
- Ruta:
/[orgId]/finance/expenses/[id] - Acceso en UI: detalle de gasto >
Make Recurring - Componente(s):
ExpenseDetail.tsx,MakeRecurringExpenseDialog.tsx
Como funciona
- Abre un gasto existente.
- Selecciona
Make Recurring. - Confirma o completa la programación del nuevo perfil.
- Continúa en Recurring Expenses para guardarlo y gestionarlo.
Reglas y validaciones
- Se copian proveedor, moneda y partidas disponibles del gasto de origen.
- La acción está disponible para usuarios con permiso de edición cuando el gasto no proviene ya de un perfil recurrente.
Backend
- Servicios:
recurring-expenses,recurring-expense-items(create).
Relaciones
- Requiere: un gasto existente.
- Dispara / afecta: crea un perfil en Recurring Expenses.
id: invoices app: finance nombre: Facturas estado: shipped permiso: can_access_invoices
Facturas
Las facturas documentan un cobro a un cliente, conservan el saldo pendiente y reciben asignaciones de pagos. El listado y el detalle son los mismos desde CRM y Finance.
Para que sirve
- Una consultora emite una factura desde el cliente o deal que ya gestionó en el CRM y controla qué importe queda por cobrar.
- Una empresa de mantenimiento convierte una propuesta aceptada en factura conservando sus artículos y condiciones.
- Una academia registra pagos parciales de una matrícula y deja el saldo pendiente visible para el equipo de cobros.
- Un proveedor B2B comparte una factura pública por correo y verifica si el cliente la abrió o descargó.
- Un negocio por suscripción crea un perfil recurrente para generar sus cobros periódicos como facturas normales.
Que lo hace diferente
- Reutiliza el mismo contacto, compañía, deal y productos del CRM, y puede originarse directamente desde una cotización.
- Las asignaciones de pagos mantienen sincronizados el importe pagado, saldo y estado de cada factura.
- La vista pública registra actividad real del cliente —aperturas, tiempo visible y descargas— sin contar las revisiones internas.
- El documento se puede entregar por correo, PDF o enlace público y combinar con Payment Links para cobrar con Stripe o Wompi.
- Las páginas adicionales, los campos personalizados y el diseño de plantilla se usan tanto en la vista como en el PDF.
- Puede convertirse en una fuente de facturación recurrente desde
Make recurringen Finance.
Acceso
- Ruta principal:
/[orgId]/invoicesy/[orgId]/finance/invoices - Como se llega: sidebar CRM >
Invoiceso selector de aplicación >Finance>Sales>Invoices - Permiso requerido:
can_access_invoices
Alcance tecnico
- Frontend: rutas CRM y Finance;
InvoicesView,InvoiceDetail,InvoiceEditForm,DocumentPreview - Backend:
invoices,invoice-items,invoice-payments,invoices-change-history,public-quote-* - Superficies publicas:
/i/[path]
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear factura | create-invoice.md | Crea un borrador con cliente, moneda, fechas y artículos. |
| Editar factura | edit-invoice.md | Actualiza el documento, sus artículos y adjuntos. |
| Añadir páginas adicionales | invoice-additional-pages.md | Incluye Markdown o tablas inteligentes en la vista y PDF. |
| Consultar historial de cambios | invoice-change-history.md | Consulta las versiones registradas de la factura. |
| Usar campos personalizados | invoice-custom-fields.md | Completa campos de Sales document compartidos con cotizaciones. |
| Consultar actividad del cliente | invoice-engagement.md | Resume uso de /i/[path], PDF y archivos. |
| Gestionar artículos de factura | invoice-line-items.md | Define productos, cantidades, precios, impuestos y recurrencia. |
| Consultar pagos relacionados | invoice-payment-history.md | Despliega las asignaciones invoice-payments. |
| Descargar factura PDF | invoice-pdf.md | Genera un PDF con la plantilla del documento. |
| Emitir y cambiar estado de factura | invoice-status.md | Pasa de borrador a programada o enviada y permite anular. |
| Calcular importes de factura | invoice-totals.md | Calcula total y saldo a partir de artículos y pagos. |
| Crear perfil recurrente desde factura | make-recurring.md | Crea o vincula un perfil recurrente en Finance. |
| Compartir factura pública | public-invoice.md | Publica el documento en /i/[path]. |
| Registrar pago desde factura | register-payment.md | Aplica pagos activos sin asignar a la factura. |
| Enviar factura por correo | send-invoice-email.md | Envía por correo el documento con enlace público. |
Relaciones
- Depende de: Contacts, Companies, Deals, Products, Currencies, Payments received, Recurring Invoices y Document Templates.
- Usado por: Payments received, Payment Links, Recurring Invoices y Automatizaciones.
Limitaciones y notas
- Las facturas en
draftconservan saldo cero hasta pasar ascheduledosent. - Solo Finance muestra
Make recurring; CRM conserva la factura normal.
id: create-invoice modulo: invoices app: finance nombre: Crear factura tipo: accion
Crear factura
Crea una factura en estado draft con cliente, fecha de emisión, vencimiento y artículos facturables.
Que se logra
- Resultado: se prepara un cobro formal vinculado al cliente antes de emitirlo.
- Caso de uso: una consultora crea la factura de un proyecto aprobado con fecha de vencimiento acordada.
- Se combina con: Contactos, Deals, Document Templates y Pagos recibidos.
Donde esta
- Ruta:
/[orgId]/invoices/newo/[orgId]/finance/invoices/new - Acceso en UI:
Invoices>New Invoice
Como funciona
- Selecciona
Owner, contacto y opcionalmente compañía y deal. - Completa
Currency,Numbering Rule,Invoice Date,Due Date, plantilla y artículos. - Pulsa
Create Invoice; el sistema abre el detalle.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Contact | selector | Sí | Company y Deal son opcionales. |
| Currency | lista | Sí | Incluye las monedas habilitadas. |
| Numbering Rule | lista | No en interfaz | Si hay reglas, usa la predeterminada o la primera. |
| Invoice Date / Due Date | fecha | Sí | Due Date inicia 30 días después; Quick fill ofrece plazos frecuentes. |
| Document Template | lista | No | Selecciona una plantilla de Invoice. |
Reglas y validaciones
- Los campos obligatorios de Sales document se validan al pulsar
Create Invoice. - El botón espera a que cargue el catálogo de campos personalizados.
Backend
- Servicios:
invoices(create),invoice-items(create). - Efectos: genera número, ruta pública y versión; calcula total y saldo inicial.
Relaciones
- Requiere: contacto, moneda y fechas válidas.
- Dispara / afecta: líneas de factura, numeración y saldo inicial.
id: edit-invoice modulo: invoices app: finance nombre: Editar factura tipo: accion
Editar factura
Actualiza la factura, sus relaciones comerciales, artículos, textos y archivos adjuntos.
Que se logra
- Resultado: el documento de cobro refleja el alcance y condiciones vigentes del acuerdo.
- Caso de uso: una empresa de mantenimiento ajusta conceptos y vencimiento tras ampliar un servicio.
- Se combina con: Artículos de factura, Payment Links y Plantillas de documentos.
Donde esta
- Ruta:
/[orgId]/invoices/[id]/edito/[orgId]/finance/invoices/[id]/edit - Acceso en UI: vista de factura >
Edit
Como funciona
- Abre
Edity modifica los datos, el número o las fechas. - Gestiona artículos, mensajes, adjuntos y campos personalizados.
- Pulsa
Save Invoice; se abre de nuevo la vista previa.
Reglas y validaciones
- Contacto y moneda siguen siendo obligatorios; campos personalizados obligatorios se validan al guardar.
- Las líneas eliminadas se eliminan del documento y las restantes se guardan en el orden actual.
CompanyyDealse pueden limpiar sin afectar al contacto requerido.
Backend
- Servicios:
invoices(get/patch),invoice-items(find/create/patch/remove),files(find). - Efectos: actualiza la versión de historial, vuelve a calcular total y saldo.
Relaciones
- Requiere: factura existente con permiso de edición.
- Dispara / afecta: líneas, saldo, vista previa e historial.
id: invoice-additional-pages modulo: invoices app: finance nombre: Añadir páginas adicionales tipo: configuracion
Añadir páginas adicionales
Inserta contenido Markdown o tablas inteligentes adicionales en la factura.
Que se logra
- Resultado: la factura incorpora anexos comerciales o calendarios dentro de la entrega al cliente.
- Caso de uso: una constructora añade una tabla de hitos de pago a la factura del proyecto.
- Se combina con: Plantillas de páginas adicionales, PDF y Factura pública.
Donde esta
- Ruta:
/[orgId]/invoices/newy/[orgId]/invoices/[id]/edit(también bajo/finance) - Acceso en UI: formulario >
Additional pages
Como funciona
- Abre el formulario de factura y desplázate a
Additional pages. - Añade una página de Markdown o
Smart table, o aplica una plantilla de páginas. - Guarda y verifica su resultado con
PDFo/i/[path].
Reglas y validaciones
- Soporta hasta 10 páginas; una tabla puede tener hasta 120 filas y 20 columnas.
- Las páginas se copian desde una cotización al convertirla; no forman parte de perfiles recurrentes.
Backend
- Servicios:
invoices(create/patch),document-page-templates(find),pdf-generator(create).
Relaciones
- Requiere: factura en creación o edición.
- Dispara / afecta: vista previa, enlace público y PDF.
id: invoice-change-history modulo: invoices app: finance nombre: Consultar historial de cambios tipo: vista
Consultar historial de cambios
Consulta las versiones creadas cuando se guarda o cambia el estado de una factura.
Que se logra
- Resultado: el equipo puede revisar cómo evolucionó un documento de cobro y cuándo se emitió.
- Caso de uso: un despacho aclara qué versión de una factura se compartió con un cliente.
- Se combina con: Editar factura y Estado de factura.
Donde esta
- Ruta:
/[orgId]/invoices/[id]o/[orgId]/finance/invoices/[id] - Acceso en UI: menú
More>History
Como funciona
- Abre el menú
More. - Pulsa
History. - Revisa las versiones disponibles en el diálogo de historial.
Reglas y validaciones
- Cada creación y actualización de factura genera una nueva versión antes de exponer el resultado.
Backend
- Servicios:
invoices-change-history(find),invoices(create/patch).
Relaciones
- Requiere: factura guardada con cambios registrados.
- Dispara / afecta: consulta de sus versiones históricas.
id: invoice-custom-fields modulo: invoices app: finance nombre: Usar campos personalizados tipo: configuracion
Usar campos personalizados
Registra valores de campos configurados como Sales document para esta factura.
Que se logra
- Resultado: la factura puede incluir datos propios del negocio además de sus campos estándar.
- Caso de uso: una empresa logística añade número de orden de compra y referencia de envío.
- Se combina con: Custom Fields, Plantillas de documentos y PDF.
Donde esta
- Ruta:
/[orgId]/invoices/newy/[orgId]/invoices/[id]/edit(también bajo/finance) - Acceso en UI: formulario >
Custom Fields
Como funciona
- Configura campos de tipo
Sales documenten Settings >Custom Fields. - Completa los valores que aparecen en el formulario de factura.
- Pulsa
Create InvoiceoSave Invoice.
Reglas y validaciones
- El catálogo es compartido con cotizaciones; las definiciones no se duplican.
- Los obligatorios se muestran al guardar y un valor limpiado elimina esa asignación.
Backend
- Servicios:
custom-fields(find),invoices(create/patch). - Efectos: los valores quedan disponibles para la vista previa, PDF y plantilla pública.
Relaciones
- Requiere: catálogo activo de campos
Sales document. - Dispara / afecta: plantillas y renderizado del documento.
id: invoice-engagement modulo: invoices app: finance nombre: Consultar actividad del cliente tipo: vista
Consultar actividad del cliente
Resume la actividad anónima que el cliente realizó sobre la factura pública.
Que se logra
- Resultado: cobros puede saber si una factura fue vista, descargada o consultada durante un tiempo relevante.
- Caso de uso: una agencia da seguimiento a una factura abierta antes de reclamar su vencimiento.
- Se combina con: Factura pública, PDF y cronología del CRM.
Donde esta
- Ruta:
/[orgId]/invoices/[id]o/[orgId]/finance/invoices/[id] - Acceso en UI: detalle > tarjeta
Customer activity
Como funciona
- Abre la factura.
- Revisa sesiones, días, tiempo visible y descargas en
Customer activity. - Consulta también el filtro
Document viewsdel historial de las entidades relacionadas.
Reglas y validaciones
- Un
heartbeatactualiza tiempo acumulado, pero no se muestra como evento individual. - Las aperturas del equipo autenticado de la propia organización quedan excluidas de los agregados.
Backend
- Servicios:
public-quote-engagement(create),sales-document-engagement-events(find/get),invoices(actualización interna de agregados).
Relaciones
- Requiere: factura pública visitada por un cliente.
- Dispara / afecta: actividad visible en la factura y timeline relacionado.
id: invoice-line-items modulo: invoices app: finance nombre: Gestionar artículos de factura tipo: accion
Gestionar artículos de factura
Define las líneas que determinan el importe facturado y el desglose por cadencia de cobro.
Que se logra
- Resultado: el cliente entiende qué productos, servicios e impuestos originan el cobro.
- Caso de uso: una empresa de software factura implementación inicial y suscripción mensual en un mismo documento.
- Se combina con: Productos, Taxes y Facturas recurrentes.
Donde esta
- Ruta:
/[orgId]/invoices/newy/[orgId]/invoices/[id]/edit(también bajo/finance) - Acceso en UI: formulario >
Invoice line items
Como funciona
- Busca un producto o añade una línea.
- Completa nombre, cantidad, unidad, tarifa, descuento e impuesto.
- Define
one-timeorecurringy, para este último, intervalo y frecuencia. - Guarda la factura.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Product / Name | buscador o texto | Sí | Un producto puede completar la línea. |
| Quantity y Rate | número | Sí | Forman el importe base. |
| Discount y Tax | importe/selector | No | Se calculan por línea. |
| Billing type | lista | No | Se refleja en Payment summary. |
Reglas y validaciones
- Las filas se renumeran al guardar y una fila borrada desaparece de la factura.
Backend
- Servicios:
invoice-items(find/create/patch/remove),invoices(patch).
Relaciones
- Requiere: una factura en creación o edición.
- Dispara / afecta: subtotal, impuestos, total y cadencias de cobro.
id: invoice-payment-history modulo: invoices app: finance nombre: Consultar pagos relacionados tipo: vista
Consultar pagos relacionados
Expone las asignaciones de pagos que reducen el saldo de la factura.
Que se logra
- Resultado: se puede explicar qué pagos redujeron el saldo de una factura y en qué importe.
- Caso de uso: un colegio concilia abonos de una matrícula antes de marcarla como pagada.
- Se combina con: Pagos recibidos y Registrar pago desde factura.
Donde esta
- Ruta:
/[orgId]/invoices/[id]o/[orgId]/finance/invoices/[id] - Acceso en UI: información relacionada > contador con icono de dinero
Como funciona
- Pulsa el contador de pagos en la franja de información relacionada.
- Revisa número, fecha, modo, referencia e importe aplicado.
- Pulsa una fila para abrir el detalle del pago en CRM o Finance.
Reglas y validaciones
- La lista se construye desde asignaciones de la factura, por lo que muestra el importe aplicado, no necesariamente el importe completo del pago.
Backend
- Servicios:
invoice-payments(find),payments(find).
Relaciones
- Requiere: al menos una asignación de pago en la factura.
- Dispara / afecta: navegación hacia el detalle del pago.
id: invoice-pdf modulo: invoices app: finance nombre: Descargar factura PDF tipo: accion
Descargar factura PDF
Genera un PDF de la factura a partir de la plantilla que se está previsualizando.
Que se logra
- Resultado: se entrega un archivo de factura consistente con la vista y la identidad del negocio.
- Caso de uso: un proveedor B2B adjunta el PDF a su proceso de aprobación de compras.
- Se combina con: Plantillas de documentos, Páginas adicionales y Factura pública.
Donde esta
- Ruta:
/[orgId]/invoices/[id]o/[orgId]/finance/invoices/[id] - Acceso en UI: barra de documento >
PDF
Como funciona
- Espera que cargue la vista previa de la factura.
- Pulsa
PDF. - Abre la URL temporal devuelta para descargar o imprimir.
Reglas y validaciones
- Requiere una plantilla activa y HTML de preview cargado.
- Incluye páginas adicionales, campos personalizados y la información de los artículos.
Backend
- Servicios:
pdf-generator(create),document-template-preview(create). - Efectos: renderiza con Chromium y almacena el PDF en S3.
Relaciones
- Requiere: factura guardada y plantilla seleccionada.
- Dispara / afecta: PDF almacenado temporalmente en S3.
id: invoice-status modulo: invoices app: finance nombre: Emitir y cambiar estado de factura tipo: accion
Emitir y cambiar estado de factura
Emite una factura desde borrador, la programa o la anula cuando todavía está pendiente.
Que se logra
- Resultado: el negocio controla cuándo un borrador se convierte en una cuenta por cobrar activa.
- Caso de uso: una firma profesional programa una factura para enviarla al inicio del siguiente mes.
- Se combina con: Enviar factura por correo, Pagos recibidos y Automatizaciones.
Donde esta
- Ruta:
/[orgId]/invoices/[id]o/[orgId]/finance/invoices/[id] - Acceso en UI: barra de documento >
Mark as Scheduled,Mark as Senty menúMore
Como funciona
- En una factura
draft, pulsaMark as ScheduledoMark as Sent. - En una factura
scheduled, pulsaMark as Sentcuando se haya emitido. - Para una factura
sentuoverdue, abreMorey pulsaVoid Invoice.
Reglas y validaciones
- Estados mostrados:
draft,scheduled,sent,partially_paid,paid,overdueyvoid. Register Paymentsolo aparece si la factura no esvoidnipaidy conserva saldo positivo.
Backend
- Servicios:
invoices(patch),invoices-change-history(find). - Efectos: registra fecha y versión del cambio; al recibir asignaciones pasa entre
sent,partially_paidypaid.
Relaciones
- Requiere: factura guardada en un estado que permita la transición.
- Dispara / afecta: saldo, estado de cobro e historial.
id: invoice-totals modulo: invoices app: finance nombre: Calcular importes de factura tipo: vista
Calcular importes de factura
Calcula el total de la factura, el saldo por cobrar y el resumen de importes recurrentes.
Que se logra
- Resultado: el importe exigible y el saldo restante se muestran de forma coherente con líneas y pagos aplicados.
- Caso de uso: un estudio creativo identifica cuánto queda por cobrar tras recibir un anticipo parcial.
- Se combina con: Artículos de factura, Pagos recibidos y Taxes.
Donde esta
- Ruta:
/[orgId]/invoices/newy/[orgId]/invoices/[id]/edit(también bajo/finance) - Acceso en UI: formulario > panel
Totals
Como funciona
- Cambia líneas,
Discount,Shipping chargeoAdjustment. - Revisa
Subtotal,Tax total,TotalyPayment summary. - Guarda para que el servicio calcule nuevamente los importes.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Discount | porcentaje o importe | No | Se descuenta del subtotal. |
| Shipping charge | importe | No | Se agrega al total. |
| Adjustment | importe | No | Puede ser negativo y tiene descripción opcional. |
Reglas y validaciones
- Saldo = total − importe ya pagado.
- En
draftel saldo puede mantenerse en cero; al programar o enviar la factura queda disponible para cobrar.
Backend
- Servicios:
invoices(create/patch),invoice-items(create/patch/remove),invoice-payments(create/remove).
Relaciones
- Requiere: líneas de factura y valores de descuento o ajuste.
- Dispara / afecta: saldo y elegibilidad para registrar pagos.
id: make-recurring modulo: invoices app: finance nombre: Crear perfil recurrente desde factura tipo: accion
Crear perfil recurrente desde factura
Convierte la información de una factura en la base de un perfil de facturación recurrente.
Que se logra
- Resultado: una factura puntual sirve como base para futuros cobros periódicos del mismo cliente.
- Caso de uso: una agencia transforma la factura de un retainer mensual en un perfil recurrente.
- Se combina con: Facturas recurrentes y Artículos de factura.
Donde esta
- Ruta:
/[orgId]/finance/invoices/[id] - Acceso en UI: menú
More>Make recurring
Como funciona
- Abre la factura desde Finance y selecciona
Make recurring. - Elige crear un perfil nuevo o asignar la factura a uno existente.
- El diálogo copia las líneas al perfil nuevo o crea el vínculo elegido.
Reglas y validaciones
- La acción no aparece en CRM ni para facturas que ya proceden de un perfil recurrente.
Backend
- Servicios:
recurring-invoicesyrecurring-invoice-items(create),invoices(patch).
Relaciones
- Requiere: factura abierta desde Finance sin perfil recurrente.
- Dispara / afecta: perfil recurrente, sus líneas y vínculo de factura.
id: public-invoice modulo: invoices app: finance nombre: Compartir factura pública tipo: publico
Compartir factura pública
Publica la factura para consulta del cliente sin sesión iniciada.
Que se logra
- Resultado: el cliente consulta el documento y, cuando corresponde, accede al cobro sin entrar al CRM.
- Caso de uso: un proveedor comparte una factura por WhatsApp con un comprador externo.
- Se combina con: Payment Links, Actividad del cliente y PDF.
Donde esta
- Ruta:
/i/[path] - Acceso en UI: detalle de factura >
Share>Direct link
Como funciona
- Abre la vista previa de una factura.
- Selecciona
ShareyDirect link. - Comparte la URL
/i/[path]; el cliente puede consultar el documento, PDF y archivos publicados.
Reglas y validaciones
- La página usa la plantilla de la factura y registra aperturas anónimas.
- Si existe un Payment Link abierto vinculado, la vista pública puede ofrecer
Pay now.
Backend
- Servicios:
public-quote-preview,public-quote-pdf,public-quote-filesypublic-quote-engagement(create).
Relaciones
- Requiere: factura guardada con ruta pública.
- Dispara / afecta: actividad de cliente y documentos descargables.
id: register-payment modulo: invoices app: finance nombre: Registrar pago desde factura tipo: accion
Registrar pago desde factura
Aplica a la factura un importe disponible de pagos activos relacionados.
Que se logra
- Resultado: un pago existente reduce el saldo y actualiza el estado de la factura correspondiente.
- Caso de uso: una empresa aplica una transferencia recibida a la factura del cliente que la originó.
- Se combina con: Pagos recibidos e Historial de pagos relacionados.
Donde esta
- Ruta:
/[orgId]/invoices/[id]o/[orgId]/finance/invoices/[id] - Acceso en UI: barra de documento o panel de pagos >
Register Payment
Como funciona
- Pulsa
Register Payment. - Revisa los pagos sugeridos, ajusta los importes o busca otro pago por número o referencia.
- Guarda la asignación y revisa el saldo actualizado.
Reglas y validaciones
- Solo aparecen pagos
activecon importe sin asignar; primero se sugieren los relacionados por contacto, compañía, deal, cotización o enlace. - El importe no puede superar el saldo de la factura ni el disponible del pago.
Backend
- Servicios:
invoice-payments(create),payments(find/patch),invoices(get/patch). - Efectos: actualiza saldo e importe pagado; la factura pasa a
partially_paidopaid.
Relaciones
- Requiere: factura pendiente y pago activo con importe disponible.
- Dispara / afecta: asignaciones, saldo y estado de la factura.
id: send-invoice-email modulo: invoices app: finance nombre: Enviar factura por correo tipo: accion
Enviar factura por correo
Entrega la factura mediante el diálogo de correo y sus destinatarios relacionados.
Que se logra
- Resultado: el cliente recibe una factura consultable desde un enlace público en su correo.
- Caso de uso: una firma de servicios envía al área de cuentas por pagar la factura del mes.
- Se combina con: Factura pública, Actividad del cliente y Payment Links.
Donde esta
- Ruta:
/[orgId]/invoices/[id]o/[orgId]/finance/invoices/[id] - Acceso en UI:
Share>Send email
Como funciona
- Abre
Sharey seleccionaSend email. - Especifica destinatarios, asunto y mensaje.
- Envía y deja que el detalle recargue la factura.
Reglas y validaciones
- El diálogo requiere destinatario; permite guardar y agregar un email a un contacto relacionado.
Backend
- Servicios:
send-document-email(create),invoices(get).
Relaciones
- Requiere: factura guardada y destinatario.
- Dispara / afecta: entrega por email y consulta pública.
id: orders app: finance nombre: Pedidos estado: beta permiso: can_access_orders
Pedidos
Registro de ventas con artículos, pago y entrega en un mismo lugar, inspirado en Shopify. Un pedido puede nacer del checkout del catálogo público, del asistente de IA, de una creación manual, de la conversión de una cotización o factura, o de la API.
Para que sirve
- Una tienda de ropa recibe pedidos pagados desde su catálogo público y los prepara por envío o recogida en tienda.
- Un distribuidor convierte una cotización aceptada en pedido y luego factura cuando despacha.
- Un restaurante con WhatsApp deja que el asistente de IA tome el pedido, envíe el link de pago y marque la entrega.
- Un negocio B2B registra pedidos manuales con referencia de orden de compra y cobra el saldo con un enlace de pago.
- Un ecommerce recupera carritos abandonados con un mensaje automático que lleva el link de recuperación.
Que lo hace diferente
- Tres estados independientes por pedido: estado del pedido (
Draft,Open,Completed,Cancelled), estado de pago y estado de entrega, como en Shopify. - Cobra con las pasarelas propias de la organización (Stripe o Wompi) mediante enlaces de pago; el pago confirmado actualiza el pedido sin intervención.
- Entregas parciales con transportista, número y URL de seguimiento que el comprador ve en su página pública
/o/{path}. - Conversión en ambos sentidos con cotizaciones y facturas, conservando cliente, moneda y artículos.
- Inventario opcional por producto: el pedido reserva stock al colocarse y lo libera al cancelarse.
- 13 tools de IA en la categoría
Orderspara que el asistente cree, consulte, cobre y entregue pedidos desde una conversación.
Acceso
- Ruta principal:
/[orgId]/finance/orders - Como se llega:
Finance > Sales > Orders - Permiso requerido:
can_access_orders(más permisos granularescan_view_own_orders,can_view_all_orders,can_create_orders,can_edit_own_orders,can_edit_all_orders,can_delete_own_orders,can_delete_all_orders)
Alcance tecnico
- Frontend:
OrdersView,OrderEditForm,OrderDetail,CreateFulfillmentDialog,AbandonedCheckoutsView,AbandonedCheckoutDetail,PublicOrderPage. - Backend:
orders,order-items,order-fulfillments,orders-change-history,checkouts,public-order-preview,public-catalog-checkout,payment-links. - Superficies publicas:
/o/[path](página del pedido) y/c/[orgId]/[slug]/checkout(checkout del catálogo).
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Crear pedido | create-order.md | Crea un pedido manual como borrador o colocado, con artículos, descuento, envío y entrega. |
| Cobrar un pedido | order-payments.md | Genera un enlace de pago por el saldo y actualiza el estado de pago al cobrar. |
| Entregar artículos | order-fulfillment.md | Registra envíos o recogidas parciales con seguimiento. |
| Convertir pedidos | order-conversions.md | Convierte cotizaciones o facturas en pedido y pedidos en factura. |
| Checkouts abandonados | abandoned-checkouts.md | Lista compradores que no terminaron y comparte el link de recuperación. |
| Página pública del pedido | public-order-page.md | Muestra al comprador estado, pago, artículos y seguimiento en /o/[path]. |
Relaciones
- Depende de: Productos, Payment Gateways, Payment Links, Document templates (numeración
order) y Contactos. - Usado por: Catálogos públicos (checkout), asistente de IA, Automatizaciones (5 triggers de pedidos), Cotizaciones y Facturas.
Limitaciones y notas
- No calcula impuestos ni admite productos de suscripción.
- Solo se pueden eliminar pedidos en borrador o cancelados sin pagos.
- Cancelar no reembolsa automáticamente los pagos recibidos.
- El comprador recibe correos al colocar el pedido, al pagarlo y cuando un envío queda listo para recoger, en tránsito o entregado. Para WhatsApp u otros canales se usan los triggers de pedidos.
id: abandoned-checkouts modulo: orders app: finance nombre: Checkouts abandonados tipo: vista
Checkouts abandonados
Lista compradores que iniciaron el checkout del catálogo, dejaron su correo o teléfono y no completaron el pedido.
Que se logra
- Resultado: el equipo ve el carrito, el total y los datos del comprador, y comparte un link que restaura el checkout.
- Caso de uso: una tienda de cosméticos revisa cada mañana los carritos no recuperados y envía el link por WhatsApp a los de mayor valor.
- Se combina con: Catálogos públicos y el trigger
Checkout abandoned.
Donde esta
- Ruta:
/[orgId]/finance/abandoned-checkouts - Acceso en UI:
Finance > Sales > Abandoned checkouts
Como funciona
- Filtra por
All,Not recoveredoRecoveredy busca por cliente. - Abre un checkout para ver
Cart,DeliveryyCustomer. - Pulsa
Copy recovery linky envíalo al comprador; el link reabre su checkout con el carrito. - Si terminó comprando,
View orderlleva al pedido.
Reglas y validaciones
- Un checkout aparece cuando el comprador deja correo o teléfono; antes el carrito vive solo en su navegador.
- Se considera abandonado después del tiempo
Mark checkout as abandoned after (minutes)del catálogo (mínimo 5, por defecto 60). Recoveredindica que el checkout terminó en pedido.
Backend
- Servicios:
checkouts(find, get),public-catalog-checkout(save, restore). - Hooks relevantes: descriptor date-based
checkout-abandoned.
Relaciones
- Requiere: catálogo con checkout habilitado.
- Dispara / afecta: trigger
Checkout abandonedconrecovery_url.
id: create-order modulo: orders app: finance nombre: Crear pedido tipo: accion
Crear pedido
Crea un pedido manual con cliente, moneda, artículos y entrega, guardado como borrador o colocado directamente.
Que se logra
- Resultado: queda un pedido numerado con total, saldo pendiente y estados de pago y entrega listos para seguimiento.
- Caso de uso: un distribuidor registra un pedido telefónico con la referencia de orden de compra del cliente y lo coloca para reservar inventario.
- Se combina con: Productos, Payment Links y Automatizaciones (
New order placed).
Donde esta
- Ruta:
/[orgId]/finance/orders/new - Acceso en UI:
Orders>New order
Como funciona
- Selecciona el cliente (
Customer), la moneda (Currency) y la numeración (Numbering). - Agrega artículos con
Search productso escribiendo el nombre; ajustaQtyyPrice. - Define
Discount(porcentaje o fijo),ShippingyAdjustment. - Elige
Delivery:No delivery,Shipping(con dirección) oPickup. - Pulsa
Save as draftpara guardar sin efectos, oPlace orderpara colocarlo.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Customer | selector de contacto | Sí | Copia nombre, correo y teléfono al pedido. |
| Currency | lista | Sí | Monedas habilitadas en la organización. |
| Numbering | lista | Sí | Esquemas de numeración de tipo order. |
| Reference | texto | No | Orden de compra o referencia externa. |
| Items | tabla | Sí | Al menos un artículo con nombre. Muestra Converted from o Fixed price for this currency según el precio del producto. |
| Discount / Shipping / Adjustment | importe | No | El descuento puede ser % o Fixed. |
| Delivery | selector | No | Con Shipping pide dirección (nombre, teléfono, dirección, ciudad, estado, código postal, país ISO). |
| Customer note / Internal notes | texto | No | La nota interna no la ve el comprador. |
Reglas y validaciones
- Solo se pueden editar pedidos en
DraftuOpen. - Colocar el pedido (
DraftaOpen) reserva inventario de productos conTrack inventory, envía correo de confirmación al comprador, notifica a miembros y disparaNew order placed. - Un borrador no dispara automatizaciones ni reserva stock.
Backend
- Servicios:
orders(create, patch),order-items,products,document-setting. - Efectos: confirmación por correo al cliente con link
/o/{path}, notificación in-app y por correo al propietario, registro enorders-change-history.
Relaciones
- Requiere: un esquema de numeración
ordery un contacto. - Dispara / afecta: inventario, trigger
New order placed, página pública del pedido.
id: order-conversions modulo: orders app: finance nombre: Convertir pedidos tipo: accion
Convertir pedidos
Convierte una cotización o factura en pedido, y un pedido en factura, conservando cliente, moneda y artículos.
Que se logra
- Resultado: el documento de origen queda enlazado con el pedido y se evita volver a capturar artículos.
- Caso de uso: una agencia convierte la cotización aceptada en pedido para seguir el pago y la entrega, y factura desde el pedido al terminar.
- Se combina con: Cotizaciones, Facturas y Payments received.
Donde esta
- Ruta:
/[orgId]/finance/estimates/[id],/[orgId]/finance/invoices/[id]y/[orgId]/finance/orders/[id] - Acceso en UI: vista del documento >
Convert to order; detalle del pedido >More actions>Create invoice
Como funciona
- Desde una cotización o factura pulsa
Convert to order. - Elige
Create draftoCreate and place order. - Desde un pedido pulsa
More actions>Create invoice, eligeInvoice numberingy confirma. - Los enlaces
View invoice,View estimateyOrder {{number}}llevan entre documentos.
Reglas y validaciones
- Una cotización convertida a pedido se factura desde el pedido (
Converted to order ... Create the invoice from the order). - Al convertir una factura en pedido, los pagos aplicados a la factura se reflejan en el pedido.
- Al crear la factura desde el pedido, los pagos ya recibidos se aplican a la factura.
- La fuente del pedido queda como
EstimateoInvoice.
Backend
- Servicios:
orders,estimates,invoices,payments. - Efectos: enlaza
estimate_id/invoice_iden el pedido y registra el cambio en el historial.
Relaciones
- Requiere: un esquema de numeración
order(yinvoicepara facturar). - Dispara / afecta:
New order placedsi se crea colocado.
id: order-fulfillment modulo: orders app: finance nombre: Entregar artículos tipo: accion
Entregar artículos
Registra envíos o recogidas, completos o parciales, con transportista y seguimiento.
Que se logra
- Resultado: el pedido muestra qué se entregó, su estado pasa a
Partially fulfilledoFulfilledy el comprador recibe un correo y ve el seguimiento en/o/{path}. - Caso de uso: una tienda envía 2 de 3 productos hoy con número de guía y despacha el tercero cuando llega el stock.
- Se combina con: el trigger
Order fulfillment updatedpara avisar al cliente por WhatsApp o correo.
Donde esta
- Ruta:
/[orgId]/finance/orders/[id] - Acceso en UI: detalle del pedido >
Fulfill items
Como funciona
- Pulsa
Fulfill items. - Indica la cantidad por artículo (hasta lo pendiente en
Remaining). - Elige
Statusy, si aplica,Carrier,Tracking numberyTracking URL. - Pulsa
Create fulfillment. Después cambia el estado desde la secciónFulfillmentsconUpdate status.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Quantity por artículo | número | Al menos uno | No supera la cantidad pendiente. |
| Status | lista | Sí | Pending, Ready for pickup, In transit, Delivered, Cancelled. |
| Carrier / Tracking number / Tracking URL | texto | No | Se muestran al comprador. |
| Notes | texto | No | Notas del envío. |
Reglas y validaciones
- Solo cuentan como entregados los envíos en
Ready for pickup,In transitoDelivered. - El estado de entrega se recalcula:
Unfulfilled,Partially fulfilledoFulfilled.Returnedse mantiene si se marcó. - Cada cambio de estado de entrega dispara
Order fulfillment updatedcon el estado anterior. - Cuando un envío pasa a
Ready for pickup,In transitoDelivered, el comprador recibe un correo con los artículos, transportista, número de guía, botónTrack shipment(si hay URL) y link a su pedido. Para recogida incluye el punto de recogida.
Backend
- Servicios:
order-fulfillments(create, patch),orders. - Hooks relevantes:
prepare-order-fulfillment,sync-order-after-fulfillment(recalcula el pedido y envía el correo al comprador).
Relaciones
- Requiere: un pedido
Opencon artículos pendientes. - Dispara / afecta:
fulfilled_quantitypor artículo, estado de entrega y triggerOrder fulfillment updated.
id: order-payments modulo: orders app: finance nombre: Cobrar un pedido tipo: accion
Cobrar un pedido
Genera un enlace de pago por el saldo pendiente con una pasarela activa y actualiza el pedido cuando el cliente paga.
Que se logra
- Resultado: el cliente recibe un link de pago y el pedido pasa a
PaidoPartially paidautomáticamente al confirmarse el cobro. - Caso de uso: una tienda que vende por WhatsApp coloca el pedido, copia el link y lo envía al cliente para que pague con tarjeta.
- Se combina con: Payment Gateways, Payment Links, Payments received y el trigger
Order paid.
Donde esta
- Ruta:
/[orgId]/finance/orders/[id] - Acceso en UI: detalle del pedido >
Collect payment
Como funciona
- Abre el pedido y pulsa
Collect payment. - Elige
Payment gatewayentre las pasarelas activas compatibles con la moneda. - Pulsa
Create payment link; el link queda copiado y visible enPayments. - Cuando el cliente paga, se crea el pago recibido y el pedido recalcula
PaidyBalance due.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Payment gateway | lista | Sí | Solo pasarelas activas; Wompi solo aparece en pedidos en COP. |
Reglas y validaciones
- El enlace se crea por el saldo pendiente. Si ya hay un enlace abierto con la misma pasarela y saldo, se reutiliza; si el saldo cambió, el anterior se cancela.
- Estados de pago:
Unpaid,Payment pending(hay link abierto),Partially paid,Paid,Partially refunded,Refunded,Voided. - Si el pedido ya tiene factura, los pagos de la factura cuentan para el pedido.
- Al quedar totalmente pagado se envía recibo por correo al comprador, se notifica a los miembros y se dispara
Order paid; si el catálogo tieneCreate invoice when paid, se crea la factura. - Al cancelar el pedido se cancelan sus enlaces abiertos.
Backend
- Servicios:
orders,payment-links,public-payment-charge,payments. - Hooks relevantes:
record-payment-link-paid(crea el pago y recalcula el pedido).
Relaciones
- Requiere: una pasarela Stripe o Wompi activa en
Settings > Payment gateways. - Dispara / afecta: estado de pago, trigger
Order paid, factura automática opcional.
id: public-order-page modulo: orders app: finance nombre: Página pública del pedido tipo: publico
Página pública del pedido
Página sin inicio de sesión donde el comprador consulta su pedido, paga el saldo y sigue la entrega.
Que se logra
- Resultado: el comprador tiene un único link para ver estado, pago, artículos y seguimiento sin escribir al negocio.
- Caso de uso: un cliente de una tienda online abre el link del correo de confirmación, paga con tarjeta y después revisa el número de guía.
- Se combina con: Payment Links (botón de pago) y Entregas (seguimiento).
Donde esta
- Ruta:
/o/[path] - Acceso en UI: link del correo de confirmación, redirección tras el checkout, o detalle del pedido >
More actions>Copy order page link
Como funciona
- El comprador abre el link y ve los estados del pedido, pago y entrega.
- Si hay saldo y un enlace de pago abierto, aparece
Pay nowcon el formulario embebido o la redirección a la pasarela. - Si eligió pagar después, ve las instrucciones de pago configuradas en el catálogo.
- Consulta artículos, totales, datos de entrega y envíos con transportista y link de seguimiento.
Reglas y validaciones
- El idioma y la marca son los de la organización.
- Tras pagar con verificación 3D Secure de Stripe, la página confirma el pago al volver.
- No muestra notas internas.
Backend
- Servicios:
public-order-preview(consulta porpublic_path),public-payment-charge(cobro y confirmación).
Relaciones
- Requiere: un pedido con
public_path. - Dispara / afecta: pago del pedido y trigger
Order paid.
id: payment-gateways app: finance nombre: Pasarelas de pago estado: shipped permiso: can_access_payments
Pasarelas de pago
Conecta credenciales Stripe o Wompi de la organización y comprueba que sus claves y webhooks están listos para cobros.
Para que sirve
- Un comercio conecta su propia cuenta Stripe para cobrar enlaces de pago a sus clientes.
- Una empresa colombiana conecta Wompi para recaudar cobros en COP.
- Un equipo financiero verifica una conexión antes de publicar enlaces y detecta claves, modos o webhooks incompletos.
- Una agencia administra más de una configuración de cobro de su organización sin mezclarla con la facturación de la plataforma.
Que lo hace diferente
- Las credenciales pertenecen a cada organización y se usan para sus Payment Links, separadas de la facturación SaaS de AchieveApex.
- La comprobación valida autenticación, compatibilidad entre modo de claves y configuración de webhooks antes de cobrar.
- Stripe y Wompi se conectan al mismo flujo de enlaces públicos, pagos recibidos, cotizaciones e invoices.
- La modalidad de cobro se elige por enlace —
Apex CheckoutoProvider Checkout— y no queda fijada al conectar la pasarela. - Los webhooks convierten la confirmación del proveedor en pagos recibidos sin duplicar el cobro si el evento se repite.
Acceso
- Ruta principal:
/[orgId]/settings/payment-gateways - Como se llega:
Avatar menu > Settings > Billing & Finance > Payment Gateways - Permiso requerido:
can_access_payments
Alcance tecnico
- Frontend:
PaymentGatewaysSettings - Backend:
organization-payment-gateways,stripe-payment-webhooks,wompi-webhooks,payment-gateway-health - Superficies publicas: ninguna
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Conectar Stripe | connect-stripe.md | Guarda claves y URL webhook Stripe. |
| Conectar Wompi | connect-wompi.md | Conecta Wompi para COP. |
| Gestionar gateway de pago | manage-payment-gateway.md | Edita, predetermina o desactiva. |
| Procesar pagos de webhooks | payment-gateway-webhooks.md | Confirma cobros de proveedor. |
| Probar conexión del gateway | test-payment-gateway.md | Informa fallos y avisos de conexión. |
Relaciones
- Depende de: Payment Links, Estimates y Payments received.
- Usado por: módulos y documentos del flujo financiero.
Limitaciones y notas
- Los permisos granulares pueden restringir acciones según el rol de la organización.
id: connect-stripe modulo: payment-gateways app: finance nombre: Conectar Stripe tipo: integracion
Conectar Stripe
Guarda una conexión Stripe propia de la organización para cobros.
Que se logra
- Resultado: la organización puede usar su cuenta Stripe para aceptar cobros de sus clientes.
- Caso de uso: una agencia conecta Stripe para cobrar anticipos de propuestas aceptadas.
- Se combina con: Payment Links, Apex Checkout y Checkout del proveedor.
Donde esta
- Ruta:
/[orgId]/settings/payment-gateways - Acceso en UI:
Settings > Billing & Finance > Payment Gateways > Add Gateway > Stripe - Componente(s):
PaymentGatewaysSettings.tsx
Como funciona
- Selecciona
Stripe. - Completa
Display name,Publishable keyySecret key; opcionalmente marcaSet as default. - Pulsa
Connect gateway, vuelve a editarlo, copia la URL mostrada y añadeWebhook signing secret.
Reglas y validaciones
- Se guardan credenciales del gateway de la organización; los secretos no se devuelven tras guardarse.
- Servicios:
organization-payment-gatewaysystripe-payment-webhooks.
Backend
- La clave pública debe comenzar por
pk_; la secreta porsk_ork_. - El webhook debe incluir
checkout.session.completedypayment_intent.succeeded. - Servicios:
organization-payment-gateways(create, patch) ystripe-payment-webhooks(create).
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: connect-wompi modulo: payment-gateways app: finance nombre: Conectar Wompi tipo: integracion
Conectar Wompi
Guarda una conexión Wompi para cobros colombianos en COP.
Que se logra
- Resultado: la organización puede recaudar pagos en COP mediante su cuenta Wompi.
- Caso de uso: un centro médico colombiano publica enlaces para cobrar depósitos de consulta.
- Se combina con: Payment Links, Apex Checkout y Checkout del proveedor.
Donde esta
- Ruta:
/[orgId]/settings/payment-gateways - Acceso en UI:
Settings > Billing & Finance > Payment Gateways > Add Gateway > Wompi - Componente(s):
PaymentGatewaysSettings.tsx
Como funciona
- Selecciona
Wompi. - Ingresa
Display name,Public key,Private key,Integrity secretyEvents secret. - Copia la
Events URLindicada y configúrala en Wompi; pulsaConnect gateway.
Reglas y validaciones
- Wompi admite cobros en COP.
- Servicios:
organization-payment-gatewaysywompi-webhooks.
Backend
- Wompi exige claves pública/privada, secreto de integridad y secreto de eventos; las claves deben pertenecer ambas a sandbox o producción.
- Wompi solo admite COP.
- Servicios:
organization-payment-gateways(create, patch) ywompi-webhooks(create).
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: manage-payment-gateway modulo: payment-gateways app: finance nombre: Gestionar gateway de pago tipo: configuracion
Gestionar gateway de pago
Permite cambiar el nombre, las credenciales, el gateway predeterminado y el estado de una conexión.
Que se logra
- Resultado: los cobros usan una configuración vigente y controlada por la organización.
- Caso de uso: una empresa sustituye claves de Stripe sin recrear su catálogo de cobros.
- Se combina con: Payment Links y Probar conexión del gateway.
Donde esta
- Ruta:
/[orgId]/settings/payment-gateways - Acceso en UI:
Payment Gateways > lápiz,Set defaulto icono de bloqueo - Componente(s):
PaymentGatewaysSettings.tsx
Como funciona
- Usa el lápiz para editar una conexión y pulsa
Save changes. - Deja un secreto vacío para conservar el ya configurado.
- Usa
Set defaultpara nuevas payment links, o confirmaDeactivatepara inactivarla.
Reglas y validaciones
- Al desactivar, el gateway deja de usarse en payment links nuevas.
- Solo queda un predeterminado al marcar
Set as default. - Servicios:
organization-payment-gateways(find, create, patch).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: payment-gateway-webhooks modulo: payment-gateways app: finance nombre: Procesar pagos de webhooks tipo: integracion
Procesar pagos de webhooks
Recibe confirmaciones de pago de los gateways conectados y marca la payment link como pagada.
Que se logra
- Resultado: una confirmación del proveedor se convierte en un pago recibido sin duplicar el registro.
- Caso de uso: un comercio recibe la confirmación de Stripe después de que el cliente pagó un enlace hospedado.
- Se combina con: Payment Links y Pagos recibidos.
Donde esta
- Ruta: no tiene pantalla propia.
- Acceso en UI: configura la URL mostrada al editar Stripe o Wompi.
Como funciona
- Stripe envía los eventos configurados a su URL específica del gateway; Wompi envía eventos a su URL global.
- El backend valida el secreto, identifica la payment link y registra el pago sin duplicarlo.
Reglas y validaciones
- Servicios:
stripe-payment-webhooksywompi-webhooks(create). - Efectos: crea el pago interno, marca la payment link como
paidy puede aceptar el estimate asociado.
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: test-payment-gateway modulo: payment-gateways app: finance nombre: Probar conexión del gateway tipo: integracion
Probar conexión del gateway
Verifica las claves y la configuración de webhooks directamente contra Stripe o Wompi.
Que se logra
- Resultado: el equipo detecta si una pasarela está lista para cobrar antes de compartir un enlace.
- Caso de uso: una empresa verifica sus nuevas claves y webhook de Stripe tras cambiar de entorno.
- Se combina con: Conectar Stripe, Conectar Wompi y Payment Links.
Donde esta
- Ruta:
/[orgId]/settings/payment-gateways - Acceso en UI:
Payment Gateways > icono de corazón > Test connection - Componente(s):
PaymentGatewaysSettings.tsx
Como funciona
- Pulsa el corazón desde la tabla o
Test connectionen edición. - Revisa cada comprobación y usa
Re-rundespués de corregirla.
Reglas y validaciones
- Muestra
Healthy,Needs attentionoFailed. Los avisos no bloquean; los fallos sí. - Stripe verifica autenticación, formato/modo de claves, secreto y endpoint/eventos. Wompi verifica merchant, clave privada, secretos y coherencia sandbox/producción; la URL de eventos es informativa.
- Servicio:
payment-gateway-health(create); conserva el último resultado en el gateway.
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: payment-links app: finance nombre: Enlaces de pago estado: shipped permiso: can_access_payments
Enlaces de pago
Los enlaces de pago preparan un cobro individual con un gateway de la organización. Pueden ser independientes o proceder de Amount to collect en una cotización.
Para que sirve
- Una clínica envía a un paciente un enlace para cobrar el anticipo de un procedimiento antes de facturarlo.
- Una agencia cobra el primer pago de una propuesta aceptada desde la cotización del deal.
- Un comercio B2B crea un enlace asociado a una factura y permite al comprador abrir también el documento relacionado.
- Un negocio de servicios comparte un cobro puntual por Stripe o Wompi sin requerir acceso al CRM.
Que lo hace diferente
- El enlace puede nacer de una cotización, factura, contacto, compañía o deal existentes, conservando el contexto comercial.
- Cada enlace elige su gateway y modalidad:
Apex Checkoutintegrado oProvider Checkouthospedado por Stripe o Wompi. - La página pública conserva identidad visual y idioma de la organización y expone solo los documentos financieros que correspondan al pagador.
- Un cobro confirmado crea un pago recibido idempotente y, cuando procede, actualiza la cotización vinculada a aceptada.
- Las facturas relacionadas se pueden liquidar después mediante la aplicación de pagos, incluso de forma parcial.
Acceso
- Ruta principal:
/[orgId]/finance/payment-links - Como se llega:
Finance > Sales > Payment Links - Permiso requerido:
can_access_payments
Alcance tecnico
- Frontend: rutas Finance;
PaymentLinksView,PaymentLinkEditForm,PaymentLinkDetail - Backend:
payment-links,public-payment-charge,payment-gateway-health - Superficies publicas:
/payment-links/[token]
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Usar Apex Checkout | apex-checkout.md | Cobra con el formulario de AchieveApex y el gateway conectado. |
| Crear enlace de pago | create-payment-link.md | Define importe, moneda, gateway, método y relaciones opcionales. |
| Gestionar enlace de pago | manage-payment-link.md | Copia, abre, cambia gateway/método o cancela un enlace abierto. |
| Abrir documentos relacionados | payment-link-related-documents.md | Lleva a la cotización o factura asociada desde el detalle. |
| Consultar estado de cobro | payment-link-status.md | Distingue borrador, abierto, pagado, vencido y cancelado. |
| Usar checkout del proveedor | provider-checkout.md | Redirige al checkout hospedado por Stripe o Wompi. |
| Pagar desde página pública | public-payment-page.md | Permite al cliente pagar en /payment-links/[token]. |
Relaciones
- Depende de: Payment Gateways, Payments received, Estimates e Invoices.
- Usado por: cotizaciones, facturas, pagos recibidos y gateways de pago.
Limitaciones y notas
- La configuración de credenciales vive en
Payment Gateways; el método de cobro se elige por enlace. - Wompi solo admite enlaces en COP.
id: apex-checkout modulo: payment-links app: finance nombre: Usar Apex Checkout tipo: publico
Usar Apex Checkout
Cobra dentro de la página de AchieveApex usando el gateway configurado para el enlace.
Que se logra
- Resultado: el pagador completa el cobro en una página de Apex sin ser redirigido al proveedor.
- Caso de uso: una clínica cobra el anticipo de una consulta desde un enlace con su marca.
- Se combina con: Payment Gateways, Página pública de pago y Pagos recibidos.
Donde esta
- Ruta:
/payment-links/[token] - Acceso en UI: enlace con
Apex Checkout>Pay now
Como funciona
- El cliente abre la URL copiada del enlace.
- Pulsa
Pay now. - Completa el formulario Stripe o el widget Wompi y espera la confirmación.
Reglas y validaciones
direct_chargees el método interno de Apex Checkout.- Stripe prepara un PaymentIntent y puede requerir 3DS; Wompi abre su widget inmediatamente y solo admite COP.
- Una confirmación exitosa marca el enlace como pagado y crea un Received Payment; el pago puede quedar sin asignar a factura.
Backend
- Servicios:
public-payment-charge(preview/prepare/confirm),payments(create interno),payment-links(patch). - Efectos: Stripe y Wompi también pueden confirmar por webhook como respaldo.
Relaciones
- Requiere: enlace público abierto con gateway compatible.
- Dispara / afecta: pago recibido, estado del enlace y cotización asociada.
id: create-payment-link modulo: payment-links app: finance nombre: Crear enlace de pago tipo: accion
Crear enlace de pago
Crea una solicitud de cobro con gateway, método y numeración de Received Payment.
Que se logra
- Resultado: se publica un cobro trazable para una necesidad comercial concreta.
- Caso de uso: una empresa de eventos solicita el depósito de reserva asociado al deal del cliente.
- Se combina con: Payment Gateways, Cotizaciones, Facturas y Pagos recibidos.
Donde esta
- Ruta:
/[orgId]/finance/payment-links/new - Acceso en UI:
Payment Links>New Payment Link
Como funciona
- Introduce importe, moneda, etiqueta y descripción.
- Elige
Payment numbering, gateway y método de cobro. - Asocia opcionalmente contacto, compañía, deal, cotización o factura.
- Pulsa
Createy copia la URL desde el detalle.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Amount / Currency | importe/lista | Sí | El importe debe ser positivo. |
| Payment numbering | lista | Sí | Determina el número del pago al cobrar. |
| Gateway / Collection method | lista | Sí | Usa gateways activos y métodos compatibles. |
| Label / Description | texto | Label no | Identifica el cobro en el listado. |
| Associations | selector | No | Incluye pestañas para Estimate e Invoice en esta pantalla. |
Reglas y validaciones
- Wompi solo puede elegirse con moneda COP.
- Al elegir una cotización o factura, el formulario puede completar relaciones, importe, moneda y numeración que ya existan.
Backend
- Servicios:
payment-links(create),organization-payment-gatewaysydocument-setting(find). - Efectos: prepara el checkout adecuado para Stripe/Wompi y deja el enlace en estado
open.
Relaciones
- Requiere: importe positivo, moneda, numeración, gateway y método.
- Dispara / afecta: checkout del proveedor y futuro pago recibido.
id: manage-payment-link modulo: payment-links app: finance nombre: Gestionar enlace de pago tipo: accion
Gestionar enlace de pago
Permite compartir, abrir, cambiar la configuración de cobro o cancelar un enlace pendiente.
Que se logra
- Resultado: el equipo controla el canal de cobro sin recrear la relación con el cliente o documento.
- Caso de uso: una agencia reemplaza el gateway de un cobro aún abierto y vuelve a compartirlo.
- Se combina con: Payment Gateways, Estado de cobro y Documentos relacionados.
Donde esta
- Ruta:
/[orgId]/finance/payment-links/[id] - Acceso en UI:
Payment Links> abrir una fila
Como funciona
- Abre el enlace desde el listado.
- Usa
Copy linkoOpenpara entregar o comprobar la URL del cliente. - En
ProvideroCollection method, selecciona otra opción compatible cuando esté habilitada. - Pulsa
Cancel linksi el cobro ya no debe recibirse.
Reglas y validaciones
- Solo enlaces
opensin pago asociado permiten cambiar gateway o método; los pagados, vencidos y cancelados no. - Wompi se oculta entre los gateways alternativos si la moneda del enlace no es COP.
- Cambiar gateway o método vuelve a preparar el checkout y, si viene de una cotización, sincroniza su configuración de cobro.
Backend
- Servicios:
payment-links(get/patch),organization-payment-gateways(find/get),payments(find).
Relaciones
- Requiere: Payment Link existente.
- Dispara / afecta: URL del cliente y configuración de cobro de la cotización vinculada.
id: payment-link-related-documents modulo: payment-links app: finance nombre: Abrir documentos relacionados tipo: publico
Abrir documentos relacionados
Navega desde el enlace a los registros comerciales y financieros que originaron el cobro.
Que se logra
- Resultado: el pagador puede revisar la cotización o factura que sustenta el importe solicitado.
- Caso de uso: un comprador abre la propuesta asociada antes de pagar el anticipo.
- Se combina con: Cotizaciones públicas, Facturas públicas y Página pública de pago.
Donde esta
- Ruta:
/[orgId]/finance/payment-links/[id] - Acceso en UI: detalle > sección
Related
Como funciona
- Abre un Payment Link.
- Revisa las filas de Contact, Company, Deal, Estimate e Invoice que estén asociadas.
- Pulsa una fila para abrir ese registro; las cotizaciones y facturas conservan el contexto Finance.
Reglas y validaciones
- La vista muestra nombres y totales resueltos cuando están disponibles, además de los estados de Estimate/Invoice.
- La página pública solo expone documentos relacionados que sean cotización o factura, no contactos, compañías ni deals.
Backend
- Servicios:
payment-links(get),contacts,companies,deals,estimateseinvoices(get).
Relaciones
- Requiere: al menos una relación guardada en el enlace.
- Dispara / afecta: navegación a CRM, Finance y documentos públicos.
id: payment-link-status modulo: payment-links app: finance nombre: Consultar estado de cobro tipo: vista
Consultar estado de cobro
Muestra si una solicitud de pago todavía se puede cobrar o ya quedó resuelta.
Que se logra
- Resultado: ventas y cobros distinguen enlaces utilizables de enlaces ya pagados, vencidos o cancelados.
- Caso de uso: un comercio detecta que debe enviar un nuevo enlace tras vencer el anterior.
- Se combina con: Gestionar enlace de pago y Pagos recibidos.
Donde esta
- Ruta:
/[orgId]/finance/payment-linksy/[orgId]/finance/payment-links/[id] - Acceso en UI: tabla
Payment Links> columnaStatus, o badge del detalle
Como funciona
- Filtra el listado por estado o abre un enlace.
- Revisa el badge y, en el detalle, fecha de pago, estado del proveedor y referencia externa.
- Abre la tabla
Received paymentspara comprobar el pago registrado.
Reglas y validaciones
- Estados:
draft,open,paid,expiredycancelled. - Solo
openadmite cancelación y pago. El detalle avisa si existen pagos pero el enlace aún indicaopen.
Backend
- Servicios:
payment-links(find/get/patch),payments(find).
Relaciones
- Requiere: Payment Link accesible desde Finance.
- Dispara / afecta: capacidad de cobrar, cancelar o cambiar el enlace.
id: provider-checkout modulo: payment-links app: finance nombre: Usar checkout del proveedor tipo: integracion
Usar checkout del proveedor
Redirige al checkout hospedado por Stripe o Wompi, en vez de cobrar dentro de AchieveApex.
Que se logra
- Resultado: el cliente paga en la experiencia hospedada del proveedor conectado.
- Caso de uso: un comercio usa el checkout de Stripe para un cobro puntual enviado por correo.
- Se combina con: Payment Gateways, Página pública de pago y Pagos recibidos.
Donde esta
- Ruta: URL externa del enlace
- Acceso en UI: Payment Link configurado con
Provider Checkout>Open
Como funciona
- Crea o abre un enlace
open. - Elige
Provider CheckoutenCollection method. - Comparte la URL externa o pulsa
Open; el cliente completa el checkout del proveedor.
Reglas y validaciones
checkout_apies el método interno; el backend prepara una Checkout Session de Stripe o un enlace alojado de Wompi.- El webhook del gateway registra el pago y marca el enlace como
paid. - Un proveedor sin este método compatible vuelve al método predeterminado de ese proveedor.
Backend
- Servicios:
payment-links(create/patch),stripe-payment-webhooks,wompi-webhooks,payments(create interno).
Relaciones
- Requiere: gateway Stripe o Wompi activo y enlace abierto.
- Dispara / afecta: checkout externo, webhook y pago recibido.
id: public-payment-page modulo: payment-links app: finance nombre: Pagar desde página pública tipo: publico
Pagar desde página pública
Permite al cliente consultar el importe y pagar sin credenciales de AchieveApex.
Que se logra
- Resultado: el cliente completa o inicia el pago desde un enlace público con la información necesaria para decidir.
- Caso de uso: un negocio de servicios envía por WhatsApp un enlace de pago para cobrar un depósito.
- Se combina con: Apex Checkout, Checkout del proveedor y Documentos relacionados.
Donde esta
- Ruta:
/payment-links/[token],/payment-links/[token]/successy/payment-links/[token]/cancel - Acceso en UI: URL compartida con
Copy linkoOpen
Como funciona
- Abre la URL pública.
- Revisa importe, moneda y, cuando existan, documentos relacionados.
- Pulsa
Pay now; después de la respuesta se muestra éxito o cancelación. - En documentos relacionados, usa
OpenoPDFpara consultar la cotización o factura pública.
Reglas y validaciones
- La previsualización pública no expone contacto, compañía ni deal.
- Idioma, nombre y logo proceden de la configuración de la organización.
- Un enlace no abierto no se puede volver a cobrar.
Backend
- Servicios:
public-payment-charge(preview/prepare/confirm),public-quote-pdf(create). - Efectos: tras el cobro crea el pago, marca el enlace
paidy puede aceptar la cotización ligada.
Relaciones
- Requiere: token público de un enlace abierto.
- Dispara / afecta: captura, pago recibido, cotización y documentos relacionados.
id: payments-made app: finance nombre: Payments Made estado: beta permiso: can_access_vendor_payments
Payments Made
Registra pagos a proveedores y los asigna a bills abiertos para reducir sus saldos.
Para que sirve
- Una distribuidora registra una transferencia a un proveedor y la reparte entre varias facturas abiertas.
- Una clínica aplica un pago parcial a una factura de equipos y consulta el saldo que falta por pagar.
- Un restaurante identifica el excedente de un pago recibido por su proveedor para usarlo en otras facturas del mismo proveedor.
- Una empresa de logística anula un pago registrado por error y recupera los saldos correctos de sus bills.
Que lo hace diferente
- Un solo pago puede asignarse a múltiples bills del mismo proveedor, y el sistema mantiene el importe aplicado y sin usar.
- Cada asignación actualiza automáticamente el saldo y el estado del bill, sin que el usuario edite deudas manualmente.
- Se integra con Bills, Vendors, monedas y la numeración documental compartida de Finance.
- Desde un bill abierto,
Record Paymentprecarga el proveedor y la factura para reducir errores de captura. - No procesa pagos bancarios ni aplica a Expenses; registra el pago y su asignación dentro del control de cuentas por pagar.
Acceso
- Ruta principal:
/[orgId]/finance/payments-made - Como se llega:
Header app switcher > Alpha & Beta > Finance > Purchases > Payments Made - Permiso requerido:
can_access_vendor_paymentsy permisos de ver, crear, editar o eliminar pagos.
Alcance tecnico
- Frontend: rutas de lista, creación y detalle;
PaymentsMadeView,RecordVendorPaymentFormyVendorPaymentDetail. - Backend:
vendor-paymentsybill-payments. - Superficies publicas: ninguna.
- Integraciones externas: ninguna.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar pagos | vendor-payment-list.md | Busca y revisa pagos y monto sin usar. |
| Registrar pagos | record-vendor-payment.md | Crea un pago para un proveedor. |
| Asignar pagos a bills | allocate-payment-to-bills.md | Distribuye un pago entre saldos abiertos. |
| Actualizar saldos y estados | payment-allocation-effects.md | Sincroniza bill y pago tras cada asignación. |
| Anular o eliminar pagos | vendor-payment-lifecycle.md | Retira asignaciones y controla el ciclo de pago. |
Relaciones
- Depende de: Vendors, Bills y Currencies.
- Usado por: actualiza el saldo, monto pagado y estado de Bills.
- La configuración de numeración AP vive en
settings/document-settings; no se documenta aquí. Las plantillas se describen en Document Templates.
Limitaciones y notas
- Payments Made no aplica a Expenses.
- Un pago se numera al crearse, sin estado de borrador.
id: allocate-payment-to-bills modulo: payments-made app: finance nombre: Asignar pago a bills tipo: accion
Asignar pago a bills
Distribuye el importe de un pago entre bills abiertos o parcialmente pagados del proveedor.
Que se logra
- Resultado: un mismo pago reduce de forma controlada los saldos de una o varias facturas del mismo proveedor.
- Caso de uso: un restaurante distribuye una transferencia entre tres bills de alimentos para reflejar qué deudas quedaron cubiertas.
- Se combina con: registro de pago, Bills y actualización automática de saldos.
Donde esta
- Ruta:
/[orgId]/finance/payments-made/new - Acceso en UI: formulario > tabla de asignaciones
- Componente(s):
RecordVendorPaymentForm.tsx
Como funciona
- Selecciona un proveedor para cargar sus bills pagables.
- Introduce un importe por bill o usa
Pay in Full. - Usa
Clear Applied Amountpara limpiar todas las asignaciones. - Guarda para crear una asignación por cada importe distinto de cero.
Reglas y validaciones
- Una asignación no puede superar el saldo del bill.
- La suma asignada no puede superar el importe del pago.
- El formulario muestra importe pagado, usado y en exceso.
Backend
- Servicios:
bill-payments(create).
Relaciones
- Requiere: un vendor payment y bills del mismo proveedor.
- Dispara / afecta: saldo y estado de los bills.
id: payment-allocation-effects modulo: payments-made app: finance nombre: Actualizar saldos y estados por asignación tipo: automatizacion
Actualizar saldos y estados por asignación
Sincroniza automáticamente el bill y el pago después de crear, modificar o retirar una asignación.
Que se logra
- Resultado: los saldos y estados de los bills, así como el importe utilizado del pago, se mantienen sincronizados sin actualización manual.
- Caso de uso: una empresa de servicios aplica un pago parcial y observa inmediatamente el saldo restante de la factura y del pago.
- Se combina con: asignación de pagos a bills y ciclo de vida de bills.
Donde esta
- Ruta:
/[orgId]/finance/payments-made/[id] - Acceso en UI: detalle de pago > tabla de bills asignados
- Componente(s):
VendorPaymentDetail.tsx
Como funciona
- El sistema suma las asignaciones de cada bill.
- Actualiza su monto pagado, saldo y estado.
- Actualiza en el pago el importe asignado y el no asignado.
Reglas y validaciones
- Un bill queda
Open,Partially PaidoPaidsegún sus asignaciones. - No se permite sobreasignar.
Backend
- Servicios:
bill-payments(create, patch, remove),bills(patch),vendor-payments(patch).
Relaciones
- Requiere: una asignación de pago.
- Dispara / afecta: estado y balance de Bills, y monto sin usar del pago.
id: record-vendor-payment modulo: payments-made app: finance nombre: Registrar pago a proveedor tipo: accion
Registrar pago a proveedor
Crea un pago activo para un proveedor y permite documentar sus datos de pago.
Que se logra
- Resultado: queda registrado un desembolso al proveedor con su referencia, medio de pago y monto listo para aplicar.
- Caso de uso: una clínica registra una transferencia a su proveedor de equipos y reserva parte del importe para sus facturas abiertas.
- Se combina con: Vendors, Bills, asignación de pagos y Currencies.
Donde esta
- Ruta:
/[orgId]/finance/payments-made/new - Acceso en UI:
Payments Made > Record Paymento Bill detail >Record Payment - Componente(s):
RecordVendorPaymentForm.tsx
Como funciona
- Selecciona el proveedor.
- Indica importe, fecha, moneda y modo de pago.
- Incluye cargos bancarios, referencia y notas cuando aplique.
- Asigna importes a bills y usa
Save.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Proveedor, importe, fecha y moneda | Selección, número y fecha | Sí | Datos mínimos del pago. |
| Modo de pago | Selección | Sí | Incluye efectivo, cheque, transferencia, tarjetas, PayPal u otro. |
| Cargos, referencia y notas | Número y texto | No | Contexto del pago. |
Reglas y validaciones
- El pago se crea como
Activey recibe su número final inmediatamente. - Los parámetros
vendorIdybillIdpueden preseleccionar proveedor y bill.
Backend
- Servicios:
vendor-payments(create).
Relaciones
- Requiere: Vendors y Currencies.
- Dispara / afecta: crea asignaciones de bill cuando existen importes aplicados.
id: vendor-payment-lifecycle modulo: payments-made app: finance nombre: Anular o eliminar pagos a proveedores tipo: accion
Anular o eliminar pagos a proveedores
Retira un pago del flujo operativo conservando reglas de consistencia para sus asignaciones.
Que se logra
- Resultado: un pago aplicado puede anularse sin dejar saldos de bills desactualizados.
- Caso de uso: una empresa de logística revierte un pago registrado por error y recupera automáticamente los saldos de las facturas afectadas.
- Se combina con: asignación de pagos y actualización automática de saldos.
Donde esta
- Ruta:
/[orgId]/finance/payments-made/[id] - Acceso en UI: detalle >
VoidyDelete - Componente(s):
VendorPaymentDetail.tsx
Como funciona
- Usa
Voidsobre un pago activo. - El sistema retira primero sus asignaciones a bills.
- Después marca el pago como
Void. - Usa
Deletesolo cuando el pago no tiene asignaciones.
Reglas y validaciones
- Un pago no se puede eliminar si tiene asignaciones.
- Para pagos aplicados, el flujo recomendado es
Void. - La eliminación es lógica.
Backend
- Servicios:
vendor-payments(patch, remove),bill-payments(remove).
Relaciones
- Requiere: permiso de edición o eliminación de pagos.
- Dispara / afecta: recalcula saldo y estado de los bills afectados.
id: vendor-payment-list modulo: payments-made app: finance nombre: Consultar pagos a proveedores tipo: vista
Consultar pagos a proveedores
Lista los pagos registrados, su proveedor, bills asignados y monto sin usar.
Que se logra
- Resultado: el equipo encuentra pagos a proveedores, sus bills cubiertos y el importe todavía disponible para asignar.
- Caso de uso: una distribuidora revisa un pago por transferencia para confirmar qué facturas cubrió y cuánto quedó sin aplicar.
- Se combina con: detalle de pago, Bills y Vendors.
Donde esta
- Ruta:
/[orgId]/finance/payments-made - Acceso en UI:
Purchases > Payments Made - Componente(s):
PaymentsMadeView.tsx
Como funciona
- Busca un pago o filtra por estado.
- Ordena columnas, configura visibilidad o navega páginas.
- Abre una fila para consultar sus asignaciones.
Reglas y validaciones
- La tabla incluye fecha, número, referencia, proveedor, bills, modo, estado, importe y monto sin usar.
Backend
- Servicios:
vendor-payments(find, get).
Relaciones
- Requiere: acceso a Payments Made.
- Dispara / afecta: enlaza con detalle de pago y bills asignados.
id: payments-received app: finance nombre: Pagos recibidos estado: shipped permiso: can_access_payments
Pagos recibidos
Los pagos recibidos registran dinero cobrado manualmente o desde un gateway y distribuyen su importe entre facturas. Se consultan tanto desde CRM como desde Finance.
Para que sirve
- Una empresa de servicios registra una transferencia recibida y la aplica a una o varias facturas abiertas.
- Una escuela cobra una parte de la matrícula y conserva el saldo restante de cada factura.
- Un comercio recibe un pago desde un enlace público y después lo asigna al documento correcto.
- Un despacho corrige una aplicación equivocada o anula un cobro sin perder el rastro del movimiento.
Que lo hace diferente
- Une los cobros de gateways y los pagos manuales en un solo registro de dinero recibido.
- Puede relacionar pagos con cotizaciones, enlaces de pago, contactos, compañías y deals del CRM.
- Separa la captura del dinero de su aplicación a facturas para admitir anticipos, pagos parciales y pagos que cubren varias facturas.
- Mantiene el saldo y estado de la factura actualizados tras aplicar, desasignar o anular un importe.
- Funciona desde CRM y desde el espacio Finance sobre los mismos documentos compartidos.
Acceso
- Ruta principal:
/[orgId]/paymentsy/[orgId]/finance/payments - Como se llega: sidebar CRM >
Paymentso selector de aplicación >Finance>Sales>Received Payments - Permiso requerido:
can_access_payments
Alcance tecnico
- Frontend: rutas CRM y Finance;
PaymentsView,PaymentDetail,RecordPaymentFormy diálogos de asignación - Backend:
paymentseinvoice-payments - Superficies publicas: ninguna
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Asignar pago a facturas | apply-payment-to-invoices.md | Distribuye el importe disponible entre facturas con saldo. |
| Gestionar pagos parciales | partial-payments.md | Mantiene saldo y estado al cubrir solo una parte. |
| Consultar detalle de pago | payment-details.md | Muestra origen, relaciones y asignaciones. |
| Consultar pagos recibidos | payments-list.md | Filtra y ordena el registro de cobros. |
| Registrar pago manual | record-manual-payment.md | Crea el pago y puede asignarlo en el mismo flujo. |
| Desasignar pago de factura | unassign-payment.md | Revierte una asignación equivocada. |
| Anular pago | void-payment.md | Anula un pago activo y sus asignaciones. |
Relaciones
- Depende de: Invoices, Payment Links, Estimates y Payment Gateways.
- Usado por: facturas, enlaces de pago y el historial de cobros del cliente.
Limitaciones y notas
- Un pago puede quedar parcialmente o totalmente sin asignar; capturarlo no liquida una factura automáticamente.
- La eliminación de una asignación es un borrado lógico y recalcula el saldo de la factura.
id: apply-payment-to-invoices modulo: payments-received app: finance nombre: Asignar pago a facturas tipo: accion
Asignar pago a facturas
Distribuye el importe sin asignar de un pago existente entre facturas con saldo.
Que se logra
- Resultado: un solo cobro puede liquidar total o parcialmente varias facturas.
- Caso de uso: un distribuidor aplica una transferencia global a las facturas abiertas de un cliente.
- Se combina con: Facturas, Pagos parciales y Payment Links.
Donde esta
- Ruta:
/[orgId]/payments/[id]o/[orgId]/finance/payments/[id] - Acceso en UI: detalle del pago >
Apply to invoice
Como funciona
- Abre un pago activo y pulsa
Apply to invoice. - Ajusta los importes sugeridos, busca por número de factura si hace falta y confirma.
- Revisa el nuevo saldo de las facturas y el importe sin asignar del pago.
Reglas y validaciones
- Se sugieren solo facturas abiertas relacionadas por enlace, cotización, contacto, compañía o deal; la búsqueda permite incorporar otra factura.
- El reparto automático consume el importe disponible en orden de sugerencia.
- No puede superar el saldo de la factura ni el importe disponible. Una segunda asignación a la misma factura incrementa la fila existente.
Backend
- Servicios:
invoice-payments(create),payments(patch),invoices(patch). - Efectos: actualiza
amount_allocated/amount_unallocated; la factura pasa apartially_paidopaid.
Relaciones
- Requiere: pago activo con importe sin asignar.
- Dispara / afecta: pagos asignados y saldo de facturas.
id: partial-payments modulo: payments-received app: finance nombre: Gestionar pagos parciales tipo: accion
Gestionar pagos parciales
Registra y aplica importes inferiores al saldo de una factura sin cerrar el cobro.
Que se logra
- Resultado: el saldo pendiente queda visible sin perder el abono ya recibido.
- Caso de uso: una academia recibe un primer pago de matrícula y conserva el resto por cobrar.
- Se combina con: Facturas y Asignar pago a facturas.
Donde esta
- Ruta:
/[orgId]/payments/newy/[orgId]/payments/[id](también bajo/finance) - Acceso en UI:
New Payment> tablaUnpaid invoices, o detalle >Apply to invoice
Como funciona
- Introduce o selecciona un pago disponible.
- Escribe un importe menor al
Amount duede una factura. - Guarda la asignación y conserva el resto para otro pago posterior.
Reglas y validaciones
- El formulario limita cada fila al saldo de la factura y valida que el total aplicado no supere el pago.
- Con saldo restante la factura se marca
partially_paid; al llegar a cero se marcapaid.
Backend
- Servicios:
payments(create/patch),invoice-payments(create),invoices(patch).
Relaciones
- Requiere: importe de pago menor que el saldo o distribución entre varias facturas.
- Dispara / afecta: estado
partially_paidy saldo restante.
id: payment-details modulo: payments-received app: finance nombre: Consultar detalle de pago tipo: vista
Consultar detalle de pago
Expone el importe recibido, el origen del cobro, sus relaciones y cada asignación de factura.
Que se logra
- Resultado: el equipo identifica de dónde vino un cobro y cómo se usó.
- Caso de uso: tesorería confirma si un pago web ya fue aplicado a la factura correcta.
- Se combina con: Payment Links, Facturas y Desasignar pago.
Donde esta
- Ruta:
/[orgId]/payments/[id]o/[orgId]/finance/payments/[id] - Acceso en UI: listado de pagos > abrir una fila
Como funciona
- Abre un pago desde el listado.
- Revisa importe, asignado/sin asignar, fecha, modo, referencia, cargos y relaciones.
- Abre pagos relacionados o usa
Apply to invoice,UnassignoVoidsegún corresponda.
Reglas y validaciones
Apply to invoicesolo está disponible en pagos activos con importe sin asignar.Voidsolo aparece para pagos activos y revierte primero sus asignaciones.
Backend
- Servicios:
payments(get/patch),invoice-payments(find/remove),invoices(find).
Relaciones
- Requiere: un pago registrado.
- Dispara / afecta: reasignación, anulación y navegación a relaciones.
id: payments-list modulo: payments-received app: finance nombre: Consultar pagos recibidos tipo: vista
Consultar pagos recibidos
Lista los cobros registrados, su importe sin asignar y su estado operativo.
Que se logra
- Resultado: cobros dispone de una lista operativa para localizar dinero pendiente de aplicar.
- Caso de uso: una empresa de servicios filtra pagos sin asignar al hacer la conciliación diaria.
- Se combina con: Detalle de pago y Asignar pago a facturas.
Donde esta
- Ruta:
/[orgId]/paymentso/[orgId]/finance/payments - Acceso en UI: sidebar CRM >
Paymentso Finance >Sales>Received Payments
Como funciona
- Usa
New Paymentpara registrar un cobro manual. - Busca por texto, filtra
ActiveoVoidy acota con las fechasFromyTo. - Ordena por fecha de pago o creación y abre una fila para el detalle.
Reglas y validaciones
- Muestra número, cliente, referencia, modo, importe, importe sin asignar y estado.
- Si la organización no tiene moneda habilitada, muestra
Configure Currencyantes del listado.
Backend
- Servicios:
payments(find),organization-currencies(find).
Relaciones
- Requiere: al menos una moneda habilitada en la organización.
- Dispara / afecta: navegación al detalle y configuración de moneda si falta.
id: record-manual-payment modulo: payments-received app: finance nombre: Registrar pago manual tipo: accion
Registrar pago manual
Registra dinero recibido y permite distribuirlo inmediatamente entre facturas abiertas del cliente.
Que se logra
- Resultado: las transferencias, efectivo u otros cobros manuales entran al historial financiero y reducen saldos.
- Caso de uso: un despacho registra una transferencia bancaria y la aplica a dos facturas del cliente.
- Se combina con: Facturas y Asignar pago a facturas.
Donde esta
- Ruta:
/[orgId]/payments/newo/[orgId]/finance/payments/new - Acceso en UI:
Received Payments>New Payment
Como funciona
- Selecciona el cliente en
Contact, Company & Deal. - Introduce
Amount received, fecha,Numbering Rule, modo, moneda, cargos, referencia y notas. - Distribuye el importe entre
Unpaid invoiceso usaAuto apply. - Pulsa
Save; se abre el detalle del pago.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Customer | selector | Sí | Puede incluir Company y Deal. |
| Amount received / Payment date | importe/fecha | Sí | El importe debe ser mayor que cero. |
| Numbering Rule / Currency | lista | Sí | La regla es de tipo Received Payment. |
| Payment mode | lista | No | Cash, check, bank transfer, card, PayPal u other. |
| Bank charges, Reference, Notes | importe/texto | No | Se guardan con el pago. |
Reglas y validaciones
- Solo carga facturas
sent,partially_paidoscheduledcon saldo positivo del contacto o compañía. Auto applyreparte primero sobre las facturas con vencimiento más próximo; las ediciones manuales dejan de sobrescribirse.- No puede asignarse más de lo recibido ni más del saldo de una factura.
Backend
- Servicios:
payments(create),invoice-payments(create),invoices(find). - Efectos: genera el número del pago y actualiza importes asignado/sin asignar, saldo y estado de las facturas.
Relaciones
- Requiere: cliente, moneda, regla de pago, fecha e importe positivo.
- Dispara / afecta: pago recibido y asignaciones de factura elegidas.
id: unassign-payment modulo: payments-received app: finance nombre: Desasignar pago de factura tipo: accion
Desasignar pago de factura
Quita una asignación de un pago activo para corregir la factura a la que se aplicó.
Que se logra
- Resultado: el importe vuelve a estar disponible y la factura recupera el saldo que corresponde.
- Caso de uso: tesorería corrige un abono aplicado a la factura equivocada.
- Se combina con: Asignar pago a facturas y Facturas.
Donde esta
- Ruta:
/[orgId]/payments/[id]o/[orgId]/finance/payments/[id] - Acceso en UI: detalle > tabla
Invoice allocations> icono de desvincular >Unassign
Como funciona
- Abre el pago y localiza la fila de la factura incorrecta.
- Pulsa
Unassigny confirma el diálogo. - Aplica el importe recuperado a otra factura si es necesario.
Reglas y validaciones
- Solo se puede desasignar desde un pago
active. - Al eliminar la última asignación, una factura
paidopartially_paidpuede volver asent.
Backend
- Servicios:
invoice-payments(remove),payments(patch),invoices(patch).
Relaciones
- Requiere: una asignación de factura en un pago activo.
- Dispara / afecta: importe sin asignar y saldo de la factura.
id: void-payment modulo: payments-received app: finance nombre: Anular pago tipo: accion
Anular pago
Anula un cobro activo y devuelve a las facturas los importes que tenía asignados.
Que se logra
- Resultado: se revierte un cobro inválido y los saldos pendientes vuelven a reflejar la deuda real.
- Caso de uso: una empresa anula una transferencia devuelta por el banco.
- Se combina con: Facturas y Detalle de pago.
Donde esta
- Ruta:
/[orgId]/payments/[id]o/[orgId]/finance/payments/[id] - Acceso en UI: encabezado del detalle >
Void
Como funciona
- Abre un pago
active. - Pulsa
Voidy confirma la acción. - Revisa las facturas que vuelven a tener saldo pendiente.
Reglas y validaciones
- No se anula un pago que ya está en
void. - Antes de cambiar el pago a
void, la interfaz elimina sus asignaciones de factura.
Backend
- Servicios:
invoice-payments(find/remove),payments(patch),invoices(patch).
Relaciones
- Requiere: pago en estado
active. - Dispara / afecta: reversión de asignaciones y saldos de factura.
id: recurring-bills app: finance nombre: Recurring Bills estado: beta permiso: can_access_bills
Recurring Bills
Configura perfiles que generan bills periódicos para proveedores.
Para que sirve
- Un coworking genera cada mes el bill de alquiler de su oficina con la misma información y partidas.
- Una cadena de tiendas programa bills de mantenimiento y calcula sus vencimientos según los días de pago acordados.
- Una empresa de eventos pausa obligaciones estacionales y las reanuda cuando comienza su nueva temporada.
- Una inmobiliaria crea el bill del período de manera anticipada para prepararlo antes de su fecha de pago.
Que lo hace diferente
- Genera Bills normales que entran al mismo flujo de cuentas por pagar y Payments Made, en lugar de mantener una lista separada de recordatorios.
- Reutiliza proveedor obligatorio, moneda, partidas, impuestos y términos de pago del perfil para generar documentos consistentes.
- La generación automática evita duplicar un bill del mismo período y conserva el enlace entre el perfil y cada documento creado.
- Puede crear cada bill como
DraftuOpen; al abrirse, adquiere saldo y numeración conforme al flujo habitual. - No automatiza el desembolso: los bills generados se pagan posteriormente desde Payments Made.
Acceso
- Ruta principal:
/[orgId]/finance/recurring-bills - Como se llega:
Header app switcher > Alpha & Beta > Finance > Purchases > Recurring Bills - Permiso requerido: permisos de Bills, incluido
can_access_bills.
Alcance tecnico
- Frontend: rutas de lista, creación, detalle y edición;
RecurringBillsView,RecurringBillEditForm,RecurringBillDetail. - Backend:
recurring-bills,recurring-bill-itemsyrecurring-bill-generate. - Superficies publicas: ninguna.
- Integraciones externas: proceso programado compartido de generación recurrente.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar perfiles | recurring-bill-list.md | Busca y filtra perfiles. |
| Crear y editar perfiles | recurring-bill-profile.md | Configura plantilla, proveedor y salida. |
| Programar recurrencia | recurring-bill-schedule.md | Define frecuencia, fechas y términos. |
| Gestionar partidas plantilla | recurring-bill-items.md | Mantiene conceptos reutilizables. |
| Generar un bill ahora | generate-recurring-bill.md | Crea el documento del período sin duplicarlo. |
| Pausar, reanudar y generar automáticamente | recurring-bill-lifecycle.md | Controla el perfil y la tarea programada. |
Relaciones
- Depende de: Bills, Vendors, Currencies y Document Templates.
- Usado por: genera bills normales que pueden recibir pagos.
- La numeración AP se configura en
settings/document-settings; no se documenta aquí.
Limitaciones y notas
- El proveedor es obligatorio.
- Los perfiles detenidos conservan su historial.
id: generate-recurring-bill modulo: recurring-bills app: finance nombre: Generar un bill recurrente ahora tipo: accion
Generar un bill recurrente ahora
Genera el bill correspondiente al período actual de un perfil.
Que se logra
- Resultado: se genera la cuenta por pagar del período al momento de necesitarla, sin crear duplicados.
- Caso de uso: una inmobiliaria crea anticipadamente el bill mensual de seguridad y lo deja listo para pagar cuando llegue el vencimiento.
- Se combina con: Bills, Payments Made y partidas plantilla.
Donde esta
- Ruta:
/[orgId]/finance/recurring-bills/[id] - Acceso en UI: detalle >
Create Bill Now - Componente(s):
RecurringBillDetail.tsx
Como funciona
- Abre un perfil con partidas.
- Selecciona
Create Bill Now. - El sistema genera el bill o informa que ya existe uno para el período.
- Abre el bill desde la tabla de documentos generados.
Reglas y validaciones
- Solo perfiles
DraftoActivepueden generar. - La generación no duplica un bill para el mismo período.
- Un bill abierto recibe saldo inicial y numeración final.
Backend
- Servicios:
recurring-bill-generate(create),billsybill-items(create).
Relaciones
- Requiere: perfil, proveedor y partidas plantilla.
- Dispara / afecta: crea un Bill normal vinculado al perfil.
id: recurring-bill-items modulo: recurring-bills app: finance nombre: Gestionar partidas plantilla de bill tipo: accion
Gestionar partidas plantilla de bill
Mantiene los conceptos que se copian a cada bill generado.
Que se logra
- Resultado: cada bill periódico incluye los mismos conceptos, descuentos e impuestos previstos por la plantilla.
- Caso de uso: un hotel reutiliza las partidas de un contrato mensual de mantenimiento para revisar importes uniformes cada ciclo.
- Se combina con: perfil y generación de bills recurrentes.
Donde esta
- Ruta:
/[orgId]/finance/recurring-bills/newy/[orgId]/finance/recurring-bills/[id]/edit - Acceso en UI: formulario > tabla de partidas
- Componente(s):
RecurringBillEditForm.tsx,BillItemsTable.tsx
Como funciona
- Añade, edita o elimina conceptos.
- Configura cantidad, tarifa, descuento e impuesto.
- Guarda para recalcular el total de la plantilla.
Reglas y validaciones
- La generación exige al menos una partida plantilla.
Backend
- Servicios:
recurring-bill-items(find, create, patch, remove).
Relaciones
- Requiere: un perfil recurrente.
- Dispara / afecta: partidas de los bills generados.
id: recurring-bill-lifecycle modulo: recurring-bills app: finance nombre: Pausar, reanudar y generar bills automáticamente tipo: automatizacion
Pausar, reanudar y generar bills automáticamente
Controla cuándo un perfil participa en la generación programada.
Que se logra
- Resultado: la creación periódica de cuentas por pagar se activa, pausa o reanuda de manera controlada y con historial.
- Caso de uso: una empresa de eventos detiene el perfil de alquiler entre temporadas y lo reanuda al recuperar su operación.
- Se combina con: programación y generación de bills recurrentes.
Donde esta
- Ruta:
/[orgId]/finance/recurring-bills/[id] - Acceso en UI: detalle >
Stop,ResumeyDelete - Componente(s):
RecurringBillDetail.tsx
Como funciona
- La tarea programada procesa perfiles activos en su fecha.
Stopdetiene futuras generaciones.Resumevuelve a activar perfilesDraftoStopped.Deletesolo se permite enDraftoStopped.
Reglas y validaciones
- Los estados disponibles son
Draft,Active,StoppedyExpired. - La tarea programada horaria evita duplicar documentos por período.
Backend
- Servicios:
recurring-bills(patch, remove),recurring-bill-generate(create). - Efectos: proceso programado horario que crea bills debidos.
Relaciones
- Requiere: perfil activo y programación válida.
- Dispara / afecta: Bills y sus saldos pendientes.
id: recurring-bill-list modulo: recurring-bills app: finance nombre: Consultar perfiles de bill recurrente tipo: vista
Consultar perfiles de bill recurrente
Lista proveedor, nombre, frecuencia, fechas, estado e importe de los perfiles.
Que se logra
- Resultado: el equipo visualiza las próximas cuentas por pagar recurrentes y su estado antes de que entren al flujo de pago.
- Caso de uso: una cadena de tiendas revisa los perfiles de alquiler y mantenimiento que generarán bills durante el mes.
- Se combina con: detalle de perfil y Bills.
Donde esta
- Ruta:
/[orgId]/finance/recurring-bills - Acceso en UI:
Purchases > Recurring Bills - Componente(s):
RecurringBillsView.tsx
Como funciona
- Busca por texto o filtra por estado.
- Recorre los resultados paginados.
- Abre un perfil para consultar su detalle.
Reglas y validaciones
- La búsqueda considera nombre, referencia, estado y proveedor.
Backend
- Servicios:
recurring-bills(find, get).
Relaciones
- Requiere: permisos de Bills.
- Dispara / afecta: abre el perfil y los bills hijos.
id: recurring-bill-profile modulo: recurring-bills app: finance nombre: Crear y editar perfiles de bill recurrente tipo: accion
Crear y editar perfiles de bill recurrente
Define la plantilla y configuración para generar bills repetidamente.
Que se logra
- Resultado: se configura una plantilla que genera bills repetidos con proveedor, partidas y condiciones consistentes.
- Caso de uso: un coworking prepara el alquiler mensual de su oficina para generar una cuenta por pagar sin recrearla cada período.
- Se combina con: programación, partidas plantilla, Bills, Vendors y Payments Made.
Donde esta
- Ruta:
/[orgId]/finance/recurring-bills/newy/[orgId]/finance/recurring-bills/[id]/edit - Acceso en UI:
Recurring Bills > New Recurring Billo detalle >Edit - Componente(s):
RecurringBillEditForm.tsx
Como funciona
- Selecciona proveedor, responsable, moneda y nombre de perfil.
- Añade referencia, regla de documento, plantilla, notas y términos.
- Define si cada bill se crea como
DraftuOpen. - Guarda el perfil.
Reglas y validaciones
- El proveedor es obligatorio.
- Los totales se recalculan después de guardar las partidas.
Backend
- Servicios:
recurring-bills(create, patch).
Relaciones
- Requiere: Vendors, Bills y Currencies.
- Dispara / afecta: plantilla para los bills hijos.
id: recurring-bill-schedule modulo: recurring-bills app: finance nombre: Programar bills recurrentes tipo: configuracion
Programar bills recurrentes
Define la cadencia de generación y el vencimiento de los bills creados.
Que se logra
- Resultado: los bills recurrentes se generan en la fecha definida y reciben un vencimiento calculado según sus términos de pago.
- Caso de uso: una empresa de logística programa el bill mensual de combustible a 15 días para planificar su vencimiento.
- Se combina con: perfil y generación automática de bills recurrentes.
Donde esta
- Ruta:
/[orgId]/finance/recurring-bills/newy/[orgId]/finance/recurring-bills/[id]/edit - Acceso en UI: formulario > sección de programación
- Componente(s):
RecurringBillEditForm.tsx
Como funciona
- Establece inicio, frecuencia, repetición y finalización.
- Elige día de mes o semana cuando aplique.
- Define los días de términos de pago.
- Guarda para calcular la siguiente fecha.
Reglas y validaciones
- Al generar, el vencimiento del bill es la fecha de bill más los días de términos.
- Cambiar el calendario activo recalcula la siguiente fecha.
Backend
- Servicios:
recurring-bills(create, patch).
Relaciones
- Requiere: un perfil de bill recurrente.
- Dispara / afecta: vencimiento y generación de bills.
id: recurring-expenses app: finance nombre: Recurring Expenses estado: beta permiso: can_access_expenses
Recurring Expenses
Configura perfiles que generan gastos periódicos a partir de conceptos reutilizables.
Para que sirve
- Una agencia genera periódicamente el gasto de sus herramientas de diseño sin recapturar sus conceptos.
- Una clínica programa el gasto semanal de lavandería y lo detiene durante un cierre temporal.
- Un operador turístico crea por adelantado el gasto del período desde el perfil cuando necesita revisarlo antes.
- Un restaurante conserva el historial de los gastos originados por una misma suscripción operativa.
Que lo hace diferente
- Genera Expenses normales, no registros aislados: los documentos resultantes siguen el flujo y la numeración de gastos de Finance.
- Reutiliza partidas, impuestos, moneda y proveedor opcional del perfil para mantener importes consistentes entre períodos.
- La generación automática comparte el proceso programado de recurrencias y evita duplicar documentos para un mismo período.
- Permite elegir si el gasto generado queda en
Drafto se registra comoActive. - No gestiona pagos de proveedores: los gastos directos no usan Payments Made ni crean una cuenta por pagar.
Acceso
- Ruta principal:
/[orgId]/finance/recurring-expenses - Como se llega:
Header app switcher > Alpha & Beta > Finance > Purchases > Recurring Expenses - Permiso requerido: permisos de Expenses, incluido
can_access_expenses.
Alcance tecnico
- Frontend: rutas de lista, creación, detalle y edición;
RecurringExpensesView,RecurringExpenseEditFormyRecurringExpenseDetail. - Backend:
recurring-expenses,recurring-expense-itemsyrecurring-expense-generate. - Superficies publicas: ninguna.
- Integraciones externas: proceso programado compartido de generación recurrente.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar perfiles | recurring-expense-list.md | Busca y filtra perfiles periódicos. |
| Crear y editar perfiles | recurring-expense-profile.md | Configura plantilla, importes y salida. |
| Programar recurrencia | recurring-expense-schedule.md | Define frecuencia, inicio y fin. |
| Gestionar partidas plantilla | recurring-expense-items.md | Mantiene los conceptos que se copiarán. |
| Generar un gasto ahora | generate-recurring-expense.md | Ejecuta una generación manual idempotente. |
| Pausar, reanudar y generar automáticamente | recurring-expense-lifecycle.md | Controla perfil y generación programada. |
Relaciones
- Depende de: Expenses, Vendors (opcional), Currencies y Document Templates.
- Usado por: genera documentos normales en Expenses.
- La numeración AP se configura en
settings/document-settings; no se documenta aquí.
Limitaciones y notas
- Los perfiles detenidos conservan historial, pero no generan gastos.
- La interfaz permite frecuencias por días, semanas, meses, trimestres y años.
id: generate-recurring-expense modulo: recurring-expenses app: finance nombre: Generar un gasto recurrente ahora tipo: accion
Generar un gasto recurrente ahora
Genera inmediatamente el gasto correspondiente al período actual del perfil.
Que se logra
- Resultado: se crea el gasto del período bajo demanda sin duplicar otro ya generado para ese mismo período.
- Caso de uso: una agencia adelanta el registro de su alquiler mensual y puede confirmar que no creará dos gastos para el mismo mes.
- Se combina con: Expenses, partidas plantilla y programación recurrente.
Donde esta
- Ruta:
/[orgId]/finance/recurring-expenses/[id] - Acceso en UI: detalle >
Create Expense Now - Componente(s):
RecurringExpenseDetail.tsx
Como funciona
- Abre un perfil en estado permitido.
- Selecciona
Create Expense Now. - El sistema crea el gasto y sus partidas, o informa que ya existe el documento del período.
- Abre el gasto generado desde el historial.
Reglas y validaciones
- Solo perfiles
DraftoActivecon al menos una partida pueden generar. - La acción es idempotente por período: no duplica gastos.
- El gasto resultante conserva el estado configurado por el perfil.
Backend
- Servicios:
recurring-expense-generate(create),expensesyexpense-items(create).
Relaciones
- Requiere: perfil y partidas plantilla.
- Dispara / afecta: crea un Expense normal vinculado al perfil.
id: recurring-expense-items modulo: recurring-expenses app: finance nombre: Gestionar partidas plantilla de gasto tipo: accion
Gestionar partidas plantilla de gasto
Mantiene los conceptos que se copian a cada gasto generado.
Que se logra
- Resultado: cada gasto generado conserva un detalle consistente de conceptos e importes previamente definido.
- Caso de uso: un operador de turismo mantiene las partidas de una licencia periódica para que cada gasto mensual salga completo.
- Se combina con: perfil y generación de gastos recurrentes.
Donde esta
- Ruta:
/[orgId]/finance/recurring-expenses/newy/[orgId]/finance/recurring-expenses/[id]/edit - Acceso en UI: formulario > tabla de partidas
- Componente(s):
RecurringExpenseEditForm.tsx,ExpenseItemsTable.tsx
Como funciona
- Añade, edita o elimina conceptos de plantilla.
- Define cantidad, tarifa, descuento e impuesto.
- Guarda el perfil para actualizar sus totales.
Reglas y validaciones
- La generación requiere al menos una partida plantilla.
Backend
- Servicios:
recurring-expense-items(find, create, patch, remove).
Relaciones
- Requiere: un perfil recurrente.
- Dispara / afecta: partidas de los gastos hijos.
id: recurring-expense-lifecycle modulo: recurring-expenses app: finance nombre: Pausar, reanudar y generar gastos automáticamente tipo: automatizacion
Pausar, reanudar y generar gastos automáticamente
Gestiona el estado del perfil y su ejecución programada.
Que se logra
- Resultado: los gastos periódicos se generan automáticamente mientras el perfil está activo y se detienen sin perder historial cuando se pausa.
- Caso de uso: una empresa de servicios detiene temporalmente una suscripción durante una temporada y la reanuda después.
- Se combina con: programación y generación de gastos recurrentes.
Donde esta
- Ruta:
/[orgId]/finance/recurring-expenses/[id] - Acceso en UI: detalle >
Stop,ResumeyDelete - Componente(s):
RecurringExpenseDetail.tsx
Como funciona
- Un perfil activo se procesa en la tarea programada cuando llega su fecha.
- Usa
Stoppara detener futuras generaciones. - Usa
Resumepara volver a activar un perfilDraftoStopped. - Usa
Deletesolo en perfilesDraftoStopped.
Reglas y validaciones
- Los perfiles usan
Draft,Active,StoppedoExpired. - La tarea programada procesa perfiles activos debidos y genera como máximo un documento por período.
Backend
- Servicios:
recurring-expenses(patch, remove),recurring-expense-generate(create). - Efectos: un proceso programado horario crea gastos según la programación.
Relaciones
- Requiere: programación válida y perfil activo.
- Dispara / afecta: Expenses y su historial de documentos generados.
id: recurring-expense-list modulo: recurring-expenses app: finance nombre: Consultar perfiles de gasto recurrente tipo: vista
Consultar perfiles de gasto recurrente
Lista los perfiles con proveedor, nombre, frecuencia, próximas fechas, estado e importe.
Que se logra
- Resultado: el equipo identifica qué gastos periódicos están activos, cuándo volverán a generarse y su importe esperado.
- Caso de uso: una agencia revisa sus suscripciones operativas mensuales antes del cierre para detectar perfiles detenidos.
- Se combina con: detalle de perfil y Expenses.
Donde esta
- Ruta:
/[orgId]/finance/recurring-expenses - Acceso en UI:
Purchases > Recurring Expenses - Componente(s):
RecurringExpensesView.tsx
Como funciona
- Busca por texto o filtra por estado.
- Navega las páginas de resultados.
- Abre un perfil para consultar su configuración e historial.
Reglas y validaciones
- La búsqueda considera nombre, referencia, estado y proveedor.
Backend
- Servicios:
recurring-expenses(find, get).
Relaciones
- Requiere: permisos de Expenses.
- Dispara / afecta: abre perfiles y gastos generados.
id: recurring-expense-profile modulo: recurring-expenses app: finance nombre: Crear y editar perfiles de gasto recurrente tipo: accion
Crear y editar perfiles de gasto recurrente
Define la plantilla que se usará para crear gastos en cada período.
Que se logra
- Resultado: se deja preparada una plantilla reutilizable que genera gastos periódicos con los mismos conceptos y totales.
- Caso de uso: una empresa de mantenimiento configura su suscripción mensual de herramientas para no registrarla manualmente cada mes.
- Se combina con: programación de gastos recurrentes, partidas plantilla, Expenses y Vendors.
Donde esta
- Ruta:
/[orgId]/finance/recurring-expenses/newy/[orgId]/finance/recurring-expenses/[id]/edit - Acceso en UI:
Recurring Expenses > New Recurring Expenseo detalle >Edit - Componente(s):
RecurringExpenseEditForm.tsx
Como funciona
- Indica responsable, nombre del perfil, moneda y proveedor opcional.
- Define referencia, reglas de documento, plantilla, notas y términos.
- Elige si los gastos generados se crean como
DraftoActive. - Guarda el perfil.
Reglas y validaciones
- Los totales se recalculan después de guardar partidas.
- El estado de salida predeterminado es
Active.
Backend
- Servicios:
recurring-expenses(create, patch).
Relaciones
- Requiere: Expenses y Currencies.
- Dispara / afecta: base de los gastos generados.
id: recurring-expense-schedule modulo: recurring-expenses app: finance nombre: Programar gastos recurrentes tipo: configuracion
Programar gastos recurrentes
Define cuándo el perfil debe generar su próximo gasto.
Que se logra
- Resultado: cada perfil tiene una cadencia y próxima fecha definidas para generar el gasto cuando corresponda.
- Caso de uso: una clínica programa su servicio semanal de lavandería para que el gasto se cree de acuerdo con su frecuencia.
- Se combina con: generación manual y automática de gastos recurrentes.
Donde esta
- Ruta:
/[orgId]/finance/recurring-expenses/newy/[orgId]/finance/recurring-expenses/[id]/edit - Acceso en UI: formulario > sección de programación
- Componente(s):
RecurringExpenseEditForm.tsx
Como funciona
- Define fecha de inicio, frecuencia y cada cuántas repeticiones generar.
- Configura el día del mes o de la semana cuando aplica.
- Define la regla de finalización.
- Guarda para calcular la próxima fecha.
Reglas y validaciones
- Al modificar la programación de un perfil activo, el backend recalcula la siguiente fecha.
Backend
- Servicios:
recurring-expenses(create, patch).
Relaciones
- Requiere: un perfil de gasto recurrente.
- Dispara / afecta: generación manual y programada.
id: recurring-invoices app: finance nombre: Facturas recurrentes estado: shipped permiso: can_access_invoices
Facturas recurrentes
Define perfiles que copian sus artículos y datos comerciales a facturas normales de forma manual o programada.
Para que sirve
- Una empresa de mantenimiento genera cada mes la factura de sus contratos activos sin reescribir sus líneas de servicio.
- Una agencia factura un retainer trimestral y conserva una factura histórica independiente por cada periodo.
- Una academia programa cobros anuales con vencimiento calculado desde sus términos de pago.
- Un negocio SaaS pausa un perfil de un cliente suspendido y lo reanuda sin perder la configuración comercial.
Que lo hace diferente
- El perfil genera facturas normales: conservan numeración, PDF, pagos, documentos públicos y el resto del flujo financiero de Apex.
- Puede crearse desde una factura existente para reutilizar cliente, artículos y condiciones ya aprobadas.
- La generación programada respeta la zona horaria del perfil y evita facturas duplicadas para un mismo periodo.
- Los documentos históricos no cambian si se edita el perfil; los ajustes solo afectan la facturación futura.
- Convive con contactos, compañías y deals del CRM en vez de mantener un catálogo de clientes separado.
Acceso
- Ruta principal:
/[orgId]/finance/recurring-invoices - Como se llega:
Header app switcher > Finance > Sales > Recurring Invoices - Permiso requerido:
can_access_invoices
Alcance tecnico
- Frontend:
recurring-invoices/page.tsx,[id]/page.tsx,new/page.tsx,[id]/edit/page.tsx;RecurringInvoicesView,RecurringInvoiceDetail,RecurringInvoiceEditForm - Backend:
recurring-invoices,recurring-invoice-items,recurring-invoice-generate,cron-recurring-invoices - Superficies publicas: ninguna
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Generar facturas automáticamente | automatic-recurring-generation.md | El cron procesa perfiles activos con fecha vencida. |
| Crear perfil recurrente | create-recurring-invoice.md | Crea una plantilla con cliente, artículos y calendario. |
| Editar perfil recurrente | edit-recurring-invoice.md | Cambia la plantilla para próximas facturas. |
| Generar factura ahora | generate-recurring-invoice.md | Crea una factura para el periodo actual. |
| Consultar facturas generadas | generated-invoices.md | Lista las facturas hijas y sus periodos. |
| Pausar o reanudar perfil | pause-resume-recurring-invoice.md | Cambia la elegibilidad del perfil. |
| Gestionar artículos de plantilla | recurring-invoice-items.md | Mantiene las líneas que se copiarán. |
| Configurar calendario recurrente | recurring-schedule.md | Define frecuencia, fecha inicial y terminación. |
Relaciones
- Depende de: Invoices, Contacts, Companies, Currencies, Document Templates y Document Numbering.
- Usado por: Invoices y
document-template-preview.
Limitaciones y notas
- Las facturas ya generadas conservan una copia histórica; editar el perfil no las cambia.
- La generación protege contra duplicados del mismo perfil y periodo.
id: automatic-recurring-generation modulo: recurring-invoices app: finance nombre: Generar facturas automáticamente tipo: automatizacion
Generar facturas automáticamente
El proceso programado busca perfiles que ya deben generar una factura.
Que se logra
- Resultado: los cobros periódicos vencidos se convierten en facturas sin intervención manual.
- Caso de uso: un proveedor de mantenimiento emite sus facturas mensuales a primera hora local.
- Se combina con: Calendario recurrente y Facturas generadas.
Donde esta
- Ruta: no tiene pantalla propia.
- Acceso en UI: se activa al guardar un perfil en
Active.
Como funciona
- El cron consulta perfiles
Activecon próxima fecha vencida. - Omite los que todavía no pasaron las 6:00 a. m. de su zona horaria.
- Solicita la generación programada de cada perfil elegible y registra el resumen.
Reglas y validaciones
- El proceso genera solo perfiles activos con fecha vencida y después de las 6 AM de su zona horaria.
- Servicios:
cron-recurring-invoicesyrecurring-invoice-generate.
Backend
- Servicios:
cron-recurring-invoices(create) yrecurring-invoice-generate(create). - Efectos: genera facturas, avanza fechas y deja los fallos aislados en el resumen del cron.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: create-recurring-invoice modulo: recurring-invoices app: finance nombre: Crear perfil recurrente tipo: accion
Crear perfil recurrente
Registra un perfil de facturación repetible con sus datos comerciales, calendario y artículos.
Que se logra
- Resultado: el negocio deja configurado un modelo de cobro que podrá generar facturas futuras.
- Caso de uso: una agencia crea el perfil de facturación mensual de un cliente con retainer.
- Se combina con: Artículos de plantilla, Calendario recurrente y Contactos.
Donde esta
- Ruta:
/[orgId]/finance/recurring-invoices/new - Acceso en UI:
Header app switcher > Finance > Sales > Recurring Invoices > + - Componente(s):
RecurringInvoiceEditForm.tsx
Como funciona
- Selecciona propietario, contacto y, si corresponde, compañía o deal.
- Escribe
Profile Name, eligeCurrency,Numbering RuleyDocument Template. - Configura
Recurring Schedule, artículos, mensajes y totales. - Pulsa
Create Recurring Invoice.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
Profile Name |
texto | Sí | Identifica el perfil. |
Contact, Company & Deal |
selector | Contacto sí | Compañía y deal son opcionales. |
Currency |
selector | Sí | Solo muestra monedas habilitadas. |
Status |
selector | Sí | Draft, Active o Stopped. |
Generated Invoice Status |
selector | Sí | Draft o Sent. |
Start Date, Frequency, Repeat Every |
fecha y selector | Sí | Admite días, semanas, meses, trimestres y años. |
Reglas y validaciones
- Exige nombre, contacto y moneda; los artículos se guardan después del perfil.
- Si existen valores predeterminados, selecciona la primera moneda, regla y plantilla por defecto.
On dateusaEnd Date;After occurrencesusaMax Occurrences.
Backend
- Servicios:
recurring-invoices(create) yrecurring-invoice-items(create). - Efectos: recalcula subtotal, descuento, impuestos y total; prepara la siguiente fecha.
Relaciones
- Requiere: Document Numbering, monedas habilitadas y un contacto.
- Dispara / afecta: futuras facturas generadas.
id: edit-recurring-invoice modulo: recurring-invoices app: finance nombre: Editar perfil recurrente tipo: accion
Editar perfil recurrente
Modifica el contenido y calendario que se utilizarán en facturas aún no generadas.
Que se logra
- Resultado: los próximos cobros se adaptan al nuevo acuerdo sin alterar el historial emitido.
- Caso de uso: una empresa SaaS actualiza la cuota de renovación del siguiente ciclo.
- Se combina con: Calendario recurrente y Facturas generadas.
Donde esta
- Ruta:
/[orgId]/finance/recurring-invoices/[id]/edit - Acceso en UI:
Recurring Invoice Detail > Edit - Componente(s):
RecurringInvoiceEditForm.tsx
Como funciona
- Abre el perfil desde la tabla y pulsa
Edit. - Ajusta cliente, plantilla, artículos, mensajes, totales o calendario.
- Pulsa
Save Recurring Invoice.
Reglas y validaciones
- Al retirar un artículo, se elimina de la plantilla; el orden restante se vuelve a guardar.
recalculateTotalsactualiza los importes desde sus artículos.- Las facturas ya creadas no se modifican.
Backend
- Servicios:
recurring-invoices(get, patch) yrecurring-invoice-items(find, create, patch, remove). - Efectos: conserva la relación con facturas históricas y actualiza el perfil para próximas ejecuciones.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: generate-recurring-invoice modulo: recurring-invoices app: finance nombre: Generar factura ahora tipo: accion
Generar factura ahora
Crea una factura normal a partir de la plantilla del perfil para su periodo calculado.
Que se logra
- Resultado: el equipo puede emitir el cobro del periodo actual antes de esperar la ejecución programada.
- Caso de uso: una consultora genera hoy la factura mensual de un cliente que adelantó su renovación.
- Se combina con: Facturas, PDF y Pagos recibidos.
Donde esta
- Ruta:
/[orgId]/finance/recurring-invoices/[id] - Acceso en UI:
Recurring Invoice Detail > Create Invoice Now - Componente(s):
RecurringInvoiceDetail.tsx
Como funciona
- Abre el perfil y pulsa
Create Invoice Now. - El sistema abre la factura creada; si ya existe una para el periodo, abre esa misma.
Reglas y validaciones
- Solo perfiles
DraftoActivepueden generar. - Debe existir al menos un artículo de plantilla.
- El mismo perfil y etiqueta de periodo no produce duplicados.
Backend
- Servicios:
recurring-invoice-generate(create),invoices(create, patch) einvoice-items(create). - Efectos: copia datos, artículos y términos; calcula vencimiento con
Payment Terms; aumentaGeneratedy avanza la siguiente fecha. ConSent, finaliza la factura mediante el flujo normal de numeración.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: generated-invoices modulo: recurring-invoices app: finance nombre: Consultar facturas generadas tipo: vista
Consultar facturas generadas
Consulta las facturas normales que proceden de un perfil recurrente.
Que se logra
- Resultado: se conserva la trazabilidad entre el contrato periódico y cada factura emitida.
- Caso de uso: una academia revisa qué facturas generó un plan anual para un alumno.
- Se combina con: Facturas y Perfil recurrente.
Donde esta
- Ruta:
/[orgId]/finance/recurring-invoices/[id] - Acceso en UI:
Recurring Invoice Detail > Details > Generated Invoices - Componente(s):
RecurringInvoiceDetail.tsx
Como funciona
- Abre el perfil y pulsa
Details. - Revisa número, periodo, fecha, estado y total.
- Pulsa una fila para abrir la factura.
Reglas y validaciones
- La lista se limita a 50 resultados y se ordena por fecha descendente.
Backend
- Servicios:
invoices(find, get). - Efectos: cada factura conserva el perfil, tipo de generación y periodo que la originó.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: pause-resume-recurring-invoice modulo: recurring-invoices app: finance nombre: Pausar o reanudar perfil tipo: accion
Pausar o reanudar perfil
Cambia si un perfil participa en la generación programada.
Que se logra
- Resultado: se detienen o reanudan futuros cobros sin borrar su configuración.
- Caso de uso: un gimnasio pausa la facturación durante la suspensión temporal de una membresía.
- Se combina con: Generación automática y Calendario recurrente.
Donde esta
- Ruta:
/[orgId]/finance/recurring-invoices/[id] - Acceso en UI:
Recurring Invoice Detail > StopoResume - Componente(s):
RecurringInvoiceDetail.tsx
Como funciona
- En un perfil
Active, pulsaStop. - Para cualquier otro estado mostrado, pulsa
Resumepara marcarloActive.
Reglas y validaciones
- El cron únicamente busca perfiles
Active. - Detener un perfil no borra ni altera las facturas ya creadas.
Backend
- Servicios:
recurring-invoices(patch). - Efectos: cambia el estado del perfil y su elegibilidad para el cron.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: recurring-invoice-items modulo: recurring-invoices app: finance nombre: Gestionar artículos de plantilla tipo: accion
Gestionar artículos de plantilla
Mantiene las líneas que se copiarán a cada factura generada.
Que se logra
- Resultado: cada factura futura conserva el desglose comercial acordado para el perfil.
- Caso de uso: una empresa de soporte factura horas, licencias y servicio mensual en cada ciclo.
- Se combina con: Perfil recurrente, Facturas y Taxes.
Donde esta
- Ruta:
/[orgId]/finance/recurring-invoices/newy/[orgId]/finance/recurring-invoices/[id]/edit - Acceso en UI:
Invoice Items - Componente(s):
InvoiceItemsTable.tsx
Como funciona
- Añade productos o filas manuales en
Invoice Items. - Indica cantidad, unidad, tarifa, descuento, impuesto y cadencia de cobro.
- Guarda el perfil; las filas se crean, actualizan, ordenan o eliminan.
Reglas y validaciones
- El total se recalcula con las filas, descuento general, impuestos, envío y ajuste.
- Las líneas pueden ser
one-timeo recurrentes con intervalo.
Backend
- Servicios:
recurring-invoice-items(find, create, patch, remove) yrecurring-invoices(patch). - Efectos: la generación crea
invoice-itemsequivalentes en la factura hija.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: recurring-schedule modulo: recurring-invoices app: finance nombre: Configurar calendario recurrente tipo: configuracion
Configurar calendario recurrente
Determina cuándo un perfil puede producir su próxima factura y cuándo debe expirar.
Que se logra
- Resultado: los cobros salen con una frecuencia y límite temporal definidos por el acuerdo comercial.
- Caso de uso: una agencia programa una cuota trimestral durante doce meses.
- Se combina con: Generación automática y Pausar o reanudar perfil.
Donde esta
- Ruta:
/[orgId]/finance/recurring-invoices/newy/[orgId]/finance/recurring-invoices/[id]/edit - Acceso en UI:
Recurring Schedule - Componente(s):
RecurringInvoiceEditForm.tsx
Como funciona
- Define
Start Date,FrequencyyRepeat Every. - Para semanas selecciona
Day of Week; para meses, trimestres o años,Day of Month. - En
Ends, eligeNever,On dateoAfter occurrences. - Guarda el perfil.
Reglas y validaciones
Repeat EveryyMax Occurrencestienen mínimo 1;Day of Monthacepta 1 a 31.- Para meses sin ese día, el cálculo usa el último día disponible.
- El cron solo ejecuta perfiles
Activedespués de las 6:00 a. m. de su zona horaria.
Backend
- Servicios:
recurring-invoices(create, patch) ycron-recurring-invoices(create). - Efectos: calcula
next invoice; al alcanzar el fin, el estado pasa aExpired.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: taxes-currencies app: finance nombre: Impuestos y monedas estado: shipped permiso: can_access_finance
Impuestos y monedas
Centraliza las tasas de impuesto y las monedas disponibles para documentos financieros de la organización.
Para que sirve
- Una agencia que vende en Colombia y Estados Unidos prepara documentos en COP y USD con la moneda adecuada para cada cliente.
- Un comercio aplica IVA u otros impuestos definidos por la organización al calcular cotizaciones y facturas.
- Una empresa que recibe precios en otra moneda consulta y actualiza el tipo de cambio usado en sus documentos.
- Un negocio que deja de operar en una divisa la deshabilita sin eliminar el historial de documentos previos.
Que lo hace diferente
- Las monedas e impuestos se comparten con cotizaciones, facturas, pagos y enlaces de pago del mismo CRM.
- Los tipos de cambio se actualizan automáticamente y se pueden consultar o actualizar desde Finance.
- La moneda seleccionada llega al documento público, a la plantilla y al PDF, no solo a un registro contable interno.
- Mantiene un catálogo de monedas del sistema y habilitaciones por organización para ajustar la operación real de cada negocio.
Acceso
- Ruta principal:
/[orgId]/settings/taxesy/[orgId]/settings/currencies - Como se llega:
Avatar menu > Settings > Billing & Finance > TaxesoCurrencies - Permiso requerido:
can_access_finance
Alcance tecnico
- Frontend:
TaxesList,CurrenciesListy sus diálogos - Backend:
taxes,organization-currencies,system-currencies,exchange-rates,get-exchange-rate,cron-update-exchange-rates - Superficies publicas: ninguna
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Actualizar tipos de cambio automáticamente | automatic-exchange-rates.md | Cron que renueva tasas. |
| Deshabilitar moneda | disable-currency.md | Desactiva una moneda no base. |
| Editar moneda de organización | edit-organization-currency.md | Consulta y administra la asignación. |
| Habilitar moneda | enable-currency.md | Añade una moneda del catálogo. |
| Consultar y actualizar tipos de cambio | exchange-rates.md | Obtiene la tasa vigente. |
| Gestionar impuestos | manage-taxes.md | Define tasas simples o compuestas. |
Relaciones
- Depende de: Estimates, Invoices, Payments received y Payment Links.
- Usado por: módulos y documentos del flujo financiero.
Limitaciones y notas
- Los permisos granulares pueden restringir acciones según el rol de la organización.
id: automatic-exchange-rates modulo: taxes-currencies app: finance nombre: Actualizar tipos de cambio automáticamente tipo: automatizacion
Actualizar tipos de cambio automáticamente
El cron actualiza el catálogo de tasas de cambio sin una acción directa en Settings.
Que se logra
- Resultado: las conversiones entre monedas disponibles se mantienen actualizadas para la operación financiera.
- Caso de uso: una agencia que vende en USD y cobra en COP evita actualizar tasas manualmente cada día.
- Se combina con: Monedas de organización y Tipos de cambio.
Donde esta
- Ruta: no tiene pantalla propia.
- Acceso en UI: no existe un botón de ejecución en las rutas asignadas.
Como funciona
- El programador invoca la actualización.
- Las tasas resultantes quedan disponibles para consultas y documentos.
Reglas y validaciones
- Servicios:
cron-update-exchange-rates(create),exchange-ratesyget-exchange-rate.
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: disable-currency modulo: taxes-currencies app: finance nombre: Deshabilitar moneda tipo: configuracion
Deshabilitar moneda
Desactiva una moneda de la organización sin quitarla del catálogo global.
Que se logra
- Resultado: una divisa deja de estar disponible para documentos nuevos sin romper los existentes.
- Caso de uso: un comercio deja de cotizar en una moneda que ya no acepta.
- Se combina con: Monedas de organización y Cotizaciones.
Donde esta
- Ruta:
/[orgId]/settings/currencies - Acceso en UI:
Settings > Billing & Finance > Currencies > Enabled - Componente(s):
CurrenciesList.tsx
Como funciona
- Localiza la moneda en la lista.
- Desactiva el interruptor de
Enabled.
Reglas y validaciones
- La moneda base no se puede desactivar y su interruptor permanece bloqueado.
- Servicios:
organization-currencies(patch).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: edit-organization-currency modulo: taxes-currencies app: finance nombre: Editar moneda de organización tipo: configuracion
Editar moneda de organización
La lista permite consultar la moneda base, habilitar o retirar las monedas asignadas.
Que se logra
- Resultado: la organización controla qué divisas pueden seleccionarse en sus documentos financieros.
- Caso de uso: una empresa internacional revisa su moneda base y su catálogo operativo por país.
- Se combina con: Habilitar moneda, Deshabilitar moneda y Tipos de cambio.
Donde esta
- Ruta:
/[orgId]/settings/currencies - Acceso en UI:
Settings > Billing & Finance > Currencies - Componente(s):
CurrenciesList.tsx
Como funciona
- Revisa nombre, código, símbolo y la insignia
Base Currency. - Usa el interruptor para cambiar habilitación o papelera para retirar una moneda no base.
Reglas y validaciones
- La interfaz no permite editar el formato ni los datos del catálogo de una moneda.
- Servicios:
organization-currencies(find, patch, remove).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: enable-currency modulo: taxes-currencies app: finance nombre: Habilitar moneda tipo: configuracion
Habilitar moneda
Habilita una moneda del catálogo global para usarla en la organización.
Que se logra
- Resultado: los equipos pueden emitir documentos en una nueva moneda autorizada por el negocio.
- Caso de uso: una consultora empieza a cotizar en USD para clientes internacionales.
- Se combina con: Cotizaciones, Facturas y Tipos de cambio.
Donde esta
- Ruta:
/[orgId]/settings/currencies - Acceso en UI:
Settings > Billing & Finance > Currencies > Enable Currency - Componente(s):
CurrenciesList.tsx,EnableCurrencyDialog.tsx
Como funciona
- Pulsa
Enable Currency. - Elige una moneda del catálogo y confirma el diálogo.
Reglas y validaciones
- El plan Free permite una moneda; el botón muestra una mejora requerida al llegar al límite.
- Servicios:
system-currencies(find) yorganization-currencies(create).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: exchange-rates modulo: taxes-currencies app: finance nombre: Consultar y actualizar tipos de cambio tipo: integracion
Consultar y actualizar tipos de cambio
Expone los servicios que recuperan y consultan tasas de cambio entre monedas.
Que se logra
- Resultado: los documentos y cobros en distintas monedas cuentan con una tasa de conversión disponible.
- Caso de uso: un comercio consulta la relación COP/USD antes de preparar una propuesta internacional.
- Se combina con: Monedas de organización y Actualización automática de tasas.
Donde esta
- Ruta: no hay una pantalla de tasas en las rutas asignadas.
- Acceso en UI: se usan al elegir moneda en documentos financieros.
Como funciona
- El documento solicita la tasa necesaria al backend.
- El backend devuelve la tasa vigente disponible para la conversión requerida.
Reglas y validaciones
- Servicios:
exchange-rates(find),get-exchange-rate(create) ysystem-currencies(find). - No hay una interfaz de Settings para sobrescribir una tasa en las rutas asignadas; el servicio resuelve la tasa vigente disponible y la actualización periódica incorpora nuevas tasas.
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: manage-taxes modulo: taxes-currencies app: finance nombre: Gestionar impuestos tipo: configuracion
Gestionar impuestos
Administra las tasas seleccionables en líneas de estimates e invoices.
Que se logra
- Resultado: los importes de productos y servicios pueden calcular impuestos consistentes por organización.
- Caso de uso: un comercio configura IVA para aplicarlo en sus cotizaciones y facturas.
- Se combina con: Artículos de cotización, Artículos de factura y Calcular importes.
Donde esta
- Ruta:
/[orgId]/settings/taxes - Acceso en UI:
Settings > Billing & Finance > Taxes > Add Tax - Componente(s):
TaxesList.tsx,AddTaxDialog.tsx,EditTaxDialog.tsx
Como funciona
- Pulsa
Add Tax, o abre el lápiz de una tasa existente. - Define nombre, porcentaje, tipo, descripción, estado y si es predeterminada.
- Guarda o elimina con el icono de papelera.
Reglas y validaciones
- La tabla distingue
SimpleyCompound, y muestraActive/Inactive. - Servicios:
taxes(find, create, patch, remove).
Backend
- Los servicios indicados aplican las validaciones y actualizan los registros relacionados.
Relaciones
- Requiere: acceso al módulo Finance.
- Dispara / afecta: documentos y relaciones del flujo financiero cuando aplica.
id: vendors app: finance nombre: Vendors estado: beta permiso: can_access_vendors
Vendors
Gestiona los proveedores usados en las compras de Finance. Permite mantener sus datos, personas de contacto y direcciones.
Para que sirve
- Una agencia de marketing centraliza sus imprentas, estudios y proveedores de pauta para reutilizarlos en todas sus compras.
- Una clínica conserva los contactos y direcciones de laboratorios y distribuidores para consultar rápidamente a quién corresponde cada documento.
- Un restaurante inactiva un proveedor que dejó de usar sin perder el historial de gastos y facturas asociados.
Que lo hace diferente
- Los proveedores son una entidad propia de cuentas por pagar, separada de los contactos de CRM, aunque pueden vincularse de forma opcional.
- La misma ficha alimenta Expenses, Bills y Payments Made, evitando recrear un proveedor en cada flujo de compras.
- El detalle reúne gastos y bills recientes del proveedor para navegar desde la relación comercial hasta los documentos financieros.
- No sustituye una contabilidad de partida doble ni calcula actualmente un balance agregado de proveedor a partir de los documentos.
Acceso
- Ruta principal:
/[orgId]/finance/vendors - Como se llega:
Header app switcher > Alpha & Beta > Finance > Purchases > Vendors - Permiso requerido:
can_access_vendors; las acciones respetan permisos de ver, crear, editar y eliminar del módulo.
Alcance tecnico
- Frontend: rutas de lista, creación, detalle y edición de
vendors;VendorsView,VendorEditFormyVendorDetail. - Backend: servicios Feathers
vendors,vendor-contactsyvendor-addresses. - Superficies publicas: ninguna.
- Integraciones externas: ninguna.
Funcionalidades internas
| Funcionalidad | Archivo | Resumen |
|---|---|---|
| Consultar proveedores | vendor-list.md | Lista paginada, ordenable y filtrable. |
| Crear y editar proveedores | vendor-profile.md | Mantiene el perfil y sus valores predeterminados. |
| Gestionar contactos | vendor-contacts.md | Añade personas de contacto y una principal. |
| Gestionar direcciones | vendor-addresses.md | Añade direcciones y una principal. |
| Cambiar estado y eliminar | vendor-lifecycle.md | Activa, inactiva o elimina lógicamente un proveedor. |
| Consultar compras relacionadas | vendor-purchase-history.md | Muestra expenses y bills recientes del proveedor. |
Relaciones
- Depende de: Finance, Currencies y permisos de organización.
- Usado por:
expensesde forma opcional;billsyvendor-paymentsde forma obligatoria.
Limitaciones y notas
- Un proveedor es distinto de un contacto de CRM, aunque puede vincularse opcionalmente a un contacto o compañía.
- La eliminación es lógica; los documentos históricos permanecen.
id: vendor-addresses modulo: vendors app: finance nombre: Gestionar direcciones de proveedor tipo: accion
Gestionar direcciones de proveedor
Registra direcciones asociadas al proveedor y permite elegir la principal.
Que se logra
- Resultado: cada proveedor conserva sus direcciones y una referencia principal para consulta operativa.
- Caso de uso: un restaurante guarda la dirección principal de su distribuidor para contrastarla al gestionar compras recurrentes.
- Se combina con: perfil y detalle de proveedor.
Donde esta
- Ruta:
/[orgId]/finance/vendors/newy/[orgId]/finance/vendors/[id]/edit - Acceso en UI: formulario de proveedor > direcciones
- Componente(s):
VendorEditForm.tsx
Como funciona
- Añade una tarjeta de dirección.
- Indica el tipo y los datos de ubicación.
- Marca la dirección principal cuando sea necesario.
- Guarda el proveedor.
Reglas y validaciones
- Solo una dirección puede quedar como principal para cada proveedor.
Backend
- Servicios:
vendor-addresses(find, create, patch, remove).
Relaciones
- Requiere: un proveedor.
- Dispara / afecta: se muestra en el detalle del proveedor.
id: vendor-contacts modulo: vendors app: finance nombre: Gestionar contactos de proveedor tipo: accion
Gestionar contactos de proveedor
Permite registrar las personas de contacto de un proveedor desde su formulario.
Que se logra
- Resultado: el equipo identifica la persona adecuada de cada proveedor y conserva un contacto principal.
- Caso de uso: una constructora registra a la persona de facturación de su distribuidor de materiales para resolver cobros o entregas.
- Se combina con: perfil y detalle de proveedor.
Donde esta
- Ruta:
/[orgId]/finance/vendors/newy/[orgId]/finance/vendors/[id]/edit - Acceso en UI: formulario de proveedor > contactos
- Componente(s):
VendorEditForm.tsx
Como funciona
- Añade una persona de contacto.
- Completa su nombre y, cuando aplique, cargo, departamento, email y teléfono.
- Marca una persona como principal si corresponde.
- Guarda el proveedor.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Nombre y tratamiento | Texto y selección | No | Identifica a la persona. |
| Contacto profesional | Texto | No | Email, teléfono, cargo y departamento. |
| Principal | Interruptor | No | Distingue el contacto preferido. |
Reglas y validaciones
- Solo puede existir un contacto principal por proveedor; al marcar otro, el anterior deja de serlo.
Backend
- Servicios:
vendor-contacts(find, create, patch, remove).
Relaciones
- Requiere: un proveedor.
- Dispara / afecta: se muestra en el detalle del proveedor.
id: vendor-lifecycle modulo: vendors app: finance nombre: Cambiar estado y eliminar proveedores tipo: accion
Cambiar estado y eliminar proveedores
Permite retirar temporalmente un proveedor del uso activo o eliminarlo de las listas.
Que se logra
- Resultado: se evita seleccionar proveedores inactivos sin perder el historial de compras ya registrado.
- Caso de uso: una agencia inactiva una imprenta con la que dejó de trabajar y mantiene consultables sus documentos anteriores.
- Se combina con: lista de proveedores e historial de compras.
Donde esta
- Ruta:
/[orgId]/finance/vendors/[id] - Acceso en UI: detalle de proveedor >
Mark Active/Mark Inactive/Delete - Componente(s):
VendorDetail.tsx
Como funciona
- Abre el detalle de un proveedor.
- Usa la acción de estado para alternar entre
ActiveeInactive. - Usa
Deletey confirma para eliminarlo de forma lógica.
Reglas y validaciones
- La eliminación no borra físicamente el historial.
- Los documentos de compras históricos continúan existiendo.
Backend
- Servicios:
vendors(patch, remove). - Efectos: el proveedor eliminado deja de aparecer en consultas normales.
Relaciones
- Requiere: permiso para editar o eliminar proveedores.
- Dispara / afecta: availability del proveedor en nuevas compras.
id: vendor-list modulo: vendors app: finance nombre: Consultar proveedores tipo: vista
Consultar proveedores
Muestra los proveedores disponibles para compras y permite localizar registros existentes.
Que se logra
- Resultado: el equipo localiza proveedores disponibles y abre su ficha antes de registrar una compra.
- Caso de uso: una agencia de marketing encuentra a su proveedor de pauta para revisar sus datos antes de registrar una factura.
- Se combina con: perfiles de proveedor, Expenses y Bills.
Donde esta
- Ruta:
/[orgId]/finance/vendors - Acceso en UI:
Purchases > Vendors - Componente(s):
VendorsView.tsx
Como funciona
- Abre la lista de proveedores.
- Busca por texto o filtra por estado.
- Ordena columnas, configura las visibles o cambia la página.
- Selecciona una fila para abrir su detalle.
Reglas y validaciones
- La lista incluye nombre, email, tipo, teléfono, estado, balance y fecha de creación.
- Solo se muestran proveedores no eliminados y autorizados para el usuario.
Backend
- Servicios:
vendors(find, get). - Hooks relevantes: la búsqueda incluye datos de identificación y contacto.
Relaciones
- Requiere: acceso a Vendors.
- Dispara / afecta: abre el detalle o el flujo
New Vendor.
id: vendor-profile modulo: vendors app: finance nombre: Crear y editar proveedores tipo: accion
Crear y editar proveedores
Crea o actualiza la ficha de un proveedor para utilizarlo en compras.
Que se logra
- Resultado: se dispone de una ficha reutilizable del proveedor con datos operativos y valores predeterminados para compras.
- Caso de uso: una clínica crea el perfil de su laboratorio externo para usarlo de forma consistente en sus gastos y facturas.
- Se combina con: contactos y direcciones de proveedor, Expenses, Bills y Payments Made.
Donde esta
- Ruta:
/[orgId]/finance/vendors/newy/[orgId]/finance/vendors/[id]/edit - Acceso en UI:
Vendors > New Vendoro detalle >Edit - Componente(s):
VendorEditForm.tsx
Como funciona
- Elige
BusinessoIndividual. - Completa el nombre visible y los datos de contacto y fiscales aplicables.
- Define, si se necesitan, moneda y términos de pago predeterminados.
- Guarda el formulario; en edición se conservan los datos existentes.
Campos y opciones
| Campo | Tipo | Obligatorio | Notas |
|---|---|---|---|
| Tipo y nombre visible | Selección y texto | Sí, nombre visible | El tipo ajusta los campos de nombre. |
| Datos de contacto y fiscales | Texto | No | Incluye email, teléfono e identificación fiscal. |
| Moneda y términos de pago | Selección | No | Valores predeterminados para compras. |
| Estado | Selección | No | Active o Inactive. |
Reglas y validaciones
- El nombre visible es obligatorio.
- Se guardan datos de creación y propiedad del usuario autenticado al crear.
Backend
- Servicios:
vendors(create, patch).
Relaciones
- Requiere: permisos para crear o editar proveedores.
- Dispara / afecta: permite seleccionar el proveedor en expenses, bills y pagos.
id: vendor-purchase-history modulo: vendors app: finance nombre: Consultar historial de compras del proveedor tipo: vista
Consultar historial de compras del proveedor
Muestra los gastos y bills recientes vinculados a un proveedor para navegar a sus documentos.
Que se logra
- Resultado: se consulta desde un solo proveedor la actividad reciente de gasto y cuentas por pagar asociada.
- Caso de uso: una empresa de eventos revisa los gastos y bills recientes de su proveedor de sonido antes de negociar un nuevo servicio.
- Se combina con: Expenses y Bills.
Donde esta
- Ruta:
/[orgId]/finance/vendors/[id] - Acceso en UI: detalle de proveedor > pestañas de compras relacionadas
- Componente(s):
VendorDetail.tsx
Como funciona
- Abre el detalle de un proveedor.
- Selecciona la pestaña de expenses o bills.
- Revisa los documentos recientes y abre uno para ver su detalle.
Reglas y validaciones
- Solo se listan los documentos asociados al proveedor y visibles para el usuario.
Backend
- Servicios:
expensesybills(find, get).
Relaciones
- Requiere: un proveedor existente.
- Dispara / afecta: enlaza con los módulos Expenses y Bills.