CallwiseDocs

Facturación, plazos y suspensión

La semana gratuita, el plazo de 12 meses, la cancelación de la renovación, la ausencia de reembolsos, qué módulos tiene un espacio de trabajo y qué ocurre cuando falla un pago.

Un espacio de trabajo se suscribe a una base, un plan o un paquete por sector, más complementos. Juntos deciden qué módulos tiene. Cada módulo tiene después un estado de facturación, que solo escribe la facturación (el rol de servicio), nunca una persona en la aplicación.

La semana gratuita

Cada compra empieza con una prueba gratuita de 7 días, una por cliente. Las fechas salen de trialSchedule(purchaseDay) en @callwise/pricing:

  • Al finalizar la compra, el cliente ingresa los datos de pago y marca la casilla de consentimiento. Se guarda un método de pago y hoy se cobran $0. El pago muestra Hoy: $0 · Primer cargo el <date> y el monto.
  • Día 7 (el día siguiente al último día gratuito): el total anual se cobra una sola vez, y el plazo de 12 meses empieza ese día. Una compra del 16 de octubre de 2026 es gratuita del 16 al 22 de octubre, se cobra el 23 de octubre de 2026 y su plazo va del 23 de octubre de 2026 al 22 de octubre de 2027, con renovación el 23 de octubre de 2027.
  • Cancelar durante la prueba no cuesta nada. En el sitio esto es Cancelar una prueba (/account/trial, número de pedido + correo), que llama a cancelTrial() en @callwise/store: solo se permite mientras el pedido está en trialing y antes del día del primer cargo; anula el método guardado y no cobra nada. Después del primer cargo, el plazo no es reembolsable y solo se puede cancelar la renovación.
  • Una prueba por cliente, contada por el correo normalizado entre los pedidos guardados (minúsculas, sin espacios al inicio ni al final, se quitan los +tags y se ignoran los puntos de Gmail). Una segunda compra no tiene prueba: se cobra al finalizar la compra y su plazo empieza ese día (termFrom(today)), y el pago dice «Su prueba gratuita se usó en un pedido anterior: se cobra hoy».

Estados del pedido en @callwise/store: trialing (método guardado, nada cobrado) → active (primer cargo hecho), o trialing → trial_cancelled (nada cobrado, nunca). Cada pedido guarda trial: { start, end, firstChargeOn }, amountToday, firstCharge: { amount, on, idempotencyKey, status } y las fechas del plazo.

La tarea de cobro del día 7

runDueTrialCharges(now) cobra cada pedido en trialing cuyo día de primer cargo es hoy o anterior, exactamente una vez, y lo pasa a active. Las pruebas canceladas se omiten; los pedidos cuyo día 7 todavía no llega se dejan quietos. Es idempotente: un pedido cobrado ya no está en trialing, y cada cargo lleva una clave de idempotencia por pedido (first-charge:<orderId>), así que ejecutarlo dos veces, o después de una caída entre el cargo y el guardado, nunca cobra dos veces. Un cargo fallido sigue en trialing y se reintenta en la siguiente ejecución.

pnpm --filter @callwise/store charge-due                          # against apps/site/.data/orders.json
pnpm --filter @callwise/store charge-due -- --now 2026-10-23      # pretend it is day 7

Proveedores de pago

La interfaz PaymentProvider tiene setupPaymentMethod (guarda un método, $0), charge (cobra ahora, para una compra sin prueba), chargeFirst(order) (el cargo del día 7) y voidOnCancel(order). No tiene una llamada de reembolso. Esta versión solo incluye el proveedor de demostración: el formulario de tarjeta de demostración del pago (4242 4242 4242 4242) conserva solo la marca, los últimos 4 dígitos y el vencimiento, nunca el número completo ni el CVC, y no se mueve dinero.

No está construido ni verificado (verified: false en el código):

  • Stripe: una suscripción con trial_period_days=7 sobre un método guardado con un SetupIntent; los campos de la tarjeta serían Stripe Elements, así que los números de tarjeta nunca llegan a nuestro servidor.
  • Bancos sin facturación recurrente: una preautorización 3D Secure por el total anual al finalizar la compra, capturada el día 7 por la tarea programada y anulada si se cancela.

El plazo

  • Cada plan, paquete y complemento es un contrato mínimo de 12 meses, facturado por adelantado cada año, que empieza después de la semana gratuita (o al finalizar la compra, si el cliente ya tuvo una). No hay opción de mes a mes.
  • Los precios se muestran por mes: precio de lista menos 12%. El cargo del plazo es doce de esos, cobrados por adelantado. Consulte Precios.
  • termFrom(start) en @callwise/pricing da las fechas: el plazo termina el día anterior al primer aniversario y se renueva en el aniversario. Un plazo que empieza el 16 de octubre de 2026 termina el 15 de octubre de 2027 y se renueva el 16 de octubre de 2027. Los fines de mes se acotan (31 de enero → se renueva el 31 de enero, termina el 30 de enero).
  • cw_subscriptions guarda term_start, term_end y renewal_cancelled_at.

Cancelar la renovación

Cancelar significa cancelar la renovación, y nada más. Un propietario lo hace desde Configuración → Facturación → Cancelar renovación. La acción:

  • fija renewal_cancelled_at (la fecha de renovación queda vacía),
  • mantiene cada módulo activo hasta term_end,
  • no cobra ni reembolsa nada.

Después de term_end, un espacio de trabajo cancelado debe pasar a solo lectura, igual que uno suspendido, más abajo. En esta versión todavía nada cambia el estado en esa fecha (no hay una tarea de facturación programada); la regla está escrita para que la tarea pueda seguirla.

Sin reembolsos

Una vez hecho el primer cargo anual, los pagos no son reembolsables (cancelar durante la semana gratuita no cuesta nada, así que no hay nada que reembolsar): no hay reembolsos totales ni parciales por meses no usados, créditos no usados, complementos que ya no se usan, ni por pasar a un plan más pequeño (lo que entra en vigor en la siguiente renovación). El código no tiene una vía de reembolso: @callwise/pricing exporta REFUNDS = 'none' y ninguna función de reembolso, @callwise/store y su PaymentProvider no tienen ninguna función de reembolso, y los pedidos llevan refund: 'never'.

Consentimiento al finalizar la compra

El pago del sitio tiene una casilla obligatoria que empieza sin marcar. Su oración nombra la semana gratuita, la fecha y el monto del primer cargo, que cancelar durante la prueba no cuesta nada, el mínimo de 12 meses que empieza después de la prueba, la facturación anual por adelantado, la renovación automática y la ausencia de reembolsos, y enlaza las Condiciones y la Política de cancelación y reembolso. La oración se arma por pedido con consentText(offer); para un cliente que regresa, dice que la prueba ya se usó y que el cargo es hoy. El servidor vuelve a calcular la oferta, rechaza un pedido sin la casilla o con una oración distinta, y guarda en el pedido:

{ "accepted": true, "at": "2026-10-16T09:30:00.000Z", "termsVersion": "2026-10-16", "text": "I agree to the Terms and …" }

La versión de las condiciones en esta compilación es 2026-10-16b. Se rechaza un pedido hecho desde una página que mostró un texto más antiguo o una versión más antigua.

Estados de facturación

EstadoProviene deLas personas pueden
lockedEl módulo no está en el plan, el paquete ni un complementoNada. La página muestra qué plan lo desbloquea.
activePagado, o dentro de la semana gratuitaTodo lo que permite su nivel de acceso
graceEl pago falló hace pocoTodo, mientras se corrige el pago
read_onlyEl pago falló hace tiempo, o el plazo terminó sin renovaciónSolo ver. Sin ediciones ni publicación.

Un propietario también puede apagar un módulo active en Configuración, lo que lo oculta para todos. La base de datos rechaza activar un módulo locked.

Cuando falla un pago

Los números de abajo salen de LAPSE_RULES en @callwise/pricing.

Days after a failed paymentStatusModule stateWhat happens
0activeactiveFull access.
1–7past_duegraceFull access while the payment is fixed.
8–30read_onlyread_onlyData visible, no edits. Calls forward to the fallback number.
after 30lapsedread_onlyStill read-only. Data is kept for 90 days.

Mientras el espacio de trabajo está en solo lectura, las llamadas no se descartan: se desvían al número de respaldo definido en Configuración → Números de teléfono. Los datos se conservan 90 días después de una suspensión o de que un plazo termine sin renovación, para que se puedan exportar.

Créditos

Cada plan y paquete tiene una bolsa de créditos compartida por mes, que usan todos los módulos y todos los modelos de IA (consulte Precios y Modelos de IA y créditos). Las llamadas consumen créditos según la tarifa de los modelos que usa su agente. Los créditos no se trasladan al mes siguiente. Los propietarios reciben una alerta al 80 % y al 100 %. Pasado el 100 %, las llamadas se desvían a los números de respaldo, salvo que el espacio de trabajo haya optado por el excedente a $0.03 el crédito.

Quién puede cambiar el plan

Nadie desde dentro de la aplicación. El plan, el estado, el plazo y la asignación de la bolsa viven en cw_subscriptions, que los usuarios con sesión iniciada pueden leer pero no escribir; la única escritura de facturación que puede hacer un propietario es cancelar la renovación. En esta versión no hay un pago real: la tienda del sitio registra pedidos de demostración, en el modo de demostración un cambio de plan se simula y en el modo de base de datos local se escribe con el rol de servicio.

On this page