Completar hitos
Completa hitos de un plan de proyecto y genera sus órdenes de cobro.
Descripción general
Este endpoint marca hitos como completados y genera una orden de cobro por cada uno. Por cada hito:
- La orden se emite hoy, sin importar
completed_at, vencegrace_period_daysdías después, queda con estatusissuedy no lleva CFDI. - La orden cobra los conceptos del plan escalados a la parte del hito: el precio unitario, los descuentos de monto fijo y las bases de impuestos se multiplican por el porcentaje del hito (
percentage) o por su valor entre el total del plan (fixed), redondeados a 6 decimales. Un hito sin valor cobra los conceptos completos. - El historial registra una ejecución
manualcon el hito enmilestone_id,scheduled_dateigual acompleted_at,executed_dateigual a hoy y la API key enexecuted_by. - El hito queda con
completed: true,remaining_amountbaja por el total de la orden ylast_execution_atse actualiza. Cuando ya no quedan hitos pendientes, el plan pasa acompleted.
Solo se procesan hitos pendientes de este plan. Los id desconocidos, ya completados o de otro plan se omiten sin error, así que la respuesta puede traer executions vacío. El estatus del plan no se revisa: también puedes completar hitos de un plan paused o completed.
Los hitos se procesan uno por uno. Si uno falla, los anteriores quedan completados; el que falla sigue pendiente y queda en el historial con estatus error.
Una solicitud exitosa devuelve 201 con { automation, executions }. Acepta el header Idempotency-Key para reintentar sin cobrar dos veces.
Requiere el permiso Crear en Órdenes de cobro.
Endpoint
https://app.credonix.mx/api/v1/project-plan-automations/{automationId}/complete-milestonesPath param: automationId — el id de la automatización.
Completar un hito por porcentaje
El hito "Anticipo" vale 30 % de un plan de 1160.00. La orden generada cobra el concepto con precio unitario 300: subtotal 300.00, IVA 48.00 y total 348.00. remaining_amount baja de 1160.00 a 812.00. Sin completed_at, el hito se completa con la fecha de hoy.
{
"milestones": [
{
"id": "cmu21apfn00mov1dq96rwtxxs"
}
]
}Completar un hito de monto fijo
El hito "Fase 1" vale 348.00 de un plan de 1160.00, es decir 30 % del total. La orden generada cobra 348.00 y remaining_amount queda en 812.00. Consulta la orden con su generated_invoice_id en Consultar orden de cobro.
{
"milestones": [
{
"id": "cmu21ar5q00nvv1dqpejqm2kd"
}
]
}Reglas de los campos
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
milestones | array | Sí | Hitos que quieres completar. Al menos uno. |
milestones[].id | string | Sí | id de un hito del plan (milestones[].id). |
milestones[].completed_at | string | No | Fecha de completado con el formato YYYY-MM-DD. Por defecto, hoy en la zona horaria de la organización. |
No se aceptan otros campos: cualquier campo desconocido responde 400 con VALIDATION_ERROR.
Forma de las respuestas
| Campo | Tipo | Descripción |
|---|---|---|
automation | objeto | El plan actualizado, con la misma forma que Consultar plan de proyecto. |
executions | array | Una ejecución por cada hito completado, con la misma forma que en el historial. |
Errores
| Status | Código | Causa |
|---|---|---|
400 | VALIDATION_ERROR | Falta milestones, está vacío ("Selecciona al menos un hito para completar") o un hito tiene un valor inválido. |
400 | DEFAULT_LEGAL_ENTITY_NOT_FOUND | El plan no tiene razón social y la organización no tiene una razón social predeterminada. |
400 | AUTOMATION_INVOICE_FAILED | No se pudo crear la orden de cobro de un hito. El hito sigue pendiente y la ejecución queda en el historial con estatus error. La respuesta incluye "message": "Error al crear la orden de cobro.". |
401 | MISSING_API_KEY, INVALID_API_KEY, API_KEY_REVOKED | API key ausente, inválida o revocada. |
403 | INSUFFICIENT_PERMISSIONS | La API key no tiene el permiso Crear en Órdenes de cobro. |
404 | NOT_FOUND | La automatización no existe en tu organización o es de otro tipo. La respuesta incluye "message": "La automatización no fue encontrada.". |