post
https://app.fracttal.com/api/tasks_subtasks/
Permite crear una o varias subtareas dentro de una tarea existente de un plan de tareas (formulario de mantenimiento), sin depender de la interfaz de Fracttal.
POST https://app.fracttal.com/api/tasks_subtasksParámetros de entrada — Requeridos
Se envían en el body de la petición.
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
id_task | entero | Sí | Id de la tarea existente dentro del plan de tareas donde se crearán las subtareas. Se obtiene del listado/detalle de tareas del plan. |
is_cyclical | booleano | Sí | Indica si la tarea maneja iteraciones. Debe coincidir con el estado real de la tarea — si no coincide, la petición se rechaza con 409. |
num_iterations | entero | Sí, solo si is_cyclical = true | Número de iteraciones de la tarea. Entero mayor a 0. |
subtasks | array de objetos | Sí | Array con al menos un elemento; cada elemento es la configuración de una subtarea. El orden del array determina el order_number asignado. Ver Parámetros de subtasks más abajo para los campos de cada elemento. |
Parámetros de entrada — Opcionales
Ninguno a nivel superior — todos los campos opcionales de este endpoint son parte de cada elemento de subtasks (ver más abajo).
Parámetros de subtasks
subtasksCada elemento del array subtasks representa una subtarea a crear, con los siguientes campos:
Requeridos
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
id_task_form_item_type | entero | Sí | Tipo de subtarea a crear. Determina qué otros campos aplican — ver tabla Tipos de subtarea a continuación. Valores válidos: 1 a 8. |
description | texto | Sí | Texto que se muestra como etiqueta/pregunta de la subtarea al ejecutar la tarea (ej. "Describe el procedimiento realizado"). No puede ir vacío. |
Tipos de subtarea (id_task_form_item_type)
id_task_form_item_type)| Id | Tipo | Campos adicionales relevantes |
|---|---|---|
1 | Texto | Ninguno adicional. |
2 | Sí/No | Ninguno adicional. |
3 | Número | Ninguno adicional. |
4 | Verificación | Ninguno adicional. |
5 | Lectura de medidor | Requiere id_unit o unit_description (ver Opcionales). Si la tarea tiene activos vinculados, la respuesta puede incluir message: "ERROR_CONFIG_METERS_ASSETS". |
6 | Localización GPS | Ninguno adicional. |
7 | Lista | Requiere dropdown_options con mínimo 2 elementos (ver Opcionales). |
8 | Fecha y hora | Ninguno adicional. |
Opcionales
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
is_required | booleano | Opcional | Default: false. |
attachments_required | booleano | Opcional | Default: false. |
task_form_item_group_description | texto | Opcional | Nombre del grupo/parte. Si se provee, se busca un grupo similar (fuzzy match); si no existe, se crea automáticamente. |
id_unit | entero | Opcional (requerido si id_task_form_item_type = 5 y no se envía unit_description) | Id de unidad de medida en companies.units. Si no existe, retorna 422. |
unit_description | texto | Opcional (requerido si id_task_form_item_type = 5 y no se envía id_unit) | Descripción de unidad; si no hay coincidencia por similitud, se crea automáticamente. |
dropdown_options | array | Opcional (requerido si id_task_form_item_type = 7, mínimo 2 elementos) | Cada elemento: { "description": string }. |
iterations | objeto | Opcional | Solo aplica si is_cyclical = true (a nivel de la petición completa). Formato: { "iteration_1": true, "iteration_3": true, ... }. Si algún iteration_n tiene n > num_iterations, retorna 400. Si se omite o se envía vacío, la subtarea no participa en ninguna iteración. |
Parámetros de salida
| Parámetro | Tipo | Descripción |
|---|---|---|
id | entero | Id generado para la subtarea creada. |
id_task | entero | Id de la tarea a la que pertenece. |
id_task_form_item_type | entero | Tipo de subtarea. |
description | texto | Descripción de la subtarea. |
order_number | entero | Orden asignado automáticamente por el servidor. |
is_required | booleano | Si la subtarea es obligatoria. |
attachments_required | booleano | Si requiere adjuntos. |
id_task_form_item_group | entero | Id del grupo/parte asociado (creado o reutilizado). |
iterations | objeto | Iteraciones en las que participa la subtarea. |
dropdown_options | array | Opciones de lista (solo tipo 7). |
message | texto | ERROR_CONFIG_METERS_ASSETS cuando la tarea tiene activos vinculados y se agrega una subtarea tipo 5 (medidor); requiere configuración adicional por activo. |
total | entero | Número de activos afectados — presente solo junto con ERROR_CONFIG_METERS_ASSETS. |
Errores
| Código | Causa |
|---|---|
400 | id_task no provisto; is_cyclical no provisto; is_cyclical=true sin num_iterations; num_iterations ≤ 0; subtasks vacío o ausente; id_task_form_item_type fuera de 1–8; description vacía; tipo 5 sin id_unit ni unit_description; tipo 7 con menos de 2 dropdown_options o alguna opción sin description; algún iteration_n con n > num_iterations. |
401 | Sin autenticación. |
403 | Sin permiso edit sobre TASKS > PLAN_TASKS. |
404 | id_task no existe. |
409 | is_cyclical o num_iterations del body no coincide con el estado real de la tarea. |
415 | Content-Type distinto de application/json. |
422 | id_unit inexistente en companies.units. |
Ejemplo
Request body (tarea cíclica, 4 iteraciones)
{
"id_task": 1001,
"is_cyclical": true,
"num_iterations": 4,
"subtasks": [
{
"id_task_form_item_type": 1,
"description": "Describe el procedimiento realizado",
"iterations": { "iteration_4": true },
"is_required": false,
"attachments_required": false
},
{
"id_task_form_item_type": 5,
"description": "Lectura de presión hidráulica",
"task_form_item_group_description": "Sistema Hidráulico",
"id_unit": 42,
"iterations": { "iteration_1": true, "iteration_2": true, "iteration_3": true, "iteration_4": true },
"is_required": true,
"attachments_required": false
},
{
"id_task_form_item_type": 7,
"description": "Estado general del equipo",
"task_form_item_group_description": "Inspección General",
"dropdown_options": [
{ "description": "Bueno" },
{ "description": "Regular" },
{ "description": "Malo" }
],
"iterations": { "iteration_2": true, "iteration_4": true },
"is_required": true,
"attachments_required": true
}
]
}Response 200
200{
"success": true,
"message": "200",
"data": [
{
"id": 501,
"id_task": 1001,
"id_task_form_item_type": 1,
"description": "Describe el procedimiento realizado",
"order_number": 1,
"is_required": false,
"attachments_required": false,
"id_task_form_item_group": null,
"iterations": { "iteration_4": true },
"dropdown_options": null
},
{
"id": 502,
"id_task": 1001,
"id_task_form_item_type": 5,
"description": "Lectura de presión hidráulica",
"order_number": 2,
"is_required": true,
"attachments_required": false,
"id_task_form_item_group": 12,
"iterations": { "iteration_1": true, "iteration_2": true, "iteration_3": true, "iteration_4": true },
"dropdown_options": null
},
{
"id": 503,
"id_task": 1001,
"id_task_form_item_type": 7,
"description": "Estado general del equipo",
"order_number": 3,
"is_required": true,
"attachments_required": true,
"id_task_form_item_group": 13,
"iterations": { "iteration_2": true, "iteration_4": true },
"dropdown_options": [
{ "id": 1, "description": "Bueno" },
{ "id": 2, "description": "Regular" },
{ "id": 3, "description": "Malo" }
]
}
],
"total": 3
}Response — subtarea tipo medidor en tarea con activos vinculados
{
"success": true,
"message": "ERROR_CONFIG_METERS_ASSETS",
"data": [
{
"id": 504,
"id_task": 1001,
"id_task_form_item_type": 5,
"description": "Lectura de nivel de aceite",
"order_number": 4,
"is_required": true,
"attachments_required": false,
"id_task_form_item_group": null,
"iterations": {},
"dropdown_options": null
}
],
"total": 3
}Definición OpenAPI
{
"openapi": "3.1.0",
"info": {
"title": "tareas",
"version": "1-Es"
},
"servers": [
{
"url": "https://app.fracttal.com/api/tasks_subtasks"
}
],
"security": [
{}
],
"paths": {
"/": {
"post": {
"summary": "Crear subtareas en una tarea de un plan de tareas",
"description": "",
"operationId": "crear-subtareas-en-una-tarea-de-un-plan-de-tareas",
"deprecated": false,
"security": [],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": ["id_task", "is_cyclical", "subtasks"],
"properties": {
"id_task": { "type": "integer" },
"is_cyclical": { "type": "boolean" },
"num_iterations": { "type": "integer" },
"subtasks": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": ["id_task_form_item_type", "description"],
"properties": {
"id_task_form_item_type": { "type": "integer", "minimum": 1, "maximum": 8 },
"description": { "type": "string" },
"is_required": { "type": "boolean", "default": false },
"attachments_required": { "type": "boolean", "default": false },
"task_form_item_group_description": { "type": "string" },
"id_unit": { "type": "integer" },
"unit_description": { "type": "string" },
"dropdown_options": {
"type": "array",
"items": { "type": "object", "properties": { "description": { "type": "string" } } }
},
"iterations": { "type": "object", "additionalProperties": { "type": "boolean" } }
}
}
}
}
}
}
}
},
"responses": {
"200": { "description": "Subtareas creadas correctamente" },
"400": { "description": "Bad Request" },
"401": { "description": "Unauthorized" },
"403": { "description": "Forbidden" },
"404": { "description": "Not Found" },
"409": { "description": "Conflict" },
"415": { "description": "Unsupported Media Type" },
"422": { "description": "Unprocessable Entity" }
}
}
}
},
"x-readme": {
"headers": [],
"explorer-enabled": false,
"proxy-enabled": true
},
"x-readme-fauxas": true
} 200