*MCP › Referencia › Operaciones › Partes de reparación*

# Crear un parte de reparación

> Abre un ticket de reparación con sus líneas.

`unitPrice` es lo que se presupuesta al CLIENTE; el coste de reparación para la empresa no entra ni sale por esta API. `incidentIds` convierte incidencias existentes y el servidor vincula cada línea con la suya. Detrás del add-on `incidence`: sin él, 402. Devuelve el ticket de reparación completo, la misma proyección que su GET.

HERRAMIENTA `filmo_repair_tickets_create` · `repair-tickets:write` · 120/min · Puede requerir un add-on

## Argumentos

| Nombre | Tipo | Obligatorio | Descripción |
| --- | --- | --- | --- |
| `date` | string<date-time> | No | Fecha del ticket de reparación, en ISO 8601 con desplazamiento. Por defecto, hoy. |
| `orderId` | string | No | Pedido del que vuelve el material roto. |
| `contactId` | string | No | Cliente facturado por la reparación. |
| `lines` | object[] | Sí | Líneas del ticket de reparación. Al menos una. |
| `lines.id` | string | No | Línea existente que se modifica. Omítelo para una línea nueva. |
| `lines.description` | string | Sí | Qué hay que reparar. |
| `lines.diagnosis` | string | No | Diagnóstico técnico. |
| `lines.entityType` | string | No | Tipo de elemento que se repara: item, space o kit. null u omitido para una línea libre. `item`, `space`, `kit` |
| `lines.entityId` | string | No | Elemento que se repara. |
| `lines.serializedItemId` | string | No | Unidad física concreta, cuando se repara un artículo serializado. |
| `lines.incidentId` | string | No | Incidencia que origina esta línea. |
| `lines.quantity` | number | No | Unidades afectadas. Por defecto, 1. |
| `lines.unitPrice` | string | No | Precio unitario neto presupuestado al cliente, como cadena decimal. |
| `lines.notes` | string | No | Notas de la línea. |
| `notes` | string | No | Notas del ticket de reparación. |
| `incidentIds` | string[] | No | Incidencias que convierte este ticket de reparación. El servidor vincula cada línea con su incidencia. |
| `idempotencyKey` | string | No | Clave de idempotencia elegida por el cliente (se recomienda un UUID). Repetir la misma clave con los mismos argumentos en 24 h devuelve la respuesta almacenada sin volver a ejecutar; con argumentos distintos responde 422. Es la forma segura de reintentar tras un fallo de red. |
| `ifMatch` | string | No | Bloqueo optimista: el meta.etag que obtuviste de la lectura de detalle de este recurso (o "*"). Si el recurso ha cambiado desde entonces, la llamada falla con 412 precondition_failed antes de escribir nada; léelo de nuevo y reintenta. Omítelo para escribir sin condiciones. |

## Resultado

En un éxito el resultado lleva `structuredContent` con `data` y `meta`. Estos son los atributos de `data`.

| Nombre | Tipo | Descripción |
| --- | --- | --- |
| `id` | string | Identificador único del ticket. |
| `number` | string | Número de ticket, por ejemplo "RT-2026-0001". |
| `date` | string<date-time> | Fecha de emisión en ISO 8601 UTC. |
| `status` | string | Estado del ticket en su ciclo de vida. `draft`, `sent`, `partially_converted`, `fully_invoiced`, `closed` |
| `orderId` | string | Identificador del pedido del que procede; null si se creó de forma independiente. |
| `orderNumber` | string | Número del pedido del que procede; null si se creó de forma independiente. |
| `contactId` | string | Identificador del cliente responsable; null si no se ha asignado ninguno. |
| `contactName` | string | Nombre del cliente responsable; null si no se ha resuelto. |
| `subTotal` | string | Suma de las líneas antes de impuestos, como cadena decimal "1234.50". |
| `taxTotal` | string | Total de impuestos, como cadena decimal "1234.50". |
| `total` | string | Total con impuestos, como cadena decimal "1234.50". |
| `totalLines` | integer | Número de líneas del ticket. |
| `notes` | string | Observaciones generales; null si no tiene. |
| `createdAt` | string<date-time> | Fecha de creación en ISO 8601 UTC. |
| `updatedAt` | string<date-time> | Fecha de la última modificación en ISO 8601 UTC. |
| `projectId` | string | Identificador del proyecto asociado; null si no tiene. |
| `lines` | object[] | Líneas del ticket. |
| `lines.id` | string | Identificador único de la línea. |
| `lines.entityType` | string | Tipo de elemento que se repara: item, serializedItem (una unidad concreta), space o kit; null para una línea libre (un servicio, un cargo). `item`, `serializedItem`, `space`, `kit` |
| `lines.entityId` | string | Identificador del elemento que se repara; null si es una línea libre. |
| `lines.entityName` | string | Nombre del elemento que se repara; null si no se ha resuelto. |
| `lines.description` | string | Qué hay que reparar. |
| `lines.diagnosis` | string | Diagnóstico técnico; null si no se ha registrado ninguno. |
| `lines.quantity` | number | Unidades afectadas; null si no aplica. |
| `lines.unitPrice` | string | Precio unitario NETO presupuestado al cliente, como cadena decimal "1234.50". No es el coste de reparación: ese no se publica. null si la línea no tiene precio. |
| `lines.incidentId` | string | Identificador de la incidencia que originó esta línea; null si no procede de ninguna. |
| `lines.notes` | string | Notas de la línea; null si no tiene. |
| `sourceIncidentIds` | string[] | Identificadores de las incidencias que originaron el ticket. |
| `customFields` | object<string, any> | Valores de los campos personalizados por identificador de campo personalizado; las definiciones están en `/api/v1/custom-fields`. |

*Llamada · filmo_repair_tickets_create*

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "filmo_repair_tickets_create",
    "arguments": {
      "lines": [
        {
          "id": "id_8f2a1c",
          "description": "<description>",
          "diagnosis": "<diagnosis>",
          "entityType": "item",
          "entityId": "enti_8f2a1c",
          "serializedItemId": "seri_8f2a1c",
          "incidentId": "inci_8f2a1c",
          "quantity": 1,
          "unitPrice": "1234.50",
          "notes": "<notes>"
        }
      ]
    }
  }
}
```

*Resultado (generado desde el esquema)*

```json
{
  "structuredContent": {
    "data": {
      "id": "id_8f2a1c",
      "number": "<number>",
      "date": "2026-09-01T08:00:00Z",
      "status": "draft",
      "orderId": "orde_8f2a1c",
      "orderNumber": "<orderNumber>",
      "contactId": "cont_8f2a1c",
      "contactName": "Example",
      "subTotal": "1234.50",
      "taxTotal": "1234.50",
      "total": "1234.50",
      "totalLines": 1,
      "notes": "<notes>",
      "createdAt": "2026-09-01T08:00:00Z",
      "updatedAt": "2026-09-01T08:00:00Z",
      "projectId": "proj_8f2a1c",
      "lines": [
        {
          "id": "id_8f2a1c",
          "entityType": "item",
          "entityId": "enti_8f2a1c",
          "entityName": "Example",
          "description": "<description>",
          "diagnosis": "<diagnosis>",
          "quantity": 1,
          "unitPrice": "1234.50",
          "incidentId": "inci_8f2a1c",
          "notes": "<notes>"
        }
      ],
      "sourceIncidentIds": [
        "sour_8f2a1c"
      ],
      "customFields": {
        "key": "<key>"
      }
    },
    "meta": {
      "idempotencyKey": "<the key you sent, or the one the server generated>",
      "rateLimit": {
        "limit": 120,
        "remaining": 119,
        "reset": 42
      }
    }
  }
}
```

## La misma operación por REST

Esta herramienta ejecuta [`POST /api/v1/repair-tickets`](https://docs.filmo.io/es/rest-api/endpoint-reference/repair-tickets/create-a-repair-ticket).

---

URL canónica: https://docs.filmo.io/es/mcp/tools/repair-tickets/filmo-repair-tickets-create  
Última actualización: 2026-10-25