> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devmob.app.br/llms.txt
> Use this file to discover all available pages before exploring further.

# ticket.boarded

> Evento emitido após embarque de ticket

`ticket.boarded` é emitido depois que um [Ticket](/data-modelling/sales/ticket) é embarcado.

Handlers usam este evento para executar efeitos assíncronos fora do fluxo síncrono.

## Detalhes do Evento

| Propriedade    | Valor                     |
| -------------- | ------------------------- |
| **Tipo**       | `ticket.boarded`          |
| **Origem**     | Atualização de Ticket     |
| **Publicação** | Após commit do Ticket     |
| **Quando**     | `boardedAt` é preenchido. |

## Handlers

| Handler                            | Responsabilidade               | Dados usados | Execução    |
| ---------------------------------- | ------------------------------ | ------------ | ----------- |
| `record-ticket-boarding-analytics` | Atualiza métricas de embarque. | `data`       | Assíncrona. |

## Payload

| Campo  | Tipo     | Descrição                 |
| ------ | -------- | ------------------------- |
| `data` | `Ticket` | Entidade Ticket embarcada |

## Regras dos handlers

* Handlers não rodam na transação que publicou o Ticket.
* Falha em handler não desfaz o Ticket.
* Cada handler deve ser idempotente.
* Novos handlers podem ser adicionados sem mudar o fluxo síncrono.

## Exemplo

```json theme={null}
{
  "type": "ticket.boarded",
  "data": {
    "ticketId": "0197a813-a9a6-7752-8173-d40a2a2d0ef0",
    "orderId": "0197a813-0fb9-7d42-9c81-50c0f6d9ae5a",
    "tripId": "0197a80f-2d8f-7710-b243-b67fb477a1c0",
    "tripItineraryId": "0197a810-87ce-7b60-9d80-660d0ee1c413",
    "seatId": "0197a80a-bc30-70c3-954f-657c74277162",
    "seatTypeId": "0197a80a-56f4-71cb-93a6-6e69d1506ef7",
    "passengerId": "0197a814-2460-74c2-a8d7-819a6a0d6f54",
    "seatPrice": 2500,
    "tripItineraryPrice": 8900,
    "price": 11400,
    "qrCode": "ticket:0197a813-a9a6-7752-8173-d40a2a2d0ef0:OAB-TCK-0001",
    "code": "OAB-TCK-0001",
    "snapshot": {
      "trip": {
        "departureAt": "2026-07-04T08:00:00.000Z",
        "estimatedArrivalAt": "2026-07-04T12:30:00.000Z"
      },
      "itinerary": {
        "fromStop": {
          "name": "Terminal Rodoviário Tietê",
          "stopOrder": 0,
          "arrivalAt": null,
          "departureAt": "2026-07-04T08:00:00.000Z"
        },
        "toStop": {
          "name": "Ribeirão Preto",
          "stopOrder": 2,
          "arrivalAt": "2026-07-04T12:30:00.000Z",
          "departureAt": null
        }
      },
      "seat": {
        "label": "01A",
        "floor": "FIRST",
        "row": 1,
        "column": "A",
        "side": "LEFT"
      },
      "seatType": {
        "name": "Executivo",
        "color": "#2563EB"
      },
      "passenger": {
        "name": "Mariana Costa",
        "document": "12345678909",
        "documentType": "CPF",
        "birthDate": "1992-04-18"
      }
    },
    "boardedAt": "2026-07-04T07:58:00.000Z",
    "issuedAt": "2026-07-03T16:02:00.000Z",
    "status": "BOARDED",
    "createdBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
    "createdAt": "2026-07-03T16:02:00.000Z",
    "updatedBy": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
    "updatedAt": "2026-07-03T16:02:00.000Z"
  }
}
```
