# Esteiras (CorePipeline)
> Quadro kanban e lista para models com etapas — filtros, inclusão, modal de ticket com abas, ações padrão de aprovação e status de trabalho, e ações próprias.
`CorePipeline` renderiza uma esteira operacional sobre uma model com campo de etapa. A regra de transição vive no backend ([central.process.json](/docs/backend/esteiras-e-processos)); a UI é a projeção.
```tsx title="frontend/src/pages/TicketsPage.tsx"
import { CorePipeline } from "@oondemand/oon-core-front";
export function TicketsPage() {
return (
);
}
```
## Props
| Prop | Descrição |
|---|---|
| `model`, `label`, `endpoint` | Model dos cards, título e CRUD |
| `stageField` | Campo que define a coluna/etapa |
| `stages` | Etapas fixas; se omitido, derivadas do enum de `stageField` |
| `titleField` | Campo exibido no card |
| `filters` | Mesmo contrato de filtros das coleções |
| `create` | `{ enabled, label?, initialTab?, defaultStage?, defaultValues? }` |
| `viewModes`, `defaultView` | `board` e/ou `list` |
| `list` | Colunas do modo lista |
| `form` | Overrides de campos (inclui `referenceFilters`) |
| `relations`, `ticketModal` | Modal do ticket com o mesmo contrato de abas do [detailModal](/docs/frontend/modal-de-detalhe) |
| `defaultActions` | Ações padrão (ou `false`) |
| `ticketActions` | Ações específicas do App |
## Exemplo completo
```tsx
```
## Ações padrão
O Core habilita dois grupos quando a metadata possui os campos necessários:
- **Aprovação** — `Aprovar` move para a próxima etapa; `Recusar` retorna à anterior. Etapas negativas (`Cancelado`, `Rejeitado`) ficam fora do fluxo automático.
- **Status de trabalho** — usa `statusTrabalho` e reconhece `Aguardando início`, `Trabalhando` e `Revisar/Revisão`.
```ts
defaultActions={{ approval: true, workStatus: true, workStatusField: "statusTrabalho", excludedStages: ["Arquivado"] }}
```
Use `defaultActions={false}` para desabilitar ambos. Não repita essas ações em `ticketActions`.
## Ações próprias
| `type` | Efeito |
|---|---|
| `transition` | Atualiza o campo informado (normalmente a etapa) |
| `setField` | Atualização rápida de um campo operacional |
| `formAction` | Carrega valores (`loadEndpoint`), abre formulário e envia ao `endpoint` |
| REST / navegação | Continuam disponíveis |
`hiddenWhen`, `disabledWhen`, confirmações, permissões e `refresh` seguem o contrato de ações do Core.
## Evento para métricas
A cada ação operacional concluída o Core dispara o evento de navegador `oon:pipeline-action` com tipo, registro, campo, valor anterior, valor seguinte e horário — base para SLA, tempo por atividade e produtividade.
```ts
window.addEventListener("oon:pipeline-action", (event) => {
console.info((event as CustomEvent).detail);
});
```
## Como view declarativa
```tsx
import { definePipelineView } from "@oondemand/oon-core-front";
ui: { views: [definePipelineView({ model: "Ticket", label: "Tickets", path: "/tickets", stageField: "etapa" })] }
```
Fonte: https://sdk.oonapps.com/docs/frontend/esteiras