# 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