# Tickets, pastas, estados e etiquetas no Todomator

> O modelo de dados do Todomator: o que contém um ticket, os seis estados, quem pode ver um ticket, pastas para clientes e projetos, etiquetas, comentários, ligações e anexos.

Framework: todomator
Product: Todomator (todomator@1.7)
Language: pt
Content-SHA256: 8a7c98143991a7603d96962fa8cbf2cc34ea11c9bd80c97fe657cf8d634b6c3b
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

O centro do Todomator é o **ticket** (tabela `tbl_ticket`, esquema `Tickets` em `schemas/tickets.js`). Tudo o resto organiza tickets ou depende deles.

## O que contém um ticket

| Campo | Significado |
|---|---|
| `name` | o título (obrigatório) |
| `statusid` | o estado; um ticket novo é `pending` a menos que diga outra coisa |
| `folderid` | a pasta (cliente ou projeto) a que pertence |
| `ownerid`, `userid`, `watcherid` | o autor, as pessoas atribuídas e as pessoas que apenas o seguem |
| `ispublic` | visível para todos; um ticket público não tem pessoas atribuídas |
| `ispriority`, `isbillable` | uma marca de prioridade e um indicador de faturável |
| `markdown`, `html` | o conteúdo (a interface usa Markdown) |
| `tags` | uma lista de etiquetas |
| `date`, `deadline` | o dia do ticket (hoje por predefinição) e um prazo opcional |
| `estimate`, `worked` | a estimativa e os minutos já trabalhados ([registo de tempo](/en/todomator/time-tracking/)) |
| `reference`, `source` | texto livre para ligar o ticket a algo externo |
| `parentid` | o ticket pai, para subtarefas |
| `attachments` | os ficheiros do ticket |
| `attrs` | dados JSON livres |
| `callback` | um endereço que recebe o ticket quando muda ([API](/en/todomator/create-tickets-with-the-api/)) |

## Os seis estados

A tabela `cl_status` é criada com: `pending` (Pending), `open` (In progress), `review` (Review), `postponed` (Postponed), `note` (Note) e `closed` (Closed). Os nomes são traduzidos para o idioma do utilizador.

## Quem pode ver um ticket

Um ticket é visível para o seu proprietário, para as pessoas em `userid`, para as pessoas em `watcherid` e para todos quando `ispublic` está definido. A lista de pastas que um utilizador vê é limitada da mesma forma: uma pasta só aparece se o utilizador puder ver um ticket nela (os utilizadores com `sa` veem todas). A lista de tickets aceita `type` (por exemplo `pending`, `postponed`, `review`, `assigned`, `note`, `unread` ou `all`), `q` (pesquisa), `folderid`, `date`, `skip` e `limit` (10 por predefinição).

## Pastas e etiquetas

Uma **pasta** tem nome, ícone, cor, cliente, e-mail e telefone, e indicadores: `isbillable` (os tickets novos herdam-no), `isprivate`, `ispinned`, `isarchived` e `isdisabled`. Só as pessoas com a permissão `admin` (ou os administradores) gerem pastas. Uma **etiqueta** tem nome, cor e ícone e pode pertencer a uma pasta.

## À volta do ticket

- **Comentários** (`Comments|create`, `Comments|update`, `Comments|remove`): texto Markdown anexado a um ticket.
- **Marcas de não lido e marcadores**: cada utilizador tem o seu próprio estado de não lido e marcadores para um ticket.
- **Ligações** entre tickets e **clonagem** de um ticket.
- **Histórico e registos** das alterações de um ticket.
- **Anexos**: `POST /upload/` aceita até 5 MB por pedido. O endereço de um ficheiro é assinado (`/download/<id>-<signature>.<ext>`): imagens, vídeo e PDF abrem-se no navegador e os outros tipos são descarregados.
- **Atualizações em direto**: o WebSocket envia um evento `refresh` apenas às pessoas que podem ver o ticket e diz às outras quem está a ver um ticket neste momento.
