308 lines
12 KiB
Markdown
308 lines
12 KiB
Markdown
# Módulo DTF no PCP — especificação de implementação
|
||
|
||
> Para o Wagner. Consolida o desenho depois das reuniões com os designers e com
|
||
> a sala de impressão em 02/09/2026.
|
||
> Complementa o `README.md` (arquitetura) e o código em `portal/`, `agente/` e
|
||
> `kanban/`.
|
||
|
||
---
|
||
|
||
## O que mudou depois das reuniões
|
||
|
||
Sete decisões vieram da equipe e **já estão refletidas no código**. Se algo no
|
||
código parecer estranho, provavelmente é uma delas.
|
||
|
||
| Item | Era | Ficou | Quem definiu |
|
||
|---|---|---|---|
|
||
| Reserva ao puxar | 15 min | **3 min** | sala |
|
||
| Puxar trabalho | até 30 min | **um pedido por vez** | sala |
|
||
| Marcadores de duração | seriam apagados | **viram campo `minutos_maquina`** | sala |
|
||
| Hot folder em rede | a confirmar | **aceita** | sala |
|
||
| Production Manager | a confirmar | **centraliza, mas o PC central precisa de mais capacidade** | sala |
|
||
| Licenças do Flexi | a confirmar | **por PC** | sala |
|
||
| Meta de retrabalho | 0,4% por causa | **rever: a sala prefere meta geral** | sala |
|
||
|
||
---
|
||
|
||
## Números que a equipe deu e que entram no cálculo
|
||
|
||
| Dado | Valor | De onde veio |
|
||
|---|---|---|
|
||
| Arquivos que chegam usáveis | **30%** | designers |
|
||
| Tempo para tratar arquivo bom | **3 minutos** | designers |
|
||
| Tempo para tratar arquivo ruim | **1h30** | designers |
|
||
| Formatos que mais chegam | **PNG e PDF** | designers |
|
||
| PDF que chega | **vetorial** | designers |
|
||
| SPOT | **sempre igual** | designers |
|
||
| Cores que sempre dão problema | azul, vermelho, castanho, laranja, verde — **secundárias** | sala |
|
||
| Prova de cor hoje | **não mandam para ninguém** | sala |
|
||
| Como o operador sabe o próximo | **notinha do pedido** | sala |
|
||
| Tempos de setup | **"não temos informação"** | sala |
|
||
|
||
**O de 30% é o mais consequente.** Sete de cada dez arquivos passam pelo
|
||
designer. Se o pré-flight barrar metade dos ruins na entrada, são ~3,5 arquivos
|
||
em 10 que deixam de consumir tempo de arte.
|
||
|
||
---
|
||
|
||
## Fases de implementação
|
||
|
||
Cada fase entrega valor sozinha. **Não espere a fase 4 para colocar algo no ar.**
|
||
|
||
### Fase 1 · Limpeza do Tiny — pode começar hoje
|
||
|
||
Não depende de nada nem de ninguém.
|
||
|
||
- [ ] Criar os marcadores `DTF-PRODUCAO`, `DTF-PRONTO` e `DTF-PROVA-COR`
|
||
- [ ] Tirar da **lista de sugestão** as variações digitadas à mão: `inicio 14:45`,
|
||
`inicio13:34`, `1hrs`, `3h`, `+30min de correcao` e as demais
|
||
- [ ] **Não apagar do histórico dos pedidos** — só da lista de opções
|
||
- [ ] **Preservar** `30 min`, `1 hora` e `3 horas`: são estimativa de máquina e
|
||
viram o campo `minutos_maquina`
|
||
|
||
### Fase 2 · Portal e robô — recebe 24h sozinho
|
||
|
||
Entrega valor sem o kanban existir.
|
||
|
||
- [ ] Contratar VPS, storage S3 e o subdomínio (ver README)
|
||
- [ ] Webhook do Tiny → cria token → dispara link no WhatsApp
|
||
- [ ] Página de upload com campo de repetição e prévia da montagem
|
||
- [ ] URL pré-assinada · upload em partes até **5 GB**
|
||
- [ ] Pré-flight (`preflight.py` pronto)
|
||
- [ ] Normalização: vetor → PDF, raster → TIF, CMYK → RGB
|
||
- [ ] Montagem empilhada · fatiamento em 20 m · carimbo com QR de 20 mm
|
||
- [ ] ClamAV em segundo plano
|
||
- [ ] Retenção de 30 dias · artes para recompra, 12 meses
|
||
|
||
### Fase 3 · Agente — o arquivo cai na pasta sozinho
|
||
|
||
- [ ] Serviço no servidor da fábrica (NSSM ou systemd)
|
||
- [ ] Webhook + polling de 60 s
|
||
- [ ] Download com verificação de hash
|
||
- [ ] Heartbeat a cada 5 min · alerta se sumir por 15
|
||
|
||
### Fase 4 · Kanban como aba do PCP
|
||
|
||
- [ ] Quadro com as 7 colunas e cronômetro por card
|
||
- [ ] Painel das 6 máquinas com **indicador vermelho de ocupada**
|
||
- [ ] `puxar próximo` — reserva de 3 min, um pedido por vez
|
||
- [ ] `devolver à fila` — volta ao topo
|
||
- [ ] Campo `minutos_maquina` no card, com sugestão automática
|
||
- [ ] Retrabalho: abertura, classificação de causa, autorização
|
||
- [ ] Painel com filtros de período
|
||
- [ ] Endpoints de relatório: etapas, impressão, aproveitamento, retrabalho
|
||
|
||
### Fase 5 · Duas semanas medindo
|
||
|
||
**Não pule.** É o que decide se vale o terceiro turno.
|
||
|
||
O que sai depois de duas semanas rodando:
|
||
- tempo real de cada etapa
|
||
- metros/hora reais por máquina
|
||
- quanto do tempo do designer é retrabalho de arquivo ruim
|
||
- retrabalho medido contra o que a sala achava que era
|
||
|
||
---
|
||
|
||
## Funcionalidades, uma a uma
|
||
|
||
### Portal do cliente
|
||
|
||
**Link com token.** Um por pedido, UUID v4, 7 dias de validade. O token já
|
||
carrega o número do pedido no Tiny — o cliente não digita nada.
|
||
|
||
**Upload direto para o storage.** URL pré-assinada, em partes, até 5 GB. O
|
||
arquivo nunca passa pelo VPS.
|
||
|
||
**Campo de repetição.** O cliente sobe uma arte e informa quantas vezes repetir.
|
||
O robô empilha. É o trabalho braçal que hoje o designer faz à mão.
|
||
|
||
**Prévia da montagem.** Mostra como a folha ficou antes de fechar o pedido.
|
||
Montagem **empilhada**, sem encaixe lado a lado — decisão do Marcus.
|
||
|
||
**Gabarito 57 × 97 cm** para download. Os 30 mm do rodapé são do carimbo.
|
||
|
||
**Resposta na hora.** Aprovado ou recusado com o motivo em português. **O relógio
|
||
do prazo só começa quando a arte é aprovada.**
|
||
|
||
### Robô de pré-flight
|
||
|
||
Ordem: **normalizar → validar → repetir → fatiar → carimbar.**
|
||
|
||
| Verificação | Limite | Ação |
|
||
|---|---|---|
|
||
| Canal de transparência | obrigatório | recusa |
|
||
| DPI efetivo na medida comprada | < 150 | recusa |
|
||
| Largura | > 57 cm | recusa |
|
||
| Formato | JPEG | recusa |
|
||
| DPI efetivo | 150 a 300 | aceita com aviso |
|
||
| Alfa parcial nas bordas | > 15% | aceita com aviso |
|
||
| CDR | — | **entra sem validar**, etiqueta "conferir" |
|
||
|
||
**DPI efetivo = pixels ÷ (cm comprados ÷ 2,54).** O metadado do arquivo mente.
|
||
|
||
**Normalização por natureza:** vetor sai PDF mantendo vetor, raster sai TIF com
|
||
alfa. CMYK vira RGB. **O original é sempre preservado** — pedido dos designers.
|
||
|
||
### Kanban
|
||
|
||
**Sete colunas:** arte recebida, arte tratada, aprovação de cor, fila,
|
||
imprimindo, correção, finalizado. **Não há coluna de aplicação** — a sala só
|
||
imprime o filme.
|
||
|
||
**Fila por ordem de chegada, sempre.**
|
||
|
||
**Puxar próximo.** Um botão por máquina. Reserva por 3 minutos; se não entrar em
|
||
Imprimindo nesse prazo, volta para a fila. **Um pedido por vez.**
|
||
|
||
**Indicador de máquina ocupada.** Círculo vermelho e botão desabilitado. Com seis
|
||
máquinas vendo o mesmo quadro, é o que evita dois operadores no mesmo arquivo.
|
||
|
||
**Devolver à fila.** Volta ao **topo**, não ao fim — o pedido já esperou uma vez.
|
||
|
||
**Cronômetro por card.** Tempo parado na coluna atual, em tempo real. Verde até
|
||
1h, amarelo até 3h, vermelho acima.
|
||
|
||
**Trilha por pedido.** Tempo em cada etapa e quanto do total foi só esperando.
|
||
|
||
### Estimativa de máquina
|
||
|
||
Campo `minutos_maquina` no card. **Herda os marcadores `30 min`, `1 hora` e
|
||
`3 horas` do Tiny**, que a sala confirmou serem estimativa.
|
||
|
||
- O sistema sugere pelo tamanho: `metros ÷ 20 × 60`
|
||
- Quem trata a arte ajusta **só quando foge do normal**
|
||
- É esse número que soma a fila contra a capacidade do dia
|
||
|
||
### Aprovação de cor
|
||
|
||
A sala confirmou que **hoje não manda prova para ninguém**, e que as cores
|
||
problemáticas são as secundárias: azul, vermelho, castanho, laranja e verde.
|
||
São cores fora do gamut CMYK — o monitor do cliente mostra o que a máquina não
|
||
reproduz.
|
||
|
||
Dispara sozinho em três casos: arquivo acima de 10 m, primeiro pedido do
|
||
cliente, ou cor detectada fora do gamut.
|
||
|
||
**Custo:** ~30 cm de filme, R$ 1,50. Uma reposição de 20 m custa R$ 99.
|
||
|
||
**Sugestão de implantação:** começar só com **cliente novo**. Os outros dois
|
||
gatilhos entram depois, senão metade dos pedidos vai esperar resposta e o prazo
|
||
morre.
|
||
|
||
### Retrabalho
|
||
|
||
SKU `CRRMP.TX.100CM`. **Mayana abre e classifica a causa; Thales ou Alexandre
|
||
autorizam** — eles confirmaram que acham justo, já que entra na meta deles.
|
||
|
||
**A causa fica travada depois de aberta.** Com o indicador atrelado a bônus,
|
||
haveria incentivo para reclassificar falha de máquina como culpa do cliente.
|
||
Quem discorda contesta, e a contestação fica registrada.
|
||
|
||
**⚠ A meta precisa ser redefinida.** A proposta era 0,4% por causa, somando 1,6%.
|
||
A sala respondeu que **"meta geral seria melhor"**. Antes de codificar, decidir
|
||
com o Marcus: meta única sobre o total da casa, ou por causa. O código tem
|
||
`META_POR_CAUSA` isolado justamente para isso.
|
||
|
||
### Integração com o Tiny
|
||
|
||
**Três marcadores, não sete.** O kanban é a fonte de verdade; o Tiny mostra o
|
||
estágio grosso para quem não abre o kanban.
|
||
|
||
| Movimento | Marcador |
|
||
|---|---|
|
||
| Imprimindo | `DTF-PRODUCAO` |
|
||
| Correção | `CORRECAO DTF` |
|
||
| Finalizado | `DTF-PRONTO` |
|
||
|
||
640 chamadas de API por dia em vez de 1.500.
|
||
|
||
### Mensagens ao cliente
|
||
|
||
| Quando | Mensagem |
|
||
|---|---|
|
||
| 1 hora sem arte | lembrete com o link · o pedido aparece como *faltando arquivo* |
|
||
| Arte recusada | motivo em português · o prazo não começou |
|
||
| Arte aprovada | qualidade em **% e DPI**, metragem, tempo estimado, horário previsto |
|
||
| Entrou em produção | aviso simples |
|
||
| Correção | motivo · **única que pede resposta** |
|
||
| Finalizado | pronto para retirada ou envio |
|
||
|
||
---
|
||
|
||
## O que ainda não pode ser codificado
|
||
|
||
### 1 · O SPOT automático
|
||
|
||
**Hipótese, não fato.** Os designers disseram que o SPOT é sempre igual; a sala
|
||
disse que "é possível criar um perfil só para isso". A documentação do Flexi 22
|
||
cita *transparency mask*, que gera o branco a partir da transparência de PNG e
|
||
TIF.
|
||
|
||
**Mas ninguém configurou ainda**, e a edição MiniTX é OEM.
|
||
|
||
O roteiro de teste está em `dtf-teste-branco-automatico.pdf`. Sete passos, uma
|
||
máquina, meia hora.
|
||
|
||
- **Se funcionar:** o arquivo vai do portal direto para a hot folder e o PC
|
||
central atende só exceções. A madrugada roda sem ninguém.
|
||
- **Se não funcionar:** o SPOT segue manual e todo pedido passa pelo PC central.
|
||
**A conta das 24 horas muda.**
|
||
|
||
### 2 · A capacidade do PC central
|
||
|
||
A sala confirmou que o Production Manager centraliza várias impressoras, **mas
|
||
que o PC central precisa de mais capacidade**. E as licenças do Flexi são **por
|
||
PC** — então centralizar o RIP exige licença lá.
|
||
|
||
Levantar antes de decidir: configuração atual do PC central, custo de uma
|
||
licença adicional, e quanto de memória o RIP consome num trabalho de 15 m.
|
||
|
||
### 3 · As regras de choke
|
||
|
||
Os designers **não responderam** os valores de choke nem a espessura mínima de
|
||
traço. Sem isso, a regra proposta — 2 px acima de 2 mm, 1 px de 1 a 2 mm,
|
||
nenhum abaixo de 1 mm — é chute informado.
|
||
|
||
**Só entra em código depois de validada com um arquivo real.**
|
||
|
||
### 4 · Metros/hora reais
|
||
|
||
Todo o cálculo de capacidade assume **20 m/h por máquina**. A sala não respondeu
|
||
o valor real, e disse que não tem informação sobre tempos.
|
||
|
||
Se o real for 14, a capacidade cai de 60.480 para 42.336 metros/mês e o plano
|
||
das 24 horas precisa ser refeito.
|
||
|
||
---
|
||
|
||
## Ressalvas honestas sobre o código
|
||
|
||
**`tiny.py` é chute informado.** Estrutura padrão de OAuth2 e endpoints v3, não
|
||
validado contra a documentação real. Está isolado de propósito: se o endpoint
|
||
for diferente, muda só ali.
|
||
|
||
**`carimbar()` precisa de teste visual.** A lógica está certa, mas posicionamento
|
||
de texto com pyvips sempre pede ajuste olhando o resultado impresso.
|
||
|
||
**O front do kanban usa dados fixos.** Precisa trocar por chamadas a
|
||
`/api/quadro` e `/api/mover`. O protótipo `dtf-kanban-treino.html` tem o layout e
|
||
o comportamento final.
|
||
|
||
**Nada instalado nos PCs da sala.** Decisão do Marcus. O navegador não abre
|
||
arquivo no FlexiPRINT — o desenho é miniatura no card mais botão que copia o
|
||
caminho, e File System Access API para mover arquivo pelo navegador.
|
||
|
||
---
|
||
|
||
## O que precisa de resposta antes da fase 4
|
||
|
||
1. Servidor da fábrica é Windows ou Linux?
|
||
2. A conta do Tiny já tem aplicação na API v3?
|
||
3. Confirmar na documentação do Tiny o endpoint de marcadores e o limite de
|
||
requisições por minuto
|
||
4. O número do WhatsApp migra para a API oficial da Meta?
|
||
5. Qual a latência da integração VNDA → Tiny? Define quando o link sai
|
||
6. Meta de retrabalho: geral ou por causa?
|
||
7. Configuração e licença do PC central, se for virar servidor de RIP
|