Pular para o conteúdo
Pular para o texto da página
LeIA Documentação

Produto

Nesta página (3 seções)

Telas

Jornada (13/09): do login do advogado ao sucesso do cliente

Web app responsivo, um código, desktop e celular. Sem login no hackathon (anotado como pós-hackathon). Ordem em que acontece; a coluna "hoje" aponta o template do serviço.

#TelaHoje (templates do serviço)
L2Início: Iniciar chat · Anexar PDF · Paineltela nova do serviço (captura de 13/09, 8h13); recebe logo e tema, sem landing separada
L3Anexar PDF com progresso por etapatarefa_nova.html (bloco "Pipeline em execução" e log de eventos)
L4Painel: documentos, status, filtrosindex.html (tema e textos; IP fora da tela)
L5Revisar: texto simples, trecho original, escolher perguntasparte de tarefa_nova.html (resumo e perguntas); editar e escolher ficam pós-hackathon
L6Aprovar e gerar link do clientetarefa_nova.html ("Link da cliente")
C1Cliente: início, apresentação e limitesleia/cliente.html, etapa boas-vindas (substitui dashboard.html na rota /t/{hash}); espera: cliente_view.html
C2Cliente: tópico n de Nleia/cliente.html, etapa "Ponto n de N" com trecho original (usa topicos se o serviço enviar; senão divide o resumo_md)
C3Cliente: dúvidaleia/cliente.html, gaveta "Tenho uma dúvida" (mesma rota /api/t/{hash}/chat)
C4Cliente: conferindoleia/cliente.html, uma pergunta por tela, múltipla escolha como o serviço gera hoje (abertas: pós-hackathon)
C5Cliente: confirmaçãoleia/cliente.html, etapa de resultado ("Entendimento registrado" ou "Vamos ver de novo"); o registro acontece no /quiz do serviço, então o botão "Confirmo que entendi" fica pós-hackathon
C6Cliente: comprovante (sucesso)leia/comprovante.html em /t/{hash_imutavel}/comprovante (QR, código, o que prova); pdf-assinado do serviço pode continuar
L7Painel: registrado, respostas, provatentativas de tarefa_nova.html + link para /verify/{hash_imutavel}
P1Verificação públicaleia/verify.html em /verify/{hash_imutavel} (JSON canônico, hash, prova .ots)
PósLogin do advogado (e-mail e senha ou social) e conferência da OAB: fora do hackathontarefa_detalhe.html (formulário de entrada do serviço) continua existindo; a auditora recebe as credenciais no README; não entra na jornada

As specs detalhadas continuam em design/screen-*.md (A0–A4 = L1–L7; C0–C6; P1).

Conciliação com os templates do serviço (13/09, 9h30)

Regra: nenhuma tela além das previstas acima. Cada arquivo recebido do serviço tem um destino; o que a interface acrescenta são só dois arquivos novos (comprovante e verificação) e a substituição da página da cidadã.

Template do serviçoO que éTela previstaDestino
index.htmlpainel de tarefas com filtros, reprocessar, chatL4fica; tema, textos, IP fora da lista
tarefa_nova.htmldetalhe da tarefa: pipeline, resumo, perguntas com gabarito, tentativas, PDFL3, L5, L6, L7fica; tema, textos, link "Ver registro público" nas tentativas aprovadas
cliente_view.htmlespera da cidadã ("Preparando seu documento", refresh 5 s)C1 (estado de espera)fica; tema e texto
dashboard.htmlpágina da cidadã inteira numa tela: resumo, 12 questões, modal de resultado, chatC1 a C6substituída por leia/cliente.html na mesma rota e com o mesmo contexto; arquivo fica no repositório como referência
login.htmlbancada "AI Forensics": chat investigador, payload, log, memória, contexto, protocolonenhumafica fora da jornada como Bastidores, só para a auditoria (D3: memória persistente, log por etapa); acessível pelo painel, sem link para a cidadã
tarefa_detalhe.htmlformulário de entrada (/login)Pósfica como está; credenciais da auditoria no README
tela "Início" (captura 8h13, sem arquivo em temp/)Iniciar chat, Anexar PDF, PainelL2fica; logo e uma linha de posicionamento; não se cria landing separada hoje

Telas que a interface acrescenta: comprovante (C6) e verificação pública (P1). Nada mais. A confirmação explícita (C5 com botão) fica no roadmap.

Onde cada tela vive no app (apps/web, ADR-0009, 13/09 10h)

TelaRota no appComponenteDados
Landing (tela 15)/app/page.tsxestática
C1 a C5/t/{hash}components/Journey.tsx (etapas: boas-vindas, ponto n de N, dúvida em gaveta, pergunta k de K, resultado)GET /api/t/{hash}, POST /quiz, POST /chat
C6/comprovante/{hash_imutavel}components/Receipt.tsxGET /verify/{hash_imutavel}?format=json
P1/verify/{hash_imutavel}components/Verify.tsxidem + proof.ots
L2 a L7, bastidores, loginserviço (FastAPI)templates do Carlos com tema e textos

A página apps/llm-service/templates/leia/cliente.html (mesma jornada, servida pelo FastAPI) é reserva da Entrega 4.

Telas v3 (13/09 à tarde, pedido do Daniel): contas, painéis, envio pela cidadã, dúvida ao advogado

TelaRota no appO que fazDados
A0/C0 Entrar ou criar conta/entrare-mail e senha; papel cidadã ou advogado; token Bearer guardado no aparelhoPOST /api/auth/cadastro, /login, GET /api/auth/me
A4 Painel do advogado/paineldocumentos enviados com estado, link da cliente, respostas e dúvidas abertas; "Enviar um documento"GET /api/tarefas
CH Meus documentos (cidadã)/paineldocumentos que ela enviou ou abriu; "Continuar", "Ver comprovante"; "Enviar meu documento"GET /api/tarefas
A3 Detalhe/painel/{id}etapa atual, tentativas, dúvidas da cliente com campo de respostaGET /api/tarefas/{id}, POST .../duvidas/{id}/responder
A1 Enviar documento/enviarPDF + título; advogado recebe o link da cliente; cidadã vai direto para a jornadaPOST /api/tarefas
C3 Dúvidagaveta em /t/{hash}além do chat, "Enviar esta dúvida para o advogado" quando a tarefa tem advogado; cai no painel delePOST /api/t/{hash}/duvida
Documento e marcações/t/{hash}/documentotexto original com cada trecho marcado por classe (quem é quem, datas e valores, fatos, fundamentos, pedidos), lista das marcações com "Ver no texto", "O que a assistente concluiu" (sínteses com lastro), contagem de conferidas palavra por palavra; ligado da jornada e do detalhe do painelGET /api/t/{hash}/inferencias

Regra do produto: todo documento passa pela estruturação (workflow) antes do chat; a cidadã pode usar a plataforma sozinha (sem advogado) ou pelo link do advogado. Contrato: docs/API-V3-CONTRACT.md.

Plataforma e acesso

  • Um web app responsivo (desktop e celular). Instalar como aplicativo (PWA) é extra, não requisito.
  • Cidadã no celular. Aplicação web, opcionalmente instalável (manifesto, ícone, tela cheia), com service worker que guarda o shell e o conteúdo da sessão já carregado (tópicos, perguntas, áudio): se a rede cair, a cidadã continua lendo e ouvindo; respostas ficam em fila e sobem quando voltar. Alvos de toque ≥ 48 px, texto grande, navegação inferior com no máximo três ações, uma tela por tópico.
  • Advogado: versão desktop separada. Layout de painel (barra lateral, tabelas, revisão lado a lado do texto simples e do trecho original). Mesmo código, rota e layout próprios (/lawyer/...); funciona no celular, mas é desenhado para tela grande.
  • Login social (Google na V1; Apple e gov.br no roadmap) para os dois perfis, via Auth.js no app web:
    • Advogado: obrigatório. Primeiro acesso pede nome e número da OAB/UF (conferência no Cadastro Nacional dos Advogados fica para o roadmap; responde ao "golpe do falso advogado" do canvas).
    • Cidadã: um toque no Android já logado no Google; vincula a sessão à conta para retomar depois e receber o comprovante. O link com token continua obrigatório (login não abre sessão de outra pessoa). Decisão pendente do time: manter "continuar sem conta" como alternativa de acessibilidade.
    • O serviço FastAPI não faz login: recebe do app web um user_ref pseudonimizado (hash do e-mail com pepper) e a chave interna do app. No registro público nunca vai e-mail nem nome.

Regras de tela

Paleta e contraste em brand/README.md: marinho #081820, off-white #F0F0E8, teal da marca #38A8A8 só no escuro, teal de ação #1F7373 nos botões sobre fundo claro. Um tópico por tela; três ações por tela no máximo; sem tempo limite; texto grande; nada em caixa alta; sem vocabulário de prova ("nota", "errado"). Chamadas de API em LLM-API-CONTRACT.md.

#TelaRotaElementosChamadasEntrega
A0Advogado: entrar/lawyer/loginbotão "Entrar com Google"; primeiro acesso: nome, OAB/UFAuth.jsV1
C0Cidadã: entrar/c/{token}/loginnome do advogado e do documento; "Entrar com Google" (um toque); por que pedimos (voltar depois, receber o comprovante)Auth.jsV1
A1Advogado: enviar documento/lawyer/newseletor de tipo, upload, progresso por etapa ("lendo", "separando cláusulas", "escrevendo em linguagem simples")POST /documents, POST /documents/{id}/explain, POST /documents/{id}/questionsV1
A2Advogado: revisar e aprovar/lawyer/documents/{id}lista de seções (título, texto simples editável, "ver trecho original"), perguntas sugeridas com seleção de 2 a 3, botão "Aprovar e gerar link", link copiávelPOST /sessionsV1
C1Cliente: início/c/{token}nome do advogado e do documento, apresentação da IA ("sou uma assistente automática; explico o que está escrito; não sou advogada"), botão único "Começar"GET /sessions/{id}V1
C2Cliente: tópico n de N/c/{token}/topics/{n}ícone e título, texto simples, "ver trecho original" (colapsado), progresso "Tópico 2 de 6", ações: "Entendi, próximo", "Tenho uma dúvida", ouvir (V2)dados da sessão; V2: POST /ttsV1
C3Cliente: dúvida/c/{token}/ask3 chips de exemplo, campo de texto (V2: microfone), resposta com o trecho citado ou aviso "não está no seu documento, vou anotar para o advogado"POST /sessions/{id}/chatV1
C4Cliente: conferindo o entendimento/c/{token}/questions/{k}frase de teach-back, pergunta, campo de resposta (V2: voz com transcrição editável), "Não sei, explica de novo", feedback em duas partes e nova explicação quando insuficientePOST /sessions/{id}/answersV1
C5Cliente: confirmação/c/{token}/confirmlista "o que você entendeu" com ✓, pendências para o advogado, botão "Confirmo que entendi"POST /sessions/{id}/confirmV1
A3Advogado: validar/lawyer/sessions/{id}respostas, notas, dúvidas anotadas, campo de observações, botão "Validar e gerar registro"POST /sessions/{id}/validate, POST /sessions/{id}/finalizeV1 (hash), V2 (ancoragem)
C6Comprovante/c/{token}/receipthash, data e hora, link do registro público, QR, texto "este código prova que você respondeu estas perguntas neste dia; não contém seu documento nem suas respostas", contato do advogadodados da sessãoV2
P1Verificação pública/verify/{id}hash, JSON canônico, transação, explorer, instrução para recalcular com sha256sumGET /verify/{id}V2
A4Advogado: painel/lawyerlista de sessões com status e pendênciasGET /sessionsProduto

Estados comuns: carregando (skeleton, sem spinner acima de 3 s), erro ("deu um problema do nosso lado; seu progresso está salvo; tentar de novo"), banner fixo com os limites da IA e botão "Falar com o advogado" em todas as telas do cliente.

Fonte: docs/SCREENS.md (abre no GitHub)

Voltar ao topo