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

Produto

Nesta página (4 seções)

Casos de uso

Atualizado em 13/09/2026 com o produto no ar (v3: contas, painéis, revisão do advogado, dúvidas, comprovante). Os diagramas usam as rotas e os estados reais do serviço (docs/API-V3-CONTRACT.md); a página de documentação do app desenha cada um e oferece tela cheia.

Personas

PersonaQuem éO que precisaComo mede sucesso
Cidadã (usuária principal)pessoa que recebeu um documento jurídico (procuração, contrato de honorários, acordo, petição, decisão); baixa escolaridade; celular básico; prefere ouvir a ler; hoje pesquisa no Google ou cola o documento e seus dados no ChatGPT; medo de golpe e de decidir erradoentender o documento antes de decidir, em ambiente seguro, com direito a perguntar, recusar e falar com o advogadochega ao comprovante em menos de 4 minutos sem instrução; explica com as próprias palavras o que recebeu
Advogado (supervisão)pequeno escritório, dativo, Defensoria, núcleo de prática; pouco tempo; dever de informar (CED art. 9º e 48)revisar o que a assistente extraiu e concluiu, liberar a explicação, ver dúvidas e respostas e ter o registro de que o esclarecimento ocorreupendências claras; registro gerado; nada dito pela IA sem trecho do documento
Verificadorauditor da OAB, juiz, a própria cidadã meses depoisconferir que o registro é íntegro e datado, sem depender do sistemarecalcula o hash e encontra o carimbo de tempo público

Atores: Cidadã (usuária principal; abre o link do advogado sem cadastro, ou cria conta e envia o próprio documento), Advogado (supervisão; conta com papel advogado), Fornecedor (admin do serviço; vê tudo), Verificador (qualquer pessoa com o QR), Auditor (banca da OAB), Sistema (app web na Vercel + serviço FastAPI no Railway + LLM na Groq + calendários OpenTimestamps).

Diagrama de casos de uso

Diagrama: Diagrama de casos de uso
flowchart LR
  C([Cidadã])
  A([Advogado])
  V([Verificador])
  AU([Auditor])
  subgraph LeIA
    direction TB
    UC01(["UC-01 Entrar ou criar conta"])
    UC02(["UC-02 Enviar o documento"])
    UC03(["UC-03 Acompanhar a preparação"])
    UC04(["UC-04 Revisar e liberar a explicação"])
    UC05(["UC-05 Percorrer o documento"])
    UC06(["UC-06 Tirar dúvida com a assistente"])
    UC07(["UC-07 Encaminhar dúvida ao advogado"])
    UC08(["UC-08 Conferir o entendimento"])
    UC09(["UC-09 Receber o comprovante"])
    UC10(["UC-10 Verificar o comprovante"])
    UC11(["UC-11 Acompanhar documentos e responder dúvidas"])
    UC12(["UC-12 Auditar a fidelidade"])
  end
  C --> UC01 & UC02 & UC03 & UC05 & UC06 & UC08 & UC11
  A --> UC01 & UC02 & UC03 & UC04 & UC11
  V --> UC10
  AU --> UC12
  UC06 -. estende .-> UC07
  UC08 -. gera .-> UC09
  UC09 -. QR .-> UC10
  UC07 -. chega em .-> UC11

Desenhando o diagrama.

Diagrama: Diagrama de casos de uso

Zoom 1x. Arraste para rolar; no celular, a pinça também amplia.

#Caso de usoAtorComo funciona hojeSituação
UC-01Entrar ou criar contaCidadã, advogado/entrar: e-mail e senha; cadastro aberto para cidadã e, com ADVOGADO_SIGNUP=true, para advogado; token Bearer guardado no navegadorno ar
UC-02Enviar o documentoAdvogado ou cidadã/enviar: título e PDF (limite MAX_UPLOAD_MB, assinatura %PDF conferida); a tarefa nasce criada e entra na filano ar
UC-03Acompanhar a preparaçãoQuem enviou; cidadã com o link14 etapas com estado e tempo, texto já marcado e score, atualizados enquanto o serviço processano ar
UC-04Revisar e liberar a explicaçãoAdvogado/painel/{id}/revisao: abas Marcações, Texto, Conclusões, Explicação e Perguntas; "Aprovar e liberar" muda pronta para enviada e libera o linkno ar; documentos enviados pela cidadã não passam por revisão
UC-05Percorrer o documentoCidadã/t/{hash}: boas-vindas com o que a assistente faz e não faz, um tópico por vez com o trecho original ao lado, botão Ouvirno ar
UC-06Tirar dúvida com a assistenteCidadãgaveta "Tenho uma dúvida": resposta em fluxo a partir do resumo e da memória do documento; fora deles, o modelo é instruído a dizer que não foi informado (sem verificação automática da recusa)no ar
UC-07Encaminhar dúvida ao advogadoCidadãbotão na gaveta leva a pergunta e o contexto do chat ao painel do advogado; só quando o documento tem advogadono ar
UC-08Conferir o entendimentoCidadãperguntas de múltipla escolha, uma por tela; sem nota exibida; se não passou, volta ao primeiro tópico da mesma explicação e repete as perguntas (nova tentativa)no ar; perguntas abertas com rubrica 0 a 3: roadmap
UC-09Receber o comprovanteCidadãtentativa aprovada gera o registro: JSON canônico sem dados pessoais, SHA-256, carimbo OpenTimestamps em segundo plano, com nova tentativa e varredura de reenvio (o comprovante mostra "Sem carimbo ainda", "Carimbo em andamento" ou "Carimbo confirmado"), QRno ar; registro também em rede pública principal: meta sem data (ADR-0010)
UC-10Verificar o comprovanteVerificador/verify/{hash}: mostra o código do registro, o JSON canônico (ver, copiar, baixar), o carimbo e a prova .ots; a conferência do hash é feita pelo verificador, com o passo a passo da páginano ar
UC-11Acompanhar documentos e responder dúvidasAdvogado; cidadã no próprio painel/painel: lista com status, origem, última tentativa e dúvidas abertas; /painel/{id}: eventos, tentativas, dúvidas e respostano ar
UC-12Auditar a fidelidadeAuditorroteiro em docs/AUDIT-GUIDE.md; testes tests_leia.py e tests_v3.py; artefatos de cada etapa em workspace/{hash} (T1 a T14, log por etapa)roteiro pronto

Fora de escopo no hackathon: assinatura eletrônica do documento, identificação forte (gov.br), múltiplos escritórios, cobrança. Ver docs/ROADMAP.md.

Estados de um documento (tarefa)

Diagrama: Estados de um documento (tarefa)
stateDiagram-v2
  [*] --> criada : POST /api/tarefas
  criada --> processando : extração do texto
  processando --> pronta : 14 etapas concluídas
  processando --> falhou : erro em uma etapa
  pronta --> enviada : advogado aprova (origem advogado)
  pronta --> assinada : cidadã aprovada nas perguntas (origem cidadã)
  enviada --> assinada : cidadã aprovada nas perguntas
  assinada --> [*]
  note left of pronta : Origem advogado, GET /api/t/{hash} devolve status revisao e inferencias, quiz e chat respondem 409

Desenhando o diagrama.

Diagrama: Estados de um documento (tarefa)

Zoom 1x. Arraste para rolar; no celular, a pinça também amplia.

Diagramas de sequência

UC-01. Entrar ou criar conta

Diagrama: UC-01. Entrar ou criar conta
sequenceDiagram
  actor U as Cidadã ou advogado
  participant W as App web (Vercel)
  participant S as Serviço (FastAPI, Railway)
  participant DB as Postgres
  U->>W: /entrar com e-mail e senha (nome e papel no cadastro)
  W->>S: POST /api/auth/cadastro ou POST /api/auth/login (limite por IP)
  S->>DB: cria ou confere o usuário
  S-->>W: token e usuário (papel cidadao, advogado ou fornecedor)
  W->>W: guarda o token (localStorage leia:auth)
  W-->>U: painel ou a página que pediu login
  Note over W,S: As chamadas seguintes levam Authorization: Bearer token. Um login novo invalida o token anterior.

Desenhando o diagrama.

Diagrama: UC-01. Entrar ou criar conta

Zoom 1x. Arraste para rolar; no celular, a pinça também amplia.

UC-02 e UC-03. Enviar o documento e acompanhar a preparação

Diagrama: UC-02 e UC-03. Enviar o documento e acompanhar a preparação
sequenceDiagram
  actor A as Advogado ou cidadã
  participant W as App web
  participant S as Serviço
  participant P as Pipeline (14 etapas)
  participant L as LLM (Groq, gpt-oss-120b)
  A->>W: /enviar com título e PDF
  W->>S: POST /api/tarefas (multipart, Bearer)
  S->>S: confere tamanho e assinatura %PDF, cria a tarefa (status criada)
  S-->>W: id, hash, status criada
  S-)P: agenda a tarefa (semáforo PIPELINE_CONCURRENCY)
  P->>P: extrai o texto (texto_extraido.txt), status processando
  loop T1 a T14
    P->>L: prompt da etapa com o texto (o documento é dado, nunca instrução)
    L-->>P: JSON da etapa com o trecho literal de cada informação
    P->>P: grava Tn.json e a linha da etapa em log.jsonl
  end
  P->>P: memoria_persistente, texto_tagueado, resumo_humanizado.md, questoes.json (alternativas embaralhadas)
  P->>S: status pronta (ou falhou se uma etapa deu erro)
  loop enquanto criada ou processando
    W->>S: GET /api/t/{hash} e GET /api/t/{hash}/inferencias (parcial)
    S-->>W: etapas com estado e tempo, texto e marcações já encontradas
    W-->>A: tela de preparação: as 14 etapas, o documento sendo marcado e o score
  end

Desenhando o diagrama.

Diagrama: UC-02 e UC-03. Enviar o documento e acompanhar a preparação

Zoom 1x. Arraste para rolar; no celular, a pinça também amplia.

Etapas: T1 partes, T2 datas e valores, T3 fatos, T4 fundamentos, T5 pedidos, T6 fusão da memória, T7 a T11 sínteses (fatos, fundamentos, pedidos, quem é quem, contexto), T12 marcação do texto, T13 explicação em linguagem simples, T14 perguntas.

UC-04. Revisar e liberar a explicação (advogado)

Diagrama: UC-04. Revisar e liberar a explicação (advogado)
sequenceDiagram
  actor A as Advogado
  participant W as App web
  participant S as Serviço
  A->>W: /painel/{id}/revisao
  W->>S: GET /api/tarefas/{id}/revisao (Bearer, dono ou admin)
  S-->>W: marcações (classes com trecho e posição no texto), texto, sínteses, explicação, perguntas com gabarito
  W-->>A: abas Marcações, Texto, Conclusões, Explicação e Perguntas
  Note over W,S: Enquanto a tarefa está pronta e a origem é advogado, GET /api/t/{hash} devolve status revisao sem explicação, tópicos nem perguntas, e inferencias, quiz e chat respondem 409 (duvida e vincular não têm essa trava).
  A->>W: Aprovar e liberar
  W->>S: POST /api/tarefas/{id}/aprovar
  S->>S: pronta para enviada, evento aprovada
  S-->>W: ok, status enviada
  W-->>A: link da cliente (/t/{hash}) para copiar e enviar

Desenhando o diagrama.

Diagrama: UC-04. Revisar e liberar a explicação (advogado)

Zoom 1x. Arraste para rolar; no celular, a pinça também amplia.

UC-05, UC-06 e UC-07. Percorrer o documento, tirar dúvida e encaminhar ao advogado (cidadã)

Diagrama: UC-05, UC-06 e UC-07. Percorrer o documento, tirar dúvida e encaminhar ao advogado (cidadã)
sequenceDiagram
  actor C as Cidadã
  participant W as App web
  participant S as Serviço
  participant L as LLM
  C->>W: abre /t/{hash} (link do advogado ou documento próprio)
  W->>S: GET /api/t/{hash}
  alt criada ou processando
    S-->>W: etapas em andamento
    W-->>C: preparação visível (UC-03)
  else revisao (advogado ainda não liberou)
    S-->>W: status revisao, sem explicação
    W-->>C: o advogado está revisando, volte em breve
  else falhou
    S-->>W: status falhou, sem explicação
    W-->>C: Não deu certo desta vez, fale com quem enviou o documento
  else pronta, enviada ou assinada
    S-->>W: explicação, tópicos (com o trecho original da memória quando ele casa com o tópico), perguntas sem gabarito, eventos públicos
  end
  opt conta de papel cidadao e documento ainda sem vínculo
    W->>S: POST /api/t/{hash}/vincular (Bearer)
    S-->>W: ok (409 se já vinculado a outra conta), o documento passa a aparecer no painel dela
  end
  alt resultado aprovado salvo neste aparelho
    W-->>C: abre direto em Entendimento registrado, com Ver meu comprovante e Rever a explicação
  else primeira vez neste aparelho
    W-->>C: boas-vindas com o que a assistente faz e não faz
  end
  loop um tópico por vez
    W-->>C: texto simples, botão Ouvir e, quando existe, Ver trecho original
    opt Tenho uma dúvida
      C->>W: pergunta na gaveta
      W->>S: POST /api/t/{hash}/chat (SSE, limite por IP)
      S->>L: system prompt com o resumo humanizado e a memória do documento
      L-->>S: resposta em fluxo
      S-->>W: eventos SSE data {t} com cada pedaço do texto, depois data {done} (ou data {error})
      W-->>C: resposta em fluxo, sem trecho do documento (fora do contexto, o modelo é instruído a dizer que não foi informado)
      opt Enviar esta dúvida para o advogado (só com advogado)
        W->>S: POST /api/t/{hash}/duvida (última pergunta como texto, últimos 10 turnos como contexto, limite por IP)
        S-->>W: id e criada_em (409 se o documento não tem advogado)
        W-->>C: Enviada. Quando o advogado responder, a resposta aparece em Meus documentos
      end
    end
  end

Desenhando o diagrama.

Diagrama: UC-05, UC-06 e UC-07. Percorrer o documento, tirar dúvida e encaminhar ao advogado (cidadã)

Zoom 1x. Arraste para rolar; no celular, a pinça também amplia.

UC-08 e UC-09. Conferir o entendimento e receber o comprovante (cidadã)

Diagrama: UC-08 e UC-09. Conferir o entendimento e receber o comprovante (cidadã)
sequenceDiagram
  actor C as Cidadã
  participant W as App web
  participant S as Serviço
  participant O as OpenTimestamps (calendários públicos)
  C->>W: responde às perguntas, uma por tela
  W->>S: POST /api/t/{hash}/quiz (respostas, limite por IP)
  S->>S: corrige, cria a tentativa n (acertos, total, aprovado por QUIZ_PASS_RATIO) e o hash_imutavel
  alt aprovada
    S->>S: status assinada, evento assinada
    S-->>W: numero, acertos, total, aprovado, hash_imutavel, ts, erros (vazio)
    W-->>C: Entendimento registrado, botão Ver meu comprovante
    S-)S: stamp_attempt em segundo plano, depois da resposta
    S->>S: payload sem dados pessoais, JSON canônico (chaves ordenadas, sem espaços), SHA-256
    S->>O: submit(digest) nos calendários públicos, um por vez, até o primeiro que responder (8 s cada)
    O-->>S: prova tentativa_n.ots (sem resposta, o carimbo fica pendente)
    C->>W: /comprovante/{hash_imutavel}
    loop a cada 30 s enquanto a página está aberta
      W->>S: GET /verify/{hash_imutavel}?format=json
      S-->>W: payload, canonical, payloadHash, otsPresent
    end
    W-->>C: Registrado ou Carimbo pendente, código do registro, data, QR para /verify/{hash_imutavel}, o que o comprovante prova e o que não contém
  else não aprovada
    S-->>W: numero, acertos, total, aprovado false, quais perguntas erraram (sem a resposta certa)
    W-->>C: Vamos ver de novo: lista das perguntas erradas, volta ao primeiro tópico da mesma explicação e repete as perguntas (o novo envio cria a tentativa n+1)
  end

Desenhando o diagrama.

Diagrama: UC-08 e UC-09. Conferir o entendimento e receber o comprovante (cidadã)

Zoom 1x. Arraste para rolar; no celular, a pinça também amplia.

UC-10. Verificar o comprovante (verificador)

Diagrama: UC-10. Verificar o comprovante (verificador)
sequenceDiagram
  actor V as Verificador
  participant W as App web
  participant S as Serviço
  V->>W: lê o QR ou abre /verify/{hash_imutavel}
  W->>S: GET /verify/{hash}?format=json
  S->>S: monta o payload da tentativa, o JSON canônico e o SHA-256
  S-->>W: payload, canonical, payloadHash, otsPresent
  W-->>V: código do registro (payloadHash), JSON canônico para ver, copiar ou baixar, passo a passo para conferir
  alt otsPresent
    W-->>V: registrado em (data da tentativa) e link da prova /verify/{hash}/proof.ots
  else prova ainda não existe
    W-->>V: carimbo pendente
  end
  V->>V: recalcula o SHA-256 do JSON canônico e confere a prova .ots por conta própria (a página não confere por ele)

Desenhando o diagrama.

Diagrama: UC-10. Verificar o comprovante (verificador)

Zoom 1x. Arraste para rolar; no celular, a pinça também amplia.

UC-11. Acompanhar documentos e responder dúvidas (advogado; cidadã no próprio painel)

Diagrama: UC-11. Acompanhar documentos e responder dúvidas (advogado; cidadã no próprio painel)
sequenceDiagram
  actor A as Advogado
  participant W as App web
  participant S as Serviço
  actor C as Cidadã
  A->>W: /painel
  W->>S: GET /api/tarefas (Bearer)
  S-->>W: tarefas com status, origem, última tentativa, dúvidas abertas e link_cliente
  A->>W: abre um documento (/painel/{id})
  W->>S: GET /api/tarefas/{id}
  S-->>W: tarefa, eventos (20 últimos), tentativas, dúvidas com o contexto do chat
  loop enquanto o documento não está concluído
    W->>S: GET /api/tarefas/{id}
  end
  opt dúvida aberta
    A->>W: escreve a resposta
    W->>S: POST /api/tarefas/{id}/duvidas/{duvida_id}/responder
    S-->>W: ok (respondida, respondida_em)
    C->>W: /painel/{id} (documento vinculado à conta dela)
    W-->>C: pergunta, contexto e resposta do advogado
  end

Desenhando o diagrama.

Diagrama: UC-11. Acompanhar documentos e responder dúvidas (advogado; cidadã no próprio painel)

Zoom 1x. Arraste para rolar; no celular, a pinça também amplia.

UC-12. Auditar a fidelidade

Sem diagrama: o auditor segue docs/AUDIT-GUIDE.md (perguntas fora do documento, PDF com instrução escondida, resposta vaga), roda tests_leia.py e tests_v3.py no serviço e lê, por documento, os artefatos de cada etapa em workspace/{hash} (T1 a T14, log.jsonl, memoria_persistente.json, texto_tagueado.json, questoes.json, tentativa_n.ots).

Fonte: docs/USE-CASES.md (abre no GitHub)

Voltar ao topo