FLOWLEXI.
Casos reais
bncc.clickBETA

O caminho de uma busca assistida

O que acontece entre enviar um plano que já existe e receber habilidades da BNCC com fonte — e como os produtos da Flowlexi participam desse processo.

2.173habilidades BNCC
10componentes curriculares
2documentos oficiais
neutromodo público

Professora, professor — ou a coordenação

Cola ou descreve um plano que já existe — ou anexa TXT, Markdown, DOCX ou PDF pesquisável — e confirma ano, componente e tipo de plano: aula ou sequência/unidade. O serviço não gera nem reescreve o plano. As três primeiras buscas concluídas são grátis; depois, o acesso é por um código enviado por e-mail.

www.bncc.clickTelegramarquivo opcional
daqui para dentro, tudo roda na Flowlexi Cloud

bncc.click — a recepção

Valida o contexto e o texto extraído do arquivo, mantém a sessão e conta apenas buscas concluídas. O briefing confirmado segue para a busca; o texto completo do arquivo não entra no histórico compartilhável nem no log.

Flymmatik — o roteiro do produto

O pedido entra num chamado bncc-map: uma receita legível que diz exatamente o que acontece com cada pedido — busca o componente escolhido, apoio de linguagem e os demais componentes em conjuntos sem sobreposição; depois reordena, calibra e fecha o conjunto que formará o cartão.

sem modificadores institucionais etapas explícitas
flows/bncc_click/bncc_click.yaml · trecho AGPL-3.0-or-later repo ↗
# (C) 2026 Rodrigo Rodrigues da Silva <rodrigo@flowlexi.com>
# SPDX-License-Identifier: AGPL-3.0-or-later

FLOW:
  DECL: bncc-map
  DESC: BNCC Click neutral assisted search with cited results
  ROLE: kernel

  INPS:
    - briefing
    # Texto completo opcional, enviado somente pelo gateway web.
    - plano
    - ano
    - disciplina
    - escopo
    # Identidade e referência vêm dos canais; nunca do texto do plano.
    - usuario_gw
    - ref
    - telegram_user

  FORM:
    briefing:
      type: string
      required: true
      label: Planejamento
      prompt: "Descreva a aula ou unidade para buscar habilidades."
      validators:
        - rule: {min_length: 20}
        - rule: {max_length: 2000}

    ano:
      type: integer
      required: true
      label: Ano
      prompt: "Em qual ano (1 a 9)?"
      validators:
        - rule: {between: [1, 9]}
          message: "Informe um ano entre 1 e 9."

    disciplina:
      type: string
      required: true
      label: Disciplina
      prompt: "Disciplina?"
      validators:
        - rule:
            enum:
              - Arte
              - Ciências
              - Educação Física
              - Ensino Religioso
              - Geografia
              - História
              - Língua Inglesa
              - Língua Portuguesa
              - Matemática
              - Computação
          message: "Informe uma disciplina válida."

    escopo:
      type: string
      required: true
      label: Escopo
      prompt: "É uma aula ou uma unidade/sequência?"
      validators:
        - rule: {enum: [aula, unidade]}

  BANK:
    ano_label: "{{ano}}º"
    # neutral: rótulo do log; não muda a busca.
    perfil_institucional: neutral
    min_relevance_score: 0.35

  STEP:
    # Três conjuntos sem sobreposição: componente selecionado,
    # apoio de linguagem e demais componentes.
    - DECL: build_core_query
      USE: template
      WITH: {file: templates/search_query.md}
      RETS: busca_nucleo

    - DECL: search_nucleo
      USE: bncc
      WITH:
        q: "{{busca_nucleo}}"
      RETS: nucleo

    - DECL: search_linguagem
      MUX: disciplina
      STEP:
        - MAT: Língua Portuguesa
          STEP:
            - USE: bncc
              WITH:
                q: >-
                  English language reading writing speaking listening.
                  {{briefing}}
                filters:
                  Disciplina: Língua Inglesa
              RETS: linguagem
        # ... Língua Inglesa busca apoio em Língua Portuguesa.
      # Outros componentes: busca nas duas línguas.
      ELSE:
        - USE: bncc
          WITH:
            q: >-
              leitura escrita oralidade English reading writing speaking.
              {{briefing}}
            filters:
              Disciplina:
                - Língua Portuguesa
                - Língua Inglesa
          RETS: linguagem

    - DECL: search_travessia
      MUX: disciplina
      STEP:
        # Exemplo: Matemática; há um ramo por componente.
        - MAT: Matemática
          STEP:
            - USE: bncc
              WITH:
                filters:
                  Disciplina:
                    - Arte
                    - Ciências
                    - Computação
                    - Educação Física
                    - Ensino Religioso
                    - Geografia
                    - História
              RETS: travessia
        # ... outros ramos excluem o componente selecionado.

    # As três listas recuperadas são reordenadas em paralelo.
    # Se um falhar, ERR: skip preserva a ordem do PaveDB.
    - DECL: rerank_candidates
      PAR: 3
      STEP:
        - DECL: rerank_nucleo
          USE: rerank
          WITH: {from: nucleo, query: "{{briefing}}"}
          RETS: nucleo
          ERR: skip
        - DECL: rerank_linguagem
          USE: rerank
          WITH: {from: linguagem, query: "{{briefing}}"}
          RETS: linguagem
          ERR: skip
        - DECL: rerank_travessia
          USE: rerank
          WITH: {from: travessia, query: "{{briefing}}"}
          RETS: travessia
          ERR: skip

    # ... três templates produzem *_count com base no escopo e
    # na pontuação técnica de correspondência ...
    - DECL: calibrate_habilidades
      USE: merge
      WITH:
        nucleo:
          take: "{{nucleo_count}}"
          pluck: [text, bars, meta]
        transversal:
          concat:
            - from: linguagem
              take: "{{linguagem_count}}"
              pluck: [text, bars, meta]
            - from: travessia
              take: "{{travessia_count}}"
              pluck: [text, bars, meta]
      RETS: habilidades

    # A geração vem depois da seleção e nunca altera habilidades.
    # ... um template produz avaliacao_prompt só com briefing e
    # textos oficiais selecionados ...
    - DECL: assess_plan
      USE: judge
      WITH:
        temperature: 0
        max_tokens: 180
        prompt: "{{avaliacao_prompt}}"
      RETS: avaliacao_raw
      ERR: {default: {json: {comentario: ""}}}

    # ... a renderização segura produz avaliacao ...
    - DECL: log_to_sheets
      PSH: sheetslog
      WITH:
        values:
          ano: "{{ano_label}}"
          disciplina: "{{disciplina}}"
          escopo: "{{escopo}}"
          perfil: "{{perfil_institucional}}"
          briefing: "{{briefing}}"
          habilidades: "{{habilidades}}"
          comentario: "{{avaliacao}}"
      ERR: skip

  OUTS:
    - briefing
    - ano
    - ano_label
    - disciplina
    - escopo
    - habilidades
    - avaliacao
as camadas — onde o pedido vira resposta verificável

PaveDB — busca semântica com proveniência

Os 2.173 registros versionados, derivados dos dados abertos da bncc.dev, são buscados pelo sentido do plano e filtrados pelo ano confirmado. Flymmatik organiza os três conjuntos; o PaveDB recebe consulta e filtros, sem modificador institucional no modo público. Versão, commit, licença CC BY 4.0 e data de acesso ficam registrados; cada candidato conserva a linhagem até o documento de origem.

Um benchmark externo da bncc.dev testou 19 modelos sem consulta à fonte: 54% das transcrições do texto oficial trouxeram texto inventado ou pertencente a outra habilidade.

Ordenação e calibração

Três reordenadores trabalham em paralelo e devolvem somente a ordem dos candidatos; nunca escrevem habilidades. Escopo e pontuação técnica de correspondência — não uma avaliação pedagógica — limitam o cartão a até 1+1 resultado para uma aula ou 3+2 para uma unidade, e podem reduzir um grupo a zero. Se a ordenação falhar, prevalece a ordem do PaveDB.

Comentário separado

Depois de fechado o conjunto que formará o cartão, uma etapa generativa recebe o briefing confirmado e os textos oficiais selecionados para sugerir como ampliar o plano. Não reescreve o plano, não altera habilidades e não declara alinhamento ou conformidade. Se falhar, apenas o comentário é omitido.

O resultado chega ao professor

Habilidades no componente selecionado e em outros componentes, cada uma com código, texto oficial, medidor técnico de correspondência, documento, página, data de acesso e link direto para a fonte. Computação aponta para seu documento oficial próprio. O comentário aparece à parte; cabe ao professor conferir a fonte e decidir como usar o resultado.