{
  "schemaVersion": 1,
  "title": "Evidencia publica — Seu arquivo sobe? Como conferir antes de usar a ferramenta",
  "preparedAt": "2026-08-23",
  "scope": "Extrato autocontido da medicao propria citada no post 19 do Fluxonar. Reune a contagem do catalogo, a observacao de rede durante uma operacao real e a leitura estatica dos modulos que executam essa operacao no site BRUP.",
  "disclosure": "O site medido, brup-ferramentas-uteis.com.br, e um projeto do autor do blog Fluxonar. A medicao e publicada com o procedimento aberto para permitir repeticao independente.",
  "method": {
    "date": "2026-08-23",
    "browser": "Navegador baseado em Chromium 148 (Electron 42), automatizado, em Windows 10/11, idioma pt-BR",
    "steps": [
      "abrir a pagina da ferramenta e registrar as requisicoes de rede",
      "digitar o texto de teste no campo da ferramenta e acionar a criacao do PDF",
      "listar todas as requisicoes registradas apos a operacao",
      "consultar a API de desempenho do navegador para contar requisicoes iniciadas por fetch ou XMLHttpRequest",
      "baixar cada modulo JavaScript carregado pela pagina e contar ocorrencias de primitivas de rede no codigo"
    ],
    "limits": [
      "a observacao de rede prova o comportamento da versao servida na data indicada, para as ferramentas indicadas",
      "a leitura estatica cobre os modulos efetivamente carregados nas paginas visitadas, nao a totalidade do catalogo",
      "resultado de laboratorio, sem representar sessoes de usuarios reais"
    ]
  },
  "catalog": {
    "measuredAt": "2026-08-23",
    "uniqueToolLinksOnHome": 46,
    "categoryBadgesSum": 51,
    "categoryBadges": {
      "PDF": 31,
      "Imagens": 10,
      "CalculosEFinancas": 4,
      "TextoEDados": 6
    },
    "note": "A contagem de 46 e de enderecos unicos de pagina de ferramenta ligados na pagina inicial. Os contadores exibidos nas abas de categoria somam 51; a diferenca nao foi apurada nesta medicao e o post cita apenas o numero medido."
  },
  "networkObservation": {
    "tool": "/texto-para-pdf/",
    "operation": "criacao de PDF a partir de texto colado",
    "uploadRequests": 0,
    "fetchOrXhrEntries": 0,
    "requestsAfterOperation": "somente GET de recursos estaticos do proprio dominio (modulos JavaScript, fontes e folha de estilo)",
    "lazyChunksLoadedOnOperation": [
      "assets/pdf-edit-D7jPHAHj.js",
      "assets/limites-7Wamoh7x.js",
      "assets/pdf-doc-B1FcldEB.js",
      "assets/rolldown-runtime-Dd_uD5pT.js"
    ],
    "note": "Os modulos acima foram baixados no momento da operacao. Sao download de programa, nao envio de arquivo: aparecem como GET e o tamanho corresponde ao codigo."
  },
  "staticScan": {
    "patternsSearched": ["fetch(", "XMLHttpRequest", "FormData", "sendBeacon", "WebSocket", "/api/"],
    "modules": [
      { "file": "main-otmDWi0Z.js", "bytes": 7095, "hits": {} },
      { "file": "textoParaPdf-1jUvB4XT.js", "bytes": 2060, "hits": {} },
      { "file": "comprimir-Dql2Qiv0.js", "bytes": 2336, "hits": {} },
      { "file": "validate-BWeUrJWx.js", "bytes": 3285, "hits": {} },
      { "file": "pdf-errors-C8ZyxTe9.js", "bytes": 1488, "hits": {} },
      { "file": "html-CcjTsKbx.js", "bytes": 293, "hits": {} },
      { "file": "handoff-DD3C4faA.js", "bytes": 2200, "hits": {} },
      { "file": "i18n-DTbKgdoG.js", "bytes": 36599, "hits": {} },
      { "file": "tool-root-C6p6w_bV.js", "bytes": 12995, "hits": {} },
      { "file": "pdf-edit-D7jPHAHj.js", "bytes": 13407, "hits": {} },
      { "file": "limites-7Wamoh7x.js", "bytes": 6017, "hits": {} },
      { "file": "pdf-doc-B1FcldEB.js", "bytes": 421517, "hits": { "FormData": 1 } },
      { "file": "rolldown-runtime-Dd_uD5pT.js", "bytes": 1106, "hits": {} },
      { "file": "modulepreload-polyfill-P2Xu9kJm.js", "bytes": 670, "hits": { "fetch(": 1 } }
    ],
    "occurrenceAnalysis": [
      "modulepreload-polyfill: a unica ocorrencia de fetch( esta no preenchimento de compatibilidade gerado pelo empacotador, cuja funcao e pre-carregar modulos JavaScript da propria origem.",
      "pdf-doc: a unica ocorrencia de FormData e o nome de um membro de enumeracao interna da biblioteca pdf-lib (AFRelationship), nao a interface FormData do navegador usada em envios."
    ],
    "conclusion": "Nenhum modulo carregado nas paginas visitadas contem XMLHttpRequest, sendBeacon, WebSocket ou chamada a endereco de API. A unica primitiva de rede presente serve para carregar o proprio programa."
  },
  "pdfEngine": {
    "library": "pdf-lib",
    "servedFrom": "mesma origem do site",
    "file": "assets/pdf-doc-B1FcldEB.js",
    "bytes": 421517,
    "independentCheck": "A biblioteca escreve a propria identificacao no campo Produtor do PDF gerado, o que permite conferir o motor abrindo as propriedades do arquivo produzido."
  },
  "localStorageOfServiceQuota": {
    "key": "pdf_facil_quota_v1",
    "observedValueShape": "{\"v\":1,\"windowStart\":<epoch ms>,\"used\":<inteiro>}",
    "note": "A cota do plano gratuito e mantida no armazenamento local do navegador. Limite e janela estao descritos na politica de privacidade publica do servico."
  },
  "thirdPartyOnPage": [
    "script de anuncios do Google (AdSense)",
    "script de medicao de audiencia da Cloudflare"
  ],
  "sources": [
    { "claim": "registro de recursos baixados e enviados, e necessidade de recarregar com o painel aberto", "source": "https://developer.chrome.com/docs/devtools/network", "level": 1, "checkedAt": "2026-08-23" },
    { "claim": "exibicao de todas as requisicoes feitas pela pagina", "source": "https://firefox-source-docs.mozilla.org/devtools-user/network_monitor/index.html", "level": 1, "checkedAt": "2026-08-23" },
    { "claim": "cota, limite de tamanho e repasse local de 60 segundos", "source": "https://brup-ferramentas-uteis.com.br/privacidade.html", "level": 2, "checkedAt": "2026-08-23" },
    { "claim": "biblioteca de manipulacao de PDF executada no navegador", "source": "https://github.com/Hopding/pdf-lib", "level": 1, "checkedAt": "2026-08-23" }
  ]
}
