{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-bebbac0e3f88236d", "name": "Possibly dead Python function: evolution_configurada", "shortDescription": {"text": "Possibly dead Python function: evolution_configurada"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2dfc95ca25a6834a", "name": "Possibly dead Python function: enviar_cobranca_completa", "shortDescription": {"text": "Possibly dead Python function: enviar_cobranca_completa"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-54ea7f0592e3c1f9", "name": "Possibly dead Python function: registrar_envio", "shortDescription": {"text": "Possibly dead Python function: registrar_envio"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-681796c7f72c9841", "name": "Possibly dead Python function: gerar_pdf_rateio", "shortDescription": {"text": "Possibly dead Python function: gerar_pdf_rateio"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d8d7c01c0fd5b151", "name": "Possibly dead Python function: uc_sufixo", "shortDescription": {"text": "Possibly dead Python function: uc_sufixo"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-874cdc4fe85bda34", "name": "Possibly dead Python function: detectar_consolidaveis", "shortDescription": {"text": "Possibly dead Python function: detectar_consolidaveis"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-213a7a6f411dd270", "name": "Possibly dead Python function: parse_financeiros", "shortDescription": {"text": "Possibly dead Python function: parse_financeiros"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0e6aa48302201ec7", "name": "Possibly dead Python function: parse_titular", "shortDescription": {"text": "Possibly dead Python function: parse_titular"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-154f54e3ffe3510d", "name": "Possibly dead Python function: parse_tributos", "shortDescription": {"text": "Possibly dead Python function: parse_tributos"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8f7e9bc2b908bd5d", "name": "Possibly dead Python function: parse_consumo_scee", "shortDescription": {"text": "Possibly dead Python function: parse_consumo_scee"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dcb835d36186f9a5", "name": "Possibly dead Python function: parse_cabecalho", "shortDescription": {"text": "Possibly dead Python function: parse_cabecalho"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ce393de959b186de", "name": "Possibly dead Python function: parse_medidor", "shortDescription": {"text": "Possibly dead Python function: parse_medidor"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fcf07634ac96d0ac", "name": "Possibly dead Python function: parse_scee", "shortDescription": {"text": "Possibly dead Python function: parse_scee"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-982e2ef37aa36d6c", "name": "Possibly dead Python function: parse_historico", "shortDescription": {"text": "Possibly dead Python function: parse_historico"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c1b5e11ab195ffe6", "name": "Docker base image is tag-pinned but not digest-pinned: mcr.microsoft.com/playwright/python:v1.49.0-jammy", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: mcr.microsoft.com/playwright/python:v1.49.0-jammy"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-902cd2d83bf32d41", "name": "Insecure pattern 'direct_innerhtml_assignment' in static/js/pix-validacao.js:62", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/pix-validacao.js:62"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e393b52409e905f3", "name": "Very large file: db.py (2768 lines)", "shortDescription": {"text": "Very large file: db.py (2768 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e169dbe847633f09", "name": "Very large file: app.py (8265 lines)", "shortDescription": {"text": "Very large file: app.py (8265 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d46b6929ee9513d5", "name": "Very large file: baixar_equatorial.py (1485 lines)", "shortDescription": {"text": "Very large file: baixar_equatorial.py (1485 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "3 test file(s) for 72 source file(s) (ratio 0.04). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 883 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-501ee8447357524d", "name": "Commented-code block (6 lines) in inter_api.py:6", "shortDescription": {"text": "Commented-code block (6 lines) in inter_api.py:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-156f3937cab0bf88", "name": "Network/subprocess call without timeout or try/except \u2014 inter_api.py:61", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 inter_api.py:61"}, "fullDescription": {"text": "`requests.post(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9988241b709e684", "name": "Legacy-named symbol `restaurar_backup` in backup_supabase.py:10", "shortDescription": {"text": "Legacy-named symbol `restaurar_backup` in backup_supabase.py:10"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ac2cbfc126e1cfd", "name": "Legacy-named symbol `rateio_planejar_old` in app.py:6737", "shortDescription": {"text": "Legacy-named symbol `rateio_planejar_old` in app.py:6737"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-67976e834871cd44", "name": "Commented-code block (6 lines) in app.py:75", "shortDescription": {"text": "Commented-code block (6 lines) in app.py:75"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d788f67aaa40cffd", "name": "Network/subprocess call without timeout or try/except \u2014 app.py:1661", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 app.py:1661"}, "fullDescription": {"text": "`subprocess.Popen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-513a430c3740194b", "name": "Network/subprocess call without timeout or try/except \u2014 rodar_tudo.py:32", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 rodar_tudo.py:32"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c177ab4b3a73cec1", "name": "Commented-code block (6 lines) in contalev_cobranca_v2_padrao.py:137", "shortDescription": {"text": "Commented-code block (6 lines) in contalev_cobranca_v2_padrao.py:137"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5e2d64c59d5351b0", "name": "Stub function `_preparar_logos` (body is just `pass`/`return`) \u2014 contalev_cobranca_v2_padrao.py:429", "shortDescription": {"text": "Stub function `_preparar_logos` (body is just `pass`/`return`) \u2014 contalev_cobranca_v2_padrao.py:429"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a32d24bd107ccae", "name": "Commented-code block (5 lines) in baixar_equatorial.py:170", "shortDescription": {"text": "Commented-code block (5 lines) in baixar_equatorial.py:170"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-70fcae2d13c708b6", "name": "17 env vars used in code but missing from .env.example", "shortDescription": {"text": "17 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_PASSWORD`, `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, `INTER_AMBIENTE`, `INTER_CERT_PATH`, `INTER_CLIENT_ID`, `INTER_CLIENT_SECRET`, `INTER_KEY_PATH` + 9 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-efffd46bbf940d20", "name": "Flask mutation route `webhook` without `@login_required` \u2014 routes/inter.py:37", "shortDescription": {"text": "Flask mutation route `webhook` without `@login_required` \u2014 routes/inter.py:37"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fbba4040a86bd79f", "name": "Flask mutation route `emitir` without `@login_required` \u2014 routes/inter.py:94", "shortDescription": {"text": "Flask mutation route `emitir` without `@login_required` \u2014 routes/inter.py:94"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e760388a6741b47c", "name": "Flask mutation route `setup_webhook` without `@login_required` \u2014 routes/inter.py:210", "shortDescription": {"text": "Flask mutation route `setup_webhook` without `@login_required` \u2014 routes/inter.py:210"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-206426397212cdd1", "name": "Flask mutation route `investidor_gerar` without `@login_required` \u2014 routes/investidor.py:41", "shortDescription": {"text": "Flask mutation route `investidor_gerar` without `@login_required` \u2014 routes/investidor.py:41"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d32c7d78fe9d8ee", "name": "Flask mutation route `conciliacao_salvar_geracao` without `@login_required` \u2014 routes/conciliacao.py:162", "shortDescription": {"text": "Flask mutation route `conciliacao_salvar_geracao` without `@login_required` \u2014 routes/conciliacao.py:162"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b8c5c95d81c52f64", "name": "Flask mutation route `conciliacao_salvar_rateio` without `@login_required` \u2014 routes/conciliacao.py:214", "shortDescription": {"text": "Flask mutation route `conciliacao_salvar_rateio` without `@login_required` \u2014 routes/conciliacao.py:214"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab659ce9fcead53b", "name": "Flask mutation route `conciliacao_copiar_rateio` without `@login_required` \u2014 routes/conciliacao.py:264", "shortDescription": {"text": "Flask mutation route `conciliacao_copiar_rateio` without `@login_required` \u2014 routes/conciliacao.py:264"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-96b2cbb8a8178e4e", "name": "Flask mutation route `titular_novo` without `@login_required` \u2014 routes/titulares.py:36", "shortDescription": {"text": "Flask mutation route `titular_novo` without `@login_required` \u2014 routes/titulares.py:36"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c2d11bc9e48c9a50", "name": "Flask mutation route `titular_editar` without `@login_required` \u2014 routes/titulares.py:54", "shortDescription": {"text": "Flask mutation route `titular_editar` without `@login_required` \u2014 routes/titulares.py:54"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5be7e8be6a731896", "name": "Flask mutation route `contrato_visualizar` without `@login_required` \u2014 routes/contrato.py:57", "shortDescription": {"text": "Flask mutation route `contrato_visualizar` without `@login_required` \u2014 routes/contrato.py:57"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bac1a602ce462d11", "name": "Flask mutation route `contrato_gerar_pdf` without `@login_required` \u2014 routes/contrato.py:65", "shortDescription": {"text": "Flask mutation route `contrato_gerar_pdf` without `@login_required` \u2014 routes/contrato.py:65"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d997b8c648a83d5", "name": "Flask mutation route `whatsapp_config` without `@login_required` \u2014 routes/whatsapp.py:134", "shortDescription": {"text": "Flask mutation route `whatsapp_config` without `@login_required` \u2014 routes/whatsapp.py:134"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dbed0c334c354042", "name": "Flask mutation route `recebedor_novo` without `@login_required` \u2014 routes/recebedores.py:36", "shortDescription": {"text": "Flask mutation route `recebedor_novo` without `@login_required` \u2014 routes/recebedores.py:36"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6cb79f1f37e0a8a5", "name": "Flask mutation route `recebedor_editar` without `@login_required` \u2014 routes/recebedores.py:50", "shortDescription": {"text": "Flask mutation route `recebedor_editar` without `@login_required` \u2014 routes/recebedores.py:50"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-10c1c7647e6bb4dc", "name": "Flask mutation route `simulador` without `@login_required` \u2014 routes/simulador.py:31", "shortDescription": {"text": "Flask mutation route `simulador` without `@login_required` \u2014 routes/simulador.py:31"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-00f64620ad9e2e9a", "name": "Flask mutation route `simulacao_importar` without `@login_required` \u2014 routes/simulador.py:222", "shortDescription": {"text": "Flask mutation route `simulacao_importar` without `@login_required` \u2014 routes/simulador.py:222"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-54b701ee059680cd", "name": "Flask mutation route `tarifa_nova` without `@login_required` \u2014 routes/tarifas.py:42", "shortDescription": {"text": "Flask mutation route `tarifa_nova` without `@login_required` \u2014 routes/tarifas.py:42"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4a69777754db51e9", "name": "Flask mutation route `tarifa_editar` without `@login_required` \u2014 routes/tarifas.py:63", "shortDescription": {"text": "Flask mutation route `tarifa_editar` without `@login_required` \u2014 routes/tarifas.py:63"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a03669e3af07ac63", "name": "Flask mutation route `api_tarifa_salvar` without `@login_required` \u2014 routes/tarifas.py:114", "shortDescription": {"text": "Flask mutation route `api_tarifa_salvar` without `@login_required` \u2014 routes/tarifas.py:114"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c79b2640c1865e8c", "name": "Flask mutation route `api_tarifa_remover` without `@login_required` \u2014 routes/tarifas.py:142", "shortDescription": {"text": "Flask mutation route `api_tarifa_remover` without `@login_required` \u2014 routes/tarifas.py:142"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1b4babeb1817a32a", "name": "Flask mutation route `importar` without `@login_required` \u2014 routes/importar.py:249", "shortDescription": {"text": "Flask mutation route `importar` without `@login_required` \u2014 routes/importar.py:249"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c7ad61ba1b23915", "name": "Unused endpoint: ANY /login", "shortDescription": {"text": "Unused endpoint: ANY /login"}, "fullDescription": {"text": "`app.py` declares `ANY /login` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c9e449c3b9e73b73", "name": "Unused endpoint: ANY /logout", "shortDescription": {"text": "Unused endpoint: ANY /logout"}, "fullDescription": {"text": "`app.py` declares `ANY /logout` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d1ece2d8b1c75c17", "name": "Unused endpoint: ANY /c/<token>", "shortDescription": {"text": "Unused endpoint: ANY /c/<token>"}, "fullDescription": {"text": "`app.py` declares `ANY /c/<token>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a6d91f2236825bf", "name": "Unused endpoint: ANY /", "shortDescription": {"text": "Unused endpoint: ANY /"}, "fullDescription": {"text": "`app.py` declares `ANY /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7ac1bbdfc8de0dee", "name": "Unused endpoint: ANY /clientes", "shortDescription": {"text": "Unused endpoint: ANY /clientes"}, "fullDescription": {"text": "`app.py` declares `ANY /clientes` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4d5bbbe4b2375d2f", "name": "Unused endpoint: ANY /clientes/ver/<path:uc>", "shortDescription": {"text": "Unused endpoint: ANY /clientes/ver/<path:uc>"}, "fullDescription": {"text": "`app.py` declares `ANY /clientes/ver/<path:uc>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3f62fbc54b718e57", "name": "Unused endpoint: ANY /clientes/ver/<path:uc>/upload_documento", "shortDescription": {"text": "Unused endpoint: ANY /clientes/ver/<path:uc>/upload_documento"}, "fullDescription": {"text": "`app.py` declares `ANY /clientes/ver/<path:uc>/upload_documento` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-20d1143476df4ae7", "name": "Unused endpoint: ANY /clientes/ver/<path:uc>/download_documento/<int:id_doc>", "shortDescription": {"text": "Unused endpoint: ANY /clientes/ver/<path:uc>/download_documento/<int:id_doc>"}, "fullDescription": {"text": "`app.py` declares `ANY /clientes/ver/<path:uc>/download_documento/<int:id_doc>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad1b6f0dfa5ba426", "name": "Unused endpoint: ANY /clientes/ver/<path:uc>/deletar_documento/<int:id_doc>", "shortDescription": {"text": "Unused endpoint: ANY /clientes/ver/<path:uc>/deletar_documento/<int:id_doc>"}, "fullDescription": {"text": "`app.py` declares `ANY /clientes/ver/<path:uc>/deletar_documento/<int:id_doc>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c5f4586e1bf70c9", "name": "Unused endpoint: ANY /clientes/novo", "shortDescription": {"text": "Unused endpoint: ANY /clientes/novo"}, "fullDescription": {"text": "`app.py` declares `ANY /clientes/novo` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca57db129ffaf43c", "name": "Unused endpoint: ANY /clientes/nova_uc/<path:uc>", "shortDescription": {"text": "Unused endpoint: ANY /clientes/nova_uc/<path:uc>"}, "fullDescription": {"text": "`app.py` declares `ANY /clientes/nova_uc/<path:uc>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3fd501bdbaba267a", "name": "Unused endpoint: ANY /clientes/editar/<path:uc>", "shortDescription": {"text": "Unused endpoint: ANY /clientes/editar/<path:uc>"}, "fullDescription": {"text": "`app.py` declares `ANY /clientes/editar/<path:uc>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d3ebcdc1c06e46e", "name": "Unused endpoint: ANY /clientes/remover/<path:uc>", "shortDescription": {"text": "Unused endpoint: ANY /clientes/remover/<path:uc>"}, "fullDescription": {"text": "`app.py` declares `ANY /clientes/remover/<path:uc>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e1af69062ec8758", "name": "Unused endpoint: ANY /clientes/remover_post", "shortDescription": {"text": "Unused endpoint: ANY /clientes/remover_post"}, "fullDescription": {"text": "`app.py` declares `ANY /clientes/remover_post` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ba9dbc3a3a2fd7fb", "name": "Unused endpoint: ANY /cobrancas/dia", "shortDescription": {"text": "Unused endpoint: ANY /cobrancas/dia"}, "fullDescription": {"text": "`app.py` declares `ANY /cobrancas/dia` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fce2e0060fa6efbf", "name": "Unused endpoint: ANY /cobrancas/dia/baixar", "shortDescription": {"text": "Unused endpoint: ANY /cobrancas/dia/baixar"}, "fullDescription": {"text": "`app.py` declares `ANY /cobrancas/dia/baixar` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c30ca43f62b1900", "name": "Unused endpoint: ANY /cobrancas/dia/scee/<int:id_fatura>", "shortDescription": {"text": "Unused endpoint: ANY /cobrancas/dia/scee/<int:id_fatura>"}, "fullDescription": {"text": "`app.py` declares `ANY /cobrancas/dia/scee/<int:id_fatura>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5d3968deb858fb36", "name": "Unused endpoint: ANY /api/cliente/<path:uc>", "shortDescription": {"text": "Unused endpoint: ANY /api/cliente/<path:uc>"}, "fullDescription": {"text": "`app.py` declares `ANY /api/cliente/<path:uc>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ea8414386600c480", "name": "Unused endpoint: ANY /api/scee-reconciliacao", "shortDescription": {"text": "Unused endpoint: ANY /api/scee-reconciliacao"}, "fullDescription": {"text": "`app.py` declares `ANY /api/scee-reconciliacao` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0606eb6a7dd02949", "name": "Unused endpoint: ANY /api/extrair-fatura-equatorial", "shortDescription": {"text": "Unused endpoint: ANY /api/extrair-fatura-equatorial"}, "fullDescription": {"text": "`app.py` declares `ANY /api/extrair-fatura-equatorial` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa6bff74968c74c8", "name": "Unused endpoint: ANY /api/clientes/busca", "shortDescription": {"text": "Unused endpoint: ANY /api/clientes/busca"}, "fullDescription": {"text": "`app.py` declares `ANY /api/clientes/busca` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-748d6b785b19df31", "name": "Unused endpoint: ANY /api/validar-pix-uc/<path:uc>", "shortDescription": {"text": "Unused endpoint: ANY /api/validar-pix-uc/<path:uc>"}, "fullDescription": {"text": "`app.py` declares `ANY /api/validar-pix-uc/<path:uc>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-91b0174de3221b0e", "name": "Unused endpoint: ANY /gerar/manual", "shortDescription": {"text": "Unused endpoint: ANY /gerar/manual"}, "fullDescription": {"text": "`app.py` declares `ANY /gerar/manual` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d44fa49b1251a318", "name": "Unused endpoint: ANY /gerar/auto", "shortDescription": {"text": "Unused endpoint: ANY /gerar/auto"}, "fullDescription": {"text": "`app.py` declares `ANY /gerar/auto` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d92cc847343ec092", "name": "Unused endpoint: ANY /gerar/auto/download", "shortDescription": {"text": "Unused endpoint: ANY /gerar/auto/download"}, "fullDescription": {"text": "`app.py` declares `ANY /gerar/auto/download` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-01c1e3a50fad4093", "name": "Unused endpoint: ANY /gerar/auto/progresso/<jid>", "shortDescription": {"text": "Unused endpoint: ANY /gerar/auto/progresso/<jid>"}, "fullDescription": {"text": "`app.py` declares `ANY /gerar/auto/progresso/<jid>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-05308fd014da43c5", "name": "Unused endpoint: ANY /gerar/auto/baixar", "shortDescription": {"text": "Unused endpoint: ANY /gerar/auto/baixar"}, "fullDescription": {"text": "`app.py` declares `ANY /gerar/auto/baixar` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e03d8b3828e4c66b", "name": "Unused endpoint: ANY /gerar/auto/gerar-job", "shortDescription": {"text": "Unused endpoint: ANY /gerar/auto/gerar-job"}, "fullDescription": {"text": "`app.py` declares `ANY /gerar/auto/gerar-job` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1201e3b9c8eaf2c1", "name": "Unused endpoint: ANY /resultado", "shortDescription": {"text": "Unused endpoint: ANY /resultado"}, "fullDescription": {"text": "`app.py` declares `ANY /resultado` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-14b02ae534a1e61c", "name": "Unused endpoint: ANY /lote", "shortDescription": {"text": "Unused endpoint: ANY /lote"}, "fullDescription": {"text": "`app.py` declares `ANY /lote` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-08d1d223ed4f6194", "name": "Unused endpoint: ANY /ver/<path:filename>", "shortDescription": {"text": "Unused endpoint: ANY /ver/<path:filename>"}, "fullDescription": {"text": "`app.py` declares `ANY /ver/<path:filename>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f179a6dde29d292f", "name": "Unused endpoint: ANY /ver-equatorial/<item_id>", "shortDescription": {"text": "Unused endpoint: ANY /ver-equatorial/<item_id>"}, "fullDescription": {"text": "`app.py` declares `ANY /ver-equatorial/<item_id>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-385fefe3c8d209e0", "name": "Unused endpoint: ANY /download/<path:filename>", "shortDescription": {"text": "Unused endpoint: ANY /download/<path:filename>"}, "fullDescription": {"text": "`app.py` declares `ANY /download/<path:filename>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c152eca3c3f25d30", "name": "Unused endpoint: ANY /luz/<code>", "shortDescription": {"text": "Unused endpoint: ANY /luz/<code>"}, "fullDescription": {"text": "`app.py` declares `ANY /luz/<code>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d913a15e14b43be", "name": "Unused endpoint: ANY /fatura/<code>", "shortDescription": {"text": "Unused endpoint: ANY /fatura/<code>"}, "fullDescription": {"text": "`app.py` declares `ANY /fatura/<code>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-909e2163cd92a287", "name": "Unused endpoint: ANY /soleconomia/<code>", "shortDescription": {"text": "Unused endpoint: ANY /soleconomia/<code>"}, "fullDescription": {"text": "`app.py` declares `ANY /soleconomia/<code>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a3a0e08266dc3714", "name": "Unused endpoint: ANY /pix/<code>", "shortDescription": {"text": "Unused endpoint: ANY /pix/<code>"}, "fullDescription": {"text": "`app.py` declares `ANY /pix/<code>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-90b4704bc038e861", "name": "Unused endpoint: ANY /pagar/<code>", "shortDescription": {"text": "Unused endpoint: ANY /pagar/<code>"}, "fullDescription": {"text": "`app.py` declares `ANY /pagar/<code>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ab1af6e8911bf20b", "name": "Unused endpoint: ANY /whatsapp/<path:filename>", "shortDescription": {"text": "Unused endpoint: ANY /whatsapp/<path:filename>"}, "fullDescription": {"text": "`app.py` declares `ANY /whatsapp/<path:filename>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72d0b279f1a4716d", "name": "Unused endpoint: ANY /whatsapp-pix/<int:id_fatura>", "shortDescription": {"text": "Unused endpoint: ANY /whatsapp-pix/<int:id_fatura>"}, "fullDescription": {"text": "`app.py` declares `ANY /whatsapp-pix/<int:id_fatura>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-04eeafeabe16b6c5", "name": "Unused endpoint: ANY /fatura/<int:id_fatura>/envio-whatsapp", "shortDescription": {"text": "Unused endpoint: ANY /fatura/<int:id_fatura>/envio-whatsapp"}, "fullDescription": {"text": "`app.py` declares `ANY /fatura/<int:id_fatura>/envio-whatsapp` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f91c1427e7eaea55", "name": "Unused endpoint: ANY /pagamento", "shortDescription": {"text": "Unused endpoint: ANY /pagamento"}, "fullDescription": {"text": "`app.py` declares `ANY /pagamento` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-25221e0f61f31edc", "name": "Unused endpoint: ANY /historico", "shortDescription": {"text": "Unused endpoint: ANY /historico"}, "fullDescription": {"text": "`app.py` declares `ANY /historico` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e98aeaf96767480e", "name": "Unused endpoint: ANY /faturas", "shortDescription": {"text": "Unused endpoint: ANY /faturas"}, "fullDescription": {"text": "`app.py` declares `ANY /faturas` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f9bca19f79894185", "name": "Unused endpoint: ANY /faturas/usinas", "shortDescription": {"text": "Unused endpoint: ANY /faturas/usinas"}, "fullDescription": {"text": "`app.py` declares `ANY /faturas/usinas` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ed5f690c3785f5bf", "name": "Unused endpoint: ANY /faturas/usina/<int:id_fu>/baixa", "shortDescription": {"text": "Unused endpoint: ANY /faturas/usina/<int:id_fu>/baixa"}, "fullDescription": {"text": "`app.py` declares `ANY /faturas/usina/<int:id_fu>/baixa` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4f944e9153f73683", "name": "Unused endpoint: ANY /faturas/usina/<int:id_fu>/reabrir", "shortDescription": {"text": "Unused endpoint: ANY /faturas/usina/<int:id_fu>/reabrir"}, "fullDescription": {"text": "`app.py` declares `ANY /faturas/usina/<int:id_fu>/reabrir` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8ee592263f1d207c", "name": "Unused endpoint: ANY /faturas/usina/<int:id_fu>/excluir", "shortDescription": {"text": "Unused endpoint: ANY /faturas/usina/<int:id_fu>/excluir"}, "fullDescription": {"text": "`app.py` declares `ANY /faturas/usina/<int:id_fu>/excluir` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3fb4a1ffefb2b2f9", "name": "Unused endpoint: ANY /faturas/usina/<int:id_fu>/pdf", "shortDescription": {"text": "Unused endpoint: ANY /faturas/usina/<int:id_fu>/pdf"}, "fullDescription": {"text": "`app.py` declares `ANY /faturas/usina/<int:id_fu>/pdf` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c9fc4e8fe383609b", "name": "Unused endpoint: ANY /fatura/consolidar-fixo/<int:id_fatura>", "shortDescription": {"text": "Unused endpoint: ANY /fatura/consolidar-fixo/<int:id_fatura>"}, "fullDescription": {"text": "`app.py` declares `ANY /fatura/consolidar-fixo/<int:id_fatura>` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/19973"}, "properties": {"repository": "Solevenergia/solevenergia", "repoUrl": "https://github.com/Solevenergia/solevenergia", "branch": "main"}, "results": [{"ruleId": "scanner-bebbac0e3f88236d", "level": "note", "message": {"text": "Possibly dead Python function: evolution_configurada"}, "properties": {"repobilityId": "806f3a2763ed704f", "scanner": "scanner-primary", "fingerprint": "bebbac0e3f88236d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "whatsapp_sender.py:22"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2dfc95ca25a6834a", "level": "note", "message": {"text": "Possibly dead Python function: enviar_cobranca_completa"}, "properties": {"repobilityId": "8d0e1f269911e3df", "scanner": "scanner-primary", "fingerprint": "2dfc95ca25a6834a", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "whatsapp_sender.py:124"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-54ea7f0592e3c1f9", "level": "note", "message": {"text": "Possibly dead Python function: registrar_envio"}, "properties": {"repobilityId": "7d9c95a33f12ce66", "scanner": "scanner-primary", "fingerprint": "54ea7f0592e3c1f9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "whatsapp_sender.py:159"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-681796c7f72c9841", "level": "note", "message": {"text": "Possibly dead Python function: gerar_pdf_rateio"}, "properties": {"repobilityId": "b74fd0ecc57c349c", "scanner": "scanner-primary", "fingerprint": "681796c7f72c9841", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "contalev_rateio_pdf.py:132"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d8d7c01c0fd5b151", "level": "note", "message": {"text": "Possibly dead Python function: uc_sufixo"}, "properties": {"repobilityId": "361010737a696a3f", "scanner": "scanner-primary", "fingerprint": "d8d7c01c0fd5b151", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "utils.py:276"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-874cdc4fe85bda34", "level": "note", "message": {"text": "Possibly dead Python function: detectar_consolidaveis"}, "properties": {"repobilityId": "08dc93da685e06b7", "scanner": "scanner-primary", "fingerprint": "874cdc4fe85bda34", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "consolidar_fixo.py:139"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-213a7a6f411dd270", "level": "note", "message": {"text": "Possibly dead Python function: parse_financeiros"}, "properties": {"repobilityId": "020115ff56ca8545", "scanner": "scanner-primary", "fingerprint": "213a7a6f411dd270", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extracao/equatorial_go/sections/financeiros.py:7"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0e6aa48302201ec7", "level": "note", "message": {"text": "Possibly dead Python function: parse_titular"}, "properties": {"repobilityId": "e2d0487854f6381c", "scanner": "scanner-primary", "fingerprint": "0e6aa48302201ec7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extracao/equatorial_go/sections/titular.py:5"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-154f54e3ffe3510d", "level": "note", "message": {"text": "Possibly dead Python function: parse_tributos"}, "properties": {"repobilityId": "b48ef9aeb78a97f2", "scanner": "scanner-primary", "fingerprint": "154f54e3ffe3510d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extracao/equatorial_go/sections/tributos.py:6"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8f7e9bc2b908bd5d", "level": "note", "message": {"text": "Possibly dead Python function: parse_consumo_scee"}, "properties": {"repobilityId": "a37c98b73513a9f0", "scanner": "scanner-primary", "fingerprint": "8f7e9bc2b908bd5d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extracao/equatorial_go/sections/consumo_scee.py:24"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-dcb835d36186f9a5", "level": "note", "message": {"text": "Possibly dead Python function: parse_cabecalho"}, "properties": {"repobilityId": "7dcf5e79fb93c300", "scanner": "scanner-primary", "fingerprint": "dcb835d36186f9a5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extracao/equatorial_go/sections/cabecalho.py:40"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ce393de959b186de", "level": "note", "message": {"text": "Possibly dead Python function: parse_medidor"}, "properties": {"repobilityId": "633c6c7312478a39", "scanner": "scanner-primary", "fingerprint": "ce393de959b186de", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extracao/equatorial_go/sections/medidor.py:6"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fcf07634ac96d0ac", "level": "note", "message": {"text": "Possibly dead Python function: parse_scee"}, "properties": {"repobilityId": "6f3d8da26002b0b9", "scanner": "scanner-primary", "fingerprint": "fcf07634ac96d0ac", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extracao/equatorial_go/sections/scee.py:38"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-982e2ef37aa36d6c", "level": "note", "message": {"text": "Possibly dead Python function: parse_historico"}, "properties": {"repobilityId": "52ecb304a7e87395", "scanner": "scanner-primary", "fingerprint": "982e2ef37aa36d6c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extracao/equatorial_go/sections/historico.py:7"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-c1b5e11ab195ffe6", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: mcr.microsoft.com/playwright/python:v1.49.0-jammy"}, "properties": {"repobilityId": "d086fded6ba2cdfb", "scanner": "scanner-primary", "fingerprint": "c1b5e11ab195ffe6", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-902cd2d83bf32d41", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in static/js/pix-validacao.js:62"}, "properties": {"repobilityId": "be8205d120b90332", "scanner": "scanner-primary", "fingerprint": "902cd2d83bf32d41", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "static/js/pix-validacao.js"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-e393b52409e905f3", "level": "note", "message": {"text": "Very large file: db.py (2768 lines)"}, "properties": {"repobilityId": "db396cedc3482ca7", "scanner": "scanner-primary", "fingerprint": "e393b52409e905f3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e169dbe847633f09", "level": "note", "message": {"text": "Very large file: app.py (8265 lines)"}, "properties": {"repobilityId": "5a74e6652f3a10d4", "scanner": "scanner-primary", "fingerprint": "e169dbe847633f09", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d46b6929ee9513d5", "level": "note", "message": {"text": "Very large file: baixar_equatorial.py (1485 lines)"}, "properties": {"repobilityId": "541d28f040164474", "scanner": "scanner-primary", "fingerprint": "d46b6929ee9513d5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "1c00fa8fea5013e2", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "5bfb0b19073b3257", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "20cd3fd6ae8240d5", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "b7b79125367d4a64", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "d709980f584a6991", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "6262b91d339d77f5", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-501ee8447357524d", "level": "none", "message": {"text": "Commented-code block (6 lines) in inter_api.py:6"}, "properties": {"repobilityId": "00845175ba617b0b", "scanner": "scanner-primary", "fingerprint": "501ee8447357524d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-156f3937cab0bf88", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 inter_api.py:61"}, "properties": {"repobilityId": "1b20e6ac976d8a5a", "scanner": "scanner-primary", "fingerprint": "156f3937cab0bf88", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b9988241b709e684", "level": "note", "message": {"text": "Legacy-named symbol `restaurar_backup` in backup_supabase.py:10"}, "properties": {"repobilityId": "079c845de2140138", "scanner": "scanner-primary", "fingerprint": "b9988241b709e684", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9ac2cbfc126e1cfd", "level": "note", "message": {"text": "Legacy-named symbol `rateio_planejar_old` in app.py:6737"}, "properties": {"repobilityId": "0eb783688373d0d5", "scanner": "scanner-primary", "fingerprint": "9ac2cbfc126e1cfd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-67976e834871cd44", "level": "none", "message": {"text": "Commented-code block (6 lines) in app.py:75"}, "properties": {"repobilityId": "d0ad6a8425b10b6c", "scanner": "scanner-primary", "fingerprint": "67976e834871cd44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d788f67aaa40cffd", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 app.py:1661"}, "properties": {"repobilityId": "b9c189af9e2892cb", "scanner": "scanner-primary", "fingerprint": "d788f67aaa40cffd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-513a430c3740194b", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 rodar_tudo.py:32"}, "properties": {"repobilityId": "2534d331c190c85b", "scanner": "scanner-primary", "fingerprint": "513a430c3740194b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c177ab4b3a73cec1", "level": "none", "message": {"text": "Commented-code block (6 lines) in contalev_cobranca_v2_padrao.py:137"}, "properties": {"repobilityId": "9577b2e60d430f1c", "scanner": "scanner-primary", "fingerprint": "c177ab4b3a73cec1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e2d64c59d5351b0", "level": "note", "message": {"text": "Stub function `_preparar_logos` (body is just `pass`/`return`) \u2014 contalev_cobranca_v2_padrao.py:429"}, "properties": {"repobilityId": "a3f22bfbf0e13e0c", "scanner": "scanner-primary", "fingerprint": "5e2d64c59d5351b0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-4a32d24bd107ccae", "level": "none", "message": {"text": "Commented-code block (5 lines) in baixar_equatorial.py:170"}, "properties": {"repobilityId": "d0e57d7aa308ee4c", "scanner": "scanner-primary", "fingerprint": "4a32d24bd107ccae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70fcae2d13c708b6", "level": "note", "message": {"text": "17 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "f21675bed249619c", "scanner": "scanner-primary", "fingerprint": "70fcae2d13c708b6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-efffd46bbf940d20", "level": "error", "message": {"text": "Flask mutation route `webhook` without `@login_required` \u2014 routes/inter.py:37"}, "properties": {"repobilityId": "3d697abc604b5bbf", "scanner": "scanner-primary", "fingerprint": "efffd46bbf940d20", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/inter.py"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-fbba4040a86bd79f", "level": "error", "message": {"text": "Flask mutation route `emitir` without `@login_required` \u2014 routes/inter.py:94"}, "properties": {"repobilityId": "2a75fc02144138cf", "scanner": "scanner-primary", "fingerprint": "fbba4040a86bd79f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/inter.py"}, "region": {"startLine": 94}}}]}, {"ruleId": "scanner-e760388a6741b47c", "level": "error", "message": {"text": "Flask mutation route `setup_webhook` without `@login_required` \u2014 routes/inter.py:210"}, "properties": {"repobilityId": "356e25b8fbd691e9", "scanner": "scanner-primary", "fingerprint": "e760388a6741b47c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/inter.py"}, "region": {"startLine": 210}}}]}, {"ruleId": "scanner-206426397212cdd1", "level": "error", "message": {"text": "Flask mutation route `investidor_gerar` without `@login_required` \u2014 routes/investidor.py:41"}, "properties": {"repobilityId": "d1044c648e0f6411", "scanner": "scanner-primary", "fingerprint": "206426397212cdd1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/investidor.py"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-7d32c7d78fe9d8ee", "level": "error", "message": {"text": "Flask mutation route `conciliacao_salvar_geracao` without `@login_required` \u2014 routes/conciliacao.py:162"}, "properties": {"repobilityId": "14e5797ea458fe9a", "scanner": "scanner-primary", "fingerprint": "7d32c7d78fe9d8ee", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/conciliacao.py"}, "region": {"startLine": 162}}}]}, {"ruleId": "scanner-b8c5c95d81c52f64", "level": "error", "message": {"text": "Flask mutation route `conciliacao_salvar_rateio` without `@login_required` \u2014 routes/conciliacao.py:214"}, "properties": {"repobilityId": "080c296a37e5c852", "scanner": "scanner-primary", "fingerprint": "b8c5c95d81c52f64", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/conciliacao.py"}, "region": {"startLine": 214}}}]}, {"ruleId": "scanner-ab659ce9fcead53b", "level": "error", "message": {"text": "Flask mutation route `conciliacao_copiar_rateio` without `@login_required` \u2014 routes/conciliacao.py:264"}, "properties": {"repobilityId": "069eaa356d6e1bcb", "scanner": "scanner-primary", "fingerprint": "ab659ce9fcead53b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/conciliacao.py"}, "region": {"startLine": 264}}}]}, {"ruleId": "scanner-96b2cbb8a8178e4e", "level": "error", "message": {"text": "Flask mutation route `titular_novo` without `@login_required` \u2014 routes/titulares.py:36"}, "properties": {"repobilityId": "9018f553bfbab2c6", "scanner": "scanner-primary", "fingerprint": "96b2cbb8a8178e4e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/titulares.py"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-c2d11bc9e48c9a50", "level": "error", "message": {"text": "Flask mutation route `titular_editar` without `@login_required` \u2014 routes/titulares.py:54"}, "properties": {"repobilityId": "774aad765f02e83b", "scanner": "scanner-primary", "fingerprint": "c2d11bc9e48c9a50", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/titulares.py"}, "region": {"startLine": 54}}}]}, {"ruleId": "scanner-5be7e8be6a731896", "level": "error", "message": {"text": "Flask mutation route `contrato_visualizar` without `@login_required` \u2014 routes/contrato.py:57"}, "properties": {"repobilityId": "f223bdd5f98b2b10", "scanner": "scanner-primary", "fingerprint": "5be7e8be6a731896", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/contrato.py"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-bac1a602ce462d11", "level": "error", "message": {"text": "Flask mutation route `contrato_gerar_pdf` without `@login_required` \u2014 routes/contrato.py:65"}, "properties": {"repobilityId": "1e88d4ef9b527a65", "scanner": "scanner-primary", "fingerprint": "bac1a602ce462d11", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/contrato.py"}, "region": {"startLine": 65}}}]}, {"ruleId": "scanner-9d997b8c648a83d5", "level": "error", "message": {"text": "Flask mutation route `whatsapp_config` without `@login_required` \u2014 routes/whatsapp.py:134"}, "properties": {"repobilityId": "a6dc860525e8b3b6", "scanner": "scanner-primary", "fingerprint": "9d997b8c648a83d5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/whatsapp.py"}, "region": {"startLine": 134}}}]}, {"ruleId": "scanner-dbed0c334c354042", "level": "error", "message": {"text": "Flask mutation route `recebedor_novo` without `@login_required` \u2014 routes/recebedores.py:36"}, "properties": {"repobilityId": "ca9dfccf46776386", "scanner": "scanner-primary", "fingerprint": "dbed0c334c354042", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/recebedores.py"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-6cb79f1f37e0a8a5", "level": "error", "message": {"text": "Flask mutation route `recebedor_editar` without `@login_required` \u2014 routes/recebedores.py:50"}, "properties": {"repobilityId": "bb3c6caa5cfce415", "scanner": "scanner-primary", "fingerprint": "6cb79f1f37e0a8a5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/recebedores.py"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-10c1c7647e6bb4dc", "level": "error", "message": {"text": "Flask mutation route `simulador` without `@login_required` \u2014 routes/simulador.py:31"}, "properties": {"repobilityId": "a451e0899c3e0c66", "scanner": "scanner-primary", "fingerprint": "10c1c7647e6bb4dc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/simulador.py"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-00f64620ad9e2e9a", "level": "error", "message": {"text": "Flask mutation route `simulacao_importar` without `@login_required` \u2014 routes/simulador.py:222"}, "properties": {"repobilityId": "695b2dcf71c48ddb", "scanner": "scanner-primary", "fingerprint": "00f64620ad9e2e9a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/simulador.py"}, "region": {"startLine": 222}}}]}, {"ruleId": "scanner-54b701ee059680cd", "level": "error", "message": {"text": "Flask mutation route `tarifa_nova` without `@login_required` \u2014 routes/tarifas.py:42"}, "properties": {"repobilityId": "c93d5c07b0167f4d", "scanner": "scanner-primary", "fingerprint": "54b701ee059680cd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/tarifas.py"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-4a69777754db51e9", "level": "error", "message": {"text": "Flask mutation route `tarifa_editar` without `@login_required` \u2014 routes/tarifas.py:63"}, "properties": {"repobilityId": "88e43859f760b3ec", "scanner": "scanner-primary", "fingerprint": "4a69777754db51e9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/tarifas.py"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-a03669e3af07ac63", "level": "error", "message": {"text": "Flask mutation route `api_tarifa_salvar` without `@login_required` \u2014 routes/tarifas.py:114"}, "properties": {"repobilityId": "57b173e52bfe69b1", "scanner": "scanner-primary", "fingerprint": "a03669e3af07ac63", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/tarifas.py"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-c79b2640c1865e8c", "level": "error", "message": {"text": "Flask mutation route `api_tarifa_remover` without `@login_required` \u2014 routes/tarifas.py:142"}, "properties": {"repobilityId": "2e84927bb61c999f", "scanner": "scanner-primary", "fingerprint": "c79b2640c1865e8c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/tarifas.py"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-1b4babeb1817a32a", "level": "error", "message": {"text": "Flask mutation route `importar` without `@login_required` \u2014 routes/importar.py:249"}, "properties": {"repobilityId": "fa1e7f58c59f59cd", "scanner": "scanner-primary", "fingerprint": "1b4babeb1817a32a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routes/importar.py"}, "region": {"startLine": 249}}}]}, {"ruleId": "scanner-4c7ad61ba1b23915", "level": "note", "message": {"text": "Unused endpoint: ANY /login"}, "properties": {"repobilityId": "2d2d4aa670f43283", "scanner": "scanner-primary", "fingerprint": "4c7ad61ba1b23915", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c9e449c3b9e73b73", "level": "note", "message": {"text": "Unused endpoint: ANY /logout"}, "properties": {"repobilityId": "1d0f5ae7dd7dbf56", "scanner": "scanner-primary", "fingerprint": "c9e449c3b9e73b73", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d1ece2d8b1c75c17", "level": "note", "message": {"text": "Unused endpoint: ANY /c/<token>"}, "properties": {"repobilityId": "b806a5c09fdde051", "scanner": "scanner-primary", "fingerprint": "d1ece2d8b1c75c17", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1a6d91f2236825bf", "level": "note", "message": {"text": "Unused endpoint: ANY /"}, "properties": {"repobilityId": "302fe621a396c5fd", "scanner": "scanner-primary", "fingerprint": "1a6d91f2236825bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ac1bbdfc8de0dee", "level": "note", "message": {"text": "Unused endpoint: ANY /clientes"}, "properties": {"repobilityId": "052f9dd32667fc01", "scanner": "scanner-primary", "fingerprint": "7ac1bbdfc8de0dee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4d5bbbe4b2375d2f", "level": "note", "message": {"text": "Unused endpoint: ANY /clientes/ver/<path:uc>"}, "properties": {"repobilityId": "3f22ed0bdefcda12", "scanner": "scanner-primary", "fingerprint": "4d5bbbe4b2375d2f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3f62fbc54b718e57", "level": "note", "message": {"text": "Unused endpoint: ANY /clientes/ver/<path:uc>/upload_documento"}, "properties": {"repobilityId": "527d2114bf954684", "scanner": "scanner-primary", "fingerprint": "3f62fbc54b718e57", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-20d1143476df4ae7", "level": "note", "message": {"text": "Unused endpoint: ANY /clientes/ver/<path:uc>/download_documento/<int:id_doc>"}, "properties": {"repobilityId": "f3b2eceb0e07bbff", "scanner": "scanner-primary", "fingerprint": "20d1143476df4ae7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ad1b6f0dfa5ba426", "level": "note", "message": {"text": "Unused endpoint: ANY /clientes/ver/<path:uc>/deletar_documento/<int:id_doc>"}, "properties": {"repobilityId": "d96daadb80434d23", "scanner": "scanner-primary", "fingerprint": "ad1b6f0dfa5ba426", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2c5f4586e1bf70c9", "level": "note", "message": {"text": "Unused endpoint: ANY /clientes/novo"}, "properties": {"repobilityId": "7162441bd3b6305e", "scanner": "scanner-primary", "fingerprint": "2c5f4586e1bf70c9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca57db129ffaf43c", "level": "note", "message": {"text": "Unused endpoint: ANY /clientes/nova_uc/<path:uc>"}, "properties": {"repobilityId": "93becb30fb5365dd", "scanner": "scanner-primary", "fingerprint": "ca57db129ffaf43c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3fd501bdbaba267a", "level": "note", "message": {"text": "Unused endpoint: ANY /clientes/editar/<path:uc>"}, "properties": {"repobilityId": "9bd7f7fcbfed791b", "scanner": "scanner-primary", "fingerprint": "3fd501bdbaba267a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d3ebcdc1c06e46e", "level": "note", "message": {"text": "Unused endpoint: ANY /clientes/remover/<path:uc>"}, "properties": {"repobilityId": "4a6cfca388c9d477", "scanner": "scanner-primary", "fingerprint": "8d3ebcdc1c06e46e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3e1af69062ec8758", "level": "note", "message": {"text": "Unused endpoint: ANY /clientes/remover_post"}, "properties": {"repobilityId": "b43303f55d0dd3bf", "scanner": "scanner-primary", "fingerprint": "3e1af69062ec8758", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ba9dbc3a3a2fd7fb", "level": "note", "message": {"text": "Unused endpoint: ANY /cobrancas/dia"}, "properties": {"repobilityId": "736917495bea7d2f", "scanner": "scanner-primary", "fingerprint": "ba9dbc3a3a2fd7fb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fce2e0060fa6efbf", "level": "note", "message": {"text": "Unused endpoint: ANY /cobrancas/dia/baixar"}, "properties": {"repobilityId": "efc1170088f7b5ef", "scanner": "scanner-primary", "fingerprint": "fce2e0060fa6efbf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2c30ca43f62b1900", "level": "note", "message": {"text": "Unused endpoint: ANY /cobrancas/dia/scee/<int:id_fatura>"}, "properties": {"repobilityId": "863842d3731ca6c5", "scanner": "scanner-primary", "fingerprint": "2c30ca43f62b1900", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5d3968deb858fb36", "level": "note", "message": {"text": "Unused endpoint: ANY /api/cliente/<path:uc>"}, "properties": {"repobilityId": "5fef123673b7a03e", "scanner": "scanner-primary", "fingerprint": "5d3968deb858fb36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ea8414386600c480", "level": "note", "message": {"text": "Unused endpoint: ANY /api/scee-reconciliacao"}, "properties": {"repobilityId": "10772d90d68b6c70", "scanner": "scanner-primary", "fingerprint": "ea8414386600c480", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0606eb6a7dd02949", "level": "note", "message": {"text": "Unused endpoint: ANY /api/extrair-fatura-equatorial"}, "properties": {"repobilityId": "cc4fef73f545f67c", "scanner": "scanner-primary", "fingerprint": "0606eb6a7dd02949", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aa6bff74968c74c8", "level": "note", "message": {"text": "Unused endpoint: ANY /api/clientes/busca"}, "properties": {"repobilityId": "6088ca2697a063c9", "scanner": "scanner-primary", "fingerprint": "aa6bff74968c74c8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-748d6b785b19df31", "level": "note", "message": {"text": "Unused endpoint: ANY /api/validar-pix-uc/<path:uc>"}, "properties": {"repobilityId": "8f4feb6904c8d41e", "scanner": "scanner-primary", "fingerprint": "748d6b785b19df31", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-91b0174de3221b0e", "level": "note", "message": {"text": "Unused endpoint: ANY /gerar/manual"}, "properties": {"repobilityId": "78551095391a4f0b", "scanner": "scanner-primary", "fingerprint": "91b0174de3221b0e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d44fa49b1251a318", "level": "note", "message": {"text": "Unused endpoint: ANY /gerar/auto"}, "properties": {"repobilityId": "b7240173dd1897c8", "scanner": "scanner-primary", "fingerprint": "d44fa49b1251a318", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d92cc847343ec092", "level": "note", "message": {"text": "Unused endpoint: ANY /gerar/auto/download"}, "properties": {"repobilityId": "4893c9edbe7b3989", "scanner": "scanner-primary", "fingerprint": "d92cc847343ec092", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-01c1e3a50fad4093", "level": "note", "message": {"text": "Unused endpoint: ANY /gerar/auto/progresso/<jid>"}, "properties": {"repobilityId": "5e9fe32f3796d1ab", "scanner": "scanner-primary", "fingerprint": "01c1e3a50fad4093", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-05308fd014da43c5", "level": "note", "message": {"text": "Unused endpoint: ANY /gerar/auto/baixar"}, "properties": {"repobilityId": "bd1003eb83ceb05d", "scanner": "scanner-primary", "fingerprint": "05308fd014da43c5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e03d8b3828e4c66b", "level": "note", "message": {"text": "Unused endpoint: ANY /gerar/auto/gerar-job"}, "properties": {"repobilityId": "4e31a3d73800b502", "scanner": "scanner-primary", "fingerprint": "e03d8b3828e4c66b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1201e3b9c8eaf2c1", "level": "note", "message": {"text": "Unused endpoint: ANY /resultado"}, "properties": {"repobilityId": "43c870ce5e8b1c20", "scanner": "scanner-primary", "fingerprint": "1201e3b9c8eaf2c1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-14b02ae534a1e61c", "level": "note", "message": {"text": "Unused endpoint: ANY /lote"}, "properties": {"repobilityId": "c1c3aedc26dff041", "scanner": "scanner-primary", "fingerprint": "14b02ae534a1e61c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-08d1d223ed4f6194", "level": "note", "message": {"text": "Unused endpoint: ANY /ver/<path:filename>"}, "properties": {"repobilityId": "28f4137dfedd7b29", "scanner": "scanner-primary", "fingerprint": "08d1d223ed4f6194", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f179a6dde29d292f", "level": "note", "message": {"text": "Unused endpoint: ANY /ver-equatorial/<item_id>"}, "properties": {"repobilityId": "2fcef4af4e3f0255", "scanner": "scanner-primary", "fingerprint": "f179a6dde29d292f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-385fefe3c8d209e0", "level": "note", "message": {"text": "Unused endpoint: ANY /download/<path:filename>"}, "properties": {"repobilityId": "c3e8103572de5950", "scanner": "scanner-primary", "fingerprint": "385fefe3c8d209e0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c152eca3c3f25d30", "level": "note", "message": {"text": "Unused endpoint: ANY /luz/<code>"}, "properties": {"repobilityId": "1501b28df41972e2", "scanner": "scanner-primary", "fingerprint": "c152eca3c3f25d30", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1d913a15e14b43be", "level": "note", "message": {"text": "Unused endpoint: ANY /fatura/<code>"}, "properties": {"repobilityId": "ac8d4c8417fa9396", "scanner": "scanner-primary", "fingerprint": "1d913a15e14b43be", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-909e2163cd92a287", "level": "note", "message": {"text": "Unused endpoint: ANY /soleconomia/<code>"}, "properties": {"repobilityId": "9954df69bf9e03ea", "scanner": "scanner-primary", "fingerprint": "909e2163cd92a287", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a3a0e08266dc3714", "level": "note", "message": {"text": "Unused endpoint: ANY /pix/<code>"}, "properties": {"repobilityId": "99305a882c9c9eca", "scanner": "scanner-primary", "fingerprint": "a3a0e08266dc3714", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90b4704bc038e861", "level": "note", "message": {"text": "Unused endpoint: ANY /pagar/<code>"}, "properties": {"repobilityId": "6acf6d2def803039", "scanner": "scanner-primary", "fingerprint": "90b4704bc038e861", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ab1af6e8911bf20b", "level": "note", "message": {"text": "Unused endpoint: ANY /whatsapp/<path:filename>"}, "properties": {"repobilityId": "837add8fc128950c", "scanner": "scanner-primary", "fingerprint": "ab1af6e8911bf20b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-72d0b279f1a4716d", "level": "note", "message": {"text": "Unused endpoint: ANY /whatsapp-pix/<int:id_fatura>"}, "properties": {"repobilityId": "6e45870849b46c26", "scanner": "scanner-primary", "fingerprint": "72d0b279f1a4716d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-04eeafeabe16b6c5", "level": "note", "message": {"text": "Unused endpoint: ANY /fatura/<int:id_fatura>/envio-whatsapp"}, "properties": {"repobilityId": "f6c5981459c0e6bc", "scanner": "scanner-primary", "fingerprint": "04eeafeabe16b6c5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f91c1427e7eaea55", "level": "note", "message": {"text": "Unused endpoint: ANY /pagamento"}, "properties": {"repobilityId": "69178800c6357a07", "scanner": "scanner-primary", "fingerprint": "f91c1427e7eaea55", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-25221e0f61f31edc", "level": "note", "message": {"text": "Unused endpoint: ANY /historico"}, "properties": {"repobilityId": "7dc2d56163f6975d", "scanner": "scanner-primary", "fingerprint": "25221e0f61f31edc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e98aeaf96767480e", "level": "note", "message": {"text": "Unused endpoint: ANY /faturas"}, "properties": {"repobilityId": "372f1702132a1b29", "scanner": "scanner-primary", "fingerprint": "e98aeaf96767480e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f9bca19f79894185", "level": "note", "message": {"text": "Unused endpoint: ANY /faturas/usinas"}, "properties": {"repobilityId": "c0c14d5bb9b5217d", "scanner": "scanner-primary", "fingerprint": "f9bca19f79894185", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ed5f690c3785f5bf", "level": "note", "message": {"text": "Unused endpoint: ANY /faturas/usina/<int:id_fu>/baixa"}, "properties": {"repobilityId": "7458fd3456bbe093", "scanner": "scanner-primary", "fingerprint": "ed5f690c3785f5bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4f944e9153f73683", "level": "note", "message": {"text": "Unused endpoint: ANY /faturas/usina/<int:id_fu>/reabrir"}, "properties": {"repobilityId": "2f6e20a4ccce2945", "scanner": "scanner-primary", "fingerprint": "4f944e9153f73683", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8ee592263f1d207c", "level": "note", "message": {"text": "Unused endpoint: ANY /faturas/usina/<int:id_fu>/excluir"}, "properties": {"repobilityId": "396f1877f3f0197d", "scanner": "scanner-primary", "fingerprint": "8ee592263f1d207c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3fb4a1ffefb2b2f9", "level": "note", "message": {"text": "Unused endpoint: ANY /faturas/usina/<int:id_fu>/pdf"}, "properties": {"repobilityId": "1248bcba17703b22", "scanner": "scanner-primary", "fingerprint": "3fb4a1ffefb2b2f9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c9fc4e8fe383609b", "level": "note", "message": {"text": "Unused endpoint: ANY /fatura/consolidar-fixo/<int:id_fatura>"}, "properties": {"repobilityId": "bc4c0ffe4b18910d", "scanner": "scanner-primary", "fingerprint": "c9fc4e8fe383609b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}