{"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-d5fcc19156bce1ce", "name": "Possibly dead Python function: check_holiday", "shortDescription": {"text": "Possibly dead Python function: check_holiday"}, "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-431c494dda38a603", "name": "Possibly dead Python function: send_followup_whatsapp", "shortDescription": {"text": "Possibly dead Python function: send_followup_whatsapp"}, "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-18db7ea0fe97542b", "name": "Possibly dead Python function: make_followup_call", "shortDescription": {"text": "Possibly dead Python function: make_followup_call"}, "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-ce8f890b1d76c35c", "name": "Possibly dead Python function: build_date_options", "shortDescription": {"text": "Possibly dead Python function: build_date_options"}, "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-40503239ed46621d", "name": "Possibly dead Python function: send_meta_template", "shortDescription": {"text": "Possibly dead Python function: send_meta_template"}, "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-166dff3c3df6a10e", "name": "ORM models found but no DB engine detected", "shortDescription": {"text": "ORM models found but no DB engine detected"}, "fullDescription": {"text": "The repo defines tables/models but no DB connection string was found. Likely lives in env vars or a config file the scanner didn't read."}, "properties": {"scanner": "scanner-primary", "layer": "data", "severity": "medium", "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-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "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-e9e31624dd99cc62", "name": "Very large file: main.py (2168 lines)", "shortDescription": {"text": "Very large file: main.py (2168 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": "1 test file(s) for 13 source file(s) (ratio 0.08). 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-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "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 195 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests, operator-readme. 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": "medium", "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-d09a9567a52bb029", "name": "Legacy-named symbol `create_prescription_v2` in main.py:1582", "shortDescription": {"text": "Legacy-named symbol `create_prescription_v2` in main.py:1582"}, "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-6b48dd5a46842a5e", "name": "Commented-code block (6 lines) in main.py:29", "shortDescription": {"text": "Commented-code block (6 lines) in main.py:29"}, "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-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\ndatabase.py:get_patient_by_mobile, database.py:get_patient_by_mobile\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nmain.py:med_line, main.py:med_line, main.py:med_line\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d2ba5637e367e66", "name": "FastAPI POST `whatsapp_webhook` without auth dependency \u2014 main_working.py:42", "shortDescription": {"text": "FastAPI POST `whatsapp_webhook` without auth dependency \u2014 main_working.py:42"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5044683632c068e5", "name": "FastAPI POST `onboard_clinic` without auth dependency \u2014 main.py:62", "shortDescription": {"text": "FastAPI POST `onboard_clinic` without auth dependency \u2014 main.py:62"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd7a462bc7d0a4bf", "name": "FastAPI POST `whatsapp_webhook` without auth dependency \u2014 main.py:188", "shortDescription": {"text": "FastAPI POST `whatsapp_webhook` without auth dependency \u2014 main.py:188"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c36d69f402601b9d", "name": "FastAPI POST `meta_webhook_inbound` without auth dependency \u2014 main.py:235", "shortDescription": {"text": "FastAPI POST `meta_webhook_inbound` without auth dependency \u2014 main.py:235"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d0a30c6e9ce20746", "name": "FastAPI POST `trigger_morning_reminders` without auth dependency \u2014 main.py:323", "shortDescription": {"text": "FastAPI POST `trigger_morning_reminders` without auth dependency \u2014 main.py:323"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f96f41dc97bc623", "name": "FastAPI POST `trigger_evening_reminders` without auth dependency \u2014 main.py:330", "shortDescription": {"text": "FastAPI POST `trigger_evening_reminders` without auth dependency \u2014 main.py:330"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3211a1f51fd58b6e", "name": "FastAPI POST `trigger_visit_summary` without auth dependency \u2014 main.py:337", "shortDescription": {"text": "FastAPI POST `trigger_visit_summary` without auth dependency \u2014 main.py:337"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-56d73a72dfd853b0", "name": "FastAPI POST `trigger_review_requests` without auth dependency \u2014 main.py:344", "shortDescription": {"text": "FastAPI POST `trigger_review_requests` without auth dependency \u2014 main.py:344"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6bd0c01e82f98a83", "name": "FastAPI POST `add_medicine` without auth dependency \u2014 main.py:371", "shortDescription": {"text": "FastAPI POST `add_medicine` without auth dependency \u2014 main.py:371"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d211265da6280e9", "name": "FastAPI PUT `update_medicine` without auth dependency \u2014 main.py:386", "shortDescription": {"text": "FastAPI PUT `update_medicine` without auth dependency \u2014 main.py:386"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2a30641a969dcc1e", "name": "FastAPI PATCH `increment_usage` without auth dependency \u2014 main.py:402", "shortDescription": {"text": "FastAPI PATCH `increment_usage` without auth dependency \u2014 main.py:402"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-22e4d10fced902cc", "name": "FastAPI DELETE `deactivate_medicine` without auth dependency \u2014 main.py:408", "shortDescription": {"text": "FastAPI DELETE `deactivate_medicine` without auth dependency \u2014 main.py:408"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e014932b10c69c5", "name": "FastAPI POST `write_prescription` without auth dependency \u2014 main.py:417", "shortDescription": {"text": "FastAPI POST `write_prescription` without auth dependency \u2014 main.py:417"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-08f8f4fa3486e21b", "name": "FastAPI PATCH `update_config` without auth dependency \u2014 main.py:607", "shortDescription": {"text": "FastAPI PATCH `update_config` without auth dependency \u2014 main.py:607"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-028edc8f453d3880", "name": "FastAPI POST `reload_scheduler_endpoint` without auth dependency \u2014 main.py:646", "shortDescription": {"text": "FastAPI POST `reload_scheduler_endpoint` without auth dependency \u2014 main.py:646"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c152089b6a20e481", "name": "FastAPI PATCH `update_patient` without auth dependency \u2014 main.py:922", "shortDescription": {"text": "FastAPI PATCH `update_patient` without auth dependency \u2014 main.py:922"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2922680af33b1177", "name": "FastAPI POST `create_visit` without auth dependency \u2014 main.py:949", "shortDescription": {"text": "FastAPI POST `create_visit` without auth dependency \u2014 main.py:949"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-89dbfba57cfb07eb", "name": "FastAPI POST `save_visit_vitals` without auth dependency \u2014 main.py:988", "shortDescription": {"text": "FastAPI POST `save_visit_vitals` without auth dependency \u2014 main.py:988"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec5b5b2cc68f3772", "name": "FastAPI PATCH `update_appointment_status` without auth dependency \u2014 main.py:1106", "shortDescription": {"text": "FastAPI PATCH `update_appointment_status` without auth dependency \u2014 main.py:1106"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8e94459162b2207e", "name": "FastAPI POST `mark_no_show` without auth dependency \u2014 main.py:1114", "shortDescription": {"text": "FastAPI POST `mark_no_show` without auth dependency \u2014 main.py:1114"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a6808aed3c5e46bc", "name": "FastAPI POST `bulk_cancel_appointments` without auth dependency \u2014 main.py:1209", "shortDescription": {"text": "FastAPI POST `bulk_cancel_appointments` without auth dependency \u2014 main.py:1209"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9c9749314a88715", "name": "FastAPI POST `queue_next` without auth dependency \u2014 main.py:1358", "shortDescription": {"text": "FastAPI POST `queue_next` without auth dependency \u2014 main.py:1358"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad5eb27e24ccf7db", "name": "FastAPI POST `queue_prev` without auth dependency \u2014 main.py:1374", "shortDescription": {"text": "FastAPI POST `queue_prev` without auth dependency \u2014 main.py:1374"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-48834f98e2bb2421", "name": "FastAPI POST `queue_set_token` without auth dependency \u2014 main.py:1391", "shortDescription": {"text": "FastAPI POST `queue_set_token` without auth dependency \u2014 main.py:1391"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-065a9d961ea810e1", "name": "FastAPI PUT `update_prescription` without auth dependency \u2014 main.py:1428", "shortDescription": {"text": "FastAPI PUT `update_prescription` without auth dependency \u2014 main.py:1428"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-00ed72fa91547ec0", "name": "FastAPI POST `create_prescription_v2` without auth dependency \u2014 main.py:1581", "shortDescription": {"text": "FastAPI POST `create_prescription_v2` without auth dependency \u2014 main.py:1581"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f92810487807dfc3", "name": "FastAPI POST `send_prescription_whatsapp` without auth dependency \u2014 main.py:1695", "shortDescription": {"text": "FastAPI POST `send_prescription_whatsapp` without auth dependency \u2014 main.py:1695"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a6fd0c344dfe51f6", "name": "FastAPI PATCH `answer_query` without auth dependency \u2014 main.py:1833", "shortDescription": {"text": "FastAPI PATCH `answer_query` without auth dependency \u2014 main.py:1833"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d0584690455b716c", "name": "FastAPI PATCH `update_doctor` without auth dependency \u2014 main.py:1895", "shortDescription": {"text": "FastAPI PATCH `update_doctor` without auth dependency \u2014 main.py:1895"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3fc0d03dcdb7c801", "name": "FastAPI POST `voice_followup` without auth dependency \u2014 main.py:1905", "shortDescription": {"text": "FastAPI POST `voice_followup` without auth dependency \u2014 main.py:1905"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-53f37211eba23573", "name": "FastAPI POST `voice_followup_response` without auth dependency \u2014 main.py:1912", "shortDescription": {"text": "FastAPI POST `voice_followup_response` without auth dependency \u2014 main.py:1912"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d6dae19d8941e984", "name": "FastAPI POST `trigger_followup_whatsapp` without auth dependency \u2014 main.py:1920", "shortDescription": {"text": "FastAPI POST `trigger_followup_whatsapp` without auth dependency \u2014 main.py:1920"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bad3b2cbf8e8886", "name": "FastAPI POST `trigger_followup_calls` without auth dependency \u2014 main.py:1927", "shortDescription": {"text": "FastAPI POST `trigger_followup_calls` without auth dependency \u2014 main.py:1927"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-93ef52b62a3caea5", "name": "FastAPI POST `book_appointment` without auth dependency \u2014 main.py:2032", "shortDescription": {"text": "FastAPI POST `book_appointment` without auth dependency \u2014 main.py:2032"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8de548a7a66a446f", "name": "FastAPI POST `test_meta_interactive` without auth dependency \u2014 main.py:2154", "shortDescription": {"text": "FastAPI POST `test_meta_interactive` without auth dependency \u2014 main.py:2154"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5b4744ae22c8cbaa", "name": "FastAPI POST `set_schedule_day` without auth dependency \u2014 routers/schedule.py:73", "shortDescription": {"text": "FastAPI POST `set_schedule_day` without auth dependency \u2014 routers/schedule.py:73"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c3d28e39f4c89185", "name": "FastAPI DELETE `delete_schedule_day` without auth dependency \u2014 routers/schedule.py:98", "shortDescription": {"text": "FastAPI DELETE `delete_schedule_day` without auth dependency \u2014 routers/schedule.py:98"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd2fd0d3f11a0a96", "name": "FastAPI POST `set_availability` without auth dependency \u2014 routers/availability.py:332", "shortDescription": {"text": "FastAPI POST `set_availability` without auth dependency \u2014 routers/availability.py:332"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-331d366983ba2554", "name": "FastAPI DELETE `delete_availability` without auth dependency \u2014 routers/availability.py:372", "shortDescription": {"text": "FastAPI DELETE `delete_availability` without auth dependency \u2014 routers/availability.py:372"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0f75c39be4245122", "name": "FastAPI POST `block_from_cancel` without auth dependency \u2014 routers/availability.py:389", "shortDescription": {"text": "FastAPI POST `block_from_cancel` without auth dependency \u2014 routers/availability.py:389"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8acd6948041ae518", "name": "FastAPI PUT `put_clinic_schedule` without auth dependency \u2014 routers/clinic_schedule.py:106", "shortDescription": {"text": "FastAPI PUT `put_clinic_schedule` without auth dependency \u2014 routers/clinic_schedule.py:106"}, "fullDescription": {"text": "`@router.put` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`main_working.py` declares `GET /` 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-a39f53a29e16e357", "name": "Unused endpoint: POST /webhook/whatsapp", "shortDescription": {"text": "Unused endpoint: POST /webhook/whatsapp"}, "fullDescription": {"text": "`main_working.py` declares `POST /webhook/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-e6998a72b78d202f", "name": "Unused endpoint: GET /webhook/whatsapp", "shortDescription": {"text": "Unused endpoint: GET /webhook/whatsapp"}, "fullDescription": {"text": "`main_working.py` declares `GET /webhook/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-2769d4121d1e4725", "name": "Unused endpoint: POST /admin/onboard-clinic", "shortDescription": {"text": "Unused endpoint: POST /admin/onboard-clinic"}, "fullDescription": {"text": "`main.py` declares `POST /admin/onboard-clinic` 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-9daee89b78e9ceac", "name": "Unused endpoint: GET /privacy", "shortDescription": {"text": "Unused endpoint: GET /privacy"}, "fullDescription": {"text": "`main.py` declares `GET /privacy` 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-661e1e3d738651ee", "name": "Unused endpoint: GET /webhook/meta", "shortDescription": {"text": "Unused endpoint: GET /webhook/meta"}, "fullDescription": {"text": "`main.py` declares `GET /webhook/meta` 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-b7a24d52c03fae11", "name": "Unused endpoint: POST /webhook/meta", "shortDescription": {"text": "Unused endpoint: POST /webhook/meta"}, "fullDescription": {"text": "`main.py` declares `POST /webhook/meta` 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-f71c8cf22a69a7bd", "name": "Unused endpoint: POST /trigger/morning-reminders", "shortDescription": {"text": "Unused endpoint: POST /trigger/morning-reminders"}, "fullDescription": {"text": "`main.py` declares `POST /trigger/morning-reminders` 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-faea7c2ac4079876", "name": "Unused endpoint: POST /trigger/evening-reminders", "shortDescription": {"text": "Unused endpoint: POST /trigger/evening-reminders"}, "fullDescription": {"text": "`main.py` declares `POST /trigger/evening-reminders` 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-41a8bf873e8d57af", "name": "Unused endpoint: POST /trigger/visit-summary", "shortDescription": {"text": "Unused endpoint: POST /trigger/visit-summary"}, "fullDescription": {"text": "`main.py` declares `POST /trigger/visit-summary` 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-40d7361c39fe1651", "name": "Unused endpoint: POST /trigger/review-requests", "shortDescription": {"text": "Unused endpoint: POST /trigger/review-requests"}, "fullDescription": {"text": "`main.py` declares `POST /trigger/review-requests` 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-aa21ef26be685144", "name": "Unused endpoint: GET /medicines/categories", "shortDescription": {"text": "Unused endpoint: GET /medicines/categories"}, "fullDescription": {"text": "`main.py` declares `GET /medicines/categories` 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-c51318fb9aa74e3f", "name": "Unused endpoint: GET /medicines", "shortDescription": {"text": "Unused endpoint: GET /medicines"}, "fullDescription": {"text": "`main.py` declares `GET /medicines` 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-03ef62c99af0abd4", "name": "Unused endpoint: POST /medicines", "shortDescription": {"text": "Unused endpoint: POST /medicines"}, "fullDescription": {"text": "`main.py` declares `POST /medicines` 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-673a88a62eadab7c", "name": "Unused endpoint: PUT /medicines/{medicine_id}", "shortDescription": {"text": "Unused endpoint: PUT /medicines/{medicine_id}"}, "fullDescription": {"text": "`main.py` declares `PUT /medicines/{medicine_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-33d433e08b37e0b7", "name": "Unused endpoint: PATCH /medicines/{medicine_id}/increment-usage", "shortDescription": {"text": "Unused endpoint: PATCH /medicines/{medicine_id}/increment-usage"}, "fullDescription": {"text": "`main.py` declares `PATCH /medicines/{medicine_id}/increment-usage` 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-6c3398108a4ea38d", "name": "Unused endpoint: DELETE /medicines/{medicine_id}", "shortDescription": {"text": "Unused endpoint: DELETE /medicines/{medicine_id}"}, "fullDescription": {"text": "`main.py` declares `DELETE /medicines/{medicine_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-a8006d5a4f7f2151", "name": "Unused endpoint: POST /prescriptions/write", "shortDescription": {"text": "Unused endpoint: POST /prescriptions/write"}, "fullDescription": {"text": "`main.py` declares `POST /prescriptions/write` 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-db0033560319ee44", "name": "Unused endpoint: GET /config/{doctor_id}", "shortDescription": {"text": "Unused endpoint: GET /config/{doctor_id}"}, "fullDescription": {"text": "`main.py` declares `GET /config/{doctor_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-119fa40bfa6467bc", "name": "Unused endpoint: PATCH /config/{doctor_id}/{config_key}", "shortDescription": {"text": "Unused endpoint: PATCH /config/{doctor_id}/{config_key}"}, "fullDescription": {"text": "`main.py` declares `PATCH /config/{doctor_id}/{config_key}` 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-2f2b0bdc62c66e26", "name": "Unused endpoint: POST /config/reload-scheduler", "shortDescription": {"text": "Unused endpoint: POST /config/reload-scheduler"}, "fullDescription": {"text": "`main.py` declares `POST /config/reload-scheduler` 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-80628c538fe683e6", "name": "Unused endpoint: GET /dashboard/stats", "shortDescription": {"text": "Unused endpoint: GET /dashboard/stats"}, "fullDescription": {"text": "`main.py` declares `GET /dashboard/stats` 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-eb75eed7f07791ad", "name": "Unused endpoint: GET /patients", "shortDescription": {"text": "Unused endpoint: GET /patients"}, "fullDescription": {"text": "`main.py` declares `GET /patients` 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-e447db421e3d5fb0", "name": "Unused endpoint: GET /patients/family/{head_mobile}", "shortDescription": {"text": "Unused endpoint: GET /patients/family/{head_mobile}"}, "fullDescription": {"text": "`main.py` declares `GET /patients/family/{head_mobile}` 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-3b1495a10fc21d91", "name": "Unused endpoint: GET /patients/lookup", "shortDescription": {"text": "Unused endpoint: GET /patients/lookup"}, "fullDescription": {"text": "`main.py` declares `GET /patients/lookup` 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-9ac52f239536fcdc", "name": "Unused endpoint: POST /patients/register", "shortDescription": {"text": "Unused endpoint: POST /patients/register"}, "fullDescription": {"text": "`main.py` declares `POST /patients/register` 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-7478660a86f758ed", "name": "Unused endpoint: GET /patients/search", "shortDescription": {"text": "Unused endpoint: GET /patients/search"}, "fullDescription": {"text": "`main.py` declares `GET /patients/search` 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-c8a1db153140c2a1", "name": "Unused endpoint: GET /patients/{patient_id}", "shortDescription": {"text": "Unused endpoint: GET /patients/{patient_id}"}, "fullDescription": {"text": "`main.py` declares `GET /patients/{patient_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-14451a0becd92c85", "name": "Unused endpoint: PATCH /patients/{patient_id}", "shortDescription": {"text": "Unused endpoint: PATCH /patients/{patient_id}"}, "fullDescription": {"text": "`main.py` declares `PATCH /patients/{patient_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-69fdd23f10e04d72", "name": "Unused endpoint: GET /patients/{patient_id}/visits", "shortDescription": {"text": "Unused endpoint: GET /patients/{patient_id}/visits"}, "fullDescription": {"text": "`main.py` declares `GET /patients/{patient_id}/visits` 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-7fbf9476603f06c8", "name": "Unused endpoint: POST /visits", "shortDescription": {"text": "Unused endpoint: POST /visits"}, "fullDescription": {"text": "`main.py` declares `POST /visits` 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-039d917b49af26c4", "name": "Unused endpoint: GET /visits/{visit_id}/vitals", "shortDescription": {"text": "Unused endpoint: GET /visits/{visit_id}/vitals"}, "fullDescription": {"text": "`main.py` declares `GET /visits/{visit_id}/vitals` 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-ab8caf9c9a69571b", "name": "Unused endpoint: POST /visits/{visit_id}/vitals", "shortDescription": {"text": "Unused endpoint: POST /visits/{visit_id}/vitals"}, "fullDescription": {"text": "`main.py` declares `POST /visits/{visit_id}/vitals` 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-51d4ee442c873d8a", "name": "Unused endpoint: GET /patients/{patient_id}/vitals-history", "shortDescription": {"text": "Unused endpoint: GET /patients/{patient_id}/vitals-history"}, "fullDescription": {"text": "`main.py` declares `GET /patients/{patient_id}/vitals-history` 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-6c8a561a04af100e", "name": "Unused endpoint: GET /appointments/today", "shortDescription": {"text": "Unused endpoint: GET /appointments/today"}, "fullDescription": {"text": "`main.py` declares `GET /appointments/today` 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-ac49bf3bea491b9d", "name": "Unused endpoint: GET /appointments", "shortDescription": {"text": "Unused endpoint: GET /appointments"}, "fullDescription": {"text": "`main.py` declares `GET /appointments` 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-8f8ae23aff0abe81", "name": "Unused endpoint: PATCH /appointments/{appointment_id}/status", "shortDescription": {"text": "Unused endpoint: PATCH /appointments/{appointment_id}/status"}, "fullDescription": {"text": "`main.py` declares `PATCH /appointments/{appointment_id}/status` 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-b8b1a53143b4d25e", "name": "Unused endpoint: POST /appointments/{appointment_id}/no-show", "shortDescription": {"text": "Unused endpoint: POST /appointments/{appointment_id}/no-show"}, "fullDescription": {"text": "`main.py` declares `POST /appointments/{appointment_id}/no-show` 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-7e7668396d5f84d2", "name": "Unused endpoint: POST /appointments/bulk-cancel", "shortDescription": {"text": "Unused endpoint: POST /appointments/bulk-cancel"}, "fullDescription": {"text": "`main.py` declares `POST /appointments/bulk-cancel` 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-e725f351c5422835", "name": "Unused endpoint: GET /queue/status", "shortDescription": {"text": "Unused endpoint: GET /queue/status"}, "fullDescription": {"text": "`main.py` declares `GET /queue/status` 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-6e07071265813709", "name": "Unused endpoint: POST /queue/next", "shortDescription": {"text": "Unused endpoint: POST /queue/next"}, "fullDescription": {"text": "`main.py` declares `POST /queue/next` 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-2d89e7df224ec075", "name": "Unused endpoint: POST /queue/prev", "shortDescription": {"text": "Unused endpoint: POST /queue/prev"}, "fullDescription": {"text": "`main.py` declares `POST /queue/prev` 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-76b385f432475936", "name": "Unused endpoint: POST /queue/set-token", "shortDescription": {"text": "Unused endpoint: POST /queue/set-token"}, "fullDescription": {"text": "`main.py` declares `POST /queue/set-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-9dadc1d0c618e9fe", "name": "Unused endpoint: GET /prescriptions/{prescription_id}/detail", "shortDescription": {"text": "Unused endpoint: GET /prescriptions/{prescription_id}/detail"}, "fullDescription": {"text": "`main.py` declares `GET /prescriptions/{prescription_id}/detail` 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-54a6b59f8f466542", "name": "Unused endpoint: PUT /prescriptions/{prescription_id}", "shortDescription": {"text": "Unused endpoint: PUT /prescriptions/{prescription_id}"}, "fullDescription": {"text": "`main.py` declares `PUT /prescriptions/{prescription_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-c676bbb5b56156ed", "name": "Unused endpoint: GET /prescriptions/active", "shortDescription": {"text": "Unused endpoint: GET /prescriptions/active"}, "fullDescription": {"text": "`main.py` declares `GET /prescriptions/active` 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-474d7cfa95c99537", "name": "Unused endpoint: GET /prescriptions", "shortDescription": {"text": "Unused endpoint: GET /prescriptions"}, "fullDescription": {"text": "`main.py` declares `GET /prescriptions` 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-9d588fc3254659fc", "name": "Unused endpoint: POST /prescriptions", "shortDescription": {"text": "Unused endpoint: POST /prescriptions"}, "fullDescription": {"text": "`main.py` declares `POST /prescriptions` 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-e6c8a49a0ec3a916", "name": "Unused endpoint: POST /prescriptions/{prescription_id}/send-whatsapp", "shortDescription": {"text": "Unused endpoint: POST /prescriptions/{prescription_id}/send-whatsapp"}, "fullDescription": {"text": "`main.py` declares `POST /prescriptions/{prescription_id}/send-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-ef85077676911b7e", "name": "Unused endpoint: GET /followups/pending", "shortDescription": {"text": "Unused endpoint: GET /followups/pending"}, "fullDescription": {"text": "`main.py` declares `GET /followups/pending` 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/20466"}, "properties": {"repository": "Sujai06062011/pra-backend-meta", "repoUrl": "https://github.com/Sujai06062011/pra-backend-meta", "branch": "main"}, "results": [{"ruleId": "scanner-d5fcc19156bce1ce", "level": "note", "message": {"text": "Possibly dead Python function: check_holiday"}, "properties": {"repobilityId": "b6c1a1abfa73f678", "scanner": "scanner-primary", "fingerprint": "d5fcc19156bce1ce", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "database.py:126"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-431c494dda38a603", "level": "note", "message": {"text": "Possibly dead Python function: send_followup_whatsapp"}, "properties": {"repobilityId": "487452a82b2de0f2", "scanner": "scanner-primary", "fingerprint": "431c494dda38a603", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "followup.py:314"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-18db7ea0fe97542b", "level": "note", "message": {"text": "Possibly dead Python function: make_followup_call"}, "properties": {"repobilityId": "b3111e4ab69be0e4", "scanner": "scanner-primary", "fingerprint": "18db7ea0fe97542b", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "followup.py:347"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ce8f890b1d76c35c", "level": "note", "message": {"text": "Possibly dead Python function: build_date_options"}, "properties": {"repobilityId": "4be84b3e6de4939b", "scanner": "scanner-primary", "fingerprint": "ce8f890b1d76c35c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "whatsapp_handler.py:133"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-40503239ed46621d", "level": "note", "message": {"text": "Possibly dead Python function: send_meta_template"}, "properties": {"repobilityId": "3774ab9ff1c596a7", "scanner": "scanner-primary", "fingerprint": "40503239ed46621d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py:142"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-166dff3c3df6a10e", "level": "warning", "message": {"text": "ORM models found but no DB engine detected"}, "properties": {"repobilityId": "cda36de65e114635", "scanner": "scanner-primary", "fingerprint": "166dff3c3df6a10e", "layer": "data", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"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-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"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-e9e31624dd99cc62", "level": "note", "message": {"text": "Very large file: main.py (2168 lines)"}, "properties": {"repobilityId": "d28330f452f23706", "scanner": "scanner-primary", "fingerprint": "e9e31624dd99cc62", "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": "cd91c90fa92fb7bf", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-faccb9061e9b52a0", "level": "note", "message": {"text": "No README detected"}, "properties": {"repobilityId": "322fdc4b4d0c6195", "scanner": "scanner-primary", "fingerprint": "faccb9061e9b52a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "fb1a249f786c9d3a", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "789c01cca614df83", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "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": "7f87c62e12468af4", "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": "2fcf93e85ea68a2a", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-d09a9567a52bb029", "level": "note", "message": {"text": "Legacy-named symbol `create_prescription_v2` in main.py:1582"}, "properties": {"repobilityId": "61bd39f53f275075", "scanner": "scanner-primary", "fingerprint": "d09a9567a52bb029", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6b48dd5a46842a5e", "level": "none", "message": {"text": "Commented-code block (6 lines) in main.py:29"}, "properties": {"repobilityId": "f73d0928a74832f7", "scanner": "scanner-primary", "fingerprint": "6b48dd5a46842a5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "c47029c7aa84eaaf", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "1b14e0723a07df90", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "78e9a1133cadd84e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "11d5cf8d913ba0a2", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "6fd7a2d18d864837", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "a9c5f0b158772175", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "4fc5e56dd37de7e0", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "e9173acceede8c0e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-3d2ba5637e367e66", "level": "error", "message": {"text": "FastAPI POST `whatsapp_webhook` without auth dependency \u2014 main_working.py:42"}, "properties": {"repobilityId": "39f97aee582aa276", "scanner": "scanner-primary", "fingerprint": "3d2ba5637e367e66", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main_working.py"}, "region": {"startLine": 42}}}]}, {"ruleId": "scanner-5044683632c068e5", "level": "error", "message": {"text": "FastAPI POST `onboard_clinic` without auth dependency \u2014 main.py:62"}, "properties": {"repobilityId": "b725e438ffcba211", "scanner": "scanner-primary", "fingerprint": "5044683632c068e5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-dd7a462bc7d0a4bf", "level": "error", "message": {"text": "FastAPI POST `whatsapp_webhook` without auth dependency \u2014 main.py:188"}, "properties": {"repobilityId": "3ddddc0d6cf6f676", "scanner": "scanner-primary", "fingerprint": "dd7a462bc7d0a4bf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 188}}}]}, {"ruleId": "scanner-c36d69f402601b9d", "level": "error", "message": {"text": "FastAPI POST `meta_webhook_inbound` without auth dependency \u2014 main.py:235"}, "properties": {"repobilityId": "aefd97c3e0090ecc", "scanner": "scanner-primary", "fingerprint": "c36d69f402601b9d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 235}}}]}, {"ruleId": "scanner-d0a30c6e9ce20746", "level": "error", "message": {"text": "FastAPI POST `trigger_morning_reminders` without auth dependency \u2014 main.py:323"}, "properties": {"repobilityId": "8c6f7baf477595c4", "scanner": "scanner-primary", "fingerprint": "d0a30c6e9ce20746", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 323}}}]}, {"ruleId": "scanner-1f96f41dc97bc623", "level": "error", "message": {"text": "FastAPI POST `trigger_evening_reminders` without auth dependency \u2014 main.py:330"}, "properties": {"repobilityId": "77192344747b02fa", "scanner": "scanner-primary", "fingerprint": "1f96f41dc97bc623", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 330}}}]}, {"ruleId": "scanner-3211a1f51fd58b6e", "level": "error", "message": {"text": "FastAPI POST `trigger_visit_summary` without auth dependency \u2014 main.py:337"}, "properties": {"repobilityId": "238968cc164a09df", "scanner": "scanner-primary", "fingerprint": "3211a1f51fd58b6e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 337}}}]}, {"ruleId": "scanner-56d73a72dfd853b0", "level": "error", "message": {"text": "FastAPI POST `trigger_review_requests` without auth dependency \u2014 main.py:344"}, "properties": {"repobilityId": "f558a912eae34d93", "scanner": "scanner-primary", "fingerprint": "56d73a72dfd853b0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 344}}}]}, {"ruleId": "scanner-6bd0c01e82f98a83", "level": "error", "message": {"text": "FastAPI POST `add_medicine` without auth dependency \u2014 main.py:371"}, "properties": {"repobilityId": "8d591150fcc5fa9f", "scanner": "scanner-primary", "fingerprint": "6bd0c01e82f98a83", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 371}}}]}, {"ruleId": "scanner-1d211265da6280e9", "level": "error", "message": {"text": "FastAPI PUT `update_medicine` without auth dependency \u2014 main.py:386"}, "properties": {"repobilityId": "ea2acb57740bf027", "scanner": "scanner-primary", "fingerprint": "1d211265da6280e9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 386}}}]}, {"ruleId": "scanner-2a30641a969dcc1e", "level": "error", "message": {"text": "FastAPI PATCH `increment_usage` without auth dependency \u2014 main.py:402"}, "properties": {"repobilityId": "ea8c20e8a0a9e5cc", "scanner": "scanner-primary", "fingerprint": "2a30641a969dcc1e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 402}}}]}, {"ruleId": "scanner-22e4d10fced902cc", "level": "error", "message": {"text": "FastAPI DELETE `deactivate_medicine` without auth dependency \u2014 main.py:408"}, "properties": {"repobilityId": "0f2eb21a74344df0", "scanner": "scanner-primary", "fingerprint": "22e4d10fced902cc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 408}}}]}, {"ruleId": "scanner-1e014932b10c69c5", "level": "error", "message": {"text": "FastAPI POST `write_prescription` without auth dependency \u2014 main.py:417"}, "properties": {"repobilityId": "6320ed333437073f", "scanner": "scanner-primary", "fingerprint": "1e014932b10c69c5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 417}}}]}, {"ruleId": "scanner-08f8f4fa3486e21b", "level": "error", "message": {"text": "FastAPI PATCH `update_config` without auth dependency \u2014 main.py:607"}, "properties": {"repobilityId": "baaf743ce7476220", "scanner": "scanner-primary", "fingerprint": "08f8f4fa3486e21b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 607}}}]}, {"ruleId": "scanner-028edc8f453d3880", "level": "error", "message": {"text": "FastAPI POST `reload_scheduler_endpoint` without auth dependency \u2014 main.py:646"}, "properties": {"repobilityId": "a3e0db45c025c443", "scanner": "scanner-primary", "fingerprint": "028edc8f453d3880", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 646}}}]}, {"ruleId": "scanner-c152089b6a20e481", "level": "error", "message": {"text": "FastAPI PATCH `update_patient` without auth dependency \u2014 main.py:922"}, "properties": {"repobilityId": "83b7f40050424d30", "scanner": "scanner-primary", "fingerprint": "c152089b6a20e481", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 922}}}]}, {"ruleId": "scanner-2922680af33b1177", "level": "error", "message": {"text": "FastAPI POST `create_visit` without auth dependency \u2014 main.py:949"}, "properties": {"repobilityId": "f14beb65626130c9", "scanner": "scanner-primary", "fingerprint": "2922680af33b1177", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 949}}}]}, {"ruleId": "scanner-89dbfba57cfb07eb", "level": "error", "message": {"text": "FastAPI POST `save_visit_vitals` without auth dependency \u2014 main.py:988"}, "properties": {"repobilityId": "4baf6fbac7eaa992", "scanner": "scanner-primary", "fingerprint": "89dbfba57cfb07eb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 988}}}]}, {"ruleId": "scanner-ec5b5b2cc68f3772", "level": "error", "message": {"text": "FastAPI PATCH `update_appointment_status` without auth dependency \u2014 main.py:1106"}, "properties": {"repobilityId": "2be335e93ef81bfa", "scanner": "scanner-primary", "fingerprint": "ec5b5b2cc68f3772", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 1106}}}]}, {"ruleId": "scanner-8e94459162b2207e", "level": "error", "message": {"text": "FastAPI POST `mark_no_show` without auth dependency \u2014 main.py:1114"}, "properties": {"repobilityId": "c9145b94fd864f55", "scanner": "scanner-primary", "fingerprint": "8e94459162b2207e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 1114}}}]}, {"ruleId": "scanner-a6808aed3c5e46bc", "level": "error", "message": {"text": "FastAPI POST `bulk_cancel_appointments` without auth dependency \u2014 main.py:1209"}, "properties": {"repobilityId": "edc866059dba4fb6", "scanner": "scanner-primary", "fingerprint": "a6808aed3c5e46bc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 1209}}}]}, {"ruleId": "scanner-f9c9749314a88715", "level": "error", "message": {"text": "FastAPI POST `queue_next` without auth dependency \u2014 main.py:1358"}, "properties": {"repobilityId": "6b0735fb09fcb181", "scanner": "scanner-primary", "fingerprint": "f9c9749314a88715", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 1358}}}]}, {"ruleId": "scanner-ad5eb27e24ccf7db", "level": "error", "message": {"text": "FastAPI POST `queue_prev` without auth dependency \u2014 main.py:1374"}, "properties": {"repobilityId": "da1b26dd04167459", "scanner": "scanner-primary", "fingerprint": "ad5eb27e24ccf7db", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 1374}}}]}, {"ruleId": "scanner-48834f98e2bb2421", "level": "error", "message": {"text": "FastAPI POST `queue_set_token` without auth dependency \u2014 main.py:1391"}, "properties": {"repobilityId": "27015f15c999796e", "scanner": "scanner-primary", "fingerprint": "48834f98e2bb2421", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 1391}}}]}, {"ruleId": "scanner-065a9d961ea810e1", "level": "error", "message": {"text": "FastAPI PUT `update_prescription` without auth dependency \u2014 main.py:1428"}, "properties": {"repobilityId": "c484d2c407b87c22", "scanner": "scanner-primary", "fingerprint": "065a9d961ea810e1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 1428}}}]}, {"ruleId": "scanner-00ed72fa91547ec0", "level": "error", "message": {"text": "FastAPI POST `create_prescription_v2` without auth dependency \u2014 main.py:1581"}, "properties": {"repobilityId": "f1408707543b6cf2", "scanner": "scanner-primary", "fingerprint": "00ed72fa91547ec0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 1581}}}]}, {"ruleId": "scanner-f92810487807dfc3", "level": "error", "message": {"text": "FastAPI POST `send_prescription_whatsapp` without auth dependency \u2014 main.py:1695"}, "properties": {"repobilityId": "6ab06c3d5e89d406", "scanner": "scanner-primary", "fingerprint": "f92810487807dfc3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 1695}}}]}, {"ruleId": "scanner-a6fd0c344dfe51f6", "level": "error", "message": {"text": "FastAPI PATCH `answer_query` without auth dependency \u2014 main.py:1833"}, "properties": {"repobilityId": "7c58df02f81d5d95", "scanner": "scanner-primary", "fingerprint": "a6fd0c344dfe51f6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 1833}}}]}, {"ruleId": "scanner-d0584690455b716c", "level": "error", "message": {"text": "FastAPI PATCH `update_doctor` without auth dependency \u2014 main.py:1895"}, "properties": {"repobilityId": "839bb1984faa470e", "scanner": "scanner-primary", "fingerprint": "d0584690455b716c", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 1895}}}]}, {"ruleId": "scanner-3fc0d03dcdb7c801", "level": "error", "message": {"text": "FastAPI POST `voice_followup` without auth dependency \u2014 main.py:1905"}, "properties": {"repobilityId": "9b34e6befd2003fb", "scanner": "scanner-primary", "fingerprint": "3fc0d03dcdb7c801", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 1905}}}]}, {"ruleId": "scanner-53f37211eba23573", "level": "error", "message": {"text": "FastAPI POST `voice_followup_response` without auth dependency \u2014 main.py:1912"}, "properties": {"repobilityId": "7aed72ae12f6a8b9", "scanner": "scanner-primary", "fingerprint": "53f37211eba23573", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 1912}}}]}, {"ruleId": "scanner-d6dae19d8941e984", "level": "error", "message": {"text": "FastAPI POST `trigger_followup_whatsapp` without auth dependency \u2014 main.py:1920"}, "properties": {"repobilityId": "30b8edc5a61d7702", "scanner": "scanner-primary", "fingerprint": "d6dae19d8941e984", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 1920}}}]}, {"ruleId": "scanner-1bad3b2cbf8e8886", "level": "error", "message": {"text": "FastAPI POST `trigger_followup_calls` without auth dependency \u2014 main.py:1927"}, "properties": {"repobilityId": "79e263a1c9f11cf4", "scanner": "scanner-primary", "fingerprint": "1bad3b2cbf8e8886", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 1927}}}]}, {"ruleId": "scanner-93ef52b62a3caea5", "level": "error", "message": {"text": "FastAPI POST `book_appointment` without auth dependency \u2014 main.py:2032"}, "properties": {"repobilityId": "ffdd6741be2f19e3", "scanner": "scanner-primary", "fingerprint": "93ef52b62a3caea5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 2032}}}]}, {"ruleId": "scanner-8de548a7a66a446f", "level": "error", "message": {"text": "FastAPI POST `test_meta_interactive` without auth dependency \u2014 main.py:2154"}, "properties": {"repobilityId": "582f3a8d09daa0bf", "scanner": "scanner-primary", "fingerprint": "8de548a7a66a446f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "main.py"}, "region": {"startLine": 2154}}}]}, {"ruleId": "scanner-5b4744ae22c8cbaa", "level": "error", "message": {"text": "FastAPI POST `set_schedule_day` without auth dependency \u2014 routers/schedule.py:73"}, "properties": {"repobilityId": "dd68f78d81f3bbb6", "scanner": "scanner-primary", "fingerprint": "5b4744ae22c8cbaa", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routers/schedule.py"}, "region": {"startLine": 73}}}]}, {"ruleId": "scanner-c3d28e39f4c89185", "level": "error", "message": {"text": "FastAPI DELETE `delete_schedule_day` without auth dependency \u2014 routers/schedule.py:98"}, "properties": {"repobilityId": "04dfcebba1e679c4", "scanner": "scanner-primary", "fingerprint": "c3d28e39f4c89185", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routers/schedule.py"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-bd2fd0d3f11a0a96", "level": "error", "message": {"text": "FastAPI POST `set_availability` without auth dependency \u2014 routers/availability.py:332"}, "properties": {"repobilityId": "ce877853db987201", "scanner": "scanner-primary", "fingerprint": "bd2fd0d3f11a0a96", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routers/availability.py"}, "region": {"startLine": 332}}}]}, {"ruleId": "scanner-331d366983ba2554", "level": "error", "message": {"text": "FastAPI DELETE `delete_availability` without auth dependency \u2014 routers/availability.py:372"}, "properties": {"repobilityId": "6e1433edfa08b241", "scanner": "scanner-primary", "fingerprint": "331d366983ba2554", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routers/availability.py"}, "region": {"startLine": 372}}}]}, {"ruleId": "scanner-0f75c39be4245122", "level": "error", "message": {"text": "FastAPI POST `block_from_cancel` without auth dependency \u2014 routers/availability.py:389"}, "properties": {"repobilityId": "2110ffd10c3d8f23", "scanner": "scanner-primary", "fingerprint": "0f75c39be4245122", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routers/availability.py"}, "region": {"startLine": 389}}}]}, {"ruleId": "scanner-8acd6948041ae518", "level": "error", "message": {"text": "FastAPI PUT `put_clinic_schedule` without auth dependency \u2014 routers/clinic_schedule.py:106"}, "properties": {"repobilityId": "d7af8579b7e6cf0b", "scanner": "scanner-primary", "fingerprint": "8acd6948041ae518", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "routers/clinic_schedule.py"}, "region": {"startLine": 106}}}]}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "d47cf3ada9e73bf5", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a39f53a29e16e357", "level": "note", "message": {"text": "Unused endpoint: POST /webhook/whatsapp"}, "properties": {"repobilityId": "24946ec5c9ff1456", "scanner": "scanner-primary", "fingerprint": "a39f53a29e16e357", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e6998a72b78d202f", "level": "note", "message": {"text": "Unused endpoint: GET /webhook/whatsapp"}, "properties": {"repobilityId": "34ef284658aac83b", "scanner": "scanner-primary", "fingerprint": "e6998a72b78d202f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2769d4121d1e4725", "level": "note", "message": {"text": "Unused endpoint: POST /admin/onboard-clinic"}, "properties": {"repobilityId": "a035d7d4d1c01f09", "scanner": "scanner-primary", "fingerprint": "2769d4121d1e4725", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9daee89b78e9ceac", "level": "note", "message": {"text": "Unused endpoint: GET /privacy"}, "properties": {"repobilityId": "6fc347b770a7cb02", "scanner": "scanner-primary", "fingerprint": "9daee89b78e9ceac", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-661e1e3d738651ee", "level": "note", "message": {"text": "Unused endpoint: GET /webhook/meta"}, "properties": {"repobilityId": "11bcbee22b51390e", "scanner": "scanner-primary", "fingerprint": "661e1e3d738651ee", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b7a24d52c03fae11", "level": "note", "message": {"text": "Unused endpoint: POST /webhook/meta"}, "properties": {"repobilityId": "26b0bf0debcf953d", "scanner": "scanner-primary", "fingerprint": "b7a24d52c03fae11", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f71c8cf22a69a7bd", "level": "note", "message": {"text": "Unused endpoint: POST /trigger/morning-reminders"}, "properties": {"repobilityId": "80ba285a8232822a", "scanner": "scanner-primary", "fingerprint": "f71c8cf22a69a7bd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-faea7c2ac4079876", "level": "note", "message": {"text": "Unused endpoint: POST /trigger/evening-reminders"}, "properties": {"repobilityId": "3bf8edf2d325d89a", "scanner": "scanner-primary", "fingerprint": "faea7c2ac4079876", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-41a8bf873e8d57af", "level": "note", "message": {"text": "Unused endpoint: POST /trigger/visit-summary"}, "properties": {"repobilityId": "e44f9caf80e882e2", "scanner": "scanner-primary", "fingerprint": "41a8bf873e8d57af", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-40d7361c39fe1651", "level": "note", "message": {"text": "Unused endpoint: POST /trigger/review-requests"}, "properties": {"repobilityId": "67315282decf7d09", "scanner": "scanner-primary", "fingerprint": "40d7361c39fe1651", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aa21ef26be685144", "level": "note", "message": {"text": "Unused endpoint: GET /medicines/categories"}, "properties": {"repobilityId": "b251338e4b0ca9b8", "scanner": "scanner-primary", "fingerprint": "aa21ef26be685144", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c51318fb9aa74e3f", "level": "note", "message": {"text": "Unused endpoint: GET /medicines"}, "properties": {"repobilityId": "ab875354b4f3e88f", "scanner": "scanner-primary", "fingerprint": "c51318fb9aa74e3f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-03ef62c99af0abd4", "level": "note", "message": {"text": "Unused endpoint: POST /medicines"}, "properties": {"repobilityId": "7c9964fc7e15c81f", "scanner": "scanner-primary", "fingerprint": "03ef62c99af0abd4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-673a88a62eadab7c", "level": "note", "message": {"text": "Unused endpoint: PUT /medicines/{medicine_id}"}, "properties": {"repobilityId": "da1c560ad3cb5aaf", "scanner": "scanner-primary", "fingerprint": "673a88a62eadab7c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-33d433e08b37e0b7", "level": "note", "message": {"text": "Unused endpoint: PATCH /medicines/{medicine_id}/increment-usage"}, "properties": {"repobilityId": "14c90c68b5dfdfc0", "scanner": "scanner-primary", "fingerprint": "33d433e08b37e0b7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6c3398108a4ea38d", "level": "note", "message": {"text": "Unused endpoint: DELETE /medicines/{medicine_id}"}, "properties": {"repobilityId": "2dfeb3927e622d6d", "scanner": "scanner-primary", "fingerprint": "6c3398108a4ea38d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a8006d5a4f7f2151", "level": "note", "message": {"text": "Unused endpoint: POST /prescriptions/write"}, "properties": {"repobilityId": "dfbb48d78a703468", "scanner": "scanner-primary", "fingerprint": "a8006d5a4f7f2151", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-db0033560319ee44", "level": "note", "message": {"text": "Unused endpoint: GET /config/{doctor_id}"}, "properties": {"repobilityId": "528ba31ea9f4d36a", "scanner": "scanner-primary", "fingerprint": "db0033560319ee44", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-119fa40bfa6467bc", "level": "note", "message": {"text": "Unused endpoint: PATCH /config/{doctor_id}/{config_key}"}, "properties": {"repobilityId": "982404b5684f68f8", "scanner": "scanner-primary", "fingerprint": "119fa40bfa6467bc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2f2b0bdc62c66e26", "level": "note", "message": {"text": "Unused endpoint: POST /config/reload-scheduler"}, "properties": {"repobilityId": "d32efacfd9ce7677", "scanner": "scanner-primary", "fingerprint": "2f2b0bdc62c66e26", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-80628c538fe683e6", "level": "note", "message": {"text": "Unused endpoint: GET /dashboard/stats"}, "properties": {"repobilityId": "f818c1771ac8b34c", "scanner": "scanner-primary", "fingerprint": "80628c538fe683e6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eb75eed7f07791ad", "level": "note", "message": {"text": "Unused endpoint: GET /patients"}, "properties": {"repobilityId": "d228c6b599c662c0", "scanner": "scanner-primary", "fingerprint": "eb75eed7f07791ad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e447db421e3d5fb0", "level": "note", "message": {"text": "Unused endpoint: GET /patients/family/{head_mobile}"}, "properties": {"repobilityId": "a83cc3f6ef6c78b8", "scanner": "scanner-primary", "fingerprint": "e447db421e3d5fb0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3b1495a10fc21d91", "level": "note", "message": {"text": "Unused endpoint: GET /patients/lookup"}, "properties": {"repobilityId": "c33c931169cf8ab2", "scanner": "scanner-primary", "fingerprint": "3b1495a10fc21d91", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9ac52f239536fcdc", "level": "note", "message": {"text": "Unused endpoint: POST /patients/register"}, "properties": {"repobilityId": "0a54c7d079bae5bf", "scanner": "scanner-primary", "fingerprint": "9ac52f239536fcdc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7478660a86f758ed", "level": "note", "message": {"text": "Unused endpoint: GET /patients/search"}, "properties": {"repobilityId": "eaa1a0fdb9de3a37", "scanner": "scanner-primary", "fingerprint": "7478660a86f758ed", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c8a1db153140c2a1", "level": "note", "message": {"text": "Unused endpoint: GET /patients/{patient_id}"}, "properties": {"repobilityId": "2b43df88c2310683", "scanner": "scanner-primary", "fingerprint": "c8a1db153140c2a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-14451a0becd92c85", "level": "note", "message": {"text": "Unused endpoint: PATCH /patients/{patient_id}"}, "properties": {"repobilityId": "7ece0eb490a11bac", "scanner": "scanner-primary", "fingerprint": "14451a0becd92c85", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-69fdd23f10e04d72", "level": "note", "message": {"text": "Unused endpoint: GET /patients/{patient_id}/visits"}, "properties": {"repobilityId": "e86831f737aed2d0", "scanner": "scanner-primary", "fingerprint": "69fdd23f10e04d72", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7fbf9476603f06c8", "level": "note", "message": {"text": "Unused endpoint: POST /visits"}, "properties": {"repobilityId": "286c1592ceaaed20", "scanner": "scanner-primary", "fingerprint": "7fbf9476603f06c8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-039d917b49af26c4", "level": "note", "message": {"text": "Unused endpoint: GET /visits/{visit_id}/vitals"}, "properties": {"repobilityId": "63c998ed377f4e99", "scanner": "scanner-primary", "fingerprint": "039d917b49af26c4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ab8caf9c9a69571b", "level": "note", "message": {"text": "Unused endpoint: POST /visits/{visit_id}/vitals"}, "properties": {"repobilityId": "86bf7b33fb5e8877", "scanner": "scanner-primary", "fingerprint": "ab8caf9c9a69571b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-51d4ee442c873d8a", "level": "note", "message": {"text": "Unused endpoint: GET /patients/{patient_id}/vitals-history"}, "properties": {"repobilityId": "88918895b9899fc5", "scanner": "scanner-primary", "fingerprint": "51d4ee442c873d8a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6c8a561a04af100e", "level": "note", "message": {"text": "Unused endpoint: GET /appointments/today"}, "properties": {"repobilityId": "b9d8f4f2eb1cab1c", "scanner": "scanner-primary", "fingerprint": "6c8a561a04af100e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ac49bf3bea491b9d", "level": "note", "message": {"text": "Unused endpoint: GET /appointments"}, "properties": {"repobilityId": "bbd53fd25918fa61", "scanner": "scanner-primary", "fingerprint": "ac49bf3bea491b9d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8f8ae23aff0abe81", "level": "note", "message": {"text": "Unused endpoint: PATCH /appointments/{appointment_id}/status"}, "properties": {"repobilityId": "b23082b60b862d2f", "scanner": "scanner-primary", "fingerprint": "8f8ae23aff0abe81", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b8b1a53143b4d25e", "level": "note", "message": {"text": "Unused endpoint: POST /appointments/{appointment_id}/no-show"}, "properties": {"repobilityId": "cc62ba7deeed7c5a", "scanner": "scanner-primary", "fingerprint": "b8b1a53143b4d25e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7e7668396d5f84d2", "level": "note", "message": {"text": "Unused endpoint: POST /appointments/bulk-cancel"}, "properties": {"repobilityId": "c5b605b964ed966c", "scanner": "scanner-primary", "fingerprint": "7e7668396d5f84d2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e725f351c5422835", "level": "note", "message": {"text": "Unused endpoint: GET /queue/status"}, "properties": {"repobilityId": "37d0dc41ad2166ba", "scanner": "scanner-primary", "fingerprint": "e725f351c5422835", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6e07071265813709", "level": "note", "message": {"text": "Unused endpoint: POST /queue/next"}, "properties": {"repobilityId": "841a927862fd73f5", "scanner": "scanner-primary", "fingerprint": "6e07071265813709", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2d89e7df224ec075", "level": "note", "message": {"text": "Unused endpoint: POST /queue/prev"}, "properties": {"repobilityId": "abb008dc32f312d4", "scanner": "scanner-primary", "fingerprint": "2d89e7df224ec075", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-76b385f432475936", "level": "note", "message": {"text": "Unused endpoint: POST /queue/set-token"}, "properties": {"repobilityId": "f2bb9dfd4cb4f8dd", "scanner": "scanner-primary", "fingerprint": "76b385f432475936", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9dadc1d0c618e9fe", "level": "note", "message": {"text": "Unused endpoint: GET /prescriptions/{prescription_id}/detail"}, "properties": {"repobilityId": "d2fbd57f45f018af", "scanner": "scanner-primary", "fingerprint": "9dadc1d0c618e9fe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-54a6b59f8f466542", "level": "note", "message": {"text": "Unused endpoint: PUT /prescriptions/{prescription_id}"}, "properties": {"repobilityId": "3398ee6d38dff33e", "scanner": "scanner-primary", "fingerprint": "54a6b59f8f466542", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c676bbb5b56156ed", "level": "note", "message": {"text": "Unused endpoint: GET /prescriptions/active"}, "properties": {"repobilityId": "479195534833d8be", "scanner": "scanner-primary", "fingerprint": "c676bbb5b56156ed", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-474d7cfa95c99537", "level": "note", "message": {"text": "Unused endpoint: GET /prescriptions"}, "properties": {"repobilityId": "281503b9e088e873", "scanner": "scanner-primary", "fingerprint": "474d7cfa95c99537", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9d588fc3254659fc", "level": "note", "message": {"text": "Unused endpoint: POST /prescriptions"}, "properties": {"repobilityId": "1c5dcf1df0def9bd", "scanner": "scanner-primary", "fingerprint": "9d588fc3254659fc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e6c8a49a0ec3a916", "level": "note", "message": {"text": "Unused endpoint: POST /prescriptions/{prescription_id}/send-whatsapp"}, "properties": {"repobilityId": "a2d48acb0945d772", "scanner": "scanner-primary", "fingerprint": "e6c8a49a0ec3a916", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ef85077676911b7e", "level": "note", "message": {"text": "Unused endpoint: GET /followups/pending"}, "properties": {"repobilityId": "f7c419abd0a55d54", "scanner": "scanner-primary", "fingerprint": "ef85077676911b7e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}