{"id":51536643,"url":"https://github.com/jeiel85/rxscan-android","last_synced_at":"2026-07-09T09:01:21.201Z","repository":{"id":366628480,"uuid":"1276638060","full_name":"jeiel85/rxscan-android","owner":"jeiel85","description":"Privacy-first Android engineering project for local Korean dispensing-bag OCR and official medicine data lookup.","archived":false,"fork":false,"pushed_at":"2026-06-22T15:50:04.000Z","size":1914,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-22T17:24:07.506Z","etag":null,"topics":["android","github-pages","healthcare","jetpack-compose","korean","kotlin","medication","on-device-ocr","open-data","privacy-first","sqlite"],"latest_commit_sha":null,"homepage":"https://jeiel85.github.io/rxscan-android/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jeiel85.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-22T06:50:46.000Z","updated_at":"2026-06-22T15:51:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jeiel85/rxscan-android","commit_stats":null,"previous_names":["jeiel85/rxscan-android"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/jeiel85/rxscan-android","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeiel85%2Frxscan-android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeiel85%2Frxscan-android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeiel85%2Frxscan-android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeiel85%2Frxscan-android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jeiel85","download_url":"https://codeload.github.com/jeiel85/rxscan-android/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeiel85%2Frxscan-android/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35293217,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-09T02:00:07.329Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","github-pages","healthcare","jetpack-compose","korean","kotlin","medication","on-device-ocr","open-data","privacy-first","sqlite"],"created_at":"2026-07-09T09:01:20.197Z","updated_at":"2026-07-09T09:01:21.195Z","avatar_url":"https://github.com/jeiel85.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RxScan Android\n\nPrivacy-first Android engineering project for local Korean dispensing-bag OCR and official public medicine-data lookup.\n\n[Landing page](https://jeiel85.github.io/rxscan-android/) · [개인정보 처리방침 / Privacy Policy](https://jeiel85.github.io/rxscan-android/privacy.html) · [Download test build](https://github.com/jeiel85/rxscan-android/releases/latest) · [Engineering bootstrap](docs/ENGINEERING_BOOTSTRAP.md)\n\n![RxScan landing hero](docs/assets/landing-hero.png)\n\n## Status\n\nAll nine implementation goals (00–08) are complete. The app does on-device Korean dispensing-bag OCR (bundled ML Kit), deterministic fail-closed medicine matching, a mandatory review flow, official-source display, local DUR safety wording, and encrypted private storage, backed by a signed, reproducible public drug database built by the Python data-builder. No accounts, analytics, ads, or patient-data backend.\n\n**This is an engineering preview / internal test build — not cleared for production or clinical use.** Pharmacist sign-off, regulatory review, a real validation holdout, and a security pentest are open launch blockers tracked in `config/release_gates.json`; the release gate blocks production automatically.\n\nPackage ID `io.github.jeiel85.rxscan`, current build v0.1.0 (versionCode 2).\n\n### Download / test\n\nLatest test build (signed APK, Android 8.0+): [Releases](https://github.com/jeiel85/rxscan-android/releases/latest). Use synthetic data only — do not photograph a real prescription.\n\n## Safety boundaries\n\n- Prescription images, OCR text, medicine selections, and saved history must not be uploaded.\n- Medicine identification and parsing must be deterministic and fail closed.\n- A medicine review step is mandatory before finalization.\n- Official general information and photographed prescription directions must stay separate.\n- User-facing medical content must be official text, a defined template, or pharmacist-reviewed fixed copy.\n- Generative models must not identify medicines, parse dose, evaluate DUR, or write medical conclusions.\n- Missing medicine fields must not be guessed.\n\n## Repository layout\n\n```text\napps/android/                 Android app and modular feature/data/engine/core modules\ntools/drug-data-builder/       Typed Python package for official-data pipeline work\ninfra/data-distribution/       Distribution schemas and future runbooks\ndocs/                          GitHub Pages, public docs, and engineering notes\ntestdata/                      Synthetic-only development fixtures\nconfig/                        Versioned policy and source registry YAML\nschemas/                       Canonical public data and scan result schemas\nprompts/                       Goal-by-goal implementation prompts\n```\n\n## Implemented (Goals 00–08)\n\n- **Data builder (Python)**: MFDS source registry + paged fetcher (timeout/retry, schema/page checks, redacted URLs); reproducible signed public SQLite DB with an Ed25519 manifest and independent verification; rollback/revocation design. Official API access requires data.go.kr `활용신청` — see [docs/MFDS_DATA_ACCESS.md](docs/MFDS_DATA_ACCESS.md).\n- **Scan**: CameraX preview/capture, document-boundary overlay, image-quality gate, bundled offline Korean OCR, perspective transform, temp-file lifecycle.\n- **Parser / matcher**: deterministic row clustering, field extraction, and direction grammar; fail-closed matcher with a hard-contradiction engine and policy scoring (VERIFIED / HIGH / AMBIGUOUS / UNRESOLVED), property-tested.\n- **Review / source UI**: mandatory review (no bypass), photographed direction vs official information separation, source/date/version visibility, non-color confidence semantics.\n- **DUR**: confirmed-medicine-only local evaluation with fixed safety wording (never stop/change/double), stale-data handling.\n- **Security**: Keystore-wrapped private-DB key (fail-closed), redacted diagnostics, delete-all / key-invalidation, network/backup hardening, FLAG_SECURE.\n- **Validation / release**: synthetic holdout benchmark, automatic release-gate blocking, and the compliance document set under `docs/`.\n\nSafety-critical logic is pure Kotlin and JVM-tested; CameraX/ML Kit/Keystore/Compose are device-only wrappers. Device-only acceptance (airplane-mode OCR, TalkBack, on-device backup/MITM, real holdout) is implemented but verified outside the JVM CI.\n\n## Local verification\n\n```powershell\n.\\gradlew.bat testDebugUnitTest\n.\\gradlew.bat :app:assembleDebug\npython -m unittest discover -s tools/drug-data-builder/tests\nnpx --yes pyright tools/drug-data-builder\npython tools/ci/check_repository_policy.py\n$env:PYTHONPATH = \"tools/drug-data-builder/src\"\npython -m rxscan_data list-sources\npython -m rxscan_data build-fixture --source mfds_easy_drug --operation getDrbEasyDrugList --fixture tools/drug-data-builder/fixtures/synthetic/mfds_easy_drug_minimal.json --out tools/drug-data-builder/out/fixture-smoke\n```\n\n## Design source\n\nStart with:\n\n- [AGENTS.md](AGENTS.md)\n- [00_MASTER_PLAN.md](00_MASTER_PLAN.md)\n- [01_PRODUCT_REQUIREMENTS.md](01_PRODUCT_REQUIREMENTS.md)\n- [02_SYSTEM_ARCHITECTURE.md](02_SYSTEM_ARCHITECTURE.md)\n- [07_SECURITY_PRIVACY.md](07_SECURITY_PRIVACY.md)\n- [09_TEST_QUALITY.md](09_TEST_QUALITY.md)\n- [prompts/GOAL_00_REPOSITORY_BOOTSTRAP.md](prompts/GOAL_00_REPOSITORY_BOOTSTRAP.md)\n\nThe original bundle README is preserved at [docs/design/README.design-bundle.md](docs/design/README.design-bundle.md).\n\n## License\n\nLicense selection is pending. Do not assume redistribution rights for official source data until each source's terms are re-verified and documented.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeiel85%2Frxscan-android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjeiel85%2Frxscan-android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeiel85%2Frxscan-android/lists"}