Medical Research Skills for Claude Code, Codex, Cursor & Copilot
58 個開源技能,涵蓋完整的醫學研究全生命週期。由醫師打造,於真實出版物上測試。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗長照補助試算 + 日照中心媒合平台。Project #1 of the 4-project roadmap.
/match, /facilities/{id}), verified against real Supabase data/frontend — a 3-step wizard that estimates the monthly long-term care (長照 2.0/3.0)
subsidy quota based on:
The subsidy math lives in frontend/src/data/subsidyRules.js as a config object,
not hardcoded into components — this matters because Taiwan is currently
phasing in 長照3.0, so these numbers will need updating. Check
RULES_LAST_VERIFIED in that file and re-verify against 1966.gov.tw before
relying on it for anything real.
Important caveat baked into the UI on purpose: the tool is explicit that this is an estimate, not an official determination — actual CMS level is set by a government care manager (照顧管理專員) after an in-home assessment. This isn't just a legal-safety thing; giving families a confident-looking wrong number is worse than not having the tool at all.
backend/data_pipeline)Data source: 桃園市日間照顧、小規模多機能服務提供單位名冊 — official Taoyuan City open data, maintained by 社會局, updated yearly (last updated 2026-05-29 as of this writing). This is a live, city-specific dataset, not the national PDF roster — better than the original roadmap assumed.
Usage:
raw_daycare.csv in this folder, already converted) or the script will error.cd backend/data_pipeline && pip install -r requirements.txtpython ingest_daycare_centers.py raw_daycare.csv cleaned_daycare.json
(geocodes each address via OpenStreetMap Nominatim, ~1 sec/row —
~91 rows takes about 2 minutes)schema.sql in the Supabase SQL Editor to create the facilities tablecleaned_daycare.json into that table (Supabase Table Editor →
Insert → Import data from JSON, or a short Python script using the
supabase-py client — we'll add that once the backend exists)Already done: raw_daycare.csv (converted to UTF-8) and
cleaned_daycare_no_geocode.json (91 facilities, parsed and validated,
footer/note rows stripped) are already in this folder. Geocoding is the
one step you need to run yourself — Nominatim isn't reachable from
Claude's sandboxed environment, so run step 3 above locally to add lat/lng
to each row before importing to Supabase.
Data snapshot (91 facilities across 12 districts): 桃園21・中壢19・八德8・ 楊梅7・平鎮6・龜山6・蘆竹6・大園5・龍潭5・大溪4・新屋2・觀音2. 86 currently active (服務中), 5 not yet under contract (尚未特約) — worth deciding whether to show those or filter them out in the matching UI.
Known limitation: Nominatim's free geocoder is decent for major roads but sometimes fails on rural or newly-built addresses. The script logs any rows it couldn't geocode so we can fix those by hand.
backend/app)FastAPI + the official supabase-py client, talking to Supabase over its
REST API (HTTPS, port 443) rather than a raw Postgres connection.
Why this instead of a direct Postgres connection: we originally built
this with SQLModel + a direct postgresql:// connection string, but hit a
wall of environment-specific problems on Windows — Python 3.14/3.15
compatibility issues with SQLModel's Pydantic internals, psycopg2 needing
a C compiler toolchain, and finally Supabase's direct-connection hostname
being IPv6-only (unroutable on most home networks). Switching to the
Supabase URL + anon key over HTTPS sidesteps all of that: it's just a web
request, which works everywhere, and dropping the ORM layer also
eliminates the SQLModel/Pydantic version-compatibility problems entirely.
The tradeoff: slightly less query flexibility (no arbitrary SQL), which is
fine for a matching endpoint like this — precision-based sorting is just
done in Python after fetching, which is trivial at ~100 rows.
Endpoints:
GET /health — sanity checkGET /match?district=桃園&only_active=true&limit=50&offset=0 — main matching
endpoint. Filters by district (exact match, e.g. 桃園, 中壢, 八德) and
active status (excludes 尚未特約 by default). Results are ordered by
geocode precision — exact address matches first, then street-level, then
district-level approximations last — so the most trustworthy pins surface
first in the UI.GET /facilities/{id} — single facility detail, 404s if not foundSetup:
cd backend/app
pip install -r requirements.txt
cp .env.example .env
# Edit .env: Supabase dashboard -> Project Settings -> API
# SUPABASE_URL = Project URL
# SUPABASE_KEY = anon public key (safe to use here -- facilities table
# only allows public SELECT via RLS, see schema.sql)
uvicorn main:app --reload --app-dir .
Then open http://127.0.0.1:8000/docs for interactive API docs.
Verified: app boots cleanly, /health responds, and /match fails
gracefully (clean 502, not a crash) when Supabase is unreachable -- tested
against a fake project since I don't have your real credentials. Not yet
tested against your actual Supabase data -- that's the next step.
The wizard now has a 4th step: after picking household type, the person
picks their district (行政區 dropdown), then sees the subsidy result
alongside real day care facilities in that district, pulled live from the
FastAPI /match endpoint.
Config: frontend/.env.example — copy to .env, set
VITE_API_BASE_URL (defaults to http://127.0.0.1:8000, matches local
uvicorn dev server). Update this once the backend is deployed somewhere.
Error handling: if the backend isn't reachable (e.g. you forgot to
start uvicorn), the UI shows a clear Chinese-language message rather
than a blank screen or console-only error — this matters since the
target audience isn't going to open dev tools to debug a fetch failure.
Data honesty: facilities with district-level (approximate) geocode
precision get a small caveat note in the UI (⚠ 約略位置...) rather than
being presented with the same confidence as exact-address matches — this
follows the same principle as the subsidy calculator's disclaimer: don't
show a confident-looking wrong answer.
Not yet tested: I verified the build compiles cleanly and the fetch
logic is correct, but I have not run this against your live backend +
Supabase end-to-end (I don't have a way to run your local uvicorn
server from here). That's the next verification step — see "What to do"
below.
backend/sync_service)A separate, small service whose only job is to periodically refresh facility data from the government source and push changes into Supabase. Deployed separately from the main API so a heavy dependency (headless Chromium) doesn't slow down or bloat the service that needs to stay fast for the LINE bot.
Why headless browser instead of a simple HTTP request: the source portal (opendata.tycg.gov.tw) is JavaScript-rendered with no stable, directly-fetchable API endpoint we could find — even the linked Swagger docs URL is blocked by robots.txt. So this uses Playwright to actually render the page and click the download button, matched by its visible text ("下載CSV") rather than a CSS selector, since text survives page redesigns better.
⚠️ Not yet verified against the live site — I can't run a browser or
reach that domain from my environment. Everything except the actual
browser-click-and-download step has been tested (CSV parsing against real
data, the add/update/unchanged diff logic, the auth-protected endpoint).
The browser step needs to be confirmed by actually running it. If the
click fails, inspect the live page in a real browser and check whether
the button's visible text still says exactly "下載CSV" — update the
page.click("text=...") line in sync.py if not.
What it does on each sync:
last_synced_at timestampsource_still_listed = false, never hard-deleted (preserves any
vacancy data tied to them)Setup:
cd backend/sync_service
pip install -r requirements.txt
playwright install --with-deps chromium
cp .env.example .env
# Fill in: SUPABASE_URL, SUPABASE_KEY (service_role key, NOT anon --
# this service writes to the DB), OPENCAGE_API_KEY, SYNC_SECRET_TOKEN
# (make up a long random string yourself)
python -m uvicorn main:app --reload --app-dir .
Test locally first: http://127.0.0.1:8000/sync?token=<your-token>
Deploy on Render (as its own Web Service, separate from the main API):
backend/sync_servicepip install -r requirements.txt && playwright install --with-deps chromiumuvicorn main:app --host 0.0.0.0 --port $PORT.env aboveSchedule it: cron-job.org (free) → create a
job pinging https://<your-render-url>/sync?token=<your-secret> monthly
(matches how infrequently the source data itself actually updates).
/match endpointfacilities table/match endpoint