Skip to content

Repository files navigation

Devlet Hastanesi — Hastane Bilgi Yönetim Sistemi

Monorepo: pnpm workspaces + Turborepo. Backend FastAPI (feature-based), web React+Vite (FSD), mobile Expo (sadeleştirilmiş FSD).

Klasör yapısı

Klasör Amaç
backend/ FastAPI API — vertical slice (feature) mimari, SQLModel, Alembic, JWT
web/ Personel / yönetim paneli — React + Vite + TypeScript, Feature-Sliced Design
mobile/ Hasta odaklı mobil uygulama — React Native (Expo Router)
packages/shared-types/ Backend OpenAPI şemasından üretilen paylaşılan TypeScript tipleri

Önkoşullar

  • Node.js 20+
  • pnpm 9+
  • Python 3.12+
  • Docker Desktop (PostgreSQL + backend için)

Geliştirme ortamını ayağa kaldırma

1. Bağımlılıklar

pnpm install

Backend için ayrı Python ortamı:

cd backend
python -m venv .venv
# Windows:
.venv\Scripts\activate
# macOS/Linux:
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env

2. Veritabanı ve backend (Docker)

docker compose up -d
  • PostgreSQL: Docker yayın portu = kök .env içinde POSTGRES_PUBLISH_PORT (varsayılan 55432; yerel PG 5432/5433 ile çakışmayı önler)
  • Backend API: http://localhost:8000
  • Health check: http://localhost:8000/health
  • OpenAPI docs: http://localhost:8000/docs

3. Veritabanı migrasyonları

Backend konteyneri dev-entrypoint.sh ile açılışta alembic upgrade head çalıştırır. Elle:

cd backend
alembic upgrade head
python -m app.core.seed_cli

Host’tan Alembic için backend/.env içindeki DATABASE_URL, Docker’daki yayınlanan Postgres portuna işaret etmeli (POSTGRES_PUBLISH_PORT ile aynı; örn. 55432).

Docker içinden (host portu önemli değil):

docker compose exec backend /opt/venv/bin/alembic upgrade head

4. Web (host)

pnpm --filter web dev

Tarayıcı: http://localhost:5173

5. Mobile (host)

pnpm --filter mobile dev
# LAN IP / Expo Go adresi:
pnpm --filter mobile lan-ip

Expo LAN + port 8081 ile açılır. dev start öncesi eski Metro artıklarını (8081/8082) temizler ve LAN IP’yi REACT_NATIVE_PACKAGER_HOSTNAME olarak yazar. Aynı ağdaki telefonda Expo Go: QR veya exp://<LAN>:8081.

Not: Windows’ta “Expo Metro” firewall kuralı genelde yalnızca 8081’i açar; farklı port kullanırsanız telefonda loading’de kalır (PC’den erişim çalışsa bile). Geliştirmede API Metro proxy: http://<LAN>:8081/hbys-api.

Hasta girişi OTP ile yapılır (e-posta/şifre yok). Demo: TC 34917047162, telefon 05551234567 — doğrulama kodu backend SMS stub / konsol çıktısında görünür. İsteğe bağlı doğrudan API: mobile/.env.exampleEXPO_PUBLIC_API_URL (Android emülatör: http://10.0.2.2:8000).

Shared types üretimi

Backend ayaktayken:

cd packages/shared-types
npx openapi-typescript http://localhost:8000/openapi.json -o src/index.ts

Mimari kurallar (özet)

Backend: Her feature kendi models / schemas / service / router dosyalarını taşır. Feature’lar birbirinin service fonksiyonunu import edebilir; router’lar birbirini çağırmaz. Yetkilendirme core/security.py içindeki require_permission(...) ile yapılır (izinler IZIN_MATRISI kod matrisinden gelir).

Web (FSD): Bağımlılık yönü yalnızca app → pages → widgets → features → entities → shared. Her feature/entity public API için index.ts dışa aktarır.

Mobile: Sadece hasta rolü + OTP oturumu (oturum_tipi=hasta); sadeleştirilmiş FSD (entities / features / shared) + Expo Router + SecureStore.

RBAC (rol / izin / kapsam)

Yetkilendirme kod tabanlıdır:

Parça Dosya
Roller app/core/enums.pyRol
İzin matrisi + kapsam app/core/permissions.pyIZIN_MATRISI, Kapsam
Guard app/core/security.pyrequire_permission / require_role
Query filtre app/core/scope.py
Lookup app/core/lookups.py
Model registry app/core/models_registry.py
  • Kullanici.rol tek birincil roldür.
  • require_permission("randevu:goruntule")request.state.kapsam (GLOBAL / KENDI_KAYDIM / DEPARTMANIM).
  • Belge: docs/rbac-yetki-matrisi.md

Seed

cd backend
alembic upgrade head
python -m app.core.seed_cli

Demo şifre: Test1234! — web giriş: kullanıcı adı admin, doktor, hemsire… veya e-posta (admin@hastane.example.com, doktor@hastane.example.com, …); sicil ADM-001, D-001, H-001 seed sonrası geçerlidir. Seed: docker compose exec backend /opt/venv/bin/python -m app.core.seed_cli

Demo senaryoları (mock, prod yok)

Senaryo Rol Adımlar
Randevu → muayene → tetkik doktor Randevularım → Muayene kaydı (bildirim bayrakları) → Tetkik iste
Laborant kuyruk laborant Bekleyen tetkikler → Sonuç girişi
Mock entegrasyon bashekim Entegrasyonlar → outbox listesi / yeniden dene
Zorunlu bildirim bashekim Zorunlu bildirimler → Mock gönder → Outbox’ta BBY_MOCK
Yönetim analitik bashekim Dashboard → Analitik sekmesi (grafikler)
Hasta PHR Mobil OTP Özet → Aşı takvimim / Aktif ilaçlarım

Shared types: packages/shared-types/README.md · Production: docs/PRODUCTION.md

About

Full-stack HBYS monorepo: FastAPI + SQLModel, React/Vite (FSD), Expo RN. RBAC, KVKK/PHI, Alembic, Docker — MEDULA/e-Nabiz/MHRS entegrasyon katmani.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages