System Architecture Document · v1.0

ConsTech360
Sistem Mimari Dokümanı

Türkiye'nin ilk inşaat+lojistik+mali işler+saha operasyonu birleşik ERP platformu. 54 fonksiyonel modül, mikro-servis mimarisi, mobil-öncelikli tasarım, AI destekli analitik ve AB Yeşil Mutabakatı (SKDM) uyumlu karbon ayak izi motoru.

Hazırlayan: TEORİ Mühendislik · Ürün Ekibi Tarih: 22 Nisan 2026 Versiyon: 1.0 Doküman Kodu: CSO-SAD-2026-001
01 · OVERVIEW

Yönetici Özeti

ConsTech360, inşaat firmalarının saha operasyonları, mali işler, lojistik ve teknik ofis süreçlerini tek bir SaaS platformunda birleştiren, Türkiye pazarı için özel olarak tasarlanmış bir ERP çözümüdür.

Toplam Modül
54
18 ana + 36 alt modül
Tahmini Geliştirme
18 ay
6 ana faz · Paralel takımlar
Hedef Pazar
2,400+
TR orta-büyük inşaat firması
Tahmini Bütçe
₺14.8M
18 ay toplam · 7 kişilik ekip
MRR Hedef (Y3)
₺2.4M
80 müşteri × ₺30K/ay
ROI
32 ay
Başabaş noktası
📌 Ürünün Değer Önerisi

Türkiye'deki inşaat firmaları halen WhatsApp grupları, 15+ ayrı Excel dosyası, manuel Luca girişleri ve 2 saatlik günlük raporlar ile operasyonlarını yönetiyor. ConsTech360 bu kaosu tek bir dijital platformda birleştirerek veri kaçaklarını, yakıt hırsızlıklarını, bütçe aşımlarını ve ihale kaçırmalarını önler.

🎯 Stratejik Farklılaştırıcılar

ÖzellikRakip DurumuConsTech360
Türkçe Uyum (Luca, Uyumsoft, EKAP)Yok ya da kısmiTam entegrasyon + otomatik eşleşme
Yakıt Anti-Fraud (SoD)YokGörevler Ayrılığı + AI anomali tespiti
Karbon Ayak İzi (SKDM uyumlu)YokEPD bazlı + AB Yeşil Mutabakatı raporu
Mobil-Öncelikli Saha UygulamasıWeb'e yamaOffline-first, QR, geofence, OCR
AI Destekli İçgörülerStatik raporlarGPT-5 + Prophet projeksiyon + chat
RBAC + ABACTemel rolHibrit · kullanıcı bazlı override
Multi-tenant SaaSTek şirketŞirket × proje × şantiye hiyerarşisi
02 · VISION

Ürün Vizyonu & Kapsam

"Bir inşaat firmasının yönetim kurulu başkanı, sabah 08:00'de kahvaltısını yaparken telefonundan tüm şantiyelerinin durumunu — bütçe, ilerleme, finansal risk, karbon ayak izi — tek bakışta görebilir ve Türker Bey'e 'Urla'ya git' diye WhatsApp yazmak yerine sistemden görev ataması yapabilir."

🎯 Vizyon İfadesi

VIZYON 2028

Türkiye'deki orta ve büyük ölçekli inşaat firmalarının %25'inin tercih ettiği, AB Yeşil Mutabakatı gerekliliklerini eksiksiz karşılayan, mobil-öncelikli, AI destekli birleşik ERP platformu olmak.

📐 Kapsam (In-Scope)

Kapsama Dahil (V1.0 → V3.0)
  • ✓ 54 fonksiyonel modül (Saha, Mali, Teknik, Ar-Ge)
  • ✓ iOS + Android mobil uygulamalar
  • ✓ Web yönetim paneli (yönetici + muhasebe)
  • ✓ Müşteri portalı (işveren erişimi)
  • ✓ Luca, Uyumsoft, EKAP, Kommo CRM entegrasyonu
  • ✓ KEP (Kayıtlı E-Posta) arşivi
  • ✓ Çoklu-kiracı (multi-tenant) mimari
  • ✓ AI destekli raporlar ve chat
Kapsam Dışı (Out-of-Scope)
  • ✕ BIM modelleme (Revit, Tekla benzeri CAD)
  • ✕ E-ticaret mağaza (malzeme satışı)
  • ✕ IoT donanım üretimi (sensörler)
  • ✕ Konut/daire satış portali (emlak)
  • ✕ Kripto/blockchain tabanlı sözleşme
  • ✕ Bordro hesaplama motoru (3. taraf kullanılır)
  • ✕ Banka hesap açma/kapama API
  • ✕ AR/VR saha gezintisi

🎭 Kullanıcı Personaları

PersonaRolBirincil CihazKullanım SıklığıKritik İhtiyaç
Yüksel BeyCEO / YKBWeb + MobilGünde 4-6 kezTek bakışta karar verebilecek veri
Özgür BeyMali İşler DirektörüWeb (yoğun)Gün boyuNakit akış + çek + hakediş analizi
Türker BeyTeknik DirektörWeb + MobilGün boyuİhale takip + saha kontrol + BOM
Sezen, Esra, ElifMuhasebe PersoneliWeb (masa başı)8 saat işFatura işleme + puantaj + SGK
Mehmet KayaŞantiye FormenSadece mobilSahada tüm günHızlı, offline, basit arayüz
Burakcan, DoğacanOfis MühendisiWeb + CAD8 saat işBOM, keşif, dokümanlar
Özdemir Tesisat vb.TaşeronSadece mobilHaftada 1-2Görev kabul + puantaj + hakediş
Urla Teknopark vb.Müşteri (İşveren)Web (sınırlı)Haftada 1Proje ilerleme + şeffaflık
03 · METRICS

Temel Metrikler & Başarı Kriterleri

Ürünün başarısı ölçülebilir olmalı. Aşağıdaki 4 kategoride her metrik için hedef değer, ölçüm yöntemi ve responsible person tanımlıdır.

📊 Ürün Metrikleri (KPI)

MetrikHedefÖlçüm YöntemiFrekans
Günlük Aktif Kullanıcı (DAU)≥ 85% kayıtlıSegment analyticsGerçek zamanlı
Mobil Kullanım Oranı≥ 70% oturumFirebase AnalyticsGünlük
Özellik Benimseme (Adoption)≥ 60% / özellikKullanım loglarıHaftalık
Ortalama Oturum Süresi≥ 12 dk (web), ≥ 4 dk (mobil)AnalyticsGünlük
NPS (Net Promoter Score)≥ 50Anket (3 ayda bir)3 ayda

⚡ Teknik Performans Metrikleri

MetrikHedef SLAÖlçüm Aracı
API Response Time (p95)< 250 msDatadog APM
Dashboard Cold Start< 1.8 snLighthouse CI
Mobil Cold Start (iOS)< 1.5 snFirebase Performance
Mobil Cold Start (Android)< 1.8 snFirebase Performance
Uptime SLA≥ 99.9% (43 dk/ay)Pingdom + Grafana
DB Query p99< 100 msPostgreSQL slow log
Realtime Lag (SignalR)< 300 msAzure SignalR metrics
Push Notification Teslim≥ 98%Firebase + OneSignal

💰 İş Metrikleri

Y1 Müşteri Sayısı
12
Pilot + erken adopter
Y2 Müşteri
38
Ölçekleme fazı
Y3 Müşteri
80+
MRR ₺2.4M hedefi
Churn Rate
<5%
Yıllık bazda
04 · ARCHITECTURE

Sistem Mimarisi

ConsTech360 Modüler Monolit → Mikroservis yaklaşımıyla tasarlanmıştır. V1'de (ilk 12 ay) modüler monolit olarak geliştirilir, V2'den itibaren yoğun trafik alan modüller (Yakıt Radarı, AI Raporlar, Karbon Microservice) ayrılır.

🏛️ 6 Katmanlı Mimari (Layered Architecture)

1 · Client
Son kullanıcı arayüzleri.
Next.js 14 (Web) React Native 0.74 (iOS + Android) Expo SDK 51 PWA
2 · Gateway
API Gateway + yük dengeleyici + güvenlik.
Kong / AWS API Gateway Rate limiting JWT validation Request logging
3 · Service
İş mantığı servisleri (14 microservice).
.NET 9 (C#) NestJS (Node.js TS) Python 3.12 (AI/ML) Go (yüksek perf: Karbon)
4 · Messaging
Asenkron iletişim + event-driven.
RabbitMQ Redis Pub/Sub SignalR (WebSocket)
5 · Data
Kalıcı ve geçici veri depolama.
PostgreSQL 16 + PostGIS Redis 7 (cache) MinIO / S3 (dosya) ElasticSearch (arama) TimescaleDB (telemetri)
6 · Infra
Altyapı + DevOps.
Kubernetes (k3s başta, EKS sonra) Docker Terraform GitHub Actions (CI/CD) Grafana + Prometheus

🔲 Mikro-Servis Haritası (14 Servis)

◈ C4 Model · Container View
    ┌─────────────────────────────────────────────────────────────────────┐
    │                         API GATEWAY (Kong)                          │
    │              JWT • Rate Limit • Routing • Logging                   │
    └──────┬──────────┬──────────┬──────────┬──────────┬──────────┬───────┘
           │          │          │          │          │          │
    ┌──────▼──────┐ ┌─▼────────┐ ┌─▼───────┐ ┌────▼───┐ ┌────▼────┐ ┌─▼──────┐
    │  Identity   │ │ Projects │ │ Finance │ │   HR   │ │ Tenders │ │Documents│
    │  (.NET 9)   │ │ (.NET)   │ │ (.NET)  │ │ (Nest) │ │ (Nest)  │ │ (Nest)  │
    │             │ │          │ │         │ │        │ │         │ │         │
    │ ▸ RBAC      │ │ ▸ Sites  │ │ ▸ Check │ │ ▸ Pers │ │ ▸ EKAP  │ │ ▸ V1/V2 │
    │ ▸ Auth      │ │ ▸ Contr  │ │ ▸ Flow  │ │ ▸ Paym │ │ ▸ Bids  │ │ ▸ OCR   │
    │ ▸ Audit     │ │ ▸ BOM    │ │ ▸ Haked │ │ ▸ Leave│ │ ▸ Template │ │      │
    └──────┬──────┘ └────┬─────┘ └────┬────┘ └───┬────┘ └────┬────┘ └──┬─────┘
           │             │            │          │           │         │
    ┌──────▼──────┐ ┌────▼─────┐ ┌────▼─────┐ ┌──▼─────┐ ┌──▼──────┐ ┌▼───────┐
    │ Inventory   │ │ Fleet    │ │ Fuel     │ │ Safety │ │ Reports │ │Carbon  │
    │ (.NET)      │ │ (Nest)   │ │ Radar    │ │ (Nest) │ │ (Py+ML) │ │ (Go)   │
    │             │ │          │ │ (Py+ML)  │ │        │ │         │ │        │
    │ ▸ Stock     │ │ ▸ Veh    │ │ ▸ Fraud  │ │ ▸ Inc  │ │ ▸ AI    │ │ ▸ EPD  │
    │ ▸ Warehouse │ │ ▸ Maint  │ │ ▸ SoD    │ │ ▸ SOS  │ │ ▸ Fore  │ │ ▸ SKDM │
    └─────────────┘ └──────────┘ └──────────┘ └────────┘ └─────────┘ └────────┘

    ┌──────────────────┐ ┌───────────────┐ ┌────────────────┐
    │ Notification Svc │ │ Integration   │ │ Geofence       │
    │ (Node.js)        │ │ Hub (.NET)    │ │ (Go + PostGIS) │
    │                  │ │               │ │                │
    │ ▸ Email (SMTP)   │ │ ▸ Luca        │ │ ▸ PDKS         │
    │ ▸ SMS (Netgsm)   │ │ ▸ Uyumsoft    │ │ ▸ Location     │
    │ ▸ Push (FCM)     │ │ ▸ KEP         │ │ ▸ Tracking     │
    │ ▸ WhatsApp Biz   │ │ ▸ Kommo       │ │                │
    └──────────────────┘ └───────────────┘ └────────────────┘
    

🔄 Servis-Servis İletişim Paternleri

🔁
Senkron (REST/gRPC)

Kullanıcı eylemi sonucu direkt yanıt gerektiğinde. Örneğin Create HakedişValidate with ProjectsCalculate Deductions.

var project = await _projectClient.GetAsync(req.ProjectId);
if (project.Status != "Active")
  throw new BusinessException("Proje aktif değil");
📬
Asenkron (Event-Driven)

İşlem tamamlandıktan sonra diğer servislerin haberdar olması gereken durumlar. Hakediş OnaylandıFinance, Notifications, Reports tüm dinleyiciler tetiklenir.

await _bus.Publish(new HakedisOnaylandi {
  Id = hak.Id, Amount = hak.Net,
  ApprovedBy = user.Id, Timestamp = now
});
05 · STACK

Teknoloji Yığını (Tech Stack)

Teknoloji seçimleri ekibin uzmanlığı, TR pazar gereksinimleri (Türkçe dil desteği, KVKK) ve uzun vadeli sürdürülebilirlik kriterlerine göre yapılmıştır.

🎨 Frontend (Web)

Framework: Next.js 14.2 (App Router)
UI Kit: shadcn/ui + TailwindCSS
State: Zustand + TanStack Query
Forms: React Hook Form + Zod
Charts: Recharts + D3.js
Maps: Mapbox GL JS
Realtime: SignalR Client
i18n: next-intl (TR + EN + AR)
Testing: Playwright + Vitest
Neden Next.js 14?

Server Components, Streaming, Edge Runtime ve Server Actions; inşaat sektöründe yavaş internet koşullarında bile TTI (Time-to-Interactive) performansını <2sn'ye düşürür. Vercel entegrasyonu ile preview deployment kolaylığı ve SEO pazarlama sayfaları için ideal.

📱 Mobile (iOS + Android)

Framework: React Native 0.74
Runtime: Expo SDK 51
Navigation: Expo Router v3
Offline DB: WatermelonDB
State: Zustand + MMKV
Camera: expo-camera + react-native-vision-camera
OCR: ML Kit (on-device)
Push: Expo Notifications + FCM
Testing: Detox + Maestro

⚙️ Backend Services

PRIMARY · .NET 9 (C#)

Identity, Projects, Finance, Inventory, Integration Hub gibi iş-kritik servisler. ASP.NET Core Web API + EF Core + MediatR (CQRS).

SECONDARY · NestJS (Node.js + TypeScript)

HR, Tenders, Documents, Fleet, Safety, Notifications. Hızlı prototipleme ve Node ekosistemiyle entegrasyon kolaylığı.

AI/ML · Python 3.12

FastAPI + Prophet + XGBoost + LangChain. Yakıt Radarı anomali, Finansal Projeksiyon, AI Chat (GPT-5 wrapper).

HIGH-PERF · Go

Geofencing (PostGIS), Karbon hesaplama motoru (yoğun aritmetik), yüksek eşzamanlı telemetri veri alımı.

💾 Data Stores

StoreKullanımBoyut (3. Yıl)
PostgreSQL 16 + PostGISAna transactional DB (40+ tablo, ilişkisel)~420 GB
TimescaleDBTelemetri (makine saatleri, GPS, yakıt)~180 GB
Redis 7Cache + session + rate limit + pub/sub~8 GB
ElasticSearch 8Tam metin arama (doküman + KEP)~95 GB
MinIO / S3Dosya (fotoğraf, DWG, PDF, imza)~1.8 TB
RabbitMQMessage broker (event-driven)~2 GB queue

☁️ Cloud & DevOps

Cloud: AWS EU-Central-1 (Frankfurt)
Container: Docker + Kubernetes (EKS)
IaC: Terraform + Helm
CI/CD: GitHub Actions + ArgoCD
Monitoring: Datadog + Grafana
Logs: Loki + Loguru
APM: Sentry + OpenTelemetry
CDN: Cloudflare (TR edge)
Secrets: HashiCorp Vault
KVKK Uyumluluk Notu

Tüm kullanıcı verileri Avrupa-merkezli AWS Frankfurt bölgesinde tutulur. Türk müşteriler için KVKK Veri İşleme Sözleşmesi (DPA) ile yasal uyumluluk sağlanır. 2027'de AWS İstanbul açılırsa oraya migration planlanır.

06 · DATA MODEL

Veri Modeli (Entity Relationship)

ConsTech360 veri modeli 42 ana tablo, 28 ilişki tablosu ve 18 view/materialize view içerir. Aşağıda domain bazlı gruplanmış ER modelleri yer almaktadır.

🗂️ Domain Haritası

IDENTITY
users, roles, permissions, audit_logs, sessions, tenants
PROJECTS
sites, contracts, work_items, progress, bom, punch_items
FINANCE
invoices, cheques, payments, hakedis, cost_centers, banks
HR
personnel, timesheets, leaves, advances, certifications
FLEET
vehicles, machines, fuel_records, maintenance, rentals
INVENTORY
materials, stock_movements, warehouses, transfers, barcodes
TENDERS
tenders, bids, rfqs, rfq_offers, templates, documents
SUSTAIN.
epd_catalog, emissions, waste_records, skdm_reports

🔷 Identity Domain · ER Şeması

◈ users, roles, permissions, tenants, audit_logs
tenants
🔑 id uuid
name string
subdomain unique
plan enum
max_users int
created_at ts
users
🔑 id uuid
↗ tenant_id
↗ role_id
tc_no enc
email unique
phone string
password_hash string
2fa_enabled bool
site_access uuid[]
custom_perms jsonb
fin_limits jsonb
last_login ts
is_active bool
roles
🔑 id uuid
↗ tenant_id
name string
description text
default_perms jsonb
is_system bool
permissions
🔑 id uuid
module string
action enum
conditions jsonb
// action: R|W|L|-
audit_logs
🔑 id uuid
↗ user_id
↗ tenant_id
action string
resource_type string
resource_id uuid
changes jsonb
ip inet
user_agent text
result enum
created_at ts
sessions
🔑 id uuid
↗ user_id
jwt_id uuid
refresh_token enc
ip inet
device jsonb
expires_at ts

🏗️ Projects Domain · ER Şeması

◈ sites, contracts, work_items, progress_snapshots, bom, punch_items
sites
🔑 id uuid
↗ tenant_id
↗ contract_id
code unique
name string
type enum
location geography
geofence polygon
budget money
start_date date
end_date date
progress_pct decimal
status enum
kpi_snapshot jsonb
contracts
🔑 id uuid
↗ tenant_id
↗ customer_id
code unique
type enum
amount money
vat_rate decimal
advance_amount money
penalty_rate decimal
sign_date date
start_date date
end_date date
extensions jsonb
clauses jsonb
work_items (BOM)
🔑 id uuid
↗ site_id
↗ parent_id
code string
name string
quantity decimal
unit enum
unit_price money
completed_qty decimal
level int
version int
progress_snapshots
🔑 id uuid
↗ site_id
↗ reported_by
period date
physical_pct decimal
cost_pct decimal
schedule_slip_days int
notes text
created_at ts
punch_items
🔑 id uuid
↗ site_id
↗ detected_by
↗ assigned_to
code string
priority enum
category enum
description text
location jsonb
photos jsonb
due_date date
status enum
resolution jsonb
daily_logs
🔑 id uuid
↗ site_id
date date
weather jsonb
force_majeure jsonb
progress_entries jsonb
visitors jsonb
incidents jsonb
signed_by uuid
signed_at ts

💰 Finance Domain · ER Şeması

◈ invoices, cheques, hakedis, cost_centers, bank_accounts
invoices
🔑 id uuid
↗ tenant_id
↗ supplier_id
↗ cost_center_id
invoice_no string
amount money
vat_amount money
issue_date date
due_date date
luca_sync_status enum
uyumsoft_id string
matched_dispatch_id uuid
pdf_url string
cheques
🔑 id uuid
↗ tenant_id
↗ supplier_id
↗ bank_account_id
cheque_no string
amount money
due_date date
allocations jsonb
status enum
risk_score int
// allocations: [{site_id, amount, pct}]
hakedis
🔑 id uuid
↗ site_id
↗ contractor_id
code unique
period date
gross_amount money
deductions jsonb
net_amount money
work_items jsonb
approval_chain jsonb
status enum
payment_date date
cost_centers
🔑 id uuid
↗ tenant_id
↗ site_id
code unique
name string
allocation_rules jsonb
// rules: [{type,weight}]
bank_accounts
🔑 id uuid
↗ tenant_id
bank_name string
iban unique
currency string
balance money
purpose enum
last_sync ts
letter_of_guarantees
🔑 id uuid
↗ contract_id
↗ bank_id
type enum
amount money
expiry_date date
status enum
pdf_url string

👥 HR + Fleet Domain · ER Şeması

◈ personnel, timesheets, vehicles, fuel_records, maintenance
personnel
🔑 id uuid
↗ tenant_id
↗ user_id nullable
tc_no enc
full_name string
position enum
sgk_no string
hire_date date
is_subcontractor bool
subcontractor_id uuid
certifications jsonb
timesheets
🔑 id uuid
↗ personnel_id
↗ site_id
date date
check_in ts
check_out ts
method enum
regular_hours decimal
overtime_hours decimal
approved_by uuid
// method: [qr,gps,face,manual]
vehicles
🔑 id uuid
↗ tenant_id
plate unique
code string
type enum
ownership enum
rental_id uuid
baseline_L_per_h decimal
assigned_site_id uuid
status enum
fuel_records (SoD)
🔑 id uuid
↗ vehicle_id
↗ driver_id *
date date
liters decimal
amount money
station string
receipt_url string
// Sadece şoför girer!
machine_hours (SoD)
🔑 id uuid
↗ vehicle_id
↗ operator_id *
↗ reported_by *
date date
ignition_on ts
ignition_off ts
hours decimal
// Sadece formen girer!
fuel_anomalies
🔑 id uuid
↗ fuel_record_id
↗ machine_hour_id
expected_L decimal
actual_L decimal
deviation_pct decimal
severity enum
ai_confidence decimal
resolved bool
🔐 Görevler Ayrılığı (SoD) Kritik Kural

fuel_records.driver_id ve machine_hours.reported_by kesinlikle farklı kişiler olmalıdır. Database seviyesinde CHECK constraint + trigger ile zorlanır. Tek kişi her ikisini de giremez → yakıt hırsızlığı fraud'unun temelini oluşturur.

CREATE OR REPLACE FUNCTION check_sod_fuel()
RETURNS TRIGGER AS $$
BEGIN
  IF EXISTS (
    SELECT 1 FROM machine_hours mh
    WHERE mh.vehicle_id = NEW.vehicle_id
      AND mh.date = NEW.date
      AND mh.reported_by = NEW.driver_id
  ) THEN
    RAISE EXCEPTION 'SoD İhlali: Aynı kişi hem yakıt hem saat giremez';
  END IF;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

🔢 Özet: Toplam Veri Modeli

Ana Tablo
42
Core entities
İlişki Tablosu
28
Many-to-many
Materialized View
18
Dashboard aggregates
Indexed Columns
186
Query optimizasyonu
07 · API

API Gateway & Endpoint Tasarımı

Tüm mikroservisler Kong API Gateway arkasında toplanır. Dış dünya yalnızca gateway ile konuşur — servisler iç ağda VPC içinde çalışır.

🌐 Gateway Katmanları

    ┌──────────────────────────────────────────────────────────────────┐
    │                    Client (Web / Mobil / Müşteri Portal)         │
    └─────────────────────────────┬────────────────────────────────────┘
                                  │ HTTPS
    ┌─────────────────────────────▼────────────────────────────────────┐
    │                  ☁ CLOUDFLARE (WAF + CDN + DDoS)                 │
    └─────────────────────────────┬────────────────────────────────────┘
                                  │
    ┌─────────────────────────────▼────────────────────────────────────┐
    │                    🚪 KONG API GATEWAY                           │
    │   ┌──────────────┬───────────────┬──────────────┬─────────────┐  │
    │   │ Rate Limit   │ JWT Validate  │ Request Log  │ Routing     │  │
    │   │ 1000 req/min │ RS256 + JWKS  │ OpenTelemetry│ Path→Service│  │
    │   └──────────────┴───────────────┴──────────────┴─────────────┘  │
    └─┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┘
      │    │    │    │    │    │    │    │    │    │    │    │    │
     Identity Projects Finance HR Tenders Docs Inv Fleet Fuel Safety AI Carbon Integ Notif
    

🛡️ Gateway Policy Örnekleri

# Rate Limiting: Her kullanıcı için 1000 req/min
plugins:
  - name: rate-limiting
    config:
      minute: 1000
      policy: redis
      identifier: "jwt.sub"

  # JWT Doğrulama: RS256 + public key rotasyonu
  - name: jwt
    config:
      key_claim_name: "kid"
      algorithm: RS256
      secret_is_base64: false

  # Request/Response Logging
  - name: http-log
    config:
      http_endpoint: "http://logstash:8080"
      method: POST

📋 URL Naming Convention

KuralÖrnek
Plural resource/api/v1/sites (değil /site)
Hierarchical nesting/api/v1/sites/{id}/work-items
Query params for filtering?status=active&limit=20
Versioning with prefix/api/v1/, /api/v2/
Actions via sub-resource/api/v1/hakedis/{id}/approve
Bulk operations/api/v1/sites:batchUpdate

🔌 Örnek Endpoint Grubu — Projects Service

MethodEndpointAçıklamaRBAC
GET/api/v1/sitesŞantiye listesi (filtrelenebilir)R:all
GET/api/v1/sites/{id}Şantiye detayı + KPIR:site_access
POST/api/v1/sitesYeni şantiye oluşturW:CEO,Tech
PUT/api/v1/sites/{id}Şantiye güncelleW:CEO,Tech
DEL/api/v1/sites/{id}Soft delete (arşivle)W:CEO
GET/api/v1/sites/{id}/progressİlerleme geçmişiR:site_access
POST/api/v1/sites/{id}/progressGünlük ilerleme raporuW:site_chief
GET/api/v1/sites/{id}/work-itemsBOM ağacıR:site_access
POST/api/v1/sites/{id}/work-itemsBOM kalemi ekleW:engineer
PATCH/api/v1/work-items/{id}/completionTamamlanma % güncelleW:site_chief
GET/api/v1/sites/{id}/daily-log?date=Şantiye günlüğüR:site_access
POST/api/v1/sites/{id}/punch-itemsKusur bildirimi (+foto)W:site_chief,CEO
PUT/api/v1/punch-items/{id}/assignTaşeron atamaW:site_chief
PUT/api/v1/punch-items/{id}/resolveKusur çözüldü (after foto zorunlu)W:contractor
📊 Toplam API Boyutu

14 servis × ortalama 18 endpoint = ~252 REST endpoint + 14 WebSocket hub + 32 event (RabbitMQ). OpenAPI 3.1 spec ile otomatik client üretimi (Swagger Codegen).

📦 Standart Response Formatı

// ✓ Başarılı yanıt
{
  "success": true,
  "data": { /* payload */ },
  "meta": {
    "page": 1,
    "total": 248,
    "timestamp": "2026-04-22T14:32:18Z"
  }
}

// ✗ Hata yanıtı
{
  "success": false,
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "Şantiye bütçesi negatif olamaz",
    "field": "budget",
    "trace_id": "abc123xyz"
  }
}

🔢 HTTP Status Code Kullanımı

KodKullanım
200 OKBaşarılı GET, PUT, PATCH
201 CreatedBaşarılı POST
204 No ContentBaşarılı DELETE
400 Bad RequestValidation hatası
401 UnauthorizedJWT eksik/geçersiz
403 ForbiddenRBAC ihlali (audit log)
404 Not FoundKaynak yok (veya erişim hakkı yok)
409 Conflictİş kuralı çakışması (ör. SoD ihlali)
422 UnprocessableBusiness exception
429 Too ManyRate limit aşıldı
500 InternalBeklenmeyen hata (Sentry log)
503 Service UnavailableDownstream servis down
08 · REALTIME

Gerçek Zamanlı (Realtime) Altyapı

Canlı dashboard, sahadan gelen anlık veri, alert feed, chat ve SOS bildirimleri için SignalR (ASP.NET Core) ve Redis Pub/Sub kombinasyonu kullanılır.

📡 Realtime Akış Mimarisi

    SAHA (Mobile)                   SERVICES                  WEB (Dashboard)
    ─────────────                   ────────                  ───────────────

    ┌──────────────┐                                          ┌──────────────┐
    │ Mehmet Kaya  │                                          │ Yüksel Bey   │
    │ (Formen)     │                                          │ (Dashboard)  │
    └──────┬───────┘                                          └──────▲───────┘
           │ POST                                                    │ PUSH
           │ /api/fuel                                                │ (SignalR)
           ▼                                                          │
    ┌──────────────┐   ┌─────────────┐   ┌──────────────┐   ┌────────┴────────┐
    │ Fuel Service │──▶│   RabbitMQ  │──▶│ Anomaly ML  │──▶│ Notification    │
    │              │   │   (event)   │   │ (Python)    │   │ Service (Node)  │
    └──────────────┘   └─────────────┘   └──────┬──────┘   └────────┬────────┘
                                                 │                    │
                                         Severity HIGH        SignalR Hub
                                                 │            "fuel-alerts"
                                                 ▼                    ▼
                                          ┌──────────────┐    ┌──────────────┐
                                          │  Redis       │───▶│ SignalR      │
                                          │  Pub/Sub     │    │ Frontend SDK │
                                          └──────────────┘    └──────────────┘

    ⏱ Latency: Sahadan veri → Dashboard'da görünüm < 300 ms
    

🎯 SignalR Hub Listesi

HubEventPayloadSubscriber
/hubs/dashboardKpiUpdated{siteId, kpi, value, timestamp}CEO, Finance, Tech
/hubs/alertsNewAlert{type, severity, message, data}Based on RBAC
/hubs/fuel-radarAnomalyDetected{vehicleId, deviation, severity}Tech Dir, CEO
/hubs/locationPersonnelMoved{personnelId, siteId, enter/exit}Site chief
/hubs/sosEmergencyTriggered{personnelId, location, type}ALL + 112
/hubs/approvalsRequiresYourApproval{type, amount, from}Approver
/hubs/messagingNewMessage{fromId, toId, content}Recipient
/hubs/documentsDocumentUpdated{docId, version, author}Subscribers
/hubs/tendersNewTenderMatch{tenderId, matchScore}Tech team
/hubs/punch-listPunchItemAssigned{itemId, contractorId, priority}Contractor
/hubs/ekap-syncNewTender{tender data}Tech Dir
/hubs/progressSiteProgress{siteId, pct, slip}Management
/hubs/cashflowCashAlert{critical_date, amount, reason}Finance Dir
/hubs/chatAIResponse{userId, message, data}Only sender

💻 SignalR Hub Örneği (.NET 9)

public class FuelRadarHub : Hub<IFuelRadarClient>
{
  private readonly IAnomalyService _anomaly;
  private readonly ILogger<FuelRadarHub> _logger;

  public override async Task OnConnectedAsync()
  {
    var userId = Context.User.GetUserId();
    var siteIds = await GetSiteAccessAsync(userId);

    // Her şantiye için ayrı group subscription
    foreach (var siteId in siteIds)
    {
      await Groups.AddToGroupAsync(Context.ConnectionId, $"site:{siteId}");
    }

    _logger.LogInformation("User {UserId} connected to FuelRadarHub", userId);
    await base.OnConnectedAsync();
  }

  // Anomali algılandığında broker'dan çağrılır
  public async Task BroadcastAnomaly(FuelAnomalyEvent evt)
  {
    await Clients.Group($"site:{evt.SiteId}")
      .AnomalyDetected(new {
        vehicleId = evt.VehicleId,
        deviationPct = evt.DeviationPct,
        severity = evt.Severity,
        timestamp = evt.Timestamp
      });
  }
}

📱 Client Bağlantı Örneği (TypeScript)

// Web Dashboard
const connection = new HubConnectionBuilder()
  .withUrl("/hubs/fuel-radar", {
    accessTokenFactory: () => authStore.getAccessToken()
  })
  .withAutomaticReconnect([0, 2000, 10000, 30000])
  .configureLogging(LogLevel.Warning)
  .build();

connection.on("AnomalyDetected", (evt) => {
  toast.error(`🚨 Yakıt şüphesi: ${evt.vehicleId} · %${evt.deviationPct}`);
  dashboardStore.addAlert(evt);

  if (evt.severity === "CRITICAL") {
    playSound("critical-alert.mp3");
    requestBrowserNotification(evt);
  }
});

await connection.start();
⚡ Performans Hedefi

Sahadan gelen bir veri (ör. yakıt anomalisi) dashboard'da görünene kadar toplam süre < 300 ms. Bu süreye: Mobile POST → Service → RabbitMQ → ML → Redis Pub/Sub → SignalR → Client render dahildir.

🔁 Reconnection & Offline Senaryoları

🔄
Reconnection Logic

Client tarafında withAutomaticReconnect (0 → 2s → 10s → 30s). Maksimum 5 deneme sonrası polling'e düşer (5 saniyede bir REST ile check).

📥
Offline Queue

Mobile'da internet kesildiğinde WatermelonDB'ye kaydedilir, bağlantı dönünce background sync ile kuyruğa atılır. Max 48 saat queue tutulur.

09 · MODULES

54 Modülün Detaylı Haritası

Her modül için veritabanı tabloları, API endpoint'leri, kritik iş kuralları ve hangi servise ait olduğu tanımlanmıştır. Öncelik dağılımı ile birlikte.

🎯 Öncelik Dağılımı

🔴 P0 · MVP (Ay 1-6)
14
Identity + RBAC
Sites + Contracts
Dashboard (6 grafik)
Personnel + Timesheet
Invoices + Cheques
Hakediş
Mobile Formen App
Luca Integration
Notifications
Fuel Radar (SoD)
Geofencing / PDKS
Punch List
Cost Centers
Çek Parçalama
🟡 P1 · V1.1 (Ay 7-12)
16
Tenders (EKAP sync)
Bid Management
Template Engine
Dynamic BOM
Document V1/V2
Suppliers + RFQ
Inventory + Warehouse
Fleet + Maintenance
Rentals
OHS Incidents
Leave + Advance
Guarantee Letters
Cashflow Monitor
Customer Portal
Kommo CRM
Site Daily Log
🔵 P2 · V2.0 (Ay 13-16)
14
AI Reports + Chat
Financial Forecasting
Anomaly Detection ML
Payment Requests
Cheque Calendar
Deduction Engine
Contract Detail + AI
KEP Archive
Official Docs Archive
Machine Timesheet
Barcode Management
Warehouse Transfer
Tender Win Analysis
Mobile Enhancements
🟢 P3 · V3.0 (Ay 17-18)
10
🌿 Carbon Dashboard
🌿 EPD Material
🌿 Logistic CO₂
🌿 Waste Management
🌿 SKDM Reporter
SuperAdmin SaaS
Live Map
Settings
Multi-tenancy UI
Mobile: İşçi App

📋 Kritik 5 Modülün Teknik Detayı

🔐

Identity & RBAC Service

Kimlik doğrulama · Yetkilendirme · Denetim logları
P0 · MVP
POST/auth/login · /auth/refresh
GET/users · /users/{id}/permissions
POST/users/{id}/permissions/override
GET/audit-logs?user_id=&days=30
  • 5 başarısız giriş → hesap 15 dk bloke
  • Hassas modüllerde 2FA zorunlu (finans, sözleşme, kullanıcı yönetimi)
  • 90 gün pasif kullanıcı → otomatik deaktif
  • Şifre policy: 12+ karakter, 90 gün rotasyon, son 5 şifre kullanılamaz
  • Effective Perm = Role Default ∪ User Override ∩ ABAC Condition
tenants
users
roles
permissions
role_permissions (M2M)
user_permissions (override)
sessions
audit_logs
password_reset_tokens
LoginForm · 2FASetup
PermissionMatrix
UserEditor · AuditLogViewer
SessionManager
🚨

Fuel Radar (Yakıt Anti-Fraud)

SoD prensibi + Isolation Forest + Rule-based anomali
P0 · MVP
POST/fuel-records (SoD: ŞOFÖR)
POST/machine-hours (SoD: FORMEN)
GET/fuel-radar/anomalies
WSS/hubs/fuel-radar · AnomalyDetected
def detect_anomaly(fuel, hours, baseline):
  expected_L = baseline × hours.total
  deviation = (fuel - expected_L) / expected_L × 100
  
  if deviation > 15:   severity = "HIGH"
  elif deviation > 8: severity = "MEDIUM"
  
  # ML confidence
  ml_score = isolation_forest.predict(features)
  return Anomaly(severity, deviation, ml_score)
fuel_records
machine_hours
fuel_anomalies
+ vehicles.baseline_L_per_h
+ TimescaleDB hypertable
  (fuel_consumption)
TRIGGER check_sod
BEFORE INSERT ON fuel_records
FOR EACH ROW WHEN
NEW.driver_id =
  (SELECT reporter_id
   FROM machine_hours
   WHERE same_vehicle_same_date)
THEN RAISE EXCEPTION

Hakediş (Progress Payment)

Metraj + otomatik kesinti motoru + onay zinciri
P0 · MVP
POST/hakedis (draft oluştur)
PUT/hakedis/{id}/submit (onay zinciri başlar)
PUT/hakedis/{id}/approve (+ next approver)
GET/hakedis/{id}/deductions (5 kesinti)
var gross = items.Sum(w => w.Qty × w.UnitPrice);
var deductions = new[] {
  SgkPrim(gross, 0.048),        // %4.8
  Guarantee(gross, 0.05),       // %5
  LogisticShare(gross, 0.025),  // %2.5
  AdvanceOffset(prev_advance),  // avans mahsup
  DelayPenalty(days_late, 0.004) // %0.4/gün
};
var net = gross - deductions.Sum();
hakedis
hakedis_items (metraj)
hakedis_deductions
approval_chain
hakedis_documents
+ audit trigger
1. Metraj (Burakcan)
2. Saha Şefi (Mehmet)
3. Muhasebe (Sezen)
4. Teknik Dir. (Türker)
5. Ödeme (Onur) → Luca
🅻

Luca / Uyumsoft Integration

E-Fatura → İrsaliye eşleştirme → Muhasebe otomasyonu
P0 · MVP
1. Uyumsoft Inbox sync (her 5 dk)
2. E-Fatura XML parse
3. Dispatch eşleşme (fuzzy: supplier + date + amount)
4. Cost center auto-assign (dispatch.site_id)
5. Luca GenericSales XML üret
6. Luca API upload (yevmiye fişi)
7. Confirmation → mark_synced
def match(invoice):
  for d in pending_dispatches:
    score = (0.5 × same_supplier
          + 0.3 × date_diff(±3d)
          + 0.2 × amount_similarity)
    if score > 0.85: return auto_match(d)
  return manual_review_queue
invoices
dispatches
invoice_dispatch_matches
luca_sync_logs
+ luca_config per tenant
+ manual_review_queue
  • %98 otomatik eşleşme
  • %2 manuel review (~8 fatura/ay)
  • Cycle: 12 dk → 2 saniye
  • Sezen Hanım'ın 2 saat kazanımı

AI Reports & Chat Service

Natural language sorgulama + tahminsel modelleme + executive summary
P2 · V2.0
  • LLM: GPT-5 (OpenAI) + Claude Opus fallback
  • RAG: LangChain + pgvector
  • Forecast: Prophet + XGBoost ensemble
  • Anomaly: Isolation Forest + Z-score
  • Embedding: text-embedding-3-large
agent = SQLAgent(
  llm=gpt5,
  db=readonly_view,
  restrict_tables=user.allowed_tables,
  few_shot=examples
)
# "Urla neden zararda?"
response = agent.run(query)
# Output: SQL + chart + prose
POST/ai/chat (SSE streaming)
GET/ai/reports/weekly-summary
GET/ai/forecast?horizon=6M
GET/ai/anomalies
~$0.08 / soru (GPT-5)
Aylık limit: 500 soru/kullanıcı
Toplam tahmini: ~$780/ay

📊 Tüm 54 Modül · Özet Matris

#ModülServisDBAPIÖncelik
1Dashboard · 6 canlı grafikMulti-12P0
2Identity + RBACIdentity918P0
3Şantiyeler (list + detail)Projects422P0
4Şantiye GünlüğüProjects28P1
5Punch ListProjects214P0
6Harita (canlı)Geofence-4P3
7PuantajHR316P0
8Personel (İK)HR520P0
9Geofencing/PDKSGeofence210P0
10İzin & AvansHR312P1
11İSG BildirimleriSafety314P1
12Araç SiciliFleet216P1
13Yakıt Radarı 🚨Fuel (Python)312P0
14Makine PuantajıFleet18P2
15Periyodik BakımFleet312P1
16Kiralık EkipmanFleet210P1
17Satın Alma TalepleriInventory314P1
18Teklif Karşılaştırma (RFQ)Tenders210P1
19Tedarikçi YönetimiInventory318P1
20Kommo CRMIntegration18P2
21Stok DurumuInventory422P1
22Giriş/Çıkış FişleriInventory212P1
23Barkod YönetimiInventory18P2
24Depo TransferleriInventory210P2
25Nakit Akış MonitörFinance-10P1
26Ödeme TalepleriFinance212P2
27Masraf MerkezleriFinance214P0
28Çek TakvimiFinance110P2
29Çek ParçalamaFinance18P0
30Teminat MektuplarıFinance210P2
31Hakediş (Liste + Detay)Finance518P0
32Otomatik KesintilerFinance16P2
33Luca / UyumsoftIntegration414P0
34İhale Takvimi (EKAP)Tenders316P1
35Dinamik Keşif (BOM)Projects214P1
36Otomatik ŞablonlarDocuments210P1
37Teklif YönetimiTenders318P1
38Doküman V1/V2Documents420P1
39AI Raporlar ✨Reports (Python)612P2
40Aktif SözleşmelerProjects314P2
41Sözleşme Detay (AI özet)Projects-8P2
42Resmi Evrak ArşiviDocuments210P2
43KEP ArşiviIntegration28P2
44Müşteri PortalıProjects28P1
45Mobil (10 ekran)Multi-~60P0
46Kullanıcı + RBAC UIIdentity--P0
47Superadmin SaaSIdentity316P3
48Sistem AyarlarıIdentity16P3
49🌿 Karbon DashboardCarbon (Go)310P3
50🌿 EPD Malzeme EmisyonCarbon312P3
51🌿 Lojistik CO₂Carbon28P3
52🌿 Atık YönetimiCarbon314P3
53🌿 SKDM RaporuCarbon18P3
54Notifications CenterNotifications212P0
10 · MOBILE

Mobil Uygulama Mimarisi

ConsTech360 mobile saha personelinin birincil cihazı. Zayıf internet koşullarında bile çalışması zorunlu → offline-first mimari.

🏗️ Katmanlı Mobil Yapı

    ┌───────────────────────────────────────────────────────────────┐
    │                  UI LAYER (React Native 0.74)                 │
    │   Screens (Expo Router) · Components · Reanimated 3           │
    └───────────────────────────┬───────────────────────────────────┘
                                │
    ┌───────────────────────────▼───────────────────────────────────┐
    │                STATE & LOGIC LAYER                            │
    │   Zustand · TanStack Query · Custom Hooks · Zod Validators    │
    └───────────────────────────┬───────────────────────────────────┘
                                │
    ┌───────────────────────────▼───────────────────────────────────┐
    │                SYNC & OFFLINE LAYER                           │
    │   WatermelonDB · SyncEngine · AsyncQueue · ConflictResolver   │
    └───────────────────────────┬───────────────────────────────────┘
                                │
    ┌───────────────────────────▼───────────────────────────────────┐
    │                NATIVE & PLATFORM LAYER                        │
    │   Camera · GPS · Biometric · FCM Push · ML Kit OCR · Sensors  │
    └───────────────────────────────────────────────────────────────┘
    

🔄 Offline-First Pattern

Optimistic Update

Kullanıcı eylemi → Local DB'ye hemen yaz → UI'de göster → Arka planda API'ye gönder

async function createPunchItem(data) {
  // 1. Lokal kayıt (anında)
  const local = await db.punchItems
    .create({...data, _sync: "pending"});
  // 2. UI güncellensin
  queryClient.invalidateQueries(...);
  // 3. Queue'ya ekle
  syncQueue.enqueue({
    type: "create", entity: "punch",
    data: local, priority: HIGH
  });
}
Conflict Resolution

Aynı kayıt server'da değişmişse: last-writer-wins + field-level merge

function resolveConflict(local, server) {
  if (server.updated_at > local.updated_at) {
    showConflictNotification(local, server);
    return merge(server, local, {
      strategy: "server-wins-except-photos"
    });
  }
  return local;
}

📦 Performans & Kaynak Hedefleri

MetricHedefNasıl?
APK Boyutu< 18 MBHermes engine + code splitting + lazy routes
Cold Start (iOS)< 1.5sSkeleton UI + preload critical routes
Cold Start (Android)< 1.8sSame + native splash
Kamera Açılış< 600msPre-initialize on app start
Pil Kullanımı< 15% / 8 saatWake lock minimum, background throttle
Data Kullanımı< 5 MB/günImage compression + delta sync
Offline Depolama48 saat queueWatermelonDB + SQLCipher

🔐 Mobile Güvenlik Katmanları

1. Biometric Lock

Face ID / Touch ID. Hassas sayfalarda re-auth.

2. Certificate Pinning

MITM'e karşı SSL cert pinli.

3. Jailbreak Detect

Root/JB tespit → uyarı + log.

4. Screenshot Block

Sözleşme/hakediş ekranında.

5. Encrypted DB

WatermelonDB + SQLCipher (AES-256).

6. OTA Security

CodePush sadece imzalı bundle.

11 · AI/ML

AI & ML Servisleri

6 ayrı AI/ML use case. Her biri için farklı model ve ayrı Python servisi.

🤖 AI Servisleri Matrisi

Use CaseModelTipLatencyGüven Eşiği
AI Chat (Sorgulama)GPT-5 (OpenAI)LLM + RAG2-5s (stream)-
Executive SummaryGPT-5 + promptsLLM (cron)Pzt 08:00-
Finansal ProjeksiyonProphet + XGBoostEnsembleOffline gece> 0.85
Yakıt AnomaliIsolation ForestML + rule< 500ms> 0.75
İhale EşleşmeBERT + Cosine SimNLPGece 03:00> 0.7
OCR (İrsaliye)ML Kit (on-device)Vision< 800ms> 0.90

🧩 RAG Mimarisi (AI Chat)

    SORU: "Urla Teknopark neden zararda?"
           │
           ▼
    ┌──────────────────┐
    │ Query Embedding  │── text-embedding-3-large
    └────────┬─────────┘
             │
             ▼
    ┌──────────────────┐
    │  pgvector Search │── Top-K: 15 ilgili kayıt
    │  (Similarity)    │    • Sözleşme · Hakedişler · BOM · Anomaliler
    └────────┬─────────┘
             │
             ▼
    ┌──────────────────┐
    │  RBAC Filter     │── Kullanıcı görmeye yetkili mi?
    └────────┬─────────┘
             │
             ▼
    ┌──────────────────┐
    │ GPT-5 streaming  │── Prompt: role + context + question
    │ + guardrails     │
    └────────┬─────────┘
             │
             ▼
    CEVAP (streaming) + kaynak referansları + aksiyon önerileri
    
🔒 Prompt Injection Koruması

Kullanıcı girdisinin LLM'e verilmeden önce sanitize edilmesi zorunlu. Formen "tüm şantiyeleri listele" diyerek CEO verisine erişememeli. Çözüm: RBAC SQL filtreleme + Output guardrails + Structured prompts (JSON schema).

💰 AI Aylık Maliyet Tahmini

GPT-5 (Chat)
$780
~10K soru × $0.078
Embeddings
$45
~2M token
Self-hosted ML
$120
GPU sunucu (Prophet, IF)
Toplam / Ay
~$945
80 müşteride → $12/müşteri
12 · CARBON

Karbon Ayak İzi Microservice

Ar-Ge modülü. AB Yeşil Mutabakat (SKDM/CBAM) uyumu için 2026 kritik yıl. Inşaat sektörünün CO₂'nin %37'sini ürettiği dikkate alınarak ayrı microservice olarak Go ile yazılır (yüksek throughput hesaplama).

🌿 5 Alt Modül

ModülGörevStandart / Referans
1. Carbon DashboardToplam emisyon özeti, trend, hedef karşılaştırmaGHG Protocol Scope 1-2-3
2. EPD Malzeme EmisyonMalzeme miktarı × EPD katsayısı = kgCO₂eISO 14025 (EPD)
3. Lojistik CO₂Mesafe × araç tipi faktör = nakliye emisyonuGLEC Framework
4. Atık YönetimiTehlikeli/geri dönüşüm tespit, doluluk takibiTR Atık Yönetmeliği
5. SKDM RaporuAvrupa ihracat için CBAM uyumlu raporAB 2023/956 Reg.

📊 Veri Modeli (Karbon Domain)

◈ epd_catalog, emissions, waste_records, skdm_reports
epd_catalog
🔑 id uuid
material_code unique
material_name string
category enum
emission_factor decimal
unit string
epd_source string
valid_from date
// ex: C30 beton = 320 kgCO₂e/m³
emissions
🔑 id uuid
↗ site_id
↗ source_id
scope enum[1,2,3]
source_type enum
quantity decimal
unit string
co2e_kg decimal
date date
calculation jsonb
logistics_emissions
🔑 id uuid
↗ dispatch_id
distance_km decimal
vehicle_class enum
fuel_type enum
load_weight decimal
co2e_kg decimal
glec_factor decimal
waste_records
🔑 id uuid
↗ site_id
waste_code EU_list
category enum
weight_kg decimal
container_fill_pct decimal
is_hazardous bool
disposal_method enum
disposal_company string
mknf_code string
skdm_reports
🔑 id uuid
↗ site_id
period quarter
total_scope1 decimal
total_scope2 decimal
total_scope3 decimal
embedded_emissions jsonb
xml_export_url string
cbam_submitted bool

🧮 Hesaplama Motoru (Go)

package carbon

// EPD bazlı malzeme emisyonu hesaplama
type MaterialEmission struct {
  MaterialCode   string
  Quantity       float64
  EPDFactor      float64  // kgCO₂e/unit
  Unit           string
}

func (m MaterialEmission) CalculateCO2e() float64 {
  return m.Quantity * m.EPDFactor
}

// Lojistik emisyonu (GLEC Framework v3)
func CalculateLogistics(d Dispatch) float64 {
  factor := GetGLECFactor(d.VehicleClass, d.FuelType)
  // factor unit: gCO₂e/tonne-km
  
  weight_t := d.LoadKg / 1000
  co2e_g := factor * weight_t * d.DistanceKm
  
  return co2e_g / 1000 // kgCO₂e
}

// Atık doluluk tahmini
func PredictCollectionDate(container Container) time.Time {
  dailyFill := container.HistoricalFillRate  // L/gün
  remaining := container.Capacity - container.CurrentFill
  daysLeft := remaining / dailyFill
  return time.Now().Add(daysLeft * 24 * time.Hour)
}

🇪🇺 SKDM (CBAM) Uyumluluk Akışı

    [AB İhracat Yapılacak Şantiye]
               │
               ▼
    ┌──────────────────────────┐
    │ Emission Data Collection │── Tüm Scope 1-2-3 verileri
    └──────────┬───────────────┘
               │
               ▼
    ┌──────────────────────────┐
    │ Embedded Emissions Calc  │── Ürün başına tCO₂e
    └──────────┬───────────────┘
               │
               ▼
    ┌──────────────────────────┐
    │ CBAM Quarterly Report    │── AB XML formatı
    └──────────┬───────────────┘
               │
               ▼
    ┌──────────────────────────┐
    │ Submit to CBAM Registry  │── AB portal üzerinden
    └──────────────────────────┘
    
    📅 Periyot: Çeyrek bazında (Q1 → Q2 sonu deadline)
    💶 Ceza: Rapor yok → ton CO₂e başına €50
🌍 Neden Bu Modül Stratejik?

2026'dan itibaren AB'ye yapılan inşaat malzemesi ihracatında CBAM raporu zorunlu. TEORİ Mühendislik'in şimdi bu altyapıyı kurması 5 yıllık rekabet avantajı sağlar. Üstelik kamu ihalelerinde (özellikle TOKİ, Çevre Şehircilik Bakanlığı) 2027'den itibaren karbon raporu puanlama kriteri olacak.

13 · SECURITY

Güvenlik & RBAC

Finansal veriler, kişisel bilgiler (TC, IBAN), gizli sözleşmeler. KVKK + ISO 27001 + SOC 2 uyumluluk.

🔐 Çok Katmanlı Güvenlik

KatmanKorumaTeknoloji
1. EdgeDDoS, WAF, bot trafiğiCloudflare + AWS Shield
2. NetworkVPC isolation, private subnetsAWS VPC + Security Groups
3. GatewayJWT validation, rate limitingKong + Redis
4. ApplicationRBAC/ABAC, input validationPer-service + Zod/FluentValidation
5. Data at RestŞifreleme (AES-256)PostgreSQL TDE + S3 SSE-KMS
6. Data in TransitTLS 1.3 zorunluLet's Encrypt + HSTS
7. PII EncryptionTC, IBAN alan şifrelemeColumn-level encryption (pgcrypto)
8. Secret ManagementAPI key, cert, passwordHashiCorp Vault

🏛️ RBAC + ABAC Hibrit Model

function canAccess(user: User, resource: Resource, action: Action): boolean {
  // 1. RBAC: Rol varsayılanı
  let allowed = user.role.permissions[resource.type]?.[action] ?? false;

  // 2. RBAC Override: Kullanıcı özel yetki
  if (user.customPermissions[resource.type]?.[action] !== undefined) {
    allowed = user.customPermissions[resource.type][action];
  }

  // 3. ABAC: Bağlamsal kontroller
  if (allowed) {
    // a) Şantiye erişim kontrolü
    if (resource.siteId && !user.siteAccess.includes(resource.siteId)) {
      allowed = false;
    }
    // b) Mali limit kontrolü
    if (resource.amount && resource.amount > user.financialLimits[action]) {
      allowed = false;
    }
    // c) Çalışma saati kısıtı
    if (!isWithinWorkHours(user.workHours)) {
      allowed = false;
    }
    // d) IP kısıtı (varsa)
    if (user.ipWhitelist?.length && !user.ipWhitelist.includes(currentIp)) {
      allowed = false;
    }
  }

  // 4. Audit log (başarılı veya başarısız)
  auditLog.record({ user, resource, action, allowed, timestamp: now });

  return allowed;
}

🇹🇷 KVKK Uyumluluk Kontrol Listesi

✓ Uygulanan Kontroller
  • Veri işleme envanteri (tüm PII alanları)
  • Açık rıza formu (kayıt esnasında)
  • Veri silme hakkı (soft delete + 90 gün)
  • Veri taşıma hakkı (JSON/CSV export)
  • Erişim logları 2 yıl saklanır
  • VERBIS kayıt yapıldı
  • Veri İşleme Sözleşmesi (DPA) müşterilerle
  • AB-Frankfurt data residency
⚠ Ek Gereken İşlemler
  • Veri koruma etki değerlendirmesi (DPIA)
  • Yıllık KVKK denetimi
  • Çalışan KVKK eğitimi (yılda 1)
  • İhlal bildirim prosedürü (72 saat)
  • Alt yüklenici (Luca) DPA gözden geçir
  • Çerez politikası + izin banner
  • Veri minimizasyonu (sadece gerekli)
  • Pseudonymization (analytics için)
14 · DEVOPS

DevOps & Deployment

Git → Build → Test → Deploy pipeline'ı tam otomatik. Geliştirici kod push ettiğinden kullanıcıya ulaşana kadar maksimum 8 dakika.

🔄 CI/CD Pipeline

    ┌─────────────┐
    │ git push    │── Developer
    └──────┬──────┘
           │
    ┌──────▼──────────────────────────────────────────────┐
    │         GITHUB ACTIONS (CI)                         │
    │  ┌────────┬────────┬────────┬────────┬────────┐     │
    │  │ Lint   │ Unit   │ Integ  │ E2E    │ Build  │     │
    │  │ ESLint │ Jest   │ Pytest │ Playwr │ Docker │     │
    │  │ Prett  │ xUnit  │        │        │        │     │
    │  └────────┴────────┴────────┴────────┴────────┘     │
    │                     (4-6 dk)                        │
    └──────────────────────┬──────────────────────────────┘
                           │
    ┌──────────────────────▼──────────────────────────────┐
    │         GITHUB CONTAINER REGISTRY                   │
    │  Image tag: v1.4.2-abc1234 + latest                 │
    └──────────────────────┬──────────────────────────────┘
                           │
    ┌──────────────────────▼──────────────────────────────┐
    │         ARGOCD (CD) · GitOps                        │
    │  Kubernetes manifest otomatik güncellenir           │
    └──────────────────────┬──────────────────────────────┘
                           │
    ┌──────────────────────▼──────────────────────────────┐
    │         K8S CLUSTER (AWS EKS)                       │
    │  Rolling update · Zero downtime · Health checks     │
    │  staging-namespace → canary (5%) → production (100%)│
    └─────────────────────────────────────────────────────┘

    Toplam süre: ~8 dakika (commit → production)
    

🌍 Ortamlar (Environments)

EnvAmaçURLDataRelease
localGeliştirici makinesilocalhostFake seed dataManuel
devGeliştirme ortakdev.constech360.comFake + anon prodHer commit
stagingQA + sözleşmeli pilotstaging.constech360.comAnon prod cloneMerge → master
productionCanlı müşteriapp.constech360.comGerçek müşteriTag (manuel trigger)

📦 Kubernetes Mimarisi

constech360-prod/
├── gateway/           # Kong API Gateway (2 replicas, HA)
├── services/
│   ├── identity/      # .NET Identity (3 replicas)
│   ├── projects/      # .NET Projects (3 replicas)
│   ├── finance/       # .NET Finance (3 replicas)
│   ├── hr/            # NestJS HR (2 replicas)
│   ├── tenders/       # NestJS Tenders (2 replicas)
│   ├── documents/     # NestJS Documents (2 replicas)
│   ├── inventory/     # .NET Inventory (2 replicas)
│   ├── fleet/         # NestJS Fleet (2 replicas)
│   ├── fuel-radar/    # Python ML (2 replicas + GPU)
│   ├── safety/        # NestJS Safety (2 replicas)
│   ├── reports-ai/    # Python AI (2 replicas + GPU)
│   ├── carbon/        # Go Carbon (2 replicas)
│   ├── integration/   # .NET Integration (2 replicas)
│   ├── geofence/      # Go Geofence (2 replicas)
│   └── notifications/ # Node Notifications (2 replicas)
├── data/
│   ├── postgres/      # Primary + Read replicas
│   ├── redis/         # Cluster (6 nodes)
│   ├── rabbitmq/      # Cluster (3 nodes)
│   └── elasticsearch/ # Cluster (3 nodes)
└── monitoring/
    ├── prometheus/    # Metrics
    ├── grafana/       # Dashboards
    ├── loki/          # Logs
    └── jaeger/        # Tracing

📈 Observability Stack

📊 Metrics

Prometheus + Grafana. SLA, error rate, p99.

📜 Logs

Loki + Grafana. Structured JSON logs.

🔍 Tracing

Jaeger + OpenTelemetry. Request flow takibi.

🚨 Alerting

PagerDuty + Slack. 5xx spike, DB slow query.

🏖️ On-Call Rotation

3 kişilik DevOps ekibi haftalık rotasyonla on-call olur. Kritik (P1) alarmlar 15 dk içinde yanıtlanır, P2 alarmları 1 saat. Aylık incident retrospektifleri yapılır.

15 · INTEGRATIONS

Dış Sistem Entegrasyonları

ConsTech360 tek başına çalışmaz — Türkiye inşaat ekosisteminin bir parçası. 11 kritik entegrasyon tanımlanmıştır.

🔌 Entegrasyon Matrisi

SistemTipYönFrekansÖncelik
Luca MuhasebeAPI + XML↑↓ Çift yönlüRealtimeP0
Uyumsoft E-FaturaAPI↓ GelenHer 5 dkP0
EKAP (KİK)Scraping + RSS↓ GelenGünde 1x (03:00)P1
KEP (PTT)SMTP + IMAP↑↓ Çift yönlüRealtimeP2
SGK E-BildirgeXML Upload↑ GidenAylıkP1
Kommo CRMAPI↑↓ Çift yönlüRealtimeP2
WhatsApp BusinessAPI (Meta)↑↓ Çift yönlüRealtimeP1
Meteoroloji (MGM)REST API↓ GelenSaatlikP2
Banka Hesap (API)REST (Ziraat, Garanti)↓ GelenGünlükP2
Google Maps / MapboxAPI↓ GelenRealtimeP1
OpenAI (GPT-5)REST↑↓ Çift yönlüRealtimeP2

📐 Entegrasyon Katmanı Mimarisi

    ┌──────────────────────────────────────────────────────────────────┐
    │              INTEGRATION HUB (dedicated .NET service)            │
    │                                                                  │
    │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐              │
    │  │ Adapter     │  │ Adapter     │  │ Adapter     │              │
    │  │ Luca        │  │ Uyumsoft    │  │ EKAP        │   ...        │
    │  │ (C# SDK)    │  │ (REST API)  │  │ (Scraper)   │              │
    │  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘              │
    │         │                │                │                     │
    │         └────────┬───────┴────────┬───────┘                     │
    │                  │                │                             │
    │         ┌────────▼────────────────▼────────┐                    │
    │         │   Common Integration Layer       │                    │
    │         │   • Retry logic                  │                    │
    │         │   • Circuit breaker (Polly)      │                    │
    │         │   • Rate limiting                │                    │
    │         │   • Credential rotation (Vault)  │                    │
    │         │   • Audit log                    │                    │
    │         └──────────────┬───────────────────┘                    │
    │                        │                                        │
    │                ┌───────▼───────┐                                │
    │                │   RabbitMQ    │ → Events'ler diğer servislere  │
    │                └───────────────┘                                │
    └──────────────────────────────────────────────────────────────────┘
    

⚡ Circuit Breaker Pattern (Polly Kullanımı)

public class LucaService
{
  private readonly IAsyncPolicy<HttpResponseMessage> _resiliencePolicy;
  
  public LucaService()
  {
    // Retry: 3 kez, exponential backoff
    var retryPolicy = Policy<HttpResponseMessage>
      .Handle<HttpRequestException>()
      .OrResult(r => !r.IsSuccessStatusCode)
      .WaitAndRetryAsync(3, attempt => 
        TimeSpan.FromSeconds(Math.Pow(2, attempt)));
    
    // Circuit Breaker: 5 hata sonrası 30 sn kapat
    var circuitBreakerPolicy = Policy<HttpResponseMessage>
      .Handle<HttpRequestException>()
      .CircuitBreakerAsync(5, TimeSpan.FromSeconds(30));
    
    // Timeout: 10 sn
    var timeoutPolicy = Policy.TimeoutAsync<HttpResponseMessage>(10);
    
    _resiliencePolicy = Policy.WrapAsync(
      retryPolicy, circuitBreakerPolicy, timeoutPolicy);
  }
  
  public async Task<LucaInvoice> UploadAsync(Invoice invoice)
  {
    return await _resiliencePolicy.ExecuteAsync(async () =>
    {
      var response = await _httpClient.PostAsJsonAsync(
        "/api/luca/invoices", invoice);
      response.EnsureSuccessStatusCode();
      return await response.Content.ReadFromJsonAsync<LucaInvoice>();
    });
  }
}
⚠ Risk: Luca/Uyumsoft API Kesintisi

Luca veya Uyumsoft kritik bir şekilde down olursa tüm muhasebe işlemleri duraklar. Mitigation: 1) Queue'ya yazılan işlemler 24 saat bekletilir, sonra manuel işlenir. 2) Admin paneline "Luca DOWN" uyarısı düşer. 3) Günlük batch export (CSV) alternatifi hazır bekler.

16 · PERFORMANCE

Performans & SLA

Sözleşme gereği garanti edilen servis seviyeleri ve hedef performans metrikleri.

📜 SLA Taahhütleri

MetricEnterprise PlanStandard PlanÖlçüm
Uptime99.95% (21 dk/ay)99.9% (43 dk/ay)Pingdom
API Response p95< 200 ms< 400 msDatadog
API Response p99< 500 ms< 1sDatadog
Dashboard Load< 1.5s< 2.5sLighthouse CI
Mobile Cold Start< 1.5s< 2sFirebase
Realtime Lag< 300 ms< 800 msSignalR metrics
Data Recovery (RTO)< 1 saat< 4 saatDR drill
Data Loss (RPO)< 5 dk< 1 saatBackup freq
Support Response< 1 saat< 8 saatTicket system

🎯 Performance Optimizasyonları

🗄️ Database Strategies
  • Read replicas (3 adet · dashboard sorguları)
  • Materialized view'lar (agregasyon)
  • Connection pooling (pgBouncer)
  • Partitioning (timesheets by month)
  • Index strategy (GIN, GIST, BRIN)
  • Query plan analysis (pg_stat_statements)
⚡ Application Caching
  • Redis: Session + RBAC cache (TTL 15 dk)
  • CDN: Static assets (Cloudflare edge)
  • HTTP cache: Stale-while-revalidate
  • GraphQL persisted queries
  • React Query: Server state cache
  • Service Worker: Offline web

📊 Yük Testi Hedefleri

Eşzamanlı Kullanıcı
2,500
V1 hedef (K6 test)
RPS (Peak)
8,000
Request/sec
DB TPS
1,800
Transactions/sec
WebSocket Conn.
15K
Eşzamanlı SignalR
17 · TEAM

Takım Yapısı & Rol Tanımları

18 aylık geliştirme için 7-9 kişilik core ekip. Her rol için seviye (junior/mid/senior), aylık maaş ve dış kaynak alternatifleri belirlenmiştir.

👥 Core Takım (Tam Zamanlı)

RolSeviyeSayıAylık MaaşBaşlangıç
Tech Lead / Solution ArchitectSenior 10y+1₺180KAy 1 (part-time olarak seyir)
Product Owner / BASenior1₺95KAy 1
Backend Developer (.NET)Senior 5y+2₺120K × 2Ay 1
Backend Developer (Node.js)Mid 3y+1₺95KAy 2
Frontend Developer (Next.js)Senior 5y+1₺110KAy 2
Mobile Developer (RN)Senior 5y+1₺120KAy 3
DevOps EngineerMid 3y+1₺100KAy 2
UX/UI DesignerMid 3y+1₺75KAy 1
QA EngineerMid 3y+1₺80KAy 4

🎯 Dış Kaynak / Freelance

RolSüreTutarAmaç
ML Engineer (Python, AI)6 ay (Ay 10-16)₺160K/ayAI Reports + Yakıt Radar + Forecasting
Güvenlik Uzmanı (Pentester)Proje bazlı₺80K toplamPentest + ISO 27001 hazırlık
KVKK / Hukuk DanışmanıAylık₺18K/ayDPA, sözleşme, uyumluluk
Çevrebilim DanışmanıAy 15-18₺45K/ayKarbon modülü · SKDM uzmanlığı

🏆 Organizasyon Şeması

                    ┌────────────────────────┐
                    │   Yüksel Bey (CEO)     │
                    │   Ürün Sponsoru        │
                    └───────────┬────────────┘
                                │
                    ┌───────────▼────────────┐
                    │   Tech Lead (Solution  │
                    │   Architect)           │
                    └───────────┬────────────┘
                                │
           ┌────────────────────┼────────────────────┐
           │                    │                    │
    ┌──────▼──────┐      ┌──────▼──────┐      ┌─────▼──────┐
    │ Product     │      │ Engineering │      │ Design     │
    │ Owner / BA  │      │ Team (6)    │      │ (UX/UI)    │
    └─────────────┘      └──────┬──────┘      └────────────┘
                                │
              ┌─────────┬───────┴────────┬─────────┐
              │         │                │         │
        ┌─────▼─┐ ┌─────▼────┐ ┌────────▼────┐ ┌──▼─────┐
        │ BE    │ │ FE       │ │ Mobile      │ │ DevOps │
        │ (.NET │ │ (Next.js │ │ (RN)        │ │        │
        │  + Nd)│ │  + TS)   │ │             │ │        │
        │ (3)   │ │ (1)      │ │ (1)         │ │ (1)    │
        └───────┘ └──────────┘ └─────────────┘ └────────┘
                                │
                         ┌──────▼──────┐
                         │ QA Engineer │
                         │ (Ay 4+)     │
                         └─────────────┘
    

💬 Çalışma Metodolojisi

🔄 Scrum (Modifiye)
  • 2 haftalık sprintler
  • Daily standup (10 dk, 09:30)
  • Sprint planning (2 saat)
  • Review + Retro (cumalar)
  • Backlog grooming (çarşamba)
  • Velocity tracking (Jira)
🛠️ Tools
  • Git: GitHub + branch protection
  • Project: Jira + Confluence
  • Design: Figma + FigJam
  • İletişim: Slack + Meet
  • Doc: Confluence + Notion
  • Code Review: PR required + 1 approval
18 · ROADMAP

18 Aylık Yol Haritası

6 ana faza bölünmüş 18 aylık plan. Her fazın net teslimatı ve başarı kriterleri tanımlıdır.

M0 · Nisan-Mayıs 2026 (2 ay)
🎯 Discovery & Design Sprint

İhtiyaç analizi · pilot müşteri (TEORİ Mühendislik) ile workshop · UI prototipleri · SRS finalizasyon · DB şema v1 · infra setup · ekip toplama.
Teslimat: Figma design system, dev cluster, 20+ pilot mockup

FAZ 1 · Haziran-Eylül 2026 (4 ay)
🚀 MVP Core (14 P0 modülü)

Identity · RBAC · Sites · Contracts · Dashboard · Hakediş · Luca entegrasyonu · Mobile formen app · Fuel Radar · Geofence · Punch List · Cost Centers.
Teslimat: 14 modül, iOS + Android APK, TEORİ pilot kullanımı

FAZ 2 · Ekim-Aralık 2026 (3 ay)
📦 V1.1 Operational (16 P1 modülü)

Tenders · Bid · Templates · BOM · Documents · Suppliers · Inventory · Fleet · Rentals · OHS · Leave · Guarantees · Cashflow · Customer Portal · Kommo · Daily Log.
Teslimat: 30 modül canlıda, 3-5 pilot müşteri

FAZ 3 · Ocak-Şubat 2027 (2 ay)
🧪 V1.5 Hardening

Pentest · KVKK denetimi · Load test (2500 concurrent) · performance tuning · bug bash · onboarding flow iyileştirme · support SLA sistemi.
Teslimat: ISO 27001 hazırlık, SLA sistemi, 10 müşteri

FAZ 4 · Mart-Haziran 2027 (4 ay)
🧠 V2.0 AI + Advanced (14 P2 modülü)

AI Chat · Forecasting · Anomaly Detection · KEP Archive · Contract AI · Deduction Engine · Payment Requests · Cheque Calendar · Machine Timesheet · Barcode · Transfers · Tender Win Analysis.
Teslimat: 44 modül, AI destekli raporlar, 25-30 müşteri

FAZ 5 · Temmuz-Eylül 2027 (3 ay)
🌱 V3.0 Ar-Ge (10 P3 modülü + Karbon)

Carbon Dashboard · EPD Material · Logistic CO₂ · Waste Management · SKDM Reporter · SuperAdmin SaaS · Live Map · Settings · Multi-tenancy UI · Mobile İşçi App.
Teslimat: 54 modül complete, SKDM-ready, AB pazarı hazır, 50+ müşteri

FAZ 6 · Ekim 2027+ (Sürekli)
📈 Growth & Scale

Yatırım turu (Series A) · yurt dışı genişleme (KKTC, Azerbaycan) · 3. parti marketplace · mobil çalışan app'i · BIM entegrasyon (Revit).
Teslimat: ₺20M+ ARR, 150+ müşteri

📊 Modül Dağılım Gantt (Simplified)

    Modül Grubu           │ Q2-26 │ Q3-26 │ Q4-26 │ Q1-27 │ Q2-27 │ Q3-27 │
    ──────────────────────┼───────┼───────┼───────┼───────┼───────┼───────┤
    Discovery & Design    │ ████  │       │       │       │       │       │
    Identity + RBAC       │   ████│███    │       │       │       │       │
    Projects + Contracts  │       │ █████ │       │       │       │       │
    Finance Core          │       │ █████ │       │       │       │       │
    HR + Timesheet        │       │  ████ │       │       │       │       │
    Mobile MVP            │       │   ███ │███    │       │       │       │
    Fuel Radar (ML)       │       │    ██ │██     │       │       │       │
    Luca Integration      │       │  █████│       │       │       │       │
    ───── V1.0 MVP ───────┼───────┼───────┼───●───┼───────┼───────┼───────┤
    Tenders + BOM         │       │       │  █████│       │       │       │
    Inventory + Fleet     │       │       │  █████│       │       │       │
    Documents V1/V2       │       │       │   ████│       │       │       │
    Customer Portal       │       │       │    ███│█      │       │       │
    ───── V1.1 Release ───┼───────┼───────┼───────┼─●─────┼───────┼───────┤
    Hardening + Pentest   │       │       │       │ ████  │       │       │
    ───── V1.5 Stable ────┼───────┼───────┼───────┼─────●─┼───────┼───────┤
    AI Reports + Chat     │       │       │       │       │███████│       │
    Anomaly + Forecast    │       │       │       │       │█████  │       │
    KEP + Contract AI     │       │       │       │       │ █████ │       │
    ───── V2.0 AI ────────┼───────┼───────┼───────┼───────┼──────●┼───────┤
    🌱 Carbon Suite       │       │       │       │       │       │ █████ │
    SuperAdmin SaaS       │       │       │       │       │       │  ████ │
    İşçi Mobile           │       │       │       │       │       │   ███ │
    ───── V3.0 Complete ──┼───────┼───────┼───────┼───────┼───────┼─────●─┤
    
19 · BUDGET

Bütçe & Maliyet Analizi

18 aylık toplam yatırım tahmini. Ekip maaşları + altyapı + lisanslar + operasyon giderleri.

💰 Toplam Maliyet Özet

İnsan Kaynağı
₺12.4M
18 ay · core team
Altyapı + Cloud
₺1.6M
AWS + Cloudflare + Vault
Lisans + Araçlar
₺420K
GitHub, Jira, Figma, vs.
TOPLAM
₺14.8M
18 ay toplam

📊 Aylık Breakdown (Tahmini)

Gider KalemiAylık Tutar18 Ay ToplamNot
Core Team (9 kişi)₺655K₺11.79MKıdem, ikramiye dahil
ML Engineer (6 ay)₺160K₺960KAy 10-16
Freelance (güvenlik, hukuk)~₺35K₺630KPentest + KVKK
Cloud (AWS EKS)₺55K₺990KCompute + network
DB (PostgreSQL RDS + Timescale)₺18K₺324KPrimary + replicas
Storage (S3 + backups)₺8K₺144KFotoğraf + doküman
CDN + WAF (Cloudflare Enterprise)₺6K₺108KEdge caching
Monitoring (Datadog)₺9K₺162KAPM + logs + traces
AI (OpenAI API)₺30K₺540KSadece FAZ 4'ten sonra
Software Licenses₺14K₺252KGitHub, Jira, Figma, Slack, vs.
Legal + Accounting₺8K₺144KKVKK sözleşmeleri
Marketing (pilot ile başla)₺25K₺450KWeb sitesi, SEO, LinkedIn ads
Yedek / Misc (%5 buffer)₺33K₺590KBeklenmedik
TOPLAM (18 AY) ₺14.79M

📈 Gelir Projeksiyonu (5 Yıl)

YılMüşteri Say.Ort. Ödeme (₺/ay)MRRARR
Y1 (2027)12₺18K₺216K₺2.6M
Y2 (2028)38₺22K₺836K₺10M
Y3 (2029)80₺28K₺2.24M₺26.9M
Y4 (2030)140₺32K₺4.48M₺53.8M
Y5 (2031)220₺36K₺7.92M₺95M
💡 ROI Hesabı

Başabaş noktası ~32. ayda (Y3 ortası) ulaşılır. 5 yıl sonunda toplam ₺95M ARR ile yatırımın ~6.5 katı geri dönüş. Series A (Y2 sonu) ile hızlanma mümkün.

20 · RISKS

Risk Haritası

18 ana risk tanımlanmıştır. Her biri için olasılık, etki, azaltma stratejisi belirlenmiştir.

⚠️ Risk Matrisi

R-01
Luca/Uyumsoft API değişiklikleri
Entegrasyon kırılırsa tüm muhasebe süreci durur. Mitigation: Adapter pattern + versioned API + fallback queue
YÜKSEK
Olasılık 35%
R-02
Senior developer kaybı (bus factor)
Tech lead veya senior BE dev ayrılırsa proje 2-3 ay gecikir. Mitigation: Knowledge sharing, rotating pair programming, dokümanyasyon, %15 bonus
YÜKSEK
Olasılık 40%
R-03
Yetersiz pilot müşteri
V1.1 sonunda 3-5 pilot alamazsak product-market fit gecikir. Mitigation: TEORİ ağ + inşaat dernekleri + "3 ay ücretsiz" teklif
YÜKSEK
Olasılık 45%
R-04
Döviz artışı (AWS TL maliyeti)
Cloud giderleri USD bazlı. TL %30 değer kaybederse aylık ₺15K ek maliyet. Mitigation: AWS commit (Savings Plans) + müşteri fiyatlarında TL+döviz maddesi
ORTA
Olasılık 60%
R-05
Güvenlik açığı (zero-day)
Log4Shell gibi bir açık çıkarsa acil yama gerekir. Mitigation: Dependabot + OWASP Top 10 testi + bug bounty program + aylık pentest
ORTA
Olasılık 25%
R-06
Scope creep (kapsam genişlemesi)
Pilot müşteri "bunu da eklesinize" derse MVP gecikebilir. Mitigation: Change request süreci + P0/P1/P2/P3 disiplini + 3 ayda 1 roadmap revizyonu
ORTA
Olasılık 55%
R-07
AI maliyetleri kontrolden çıkma
GPT-5 kullanımı beklenenin üstüne çıkarsa aylık $3K yerine $10K olabilir. Mitigation: Token limiti + caching + kullanıcı kotası + fallback'e GPT-4-mini
ORTA
Olasılık 35%
R-08
KVKK denetim cezası
KVKK ihlali + ceza (₺58K-₺5.9M arası). Mitigation: VERBIS kayıt + DPIA + yıllık KVKK denetimi + çalışan eğitimi + sigorta
DÜŞÜK
Olasılık 10%
R-09
EKAP scraping yasaklanması
EKAP scraping'i teknik veya hukuki olarak engellerse ihale takibi kısıtlanır. Mitigation: Resmi API başvurusu + manuel import alternatifi + 3. parti sağlayıcı (İhaleport) backup
DÜŞÜK
Olasılık 15%
R-10
Rekabet (büyük oyuncu giriş)
SAP, Oracle, Logo gibi büyüklerin inşaat modülü çıkarması. Mitigation: Türkiye-özel özellikler (Luca, EKAP, KVKK) + hızlı iterasyon + müşteri yakınlığı
DÜŞÜK
Olasılık 20%
EK-A · GLOSSARY

Terimler Sözlüğü

Dokümanda geçen teknik ve iş terimleri.

TerimAçıklama
ABACAttribute-Based Access Control. Kullanıcı özellikleri + bağlam bazlı yetki.
APMApplication Performance Monitoring. Uygulama hız/hata izleme.
ARRAnnual Recurring Revenue. Yıllık tekrarlayan gelir.
BOMBill of Materials. Malzeme listesi / keşif dökümü.
CBAMCarbon Border Adjustment Mechanism. AB sınır karbon düzenlemesi.
CI/CDContinuous Integration / Deployment. Otomatik build ve yayın.
DPAData Processing Agreement. Veri işleme sözleşmesi (KVKK).
DPIAData Protection Impact Assessment. Veri koruma etki analizi.
EPDEnvironmental Product Declaration. Çevresel ürün beyanı.
GHGGreenhouse Gas. Sera gazı (CO₂ dahil).
HSTSHTTP Strict Transport Security. HTTPS zorlaması.
JWTJSON Web Token. Stateless kimlik doğrulama token'ı.
KEPKayıtlı E-Posta. PTT'nin yasal delil niteliğinde e-posta sistemi.
MRRMonthly Recurring Revenue. Aylık tekrarlayan gelir.
OCROptical Character Recognition. Fotoğraftan metin tanıma.
P2PProcure-to-Pay. Satın alma-ödeme süreci.
PDKSPersonel Devam Kontrol Sistemi.
PIIPersonally Identifiable Information. Kişisel veriler (TC, IBAN).
RAGRetrieval-Augmented Generation. AI'ın veritabanından bilgi çekmesi.
RBACRole-Based Access Control. Rol bazlı yetki yönetimi.
RPO / RTORecovery Point / Time Objective. Veri kaybı / geri dönüş süresi hedefi.
SaaSSoftware as a Service. Bulut bazlı yazılım hizmeti.
SKDMSınırda Karbon Düzenleme Mekanizması (Türkçe CBAM).
SLAService Level Agreement. Servis seviyesi taahhüdü.
SoDSegregation of Duties. Görevler ayrılığı (fraud önleme).
SSEServer-Sent Events. Tek yönlü streaming protokolü.
TTITime to Interactive. Sayfanın kullanılabilir olması süresi.
VERBISVeri Sorumluları Sicil Bilgi Sistemi (KVKK resmi kayıt).
WAFWeb Application Firewall. Uygulama seviyesi güvenlik duvarı.
EK-B · REFERENCES

Referanslar & Kaynaklar

Mimari kararların arkasındaki yasal, teknik ve sektörel referanslar.

📚 Yasal Düzenlemeler

  • KVKK Kanunu 6698 · 07.04.2016 · Kişisel Verileri Koruma
  • 6331 sayılı İş Sağlığı ve Güvenliği Kanunu · İSG bildirim zorunluluğu
  • 4734 sayılı Kamu İhale Kanunu · EKAP sistemi
  • SGK Aylık E-Bildirge Usul ve Esasları · 2012 yönetmeliği
  • 6102 sayılı Türk Ticaret Kanunu · E-defter, e-fatura
  • AB 2023/956 Sayılı Düzenleme · CBAM (SKDM) 2026 yürürlük
  • Çevre ve Şehircilik Bakanlığı · Atık Yönetmeliği · Tehlikeli atık kodları

🎯 Teknik Standartlar

  • ISO 27001:2022 · Bilgi Güvenliği Yönetim Sistemi
  • ISO 14025 · Environmental Product Declaration (EPD)
  • ISO 14001:2015 · Çevre Yönetim Sistemi
  • SOC 2 Type II · Cloud servis güvenlik denetimi
  • GHG Protocol Corporate Standard · Scope 1, 2, 3 emisyon
  • GLEC Framework v3.0 · Lojistik karbon hesaplama
  • OWASP Top 10 (2021) · Web uygulama güvenlik
  • NIST Cybersecurity Framework · Siber güvenlik iskeleti
  • OpenAPI 3.1 · REST API dokümantasyon standardı
  • C4 Model (Simon Brown) · Yazılım mimari görselleştirme
  • WCAG 2.2 Level AA · Erişilebilirlik standartları

🛠️ Teknoloji Kaynakları

  • Microsoft Learn · .NET 9 ASP.NET Core dokümantasyon
  • React Native 0.74 Release Notes · New Architecture
  • Next.js 14 App Router · Server Components rehberi
  • PostgreSQL 16 Manual · Partitioning, JSONB, pgvector
  • Kubernetes Official Docs · EKS production best practices
  • AWS Well-Architected Framework · 5 pillar (operational, security, reliability, performance, cost)
  • The Twelve-Factor App · SaaS uygulama tasarım prensipleri
  • Domain-Driven Design (Eric Evans) · Bounded context, aggregate
  • Building Microservices (Sam Newman) · Servis ayrıştırma

🏢 Endüstri Kaynakları

  • Türkiye İnşaat Sektörü Raporu 2025 · YapıEndüstri Dergisi
  • McKinsey · Construction 2030 · Dijital dönüşüm raporu
  • Gartner · Construction Technology Landscape 2026
  • Türkiye Çimento Müstahsilleri Birliği (TÇMB) · EPD veritabanı
  • Çevre Şehircilik Bakanlığı · Yeşil Mutabakat Eylem Planı 2024
Doküman Sonu
Sorular için: arch-team@teori.com.tr