162 lines
6.1 KiB
Markdown
Executable File
162 lines
6.1 KiB
Markdown
Executable File
# DB State – Fleet / Cost / Service Search
|
||
**Snapshot:** 2026-01-28
|
||
**Source:** “Adatbázis állapot napló” (user log)
|
||
**Scope:** Fleet management + cost tracking + service search
|
||
**Out of scope:** CRM (explicit), Email/Auth/Bot/Subscriptions (kezelve, de nem most)
|
||
|
||
---
|
||
|
||
## 1. Canonical status (most reliable)
|
||
### 1.1 Database base
|
||
- **Schema separation:** `data` schema is the business schema (public cleanup in progress earlier, later marked stable).
|
||
- **Scale:** ~40 tables reported as “stabil” on 2026-01-28 (2105–2230 blocks).
|
||
- **Integrity:** FK constraints + enums “élesek” (2026-01-28 2219).
|
||
|
||
### 1.2 Backup reference
|
||
- **Backup created:** `/mnt/nas/git_vault/backup_20260128_alap_kesz.sql` (20260128_2130)
|
||
- **Action:** Use this as baseline snapshot identifier for future diffs.
|
||
|
||
---
|
||
|
||
## 2. In-scope modules
|
||
|
||
## 2.1 Fleet: vehicle registry & hierarchy
|
||
### Reported as implemented
|
||
- Vehicle hierarchy guaranteed: **Category -> Brand -> Model -> Variant** (20260128_2145)
|
||
- Vehicle categories seeded: `CAR`, `MOTORCYCLE`, `TRUCK` (20260128_2200)
|
||
- Vehicle variants extended with:
|
||
- `power`
|
||
- `fuel`
|
||
- `cylinder`
|
||
(2026-01-28 22:45)
|
||
|
||
### VIN verification
|
||
- `vin_deadline` logic (14 days) for temporary vehicles (2026-01-28 22:15)
|
||
- User Vehicles extended with:
|
||
- `vin_verified`
|
||
- `vin_deadline`
|
||
(20260128_2230)
|
||
|
||
### OPEN / NEED CONFIRMATION
|
||
- Exact table names for fleet core (mentioned: `vehicles`, `vehicle_ownership`, `user_vehicles`).
|
||
- Confirm whether `user_vehicles` exists or it’s a logical label for ownership.
|
||
|
||
---
|
||
|
||
## 2.2 Cost Tracking (expenses / fueling / TCO)
|
||
### Reported as partially implemented
|
||
- Mentioned: “companies, equipment and subscription tables live” and “specifications (tire, service interval) added” (2026-01-28 21:50)
|
||
- Mentioned custom variable:
|
||
- `custom_service_interval_km` introduced (2026-01-28 21:50)
|
||
|
||
### OPEN / NEED CONFIRMATION (critical)
|
||
- Expense tables (expected examples):
|
||
- `expenses` / `vehicle_expenses`
|
||
- `fuel_logs` / `refuels`
|
||
- `service_events` / `maintenance_records`
|
||
- Expense category enum exists: `expense_category` (reported in 20260128_2105)
|
||
- We must confirm:
|
||
- columns (amount, currency, vendor, odometer, date, invoice link)
|
||
- whether costs are per vehicle and per org (tenant).
|
||
|
||
---
|
||
|
||
## 2.3 Service Search / Marketplace (matching)
|
||
### Reported as implemented
|
||
- `MatchingService` exists + `/api/v1/search/match` endpoint created (v2.1 / 2026-01-27)
|
||
- Ranking formula recorded:
|
||
- `S = (Pdist * Wdist) + (Prate * Wrate) + Btier`
|
||
(v1.9)
|
||
- Dynamic weights served via ConfigService reading from `data.system_settings` (v1.9–v1.7)
|
||
- Geo base:
|
||
- `data.organization_locations` created to support multi-site providers (v2.2–v2.6)
|
||
- lat/lng stored there; join to organizations
|
||
|
||
### Provider entities
|
||
- `data.organizations` is canonical org table
|
||
- `orgtype.SERVICE` enum introduced for service providers (v2.7)
|
||
- `service_specialties` exists (v2.0)
|
||
|
||
### OPEN / NEED CONFIRMATION
|
||
- Whether distance calculation is in SQL or Python (Haversine mention, but no final implementation proof).
|
||
- Whether PostGIS is used (not mentioned) vs plain numeric calculation.
|
||
|
||
---
|
||
|
||
## 3. Config / rules engine (used by in-scope modules)
|
||
### system_settings canonical structure
|
||
- Canonical columns:
|
||
- `key_name` (varchar)
|
||
- `value_json` (jsonb)
|
||
- overrides: `region_code`, `tier_id`, `org_id`
|
||
- Unique index:
|
||
- `idx_settings_lookup` over `(key_name, COALESCE(region_code,''), COALESCE(tier_id,0), COALESCE(org_id,0))`
|
||
- Confirmed “sync with ConfigService” (v1.7)
|
||
|
||
### Known keys (from variable map)
|
||
- `max_vehicles` default 3
|
||
- `search_radius` default 20 (mentioned)
|
||
- ranking policy weights exist via system_settings or `ranking_policies`
|
||
|
||
---
|
||
|
||
## 4. Out of scope (present but not in current focus)
|
||
> Keep in DB, ignore in implementation planning for now.
|
||
- Auth v1/v2, verification_tokens, audit_logs
|
||
- email_providers/email_logs/email_templates
|
||
- subscription tiers / org_subscriptions / notification rules
|
||
- bot_discovery_logs & bot module
|
||
|
||
---
|
||
|
||
## 5. Known fixes already applied (from logs)
|
||
- `system_settings` and `email_templates` got a `key` column earlier, then standardized to `key_name/value_json` for system_settings.
|
||
- verification_tokens expiration validation: “now() based check” added.
|
||
- Sequences resynced with `setval(...)` to resolve ID collisions.
|
||
- Enum issue fixed (`tokentype email_verify` added).
|
||
|
||
---
|
||
|
||
## 6. Risks & ambiguity markers
|
||
### High risk (must verify)
|
||
- Cost tracking schema: tables/columns not explicitly listed.
|
||
- Fleet ownership: `vehicle_ownership` vs `user_vehicles` naming.
|
||
- Ranking storage split: `ranking_policies` table exists but weights also in `system_settings`.
|
||
|
||
### Medium risk
|
||
- Duplicate log entries may hide a later revert.
|
||
- “40 tables stable” statement needs objective verification.
|
||
|
||
---
|
||
|
||
## 7. Verification checklist (run on DB, capture output)
|
||
Run these and paste results into a new section “Verification Output”.
|
||
|
||
1) List schemas and table count
|
||
- `SELECT table_schema, count(*) FROM information_schema.tables WHERE table_type='BASE TABLE' GROUP BY 1 ORDER BY 1;`
|
||
|
||
2) Confirm canonical tables exist
|
||
- `SELECT to_regclass('data.system_settings'), to_regclass('data.organizations'), to_regclass('data.organization_locations');`
|
||
|
||
3) system_settings columns
|
||
- `SELECT column_name, data_type FROM information_schema.columns WHERE table_schema='data' AND table_name='system_settings' ORDER BY ordinal_position;`
|
||
|
||
4) idx_settings_lookup exists
|
||
- `SELECT indexname, indexdef FROM pg_indexes WHERE schemaname='data' AND tablename='system_settings';`
|
||
|
||
5) Find cost tables (discovery)
|
||
- `SELECT table_name FROM information_schema.tables WHERE table_schema='data' AND table_name ILIKE '%expense%' OR table_name ILIKE '%fuel%' OR table_name ILIKE '%service%' ORDER BY 1;`
|
||
|
||
6) Enumerations list
|
||
- `SELECT t.typname, e.enumlabel FROM pg_type t JOIN pg_enum e ON t.oid=e.enumtypid ORDER BY t.typname, e.enumsortorder;`
|
||
|
||
---
|
||
|
||
## 8. Next actions (implementation-oriented)
|
||
1) Freeze baseline: label backup as DB_BASELINE_20260128
|
||
2) Validate in-scope tables and fill missing schema details (cost module)
|
||
3) Create “Module Status” doc based on verified tables:
|
||
- Fleet
|
||
- Cost
|
||
- Service Search
|