Files
service-finder/docs/DB_STATE_FLEET_2026-01-28.md

162 lines
6.1 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 (21052230 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 its 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.9v1.7)
- Geo base:
- `data.organization_locations` created to support multi-site providers (v2.2v2.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