| # PropertyVision Project Diagrams |
|
|
| This file contains Mermaid diagrams for README, report writing, and presentation slides. |
|
|
| ## 1. System Architecture |
|
|
| ```mermaid |
| flowchart TB |
| subgraph Client["Client Layer"] |
| Browser["Browser"] |
| React["React + Vite UI"] |
| Browser --> React |
| end |
| |
| subgraph Backend["Application Layer"] |
| FastAPI["FastAPI API Server"] |
| Analytics["Analytics Service"] |
| Prediction["Price Prediction"] |
| Simulation["Investment Simulation"] |
| Planning["GIS / Planning Risk"] |
| Assistant["AI Assistant Endpoints"] |
| end |
| |
| subgraph Data["Data Layer"] |
| HFDataset["Hugging Face Dataset"] |
| CSV["datasets/clean_dataset.csv"] |
| SQLite["Runtime SQLite Tables"] |
| Mart["Pandas Data Mart"] |
| end |
| |
| subgraph AI["AI Layer"] |
| Retriever["RAG Retriever"] |
| Sources["Market / Legal / Planning Sources"] |
| Qwen["Hosted Qwen2.5-1.5B-Instruct"] |
| end |
| |
| React --> FastAPI |
| HFDataset --> CSV |
| CSV --> Mart |
| Mart --> SQLite |
| SQLite --> FastAPI |
| Mart --> Analytics |
| Mart --> Prediction |
| Mart --> Simulation |
| Mart --> Planning |
| Analytics --> FastAPI |
| Prediction --> FastAPI |
| Simulation --> FastAPI |
| Planning --> FastAPI |
| Assistant --> Retriever |
| Retriever --> Sources |
| Retriever --> Qwen |
| Qwen --> Assistant |
| FastAPI --> React |
| ``` |
|
|
| ## 2. First-Run Dataset Flow |
|
|
| ```mermaid |
| flowchart TD |
| Start["Start backend"] --> CheckLocal{"datasets/clean_dataset.csv exists?"} |
| CheckLocal -- Yes --> LoadLocal["Load local processed CSV"] |
| CheckLocal -- No --> Download["Download processed CSV from Hugging Face"] |
| Download --> DownloadStatus{"Download successful?"} |
| DownloadStatus -- Yes --> SaveLocal["Save to datasets/clean_dataset.csv"] |
| SaveLocal --> LoadLocal |
| DownloadStatus -- No --> RawFallback["Fallback to datasets/raw if available"] |
| RawFallback --> LoadLocal |
| LoadLocal --> Normalize["Rule-based normalization and validation"] |
| Normalize --> Seed["Seed SQLite runtime tables"] |
| Seed --> Ready["Backend APIs ready"] |
| ``` |
|
|
| ## 3. Dashboard Analytics Flow |
|
|
| ```mermaid |
| sequenceDiagram |
| participant User |
| participant UI as React UI |
| participant API as FastAPI |
| participant Data as Data Mart |
| |
| User->>UI: Select city, district, price, ROI filters |
| UI->>API: POST /api/analytics |
| API->>Data: Apply filters |
| Data-->>API: Filtered listings |
| API->>API: Compute KPI, trend, district scores |
| API-->>UI: KPI, chart series, ranked districts |
| UI-->>User: Render dashboard cards and charts |
| ``` |
|
|
| ## 4. Investment Simulation And AI Recommendation |
|
|
| ```mermaid |
| sequenceDiagram |
| participant User |
| participant UI as Decision Lab UI |
| participant API as FastAPI |
| participant ML as Prediction Model |
| participant RAG as RAG Retriever |
| participant Qwen as Hosted Qwen |
| |
| User->>UI: Click "Chạy mô phỏng đầu tư" |
| UI->>API: POST /api/recommendation/future/stream |
| API-->>UI: stage: Đang khởi tạo mô phỏng |
| API->>ML: Predict price and run what-if |
| ML-->>API: Predicted price and scenario rows |
| API-->>UI: what_if result |
| API->>RAG: Retrieve market, legal, planning context |
| RAG-->>API: Ranked sources |
| API->>Qwen: Prompt with context and simulation result |
| Qwen-->>API: Stream Vietnamese recommendation |
| API-->>UI: Stream sectioned recommendation |
| UI-->>User: Show financial result first, AI text after |
| ``` |
|
|
| ## 5. RAG Assistant Flow |
|
|
| ```mermaid |
| flowchart LR |
| Question["User question"] --> Filter["Apply active dashboard filters"] |
| Filter --> Retrieve["Retrieve relevant documents"] |
| Retrieve --> Context["Build grounded context"] |
| Context --> Qwen["Hosted Qwen text generation"] |
| Qwen --> Stream["NDJSON streaming response"] |
| Stream --> Answer["Structured answer"] |
| Retrieve --> Sources["Source inspector"] |
| Sources --> Answer |
| ``` |
|
|
| ## 6. RAG Data-to-Answer Flow |
|
|
| ```mermaid |
| flowchart TB |
| subgraph DataPrep["Document preparation"] |
| Market["Market analytics docs"] |
| Ward["Ward / micro-market docs"] |
| Street["Street-level docs"] |
| Legal["Legal documents table"] |
| Planning["Planning zones table"] |
| Market --> Docs["load_rag_documents()"] |
| Ward --> Docs |
| Street --> Docs |
| Legal --> Docs |
| Planning --> Docs |
| Docs --> Index["build_rag_index()"] |
| end |
| |
| subgraph Retrieval["Retrieval and ranking"] |
| Query["User question"] --> Filters["Active filters + district focus"] |
| Filters --> Cache["get_rag_index() cache key"] |
| Cache --> Candidate["candidate_doc_indices()"] |
| Candidate --> Focus["Focus by district / city / ward / street"] |
| Focus --> Rank["Similarity ranking\nSentenceTransformers or TF-IDF fallback"] |
| Rank --> Sources["Top-k sources with scores"] |
| end |
| |
| subgraph Generation["Grounded generation"] |
| Sources --> Prompt["Build assistant / decision prompt"] |
| Prompt --> Qwen["Hosted Qwen"] |
| Qwen --> Parse["Parse sections + clean text"] |
| Parse --> Enrich["Enrich with fallback data\nif answer is too generic"] |
| Enrich --> UI["Stream to React UI"] |
| end |
| |
| Index --> Cache |
| Query --> Retrieval |
| Sources --> Prompt |
| Enrich --> UI |
| ``` |
|
|
| Key behaviors: |
| - The index is rebuilt when data or planning/legal counts change. |
| - District filters narrow the candidate set before similarity ranking. |
| - Street-level questions prefer street documents; ward questions prefer micro-market documents. |
| - If the model response is too generic, the backend enriches it with grounded summary data before returning it. |
|
|
| ## 7. Main Feature Map |
|
|
| ```mermaid |
| mindmap |
| root((PropertyVision)) |
| Executive Overview |
| Market KPI |
| ROI trend |
| District ranking |
| Market Intelligence |
| City filter |
| District comparison |
| Property type breakdown |
| Decision Lab |
| Price prediction |
| What-if simulation |
| Future recommendation |
| AI chart caption |
| GIS Planning |
| District map |
| Planning risk |
| Opportunity score |
| AI Analyst |
| RAG retrieval |
| Hosted Qwen |
| Source inspector |
| Data Operations |
| Dataset status |
| RAG reindex |
| Refresh logs |
| ``` |
|
|