Files
nex/docs/integration.md
2025-12-08 09:08:43 +01:00

3.7 KiB

flowchart TD
subgraph P1["PHASE 1: EXTERNAL SCRAPER (Python/Playwright)"]
direction LR
A1[Listing Pages<br/>/auctions?page=N] --> A2[Extract URLs]
B1[Auction Pages<br/>/a/auction-id] --> B2[Parse __NEXT_DATA__ JSON]
C1[Lot Pages<br/>/l/lot-id] --> C2[Parse __NEXT_DATA__ JSON]

        A2 --> D1[INSERT auctions to SQLite]
        B2 --> D1
        C2 --> D2[INSERT lots & image URLs]
        
        D1 --> DB[(SQLite Database<br/>output/cache.db)]
        D2 --> DB
    end

    DB --> P2_Entry

    subgraph P2["PHASE 2: MONITORING & PROCESSING (Java)"]
        direction TB
        P2_Entry[Data Ready] --> Monitor[TroostwijkMonitor<br/>Read lots every hour]
        P2_Entry --> DBService[DatabaseService<br/>Query & Import]
        P2_Entry --> Adapter[ScraperDataAdapter<br/>Transform TEXT → INTEGER]

        Monitor --> BM[Bid Monitoring<br/>Check API every 1h]
        DBService --> IP[Image Processing<br/>Download & Analyze]
        Adapter --> DataForNotify[Formatted Data]

        BM --> BidUpdate{New bid?}
        BidUpdate -->|Yes| UpdateDB[Update current_bid in DB]
        UpdateDB --> NotifyTrigger1

        IP --> Detection[Object Detection<br/>YOLO/OpenCV DNN]
        Detection --> ObjectCheck{Detect objects?}
        ObjectCheck -->|Vehicle| Save1[Save labels & estimate value]
        ObjectCheck -->|Furniture| Save2[Save labels & estimate value]
        ObjectCheck -->|Machinery| Save3[Save labels & estimate value]
        Save1 --> NotifyTrigger2
        Save2 --> NotifyTrigger2
        Save3 --> NotifyTrigger2

        CA[Closing Alerts<br/>Check < 5 min] --> TimeCheck{Time critical?}
        TimeCheck -->|Yes| NotifyTrigger3
    end

    NotifyTrigger1 --> NS
    NotifyTrigger2 --> NS
    NotifyTrigger3 --> NS

    subgraph P3["PHASE 3: NOTIFICATION SYSTEM"]
        NS[NotificationService] --> DN[Desktop Notify<br/>Windows/macOS/Linux]
        NS --> EN[Email Notify<br/>Gmail SMTP]
        NS --> PL[Set Priority Level<br/>0=Normal, 1=High]
    end

    DN --> UI[User Interaction & Decisions]
    EN --> UI
    PL --> UI

    subgraph UI_Details[User Decision Points / Trigger Events]
        direction LR
        E1["1. BID CHANGE<br/>'Nieuw bod op kavel 12345...'<br/>Actions: Place bid? Monitor? Ignore?"]
        E2["2. OBJECT DETECTED<br/>'Lot contains: Vehicle...'<br/>Actions: Review? Confirm value?"]
        E3["3. CLOSING ALERT<br/>'Kavel 12345 sluit binnen 5 min.'<br/>Actions: Place final bid? Let expire?"]
        E4["4. VIEWING DAY QUESTIONS<br/>'Bezichtiging op [date]...'"]
        E5["5. ITEM RECOGNITION CONFIRMATION<br/>'Detected: [object]...'"]
        E6["6. VALUE ESTIMATE APPROVAL<br/>'Geschatte waarde: €X...'"]
        E7["7. EXCEPTION HANDLING<br/>'Afwijkende sluitingstijd...'"]
    end

    UI --> UI_Details

    %% Object Detection Sub-Flow Detail
    subgraph P2_Detail["Object Detection & Value Estimation Pipeline"]
        direction LR
        DI[Downloaded Image] --> IPS[ImageProcessingService]
        IPS --> ODS[ObjectDetectionService]
        ODS --> Load[Load YOLO model]
        ODS --> Run[Run inference]
        ODS --> Post[Post-process detections<br/>confidence > 0.5]
        Post --> ObjList["Detected Objects List<br/>(80 COCO classes)"]
        ObjList --> VEL[Value Estimation Logic<br/>Future enhancement]
        VEL --> Match[Match to categories]
        VEL --> History[Historical price analysis]
        VEL --> Condition[Condition assessment]
        VEL --> Market[Market trends]
        Market --> ValueEst["Estimated Value Range<br/>Confidence: 75%"]
        ValueEst --> SaveToDB[Save to Database]
        SaveToDB --> TriggerNotify{Value > threshold?}
    end

    IP -.-> P2_Detail
    TriggerNotify -.-> NotifyTrigger2