Bỏ qua nội dung

Map field listing V-Nexus sang field sàn (MuaBan/Chotot)

Feature URL
Module
browser-extension
Status
in-development
Priority
P2
Platforms
fe · be
AC progress
0 / 11
Last reviewed
2026-06-29

Mục tiêu

Định nghĩa cách chuyển dữ liệu ListingResponse của V-Nexus thành các giá trị điền vào form đăng tin của từng sàn (MuaBan, Chotot). Vì luồng hiện tại là autofill tự động theo nhãn/text nhìn thấy trên form (gõ vào ô text, tìm-và-chọn trong dropdown, click chip), giá trị phải được humanize sang tiếng Việt thay vì giữ mã số, để extension có thể khớp đúng ô nhập / đúng lựa chọn.

Phạm vi

Trong phạm vi (In scope):

  • Bảng map field canonical V-Nexus → nhãn hiển thị trên form MuaBan và nhãn trên form Chotot.
  • Field được map: dealType (MuaBan “Danh mục đăng tin” / Chotot “Tôi muốn”), propertyType, title, description, price, province, ward, street, houseNumber, landArea, livingArea, bedrooms, bathrooms, width, length, floors, floorNumber, direction, balconyDirection, interior, legal, unitNumber, towerBlock, phone, contactName.
  • Transform/quy tắc humanize giá trị (xem mục Quy tắc nghiệp vụ).
  • Posting URL của mỗi sàn: muaban.net/dang-tin; chotot.com/dang-tin (kèm query nếu cần).
  • Bỏ qua field rỗng / 0 / NaN.

Ngoài phạm vi (Out of scope):

  • Cột “Dự án” / project — v1 bỏ.
  • Tiện ích / điểm nổi bật (amenities/highlights).
  • Tự động upload ảnh.
  • Gọi API đăng tin tự động bằng payload mã số (MuaBanPayload/ChototPayload đã tồn tại sẵn cho hướng tương lai, nhưng không thuộc luồng autofill hiện tại).
  • Luồng core mở tab/điền form — xem extension-listing-prefill.

User Stories

  • user, tôi muốn các field listing V-Nexus được điền sẵn đúng ô tương ứng trên form MuaBan/Chotot để khỏi nhập lại.
  • user, tôi muốn giá trị hiển thị bằng tiếng Việt (vd hướng “Đông Bắc”, loại tin “Cho thuê”) để khớp với dropdown/ô nhập của sàn.
  • user đăng trên Chotot, tôi muốn price được đánh dấu là bắt buộc để không quên điền giá.
  • hệ thống, tôi muốn field rỗng/0/NaN bị bỏ qua để không điền giá trị rác lên form.

Luồng chức năng

sequenceDiagram
    participant SW as Background Worker
    participant Map as buildPrefillFields
    participant CS as Content Script sàn

    SW->>Map: ListingResponse + platform
    Map->>Map: dealType: RENT→"Cho thuê", còn lại→"Bán"
    Map->>Map: direction/balconyDirection: mã hướng → nhãn tiếng Việt
    Map->>Map: areaM2 fan-out → "Diện tích đất" + "Diện tích sử dụng"
    Map->>Map: Bỏ field rỗng hoặc 0, phone và contactName chỉ cho MuaBan
    Map->>Map: Đánh dấu price required cho Chotot
    Map-->>SW: Danh sách (nhãn field, giá trị) theo sàn + danh sách ảnh
    SW->>CS: Payload theo nhãn để autofill

Acceptance Criteria

  • AC-1: listingTypes = RENT → “Cho thuê”; các giá trị khác → “Bán”.
  • AC-2: houseDirectionbalconyDirection (mã N/S/E/W/NE…) được map sang nhãn tiếng Việt (Bắc/Nam/Đông/Tây/Đông Bắc…), tolerant với hoa-thường và dấu cách.
  • AC-3: areaM2 fan-out: cùng một giá trị được điền cho cả “Diện tích đất” (landArea) và “Diện tích sử dụng” (livingArea), không tách thành 2 giá trị khác nhau.
  • AC-4: Field có giá trị rỗng, 0, hoặc NaN bị bỏ qua, không đưa vào payload.
  • AC-5: phonecontactName chỉ map cho MuaBan; Chotot không có field phone.
  • AC-6: price được đánh dấu required cho Chotot.
  • AC-7: Giá trị trong payload là dạng humanize tiếng Việt (text hiển thị), không phải mã số.
  • AC-8: Mỗi sàn có posting URL đúng: MuaBan muaban.net/dang-tin, Chotot chotot.com/dang-tin.
  • AC-9: unitNumber được giữ nguyên dạng chuỗi (vd “a1.23.15”).
  • AC-10: Các field canonical còn lại (title, description, province, ward, street, houseNumber, bedrooms, bathrooms, width, length, floors, floorNumber, interior, legal, towerBlock, propertyType) được map sang nhãn tương ứng của từng sàn khi có giá trị.
  • AC-11: propertyTypeCode được suy ra thành kiểu BĐS con (subtype) khớp nhãn bước chọn kiểu của MuaBan; giá trị humanize của các field chọn (hướng, giấy tờ, nội thất) khớp được với option/chip tương ứng trên form.

Quy tắc nghiệp vụ

  • Luồng hiện tại autofill tự động theo nhãn/text nhìn thấy trên form → mọi giá trị phải humanize tiếng Việt trước khi đưa ra; giá trị humanize cũng được dùng để gõ vào ô tìm kiếm trong dropdown (hướng, giấy tờ), khớp chip (nội thất) và chọn bước loại BĐS.
  • propertyType: ngoài việc chọn nhóm loại BĐS, MuaBan còn cần chọn kiểu BĐS con (subtype) khớp với mã loại; subtype được suy ra từ propertyTypeCode và phải khớp nhãn hiển thị của bước chọn kiểu.
  • listingTypes: RENT → “Cho thuê”; mặc định còn lại → “Bán”.
  • Hướng (houseDirection, balconyDirection): map mã hướng sang nhãn tiếng Việt, chấp nhận biến thể hoa-thường và khoảng trắng khi so khớp.
  • areaM2 fan-out cho cả landArea và livingArea bằng cùng một giá trị; không tách field riêng.
  • Bỏ field rỗng/0/NaN để tránh điền giá trị rác.
  • phone + contactName chỉ áp dụng MuaBan; Chotot bỏ qua vì không có field phone.
  • price là bắt buộc đối với Chotot.
  • unitNumber là chuỗi tự do (vd “a1.23.15”), không ép kiểu số.
  • Tồn tại sẵn cấu trúc payload sâu hơn (MuaBanPayload/ChototPayload với mã số category/ward/direction…) dành cho hướng gọi API tương lai, nhưng không dùng trong luồng autofill theo nhãn hiện tại.

Dữ liệu & Trạng thái

Entity nghiệp vụ:

  • ListingResponse: nguồn dữ liệu canonical từ V-Nexus (dealType, propertyType, title, description, price, province, ward, street, houseNumber, areaM2, bedrooms, bathrooms, width, length, floors, floorNumber, houseDirection, balconyDirection, interior, legal, unitNumber, towerBlock, phone, contactName, ảnh).
  • PrefillField: cặp (nhãn field trên sàn, giá trị humanize).
  • PlatformMapping: bảng map canonical → nhãn cho MuaBan và Chotot, kèm posting URL và cờ required.

Trạng thái user-facing:

  • mapped — field map thành công, có giá trị humanize.
  • skipped — field rỗng/0/NaN/không áp dụng cho sàn, bị bỏ qua.
  • required-missing — field bắt buộc của sàn (vd price cho Chotot) không có giá trị, cần user bổ sung.

Liên quan