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
- Là 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.
- Là 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.
- Là 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á. - Là 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 để autofillAcceptance Criteria
- AC-1:
listingTypes= RENT → “Cho thuê”; các giá trị khác → “Bán”. - AC-2:
houseDirectionvàbalconyDirection(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:
areaM2fan-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ặcNaNbị bỏ qua, không đưa vào payload. - AC-5:
phonevàcontactNamechỉ 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, Chototchotot.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ừpropertyTypeCodevà 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. areaM2fan-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+contactNamechỉ áp dụng MuaBan; Chotot bỏ qua vì không có field phone.pricelà bắt buộc đối với Chotot.unitNumberlà 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/ChototPayloadvớ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
- Phụ thuộc: listing-list, extension-listing-prefill
- Ảnh hưởng: extension-listing-prefill