Báo cáo công việc tuần

Chic Data — Tổng kết tuần

Giai đoạn: 04/08 – 11/08/2026 · Tổng hợp từ lịch sử Git 4 repo, các bản báo cáo/audit sinh ra trong tuần, và số liệu vận hành truy vấn trực tiếp từ DB ngày 11/08
Người thực hiện: jc-hello
Ngày lập: 11/08/2026
Phạm vi: 3 dự án có commit + 1 dự án theo dõi vận hành

Tổng quan tuần

Tuần này gần như toàn bộ công sức đổ vào ChicStay: biến bàn kiểm tra dữ liệu (verify) thành công cụ dùng được thật, để đội BD soi xong 420/423 phòng trong 4 ngày, rồi dựng đường ống xuất — audit — báo cáo để biết kho dữ liệu đó đang tốt xấu ra sao.

420
phòng ChicStay đã soi 99,3%
423
phòng · 84 cơ sở · 31 brand trong kho
22
lớp kiểm tra chất lượng tự động
1.240
địa điểm BD được khôi phục sau sự cố
Cần chú ý ngay — hai luồng chicgo_data đang đứng: enrich đã dừng 11 ngày (lần chạy cuối 31/07 11:30 — nêu ở báo cáo tuần trước, chưa được xử lý), hàng chờ phình từ 32.167 lên 37.033 địa điểm. Và từ 09/08 22:22 crawl cũng dừng hẳn, BD confirm rơi từ ~400/ngày xuống 1/ngày. Chi tiết ở mục 1.

1. Số liệu vận hành chicgo_data

Số liệu truy vấn trực tiếp từ DB chicgo ngày 11/08 (đã lọc địa điểm còn hiệu lực):

60.953
tổng địa điểm trong kho +5.069 tuần
23.603
đã enrich +0
19.773
đã được BD confirm +1.576
808.246
đánh giá đã cào +70.618

1.1 Cả crawl lẫn BD confirm đều dừng từ 10/08 cảnh báo

Địa điểm crawl mới theo ngày:

97504/08
1.05005/08
69606/08
56407/08
78208/08
67609/08
010/08
011/08

Địa điểm BD confirm theo ngày:

40304/08
26005/08
43306/08
36707/08
13208/08
7109/08
110/08
111/08

Địa điểm mới cuối cùng ghi nhận lúc 09/08 22:22. BD confirm trung bình ~278/ngày giai đoạn 04–09/08 (tuần trước ~604/ngày), rồi về gần 0 từ 10/08. Hai luồng dừng cùng thời điểm nên nhiều khả năng cùng một nguyên nhân (service/tiến trình dừng), chưa xác minh — cần kiểm tra trước khi kết luận.

1.2 Enrich vẫn chết, hàng chờ tăng thêm 4.866 tồn từ tuần trước

Lượt enrich cuối cùng vẫn là 31/07 11:30 — 11 ngày không xử lý một địa điểm nào. Con số enriched tính trên toàn bảng là 23.891, đúng bằng con số của báo cáo tuần trước, xác nhận không có lượt chạy nào.

Trạng thái enrichTuần trướcHiện tạiThay đổi
need_to_enrich32.16737.033+4.866
enriched23.89123.8910
error142137−5
not_eligible183180−3

Hàng chờ nay gấp 1,57 lần số đã xử lý. Hàng đợi từ khoá vẫn còn 320 từ khoá chờ (không đổi so với tuần trước — thêm một dấu hiệu crawl không chạy).

2. chicgo_data — Sự cố ghi đè dữ liệu BD đã verify

Vấn đề: bốn đường ghi tự động — crawler từ khoá (override_category_for_urls), upsert_place với ON CONFLICT, import từ file, và luồng enrich — đều ghi đè thẳng lên category, sub_categories, keywords, customer_intents của địa điểm đã được BD kiểm tra và xác nhận. 1.240 địa điểm bị ảnh hưởng, không có nhật ký nào ghi lại — nghĩa là nếu không rà thì không ai biết công BD đã mất.

Đã xử lý:

Nguyên tắc rút ra: dữ liệu người làm và dữ liệu máy làm phải có ranh giới cứng ở tầng thấp nhất. Bất kỳ luồng tự động nào mới thêm sau này cũng tự động thừa hưởng chốt này.

3. chicdata_dashboard — Bàn verify ChicStay

26 commit, +5.864 / −2.122 dòng. Đây là phần lớn công việc trong tuần: đưa bàn kiểm tra dữ liệu từ "có màn hình" thành "đội BD ngồi làm cả ngày được".

3.1 Gộp bàn sửa vào đúng chỗ làm việc

3.2 Năm đề xuất verify từ đội BD theo yêu cầu

Đề xuấtĐã làm
Số thứ tự phòngCột thật rooms.seq_no có sequence, không phải số tính lúc truy vấn — trước đây thêm một phòng là mọi số phía sau dịch một bậc, dải việc đã giao cho CTV trỏ sang phòng khác
Nút "Loại"Thêm trạng thái REJECTED — trước chỉ có Duyệt và Cần sửa, bản ghi hỏng nằm mãi trong hàng đợi
Mô tảGiữ nguyên xuống dòng, giới hạn 500 ký tự, có bộ đếm; mô tả cũ dài hơn vẫn đọc được, chỉ khi sửa mới buộc cắt
Chính sách huỷChuyển lên cấp cơ sở — 81 dòng phải điền thay vì 1.663 gói giá
Tiện ích "biến mất"Không phải bị ẩn mà endpoint không truy vấn room_amenities; trả lại tiện ích + tag kèm lưới tick sửa được

Kèm: sửa được tiện ích cấp cơ sở (bể bơi, thang máy không thuộc phòng nào — trước phải đi vòng qua từng phòng), và edit phòng phủ đủ mọi thứ trang khách hiện (chính sách phòng, lịch trống, giường — các bảng con trước đây không có ô sửa nào).

3.3 Gỡ luật bắt buộc đang khoá cứng hàng đợi quyết định quan trọng

Đầu tuần đặt HDCI (link hướng dẫn nhận phòng) và chính sách phòng thành bắt buộc. Kết quả thực đo: 0/423 phòng đủ điều kiện chốt — vì 410/423 phòng chưa có link HDCI và sheet gốc phần lớn bỏ trống chính sách thú cưng/hút thuốc/trẻ em. Bỏ HDCI ra thì 20 phòng duyệt được ngay.

Vấn đề gốc: một trường qa_status đang gánh hai việc khác nhau — "BD đã soi xong" và "đủ điều kiện lên bán". Khi trường bắt buộc lại là thứ BD chưa có thông tin để điền, gộp hai việc làm một nghĩa là công đã soi không ghi lại được.

Đã chốt (theo trao đổi nhóm 07/08): nút "Đã kiểm, duyệt" luôn bấm được; chính sách phòng và HDCI về tuỳ chọn. Độ đầy vẫn hiện nguyên (badge "thiếu N", tooltip trên nút) — chỉ thôi không chặn. Ai cần lọc "đủ điều kiện publish" thì lọc theo độ đầy ở hàng đợi, không lẫn vào qa_status.

Đây là thay đổi tạo ra kết quả lớn nhất tuần: sau khi gỡ chặn, đội BD soi được 420/423 phòng — trong đó riêng ngày 09/08 có 285 phòng. Một luật khiến hàng đợi đứng im hoàn toàn không làm dữ liệu tốt lên, chỉ làm BD không chốt được gì.

3.4 Phân loại ảnh: từ 3 cú bấm xuống 1 phím

Phản hồi từ đội BD: phân loại ảnh quá lâu. Còn 2.922/3.286 ảnh chưa phân loại nên mỗi thao tác thừa bị nhân lên hàng nghìn lần.

Một bản "phân loại hàng loạt" đã thử rồi revert trong ngày — giữ hướng tối ưu thao tác đơn thay vì thêm chế độ chọn nhiều.

3.5 Xem trước "khách nhìn thấy gì"

Đi qua ba bản trong tuần, chốt ở bản cuối: khối xem trước nằm ở đáy cột chỉnh sửa — thứ để đối chiếu sau khi sửa xong, không phải thứ chen giữa lúc đang điền. Nội dung dựng đúng bố cục trang chi tiết: ảnh, thông số, tag, mô tả, giường, tiện ích, chính sách, lịch trống, giá theo từng gói. Chỗ nào trống vẫn nói thành chữ để BD thấy lỗ hổng đúng ở dạng khách sẽ thấy.

Ghi chú kỹ thuật: bản modal ở giữa màn hình mở lên được nhưng bấm gì cũng không đóng — khung sống bên trong slideover, thư viện UI đặt pointer-events:none cho mọi thứ ngoài lớp dialog của nó. Thay vì vá lớp phủ, bỏ hẳn modal.

3.6 Lịch sử chỉnh sửa dạng commit graph cho chicgo places

Phần duy nhất trong tuần không thuộc ChicStay. Mỗi địa điểm chicgo nay có mục "Lịch sử chỉnh sửa" ở cuối panel chi tiết: graph kiểu GitHub, màu theo loại thao tác, click mở diff Trước / Sau, hiện đủ mọi tác giả — kể cả thao tác revert của hệ thống.

Liên quan trực tiếp tới sự cố ở mục 2: có graph này thì lần sau dữ liệu BD bị ghi đè sẽ nhìn thấy được ngay trên màn hình, không phải đi dò DB. Kèm một lỗi đã sửa: mở place bằng URL trực tiếp thì lịch sử rỗng vĩnh viễn — fetch chạy lúc dựng trang phía server không kèm cookie phiên nên bị trả 401.

4. Đường ống export → audit → báo cáo ChicStay

Nửa cuối tuần dựng bộ công cụ trả lời câu hỏi "kho dữ liệu này đang tốt xấu ra sao". Toàn bộ chạy từ file JSON export, không chạm DB — báo cáo gửi đi được mà không cần quyền truy cập DB.

BướcNội dung
Export
export-chicstay-verify.mjs
Xuất cây Brand → Cơ sở → Phòng với toàn bộ cột và quan hệ (gói giá, dòng giá, ảnh, tiện ích, tag, giường, chính sách, lịch trống…). Lọc theo trạng thái verify ở cấp phòng hoặc cấp brand. Không xuất mã cửa/khoá, tài khoản ngân hàng merchant, dữ liệu đặt phòng & thanh toán.
Audit
audit-chicstay-export.mjs
22 lớp kiểm tra chia 3 mức + độ đầy mọi cột từng bảng + bảng theo brand
Báo cáo
report-chicstay-final.mjs
Quy mô catalog, địa chỉ & toạ độ, verify & QA, độ hoàn thiện, giá & nguồn cung, bảng theo brand

4.1 Kết quả audit ngày 10/08

32
lỗi nghiêm trọng 2 loại
548
cảnh báo 8 loại
827
mục tham khảo
8
trên 22 lớp kiểm tra sạch hoàn toàn
MứcPhát hiệnSốNghĩa là
nghiêm trọngGói giá không có dòng giá nào30Chọn gói sẽ không ra tiền
nghiêm trọngPhòng không có gói giá nào2Không thể bán
đã sạchKhách tối đa < khách tiêu chuẩn · Phòng lệch brand so với cơ sở · Giá null hoặc ≤ 0 · Toạ độ ngoài lãnh thổ VN · Brand thiếu ô bắt buộc · Phòng trùng tên trong cùng cơ sở · Cơ sở trùng địa chỉ · Phòng có >1 ảnh chính

4.2 Chuẩn hoá địa chỉ sau sáp nhập & toạ độ 6 số lẻ

Kiểu dữ liệu toạ độ cũ là numeric(12,2) — cắt còn 2 số lẻ, sai số ~1km, tức pin bản đồ rơi lệch cả khu phố. Đã đổi sang numeric(9,6) (~10cm) và fill lại toàn bộ.

Kết quả trên production 10/08: 84/84 cơ sở có đủ địa chỉ cũ + địa chỉ mới + phường/xã mới (27 đơn vị hành chính) + toạ độ 6 số lẻ, 84/84 nằm trong lãnh thổ VN.

Bản đồ kiểm tra toạ độ (file riêng, 84 pin):

Độ chính xác pinSố cơ sở
Pin Google Maps / toà nhà4
Khớp số nhà / địa chỉ đầy đủ57
Mức ngõ (~50–150m)13
Mức khu/đường (~200–500m)10

23 cơ sở còn ở mức ngõ trở lên — chính xác đủ để hiển thị danh sách, chưa đủ để dẫn đường tới cửa. Cần đội BD chỉnh pin tay khi có dịp tới nơi.

5. Kho dữ liệu ChicStay đang ở đâu

31
brand (merchant)
84
cơ sở lưu trú
423
phòng
4.064
ảnh trên R2

Cùng 1.866 gói giá, 4.565 dòng giá, 2.744 tag đã gán. So với báo cáo tuần trước (4 brand · 10 cơ sở · 33 phòng · 119 gói giá): lô nhập lớn về ngày 03/08 và 06/08, tuần này là tuần soi và làm sạch lô đó chứ không phải nhập thêm.

5.1 Kết quả soi dữ liệu

CấpĐã soiTỷ lệ
Phòng420 / 42399,3%
Cơ sở84 / 84100%
Brand30 / 3196,8%
Media80 / 4.0642,0%
Kết quả QA phòngSố phòngTỷ lệ
Duyệt (QA_APPROVED)25159%
Loại (REJECTED)12730%
Cần sửa (NEEDS_FIX)4210%
Chờ (PENDING)31%
Cần xem lại: tỷ lệ loại 30% là cao bất thường và tập trung vào vài brand — ALÀ HOMESTAY loại 35/54 phòng, GBOX loại 29/29, NOBLE APARTMENT loại 12/12, BỆU loại 9/9. Cần làm rõ đây là dữ liệu nguồn hỏng thật hay là BD đang dùng nút "Loại" thay cho "Cần sửa" — hai cách hiểu này dẫn tới hai hành động hoàn toàn khác nhau.

5.2 Độ hoàn thiện — còn thiếu gì

Dữ liệu phòngCóĐộ phủ
Gói giá / tiện ích / tag421–423 / 423100%
Mô tả416 / 42398%
Diện tích310 / 42373%
Ảnh trên R2303 / 42372%
Khai báo giường148 / 42335%
Số phòng ngủ148 / 42335%
Đã publish0 / 4230%

Ô bắt buộc trống nhiều nhất: bedroom_count 275 phòng (65%), bathroom_access_type 129 (30%), area_sqm 113 (27%), primary_style 64 (15%). Ở cấp cơ sở: chính sách hoàn huỷ trống 84/84 — chưa cơ sở nào có.

5.3 Giá & nguồn cung

Kiểu thuêDòng giáTrung vịMinMax
Theo giờ2.427356k85k4.800k
Qua đêm1.059469k270k4.800k
Cả ngày1.045569k180k4.800k
Day-use34190k118k200k

Trung vị toàn kho 440k. Phân bố dồn ở 350–500k (1.722 dòng) và 200–350k (1.060 dòng). Nguồn cung tập trung Cầu Giấy (18 cơ sở / 108 phòng) và Tây Hồ (18 / 91).

6. chicstay-data — Importer & khoá dữ liệu

6.1 Sự cố: đổi header sheet là mất sạch phòng, không ai biết nghiêm trọng

Sheet ngày 06/08 đổi tiêu đề cột A của tab 02_Phòng từ "Mã cơ sở *" thành " Mã cơ sở" (bỏ dấu sao, thêm khoảng trắng). Importer tra đúng chuỗi có dấu sao nên mọi dòng trả về mã rỗng, hàm nhận diện dòng ví dụ coi cả 1.466 dòng là dòng mẫu, và lượt sync báo thành công với kết quả "Phòng: 0". Không một cảnh báo nào.

Kèm replay_edits.py: importer ghi đè 19 cột của rooms và 10 cột của properties — đúng những cột dashboard verify cũng ghi vào. Script đắp lại giá trị mới nhất từ change_audit sau mỗi lượt import, nên sync không còn xoá công BD đã làm. (Cùng một lớp vấn đề với sự cố chicgo ở mục 2, phát hiện trong cùng tuần ở hai hệ thống khác nhau.)

6.2 Khoá format & từ vựng

7. checkevent_data — Không có commit, vận hành ổn

Không có thay đổi code trong tuần. Số liệu DB ngày 11/08 cho thấy hệ thống vẫn chạy đều:

Chỉ sốTuần trướcHiện tại
Event1.9721.988
Đã đẩy thành công1.9401.956
Bị từ chối / đang chờ30 / 230 / 2
Tổ chức781788
Lượt crawl (8 ngày)—192

vẫn bị chặn Luồng học bổng đứng im từ 03/08 — vẫn 5/364 bài đã viết lại. Nguyên nhân không đổi: App key production thiếu quyền scholarships:read/write/publish, cần admin CheckEvent cấp. Đây là việc chờ người khác đã nêu từ báo cáo tuần trước.

Việc tiếp theo