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

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

Giai đoạn: 27/07 – 03/08/2026 · Tổng hợp từ lịch sử Git, các bản thiết kế & kế hoạch trong repo, và số liệu vận hành truy vấn trực tiếp từ DB ngày 03/08
Người thực hiện: jc-hello
Ngày lập: 03/08/2026
Phạm vi: 4 dự án

Tổng quan tuần

Tuần này là tuần thu hoạch: những thứ tuần trước còn ở trạng thái "code xong, chờ deploy" nay đã chạy thật và ra số. Bốn trục chính:

15.239
địa điểm crawl mới trong tuần +34% kho
4.830
địa điểm BD confirm trong tuần
1.940
event lên production từ 0
55
bảng DB ChicStay đã dựng & nạp dữ liệu
Cần chú ý ngay: luồng enrich đã dừng hẳn 3 ngày (lần chạy cuối 31/07 11:30). Trong khi đó crawl vẫn chạy mạnh, khiến hàng chờ enrich phình lên 32.167 địa điểm. Đây là nút thắt lớn nhất hiện tại — chi tiết ở mục 1.2.

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

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

55.884
tổng địa điểm trong kho +14.118 tuần
23.907
đã enrich +5.371
18.197
đã được BD confirm +4.315
76%
tiến độ confirm trên số đã enrich

1.1 Đội BD giữ nhịp ổn định

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

74327/07
44428/07
46929/07
80930/07
85231/07
49201/08
69002/08
33103/08

Trung bình ~604/ngày, so với ~655/ngày tuần trước — nhịp giữ đều, không còn đỉnh đột biến ~1.200/ngày của tuần trước. Điều này trả lời câu hỏi đặt ra tuần trước: mức ~1.200/ngày là đợt dọn tồn, không phải năng suất nền. Năng suất nền thực tế là ~600/ngày.

1.2 Enrich đã dừng 3 ngày — nút thắt cần xử lý cảnh báo

Lượt enrich cuối cùng ghi nhận lúc 31/07, 11:30 (giờ VN). Từ 01/08 đến nay không có địa điểm nào được enrich, trong khi crawl vẫn chạy đều ~1.600–2.200 địa điểm/ngày.

Trạng thái enrichSố địa điểmGhi chú
need_to_enrich32.167Hàng chờ — đã vượt cả số đã xử lý
enriched23.891Trong đó 18.670 do engine nội bộ chic_research
error142
not_eligible183

Đã loại trừ nguyên nhân "cổng gap chặn": cổng enrich_gap_gate.py chỉ bỏ qua khi khoảng cách confirm − enrich ≥ 3.000; hiện khoảng cách là −10.825 (enrich đang đi trước confirm rất xa), tức cổng đang cho phép chạy. Vậy nguyên nhân nằm ở service enrich không còn chạy — cần kiểm tra service trên Railway/VPS.

1.3 Nguồn enrich

Engine nội bộ đã gần như thay thế hoàn toàn Perplexity:

NguồnSố địa điểm đã enrichTỷ trọng
chic_research (engine nội bộ)18.67096,0%
perplexity4582,4%
kết hợp cả hai3161,6%

Tuần trước tỷ lệ là 9.094 / 781. Chi phí Perplexity đã gần như về 0.

2. chicgo_data — 4 tỉnh mới đã chạy thật

2.1 Kết quả mở rộng địa bàn đã deploy

Rủi ro nêu ở báo cáo tuần trước — "phải redeploy crawler HCM trước, nếu không khoá toàn cục sẽ làm lệch dữ liệu" — đã được xử lý đúng thứ tự. Kết quả sau một tuần chạy song song:

Tỉnh/ThànhTổng địa điểmCrawl thêm trong tuầnTrạng thái
Hà Nội21.4633Đã bão hoà
Hồ Chí Minh15.317+2.740Vẫn đang chạy
Đà Nẵng5.943+3.623mới
Huế3.591+2.652mới
Quảng Ninh3.377+2.607mới
Hải Phòng3.002+2.231mới
Bốn tỉnh mới đóng góp 15.913 địa điểm — bằng khoảng 28% toàn bộ kho, trong đó 11.113 crawl trong tuần này, phần còn lại từ đợt đẩy cuối tuần trước. Kho đánh giá cũng lên 737.628 review. Hàng đợi từ khoá còn 320 từ khoá chờ, tức dư địa mở rộng vẫn còn.

2.2 Prompt chuyển vào DB, không còn nằm trong code

Thêm bảng prompts và hàm đọc prompt template từ DB. Trước đây prompt cho enrich/phân loại nằm cứng trong code — muốn chỉnh câu chữ phải sửa code và deploy lại. Nay sửa prompt trong DB là có hiệu lực ngay, không cần deploy.

Cùng đợt còn có: tham số crawl-batch giới hạn số truy vấn từ khoá mỗi tiến trình con (tránh tiến trình chạy quá lâu rồi chết mất việc), sửa lỗi thời điểm khi cào đánh giá làm mất dữ liệu, và bộ công cụ cào bù đánh giá/ảnh còn thiếu cho các địa điểm đã có.

Ghi chú: đợt commit ngày 29/07 của chicgo_data gộp cả phần công việc tuần trước còn ở thư mục làm việc (crawl 4 tỉnh, báo cáo QC bản 3.048, cổng enrich…) — những phần đó đã được báo cáo tuần trước, ở đây không kể lại.

3. checkevent_data — Production lần đầu có dữ liệu

3.1 Phát hiện: production chưa từng nhận một event nào lỗi nghiêm trọng

Vấn đề: toàn bộ 1.935 lượt đẩy đã ghi nhận đều trỏ về staging; production có 0 event. Nguyên nhân không phải thiếu cấu hình mà là lỗi logic trong code: việc chọn event để đẩy dựa vào một cột trạng thái toàn cục một chiều — đẩy lên staging xong là event bị đánh dấu "đã đẩy" vĩnh viễn, nên không bao giờ được chọn lại cho production. Chỉ thêm cấu hình production vào lịch chạy sẽ đẩy được đúng 0 event.

Kết quả: production đi từ 0 → 1.940 event ngay trong ngày 03/08. Hiện 1.972 event tổng, 30 bị từ chối, 2 đang chờ, cùng 781 tổ chức.

3.2 Dọn hạ tầng: 3 service chạy trùng cùng một việc

Khảo sát phát hiện 3 service Railway cùng deploy một commit, cùng crawl một nguồn. DB xác nhận: mỗi lượt có 3 phiên crawl chồng nhau, mỗi phiên ~38 phút cho 1.600 event — tức lãng phí gấp 3 lần. Đáng chú ý hơn, service tên ybox-cron chưa từng crawl ybox — nó không có cấu hình riêng nên rơi về cấu hình mặc định và đi crawl vé; bảng học bổng vì thế đứng im từ 25/06.

Đã tách cấu hình từng service bằng file cấu hình riêng thay vì ghi đè trên dashboard, theo đúng thứ tự an toàn để service chưa tách không nuốt nhầm cấu hình chung.

3.3 ybox — Viết lại 269 bài học bổng chuẩn SEO/GEO luồng mới

Học bổng crawl về từ ybox lâu nay chỉ nằm trong bảng tạm của DB crawler, chưa có dòng code nào đẩy lên CheckEvent. Nội dung cũng gần như nguyên văn bản crawl (trung bình 3.799 ký tự). Tuần này dựng trọn luồng: viết lại → kiểm số liệu → đẩy lên.

Kết quả lô thử 5 bài:

BàiĐộ dài gốcSau viết lạiSố liệu bị mất
Học bổng Kỹ thuật ĐH Monash96115.2541 giá trị
Học bổng NFP Hà Lan2.08810.8970
Tổng hợp học bổng cho nữ6.15210.02611 giá trị
Học bổng Thạc sĩ ĐH Leeds1.16211.1250
Học bổng KGSP Hàn Quốc3.76811.1350
Điểm cần quyết định trước khi chạy 264 bài còn lại: bài "Tổng hợp học bổng cho nữ" mất 11 số liệu (các mức tiền $50.000, $18.000… và 3 hạn nộp). Đây là hệ quả trực tiếp của lựa chọn "viết lại tự do hoàn toàn" đã được thống nhất — bài dạng tổng hợp nhiều học bổng bị tóm lược mất chi tiết. Bốn bài dạng một học bổng thì giữ số liệu sạch. Đề xuất: lọc riêng nhóm bài tổng hợp để xử lý theo cách khác, hoặc chấp nhận và chạy tiếp.

Đang bị chặn App key production thiếu quyền học bổng — API trả 403 APP_SCOPE_MISSING — Missing scope: scholarships:write. Staging đủ quyền và chạy được ngay. Cần admin CheckEvent cấp thêm quyền scholarships:read/write/publish cho App key production. Trong lúc chờ, lịch chạy tự động chỉ đẩy lên staging và không bị ảnh hưởng.

Ghi chú kỹ thuật đã kiểm chứng bằng gọi API thật: chuỗi xác thực đã sẵn tiền tố ceapp_live_ trong mã client — ghép thêm lần nữa sẽ trả 401. Đã sửa lại kết luận sai trong tài liệu nội bộ.

4. chicdata_dashboard — Tab ChicStay đầy đủ 5 màn hình

Tuần trước ChicStay trong dashboard mới chỉ có lớp API đọc dữ liệu, chưa có màn hình. Tuần này dựng xong toàn bộ giao diện, đọc theo schema master data mới (mục 5).

Màn hìnhNội dung
Danh sách cơ sởThẻ cơ sở kèm ảnh bìa & số ảnh, tìm kiếm và lọc theo thương hiệu
Thương hiệuĐiều hướng nhiều cấp thương hiệu → cơ sở → phòng, giữ nguyên ngữ cảnh khi quay lại
Danh mụcTra cứu danh mục tham chiếu (tiện ích, thẻ vibe, loại phòng…)
PhòngTìm kiếm & lọc phòng, thẻ phòng kèm biểu tượng tiện ích và nhãn trạng thái
Chi tiết cơ sở / phòngThư viện ảnh, chính sách, giá, tiện ích chi tiết
Phân tích mớiTổng quan hệ thống & đo độ đầy đủ dữ liệu — biết cơ sở nào còn thiếu ảnh/giá/tiện ích để đi bổ sung

Kèm bộ 6 thành phần biểu đồ dùng chung (thanh xếp hạng, cột, bản đồ nhiệt, đồng hồ đo, thanh khoảng, cột chồng) và chuẩn hoá lại bảng màu biểu đồ. Công cụ nhập tài khoản BD/CTV hàng loạt từ Excel (đã báo cáo tuần trước) nay cũng đã được commit đầy đủ kèm bộ kiểm thử.

5. chicstay-data — DB master 49 bảng & nạp dữ liệu thật

Tuần trước ChicStay mới có mô hình 3 bảng phục vụ crawl OTA. Tuần này dựng lại toàn bộ theo chuẩn nghiệp vụ ChicStay Master Data v0.8 — mô hình đầy đủ để vận hành đặt phòng thật, không chỉ để chứa dữ liệu crawl.

Nguyên tắc chi phối: Google Sheet chỉ được đọc đúng một lần để sinh ra file SQL khởi tạo; từ đó DB là nguồn sự thật duy nhất và sống độc lập với Sheet. Mọi thay đổi schema về sau là thêm file migration, không đọc Sheet nữa.

5.1 Schema

5.2 Import 2 cơ sở đầu tiên (CS0001, CS0002)

10
cơ sở lưu trú
33
phòng
119
gói giá + 139 quy tắc giá
1.254
tiện ích phòng

Cùng 4 thương hiệu, 339 ảnh/media, 158 thẻ vibe gắn cho đối tượng, 43 cấu hình mở bán, 405 giá trị danh mục tham chiếu, và 878 ánh xạ nguồn (truy vết ngược mỗi dòng về ô nào trong sheet).

5.3 Đồng bộ ảnh Google Drive → R2

Việc tiếp theo