DB có đầy đủ 26 sources đúng format. Vậy lỗi nằm ở phía UI component — cách nó group/filter. Kiểm tra ngay:
Tìm thấy root cause: loadEntries gọi .select('*') không có .limit() — Supabase mặc định trả về 1000 rows (PostgREST default limit). DB có 3600+ records nhưng UI chỉ nhận được 1000 rows đầu, nên nhiều Parts bị thiếu.
Đây là fix đơn giản — thêm pagination hoặc tăng limit khi fetch:
Root cause: Supabase PostgREST có default limit là 1000 rows — loadEntries gọi .select('*') không pagination nên chỉ nhận 1000 records đầu (sắp xếp created_at DESC), bỏ qua hoàn toàn các Parts được import trước như Part 1, 7, 101, 102, 111, 112, 117, 131, 145, 146, 161, 170, 172.
Fix dùng pagination loop: fetch từng batch 1000 records với .range(from, from+999) cho đến khi không còn data — đảm bảo load toàn bộ 3600+ records. Sau khi refresh lại trang Knowledge Base, tất cả 26+ nhóm sẽ hiển thị đầy đủ.
Đã đọc đủ toàn bộ hệ thống. Đây là phân tích đầy đủ:
outer_carton— nhưng chưa được dùng đúng cáchFile packaging-format-config.ts đã định nghĩa sẵn 5 loại bao bì:
| ID | Tên | Trạng thái |
|---|---|---|
single_package | Bao bì đơn tiêu chuẩn | Hoạt động tốt |
outer_carton | Thùng carton ngoài / Shipping box | Có config nhưng chưa ảnh hưởng đến AI prompt |
retail_box | Hộp bán lẻ (nhãn chính) | Hoạt động tốt |
individual_unit | Gói nhỏ / Sachet | Hoạt động tốt |
multipack_wrapper | Bao bì nhiều gói | Hoạt động tốt |
Khi user chọn outer_carton, packaging-format-config.ts đã định nghĩa đúng rules như:
nutritionFactsRequired: false — không cần Nutrition Facts nếu bên trong đã cócanReferenceInnerLabel: true — được phép ghi "Xem nhãn bên trong"requiresTotalCount: true — phải ghi tổng số gói (vd: "24 x 100g")allergenDeclarationRequired: true — vẫn phải khai báo dị ứngVấn đề: Rules này được load trong advanced-settings.tsx nhưng hiện tại AI system prompt chưa nhận được thông tin packaging_format để điều chỉnh tiêu chí đánh giá. Nếu user chọn outer_carton mà AI vẫn yêu cầu Nutrition Facts đầy đủ → sẽ báo sai violation.
Có, và đây là điểm quan trọng nhất của outer carton:
19 CFR Part 134 áp dụng chặt chẽ hơn với outer carton so với retail label, vì lý do:
| Retail label (inner) | Outer carton (shipping) | |
|---|---|---|
| Người xem | Người tiêu dùng | CBP inspector tại cảng |
| Country of Origin | Required | Đặc biệt quan trọng — CBP sẽ check cái này đầu tiên |
| 19 CFR §134.22 | Áp dụng | Container marking — outer carton PHẢI có COO |
| 19 CFR §134.32 | Có ngoại lệ | Ít ngoại lệ hơn với shipping carton |
Cụ thể: 19 CFR §134.22 quy định rằng "the outermost container in which the imported article ordinarily reaches the ultimate purchaser" phải có Country of Origin marking. Với shipping carton thì đây thường là container CBP mở đầu tiên — nên risk bị giữ hàng rất cao nếu thiếu.
Ngoài ra còn có 19 CFR §134.46 — nếu outer carton có ghi bất kỳ tên địa danh nào khác (vd: "Distributed by ABC Corp, Los Angeles, CA") thì bắt buộc phải kèm "Made in [Country]" gần đó với cùng size chữ.
Hệ thống đã có nền tảng đúng (outer_carton config với rules phù hợp, COO hard rule từ 19 CFR §134.11), nhưng còn 2 gap:
packaging_format → có thể báo false positive (đòi Nutrition Facts trên thùng carton)outer_carton thì risk cao hơn, cần note riêng về §134.22 và §134.46Bạn có muốn mình fix cả 2 vấn đề này không? Quan trọng hơn là fix gap đầu tiên — nếu AI cứ báo thiếu Nutrition Facts trên thùng carton sẽ gây nhầm lẫn cho user.
You can send messages while the preview loads