Trang điều hành tĩnh với dữ liệu THẬT tải tay ngày 09/11/2026 từ file Hậu cần công tác: Tổng quan tính từ 702 đoàn (sheet Data) + 976 dịch vụ có ngày (sheet DichVu) với 22 việc cần xử lý thật; Đoàn công tác 20 đoàn thật; Dịch vụ 50 dịch vụ gần nhất thật. Dữ liệu đã tải vào trang, chưa phải live tự động — muốn số mới phải tải lại. Trang chưa nối trực tiếp tới Google Sheet / Slack. Dữ liệu thật tải 09/11/2026

Tổng quan điều hành

Mốc dữ liệu: 09/11/2026 15 ngày: 09/11 – 23/11/2026 Làm mới lần cuối: —
Jackson Nguyễn Điều hành hậu cần
Mốc dữ liệu + độ phủ: Dữ liệu tải ngày 09/11/2026 (tải tay, chưa live tự động). 60% dòng DichVu không có ngày nên các số theo ngày là số tối thiểu.
Việc cần xử lý –
Mức độMãViệcTrạng thái nguồnThời điểmNguồn
Chi tiết việc đang chọn
INSPECTOR
Đoàn khởi hành trong kỳ
–
Cơ cấu dịch vụ trong kỳ
–
–
Dịch vụ
Đoàn dài ngày đang theo dõi
–
Lượt chạy auto-mapping — 14 ngày qua (27/10 – 09/11)
Nguồn: AutoMappingLog • thang 0–5 run/ngày
17 run trong 14 ngày — kết quả: Thành công 10 • Không đủ điều kiện tự ghép (NO_ELIGIBLE_ORDER) 5 • Chết giữa chừng, không có kết luận 2

Việc thủ công & ngoại lệ cần giải quyết

Gộp từ hai hệ thống Hậu cần và Auto Dispatch. Bấm nút xử lý ở từng dòng để đi thẳng tới màn hình liên quan.

–
Mức độMãViệcMô tảTrạng tháiThời điểmThao tác

Đoàn công tác — hồ sơ tờ trình chia 3 phần

Bộ lọc đoàn công tác
Thanh lọc nằm trên cùng mục — các bộ lọc kết hợp với nhau

Đã tải 20 đoàn thật từ file Hậu cần công tác (09/11/2026): mặc định hiển thị đủ 20 đoàn, xếp theo ngày bắt đầu (mới nhất trước), đoàn mới nhất 20261110-01 mở sẵn. Các bộ lọc trên kết hợp với nhau: trạng thái + tháng/ngày bắt đầu + phòng + tên người trong đoàn. Lọc theo phòng: phòng của đoàn lấy theo phòng của thành viên trong tab NhanVien (Sheet Hậu cần công tác, tra ngày 09/11/2026) — một đoàn có thể thuộc nhiều phòng nếu thành viên khác phòng nhau, lọc 1 phòng thì hiện các đoàn có ít nhất 1 thành viên thuộc phòng đó. Cả 27 thành viên của 20 đoàn đã tải đều tra được phòng (7 phòng), nên hiện không còn đoàn nào “Chưa rõ phòng”; nhóm “Chưa rõ phòng” chỉ còn dùng cho đoàn nào có thành viên không tra được trong NhanVien. Phòng của từng đoàn hiện ngay trên mỗi dòng trong danh sách. Ô chọn số dòng vẫn cho chọn 20 / 30 / 40 / 50 dòng (khi nhập thêm tờ trình thủ công danh sách sẽ dài hơn 20). Đoàn đang chọn nằm ngoài số dòng hiển thị sẽ được ghim lên đầu danh sách. Ô tick bên trái mỗi dòng là tick in tờ trình đó — tick dịch vụ thì tick ở Phần 3.

Phần 1 — Danh sách tờ trình
–
–
Phần 2 — Thông tin đoàn
HỒ SƠ ĐOÀN
Phần 3 — Dịch vụ đi kèm
–

Dữ liệu thật từ file Hậu cần công tác: danh sách dưới đây là 20 đoàn thật lấy từ file Hậu cần công tác (sheet Data + DichVu), đã tải vào trang ngày 09/11/2026 — không phải dữ liệu mẫu, nhưng cũng chưa phải live tự động (muốn số mới phải tải lại hoặc bấm Làm mới để tính lại trạng thái trong trang). Gồm 13 đoàn chưa kết thúc (xếp theo ngày bắt đầu mới nhất trước) và 7 đoàn đã kết thúc gần nhất. Trạng thái hiển thị theo quy tắc ngày đã chốt — ngày kết thúc < hôm nay → Đã kết thúc; đoàn đang trong thời gian công tác → Đang diễn ra; chưa tới ngày bắt đầu → Mới — không dùng cột B của Sheet (cột đó đang đóng băng ở “Mới tạo”). Cột thanh toán (sau VAT) của cả 20 đoàn đang trống trong Sheet nên hiện “—”, không tự tính trước VAT × 1,08. Màn hình chia 3 phần: Phần 1 — danh sách tờ trình; Phần 2 — thông tin đoàn ở giữa; Phần 3 — dịch vụ đi kèm bên phải (loại chi tiết, nhà cung cấp, PNR, tiền trước VAT). Chọn một tờ trình ở Phần 1 thì Phần 2 và Phần 3 đổi theo ngay. Mỗi tờ trình và mỗi dịch vụ đều có ô tick chọn in riêng — tick xong bấm nút In ở thanh chọn in phía dưới; hiện mới làm giao diện chọn in, chức năng in thật làm sau.

DỮ LIỆU THẬT • 20 ĐOÀN • TẢI 09/11/202613 chưa kết thúc7 đã kết thúc gần nhấtĐoàn mở mặc định: 20261110-01 (mới nhất)

Dịch vụ — 50 lệnh gần nhất THẬT từ sheet DichVu

Dữ liệu thật từ Sheet: toàn bộ 50 dòng dưới đây là 50 dịch vụ gần nhất trong sheet DichVu, đã tải vào trang ngày 09/11/2026 — không phải dữ liệu mẫu, nhưng cũng chưa phải live tự động (trang chưa nối Sheet; muốn số mới phải tải lại). Ngày sử dụng (NgayBatDau) trải từ 07/11/2026 đến 08/12/2026 và không có dòng nào trống ngày. Mặc định sắp xếp mới nhất → cũ nhất theo NgayBatDau: dòng đầu là 20260812-01G (Khách sạn, Khánh Hòa, Duy, ngày 08/12/2026) — giữ nguyên đúng như Sheet ghi, dù nội dung dòng này ghi check-in/out 12–13/08/2026; dòng thứ hai là DRAFT-CAR-106728 (Xe, Đưa SB NB, Song Anh, PNR 53QPPH, ngày 10/11/2026). Các cột bám đúng header DichVu A–X: ID_DichVu, Trip_ID, LoaiDichVu, LoaiDichVuChiTiet, ChiTiet_NCC, Nội dung, Chi phí trước VAT (G), ChiPhiThanhToan (H), TrangThai (I) — giữ nguyên cả các mã đợt thanh toán như “33”, “TT2109”, GhiChu, InvoiceFile, OrderFile, PNR_Ref, HanhKhach, NgayBatDau – NgayKetThuc, TrangThai_NCC, EmailLog_NCC, EmailLog_HK, Đã thanh toán (W) và Trạng thái thanh toán tự động (X). Lưu ý đúng như trong Sheet: cột NgayKetThuc và InvoiceFile đang trống ở cả 50 dòng; 33 dòng chưa ghi Chi phí trước VAT (G) và 47 dòng chưa ghi ChiPhiThanhToan (H) nên hiện dấu “—”; cột W chưa ghi số tiền ở cả 50 dòng, cột X hiện “Chưa thanh toán” ở 45 dòng và đang trống ở 5 dòng; EmailLog_HK chỉ có ở 14 dòng vé máy bay; Sheet chưa có cột kênh ra lệnh. Thao tác hiện có: Sửa và Kèm hóa đơn.

DỮ LIỆU THẬT • 50 DỊCH VỤ GẦN NHẤT • TẢI 09/11/2026Xe: 34Vé MB: 14Khách sạn: 2Song Anh: 21Đức Anh: 12VTF: 8Sodig: 4Duy: 2Minh Ngọc: 2Khác: 1
–Sheet DichVu không có cột thời điểm order riêng: bộ lọc “Thời điểm đặt order” dùng giờ gửi mail trong EmailLog_NCC nếu có, không có thì dùng NgayBatDau. Lọc theo kênh: Sheet chưa có cột kênh nên chọn một kênh cụ thể sẽ không khớp dòng nào.
Chú thích: — = chưa ghi trong Sheet. Sheet chưa có cột kênh nên cột kênh hiện “Chưa ghi kênh”. Nội dung / ghi chú dài được rút gọn bằng dấu “...” — di chuột vào để xem đủ. Cột đầu tiên là tick chọn in của từng dịch vụ (tác vụ in của Dịch vụ là tác vụ riêng, làm sau — ở đây mới chọn trước).
In
Dịch vụ (ID / Trip_ID)Nhà cung cấp & Nội dungNgày sử dụng & Hành kháchTiềnTrạng tháiMail NCC / Hành kháchKênh & Đặt lúcHóa đơn / OrderThao tác

Nhập và ghép — tách thành hai phần riêng

Phần trên chỉ lo việc nhập tờ trình vào hệ thống: quét 2 thư mục nguồn (chỉ cần biết mỗi thư mục có mấy file, có file thì nhập luôn) và nhập tờ trình thủ công theo đúng các trường của sheet Data. Phần dưới chỉ lo việc ghép lệnh / draft vào tờ trình (đoàn).

Dashboard diễn tả lại yêu cầu của bạn — bạn xem đã hiểu đúng ý chưa:
  1. Phần NHẬP (riêng, ở trên): có 2 thư mục nguồn và chỉ cần ghi rõ thư mục 1 có mấy file, thư mục 2 có mấy file — không liệt kê từng file đang chờ, vì có file là nhập luôn. Nút “Quét folder & nhập tất cả” chạy tác vụ phụ quét cả 2 thư mục và nhập hết vào hệ thống. Ngoài ra có nhập tờ trình thủ công: nhập thẳng một tờ trình vào hệ thống (không phải tạo draft để ghép đoàn) với đầy đủ các trường theo sheet Data — TripID, Tình trạng, Yêu cầu, Ngày nhập liệu, Nội dung, Thời gian bắt đầu / kết thúc, Địa điểm, Phương tiện, Thành phần, Đầu mối liên hệ, Ghi chú, Link File — và có nút đính kèm file tờ trình: sau khi lưu, file đã đính rơi vào thư mục Đã xử lý, trong thư mục con theo tháng bắt đầu của đoàn (vd “Đã xử lý / 11-2026”); chưa đính file thì vẫn lưu nhưng ghi rõ là chưa đính file.
  2. Phần GHÉP (riêng, ở dưới): luôn có một dòng tổng cho biết có bao nhiêu lệnh ghép tự động được — các lệnh có ★ sao vàng; những lệnh này hệ thống tự ghép nên không liệt kê chi tiết. Danh sách bên dưới đổi tên thành “Lệnh ghép thủ công” — chỉ hiện những lệnh không ghép tự động được. Bấm vào một lệnh sẽ hiện danh sách các tờ trình ứng viên — quy tắc ghép chỉ đơn giản là ngày và thành phần đoàn nên mỗi tờ trình chỉ hiện đúng 2 thứ đó: thời gian theo tờ trình và thành phần đoàn (một người một lúc chỉ có tên trong 1–2 tờ trình); dưới cùng có 2 nút “Để sau” và “Ghép tay vào đoàn”.
Nếu chỗ nào ở trên chưa đúng ý bạn, cứ chỉ ra — dashboard sẽ sửa lại đúng chỗ đó.
Phần 1

Nhập — quét folder tờ trình vào hệ thống

Thư mục nguồn cần nhập
Tác vụ phụ: ScheduledFolderScan
–
file đang có trong 2 thư mục nguồn — có file là nhập luôn, không cần xem danh sách từng file
–
Thư mục 1 — Tờ trình chờ nhập
Drive — folder Tờ trình chờ nhập • – file
–
Thư mục 2 — Hóa đơn / chứng từ kèm theo
Drive — folder Hóa đơn, chứng từ • – file
Lần quét gần nhất: 11/10/2026 21:15 (không có file mới ở lượt đó)
Bấm nút này = chạy tác vụ phụ quét folder: quét cả 2 thư mục, OCR từng file và nhập hết vào hệ thống (tạo tờ trình / draft tương ứng). Bản tĩnh này mô phỏng thao tác ngay trong trang — khi nối thật, nút gọi đúng tác vụ ScheduledFolderScan trên Drive.
Nhập tờ trình thủ công
Ngoài folder — nhập thẳng tờ trình, không tạo draft

Dành cho những tờ trình thỉnh thoảng cần nhập tay, không qua folder quét. Các trường dưới đây bám đúng các đề mục của sheet Data: TripID, Tình trạng, Yêu cầu, Ngày nhập liệu, Nội dung, Thời gian bắt đầu / kết thúc, Địa điểm, Phương tiện, Thành phần, Đầu mối liên hệ, Ghi chú, Link File. Tờ trình nhập xong nằm ngay trong danh sách Đoàn công tác.

Sau khi bấm lưu, file đã đính sẽ rơi vào thư mục Đã xử lý, trong thư mục con theo tháng bắt đầu của đoàn — vd đoàn bắt đầu tháng 11/2026 thì vào “Đã xử lý / 11-2026”. Nếu không đính file thì vẫn lưu được tờ trình, nhưng sẽ ghi rõ là chưa đính file. Việc chuyển file ở bản tĩnh này là mô phỏng ngay trong trang — khi nối thật, file mới thật sự được chuyển vào thư mục Đã xử lý trên Drive.
Bản tĩnh này mô phỏng việc ghi vào sheet Data ngay trong trang: tờ trình vừa nhập sẽ xuất hiện ở menu Đoàn công tác. Khi nối thật, thao tác này ghi một dòng mới vào sheet Data.
Phần 2

Ghép — ghép lệnh / draft vào tờ trình (đoàn)

Lệnh ghép thủ công
–
Tờ trình ứng viên
Hiện ngay tại lệnh

Tác vụ tự động — cấu hình hiện tại (đọc từ Sheet)

Danh sách dưới đây là các tác vụ tự động đang cấu hình thật, đọc từ file Sheet HAU CAN CONG TAC 2025 ngày 09/11/2026 (JobLog, AutoMappingLog, CauHinh_HeThong, Central_Queue_Health) để cùng xem lại.

Dữ liệu thật từ Sheet · 09/11/2026
Lưu ý về lịch chạy: trigger theo giờ thực ra nằm trong Apps Script, không nằm trong Sheet. Các giờ hiển thị dưới đây là giờ chạy thực tế suy ra từ JobLog / AutoMappingLog, không phải cấu hình đọc được trong Sheet; tác vụ nào không thấy lịch trong Sheet được ghi rõ “chưa thấy cấu hình lịch trong Sheet”. Dashboard này chỉ hiển thị trạng thái — chưa bật/tắt hay chạy thật tác vụ nào từ dashboard.
Tác vụ chạy theo lịch & kích tay — JobLog / AutoMappingLog
–
MãTác vụNguồnLịch chạy ghi nhậnLần chạy gần nhấtTrạng thái & lưu ý
Công tắc tự động — tab CauHinh_HeThong
13 BẬT · 1 TẮT

Đây là các hành vi tự động gắn với luồng vé/xe (điều xe, gửi email, đồng bộ, cảnh báo), không phải tác vụ chạy theo giờ. Trạng thái BẬT/TẮT và số delay time (cột C của tab CauHinh_HeThong) dưới đây là dữ liệu thật đọc từ Sheet ngày 09/11/2026; dashboard chỉ hiển thị để xem, không đổi công tắc thật tại đây.

Delay time: số trong cột C “delay time” của tab CauHinh_HeThong, đọc lúc 19:50 ngày 09/11/2026. Đơn vị chưa ghi trong Sheet — Sheet chỉ ghi số, không ghi đơn vị, nên dashboard hiện đúng số gốc, không tự quy ra giây hay phút.

Test kết nối tới các hệ thống

Đây là kiểm tra theo dữ liệu đã tải ngày 09/11/2026, chưa phải test live thật — test live thật cần Cloudflare Worker, hiện chưa có. Nút test không gửi bất kỳ lệnh thật nào tới các hệ thống: nó chỉ đọc và hiển thị trạng thái đã biết từ dữ liệu đã tải (Central_Queue_Health, JobLog, CauHinh_HeThong…), kèm thời gian kiểm tra ngay trong trang.

Chưa chạy kiểm tra trong phiên này — bấm nút “Test kết nối tới các hệ thống” ở trên để xem trạng thái từng hệ thống.
Hàng đợi — Central_Queue_Health & Central_Job_Queue
Watchdog OK
Đang chờ (queued)
0
Central_Queue_Health tại lần kiểm tra gần nhất
Heartbeat
29 giây
Nhịp tim hàng đợi còn tươi
Watchdog
OK
Không phát hiện job kẹt ở tầng Central tại lần kiểm tra
Kiểm tra lúc
19:06:56 · 09/11/2026
Mốc đọc từ Sheet khi tải dữ liệu

Central_Job_Queue có 11 dòng (xử lý vé về, chờ xác nhận đầu mối — leader_update / pending_leader): 1 FAILED FFZAG2 (lỗi service_not_found) · 1 HOLD AGBU42 · còn lại DONE.

Cài đặt tác vụ — Cập nhật trạng thái đoàn hàng ngày + Refresh TongHop
Mới là cài đặt — chưa có trigger thật
Cập nhật trạng thái đoàn hàng ngày + Refresh TongHop

Mỗi lần chạy, hệ thống tính lại trạng thái của từng đoàn trong sheet Data theo ngày bắt đầu (cột F) và ngày kết thúc (cột G), ghi ngược về cột B, rồi chạy luôn refresh TongHop. Không có đoàn nháp trong quy tắc này.

Đã kết thúcNgày kết thúc < hôm nay → Đã kết thúc
Đang diễn raNgày kết thúc >= hôm nay → Đang diễn ra
MớiCòn lại là Mới — mới tạo hoặc hôm nay < ngày bắt đầu
Lưu ý trung thực: Đây chỉ là cài đặt trên dashboard. Trigger thời gian thật phải cài trong project Apps Script (Bo code) thì mới chạy được — dashboard tĩnh này không tự chạy hàm bizDailyUpdateTripStatus() và không tự ghi gì vào Google Sheet. Đừng hiểu thẻ này là tác vụ đang chạy thật.
Bật tác vụ
Đang bật (cài đặt) — công tắc này chỉ lưu lựa chọn trong trang này.
Mặc định 06:00 — giờ này chưa chốt, chỉ là mặc định để chạy trước auto-mapping khoảng 07:00. Sửa giờ ở đây cũng chỉ đổi cài đặt hiển thị trên dashboard; giờ chạy thật lấy theo trigger cài trong Apps Script.
Lịch dự kiến: Hàng ngày lúc 06:00
Lần chạy gần nhất
Chưa chạy lần nào — mới là cài đặt, chưa có trigger thật
Chưa có nhật ký chạy thật cho tác vụ này trên dashboard.
Refresh TongHop gần nhất: tối 06/11 → sáng 07/11/2026 (chạy tay). Không thấy cấu hình lịch cho tác vụ refresh trong Sheet — refresh hiện chạy tay (menu / sau khi lưu dịch vụ); giờ 06:00 ở thẻ này chỉ là cài đặt đề xuất trên dashboard, chưa chốt hẳn và chưa có trigger thật.
Code Apps Script mẫu — dán vào project Apps Script (Bo code)
Hàm bizDailyUpdateTripStatus(): đọc Data cột B/F/G, tính trạng thái theo đúng quy tắc trên, ghi ngược về Data cột B, rồi gọi bizRefreshTongHop(). Sau khi dán code, tạo trigger thời gian chạy hàm này hàng ngày theo giờ đã chọn ở trên.
Nhật ký job gần nhất
–

Trích từ JobLog / AutoMappingLog trong Sheet, đọc ngày 09/11/2026 — mã job ghi đúng mã trong log khi có; các dòng chạy tay qua Slack / Apps Script ghi theo thời điểm chạy.

Mã jobLoại jobBắt đầuThời lượngKết quảChi tiếtThao tác

Lịch điều xe — lịch trực nhà xe (CauHinh_DieuHanh)

Toàn bộ 60 dòng lịch trực thật trong tab CauHinh_DieuHanh của Sheet HAU CAN CONG TAC 2025, đọc ngày 09/11/2026: Song Anh 33 dòng · Đức Anh 27 dòng · tất cả đang Bật, ưu tiên 1.

60 dòng · Tháng 06–11/2026
–
Ghi chú tháng 11/2026: 5 dòng tháng 11 trong Sheet ghi theo kiểu tháng/ngày (11/01/2026 → 11/30/2026), tức 01/11 → 30/11/2026 — bảng trên hiển thị theo dd/mm/yyyy là 01/11/2026 – 30/11/2026. Từ tháng 08/2026 trở đi, mỗi nhà xe trực trọn tháng cho từng loại dịch vụ thay vì chia ca 5 ngày như tháng 06–07.

Đẩy bản mới lên Cloudflare Pages

Bản điều hành này là một file HTML tĩnh tự chứa (đã gồm sẵn CSS, JavaScript và dữ liệu trong cùng một file), nên có thể đưa thẳng lên Cloudflare Pages bằng API token — không cần máy chủ, không cần build lại.

Cloudflare Pages
Quy trình đẩy bản mới
4 bước
1

Xuất file HTML tự chứa của phiên bản mới

Bấm nút Xuất index.html bên cạnh để tải về đúng trạng thái trang hiện tại thành một file index.html duy nhất. Mọi thay đổi dữ liệu sau này đều đi qua bước xuất file này trước.

2

Nạp API token từ kho bảo mật — không hard-code

Token Cloudflare đã kết nối được cấp qua biến môi trường khi chạy script: export CLOUDFLARE_API_TOKEN="…" và export CLOUDFLARE_ACCOUNT_ID="…". Token chỉ cần quyền Cloudflare Pages: Edit. Tuyệt đối không dán token vào file HTML, vào script hay vào kho code — token nào đã từng lộ qua chat phải được xoay (tạo mới, xóa cũ) trước khi dùng.

3

Chạy script triển khai

Tải script bên cạnh (deploy-cloudflare-pages.sh) rồi chạy: ./deploy-cloudflare-pages.sh index.html. Script tự kiểm tra token qua api.cloudflare.com/client/v4/user/tokens/verify, tạo project Pages nếu chưa có, rồi đẩy thư mục chứa index.html lên bằng Wrangler (công cụ chính thức của Cloudflare, tự đọc token từ biến môi trường).

4

Xác nhận đã đẩy thành công

Script không dừng ở lệnh đẩy: nó gọi tiếp API GET /accounts/{account}/pages/projects/{project}/deployments, chờ deployment mới nhất đạt trạng thái success rồi in ra URL bản live (*.pages.dev) và mã deployment. Mở URL đó, kiểm tra banner mốc dữ liệu và một KPI bất kỳ khớp với bản vừa xuất là xác nhận xong. Nếu trạng thái là failure, script thoát với mã lỗi và in stage bị lỗi để xử lý.


!

Khi cần quay lui (rollback)

Cloudflare Pages giữ lại mọi deployment trước. Vào trang quản trị Pages → project → Deployments → chọn bản cũ → Rollback to this deployment; hoặc gọi API tương ứng bằng cùng token. Bản HTML tự chứa của từng lần xuất nên được lưu kèm ngày xuất để đối chiếu.

File & script triển khai
Không chứa secret

Script dưới đây đọc token và account ID từ biến môi trường, gọi api.cloudflare.com để kiểm tra token và xác nhận deployment. Trong script không có bất kỳ token hay khóa bí mật nào.

Cài app & nhận PDF qua chia sẻ

Cài dashboard như một app trên điện thoại (PWA), rồi nhận file PDF được chia sẻ từ Zalo, Gmail, Drive hoặc Files — app sẽ hiện trong bảng chia sẻ của Android như các app khác.

PWA · Android / Chrome
Cài đặt như app
Manifest + Service Worker
Trạng thái trên thiết bị này:
Đang kiểm tra khả năng cài đặt…
Service worker: đang kiểm tra…
Nút này sáng lên khi Chrome đã sẵn sàng cài đặt.
Cách cài trên Android (Chrome):
  1. Mở trang này bằng Chrome trên điện thoại Android.
  2. Bấm menu ⋮ của Chrome → “Cài đặt app” (hoặc “Thêm vào màn hình chính”).
  3. Xác nhận cài đặt — icon Hậu cần Công tác sẽ hiện trên màn hình chính.
  4. Mở từ icon đó: app chạy toàn màn hình (standalone), không còn thanh địa chỉ, và mở được cả khi mất mạng nhờ bản đã lưu trong máy.

Trên iPhone, vẫn thêm được vào màn hình chính qua Safari → Chia sẻ → “Thêm vào MH chính”, nhưng iOS không hỗ trợ nhận file qua bảng chia sẻ như Android — phần nhận PDF bên cạnh chỉ chạy trên Android / Chrome.

Xác nhận file PDF đã nhận
Chưa nhận file
Chưa nhận file PDF nào trong phiên này.
Khi app đã được cài, hãy mở một file PDF trong Zalo, Gmail, Drive hoặc Files → bấm Chia sẻ → chọn Hậu cần Công tác. File sẽ mở tại màn hình xác nhận này.

Dùng để thử màn hình xác nhận ngay trên máy này.
Chưa đẩy được file lên Drive trong bản này: việc đẩy file vào thư mục chờ trên Drive để chạy quét folder cần thêm một đoạn code chạy trên Cloudflare (Worker) — phần đó chưa làm trong bản này vì chưa có Cloudflare Account ID. Bản này mới nhận và giữ file ở phía app trên thiết bị, chưa đẩy thật lên Drive và chưa chạy quét folder. Khi có Worker, nút xác nhận ở trên sẽ gửi file thẳng vào thư mục chờ.