mã nguồn hoàn chỉnh cho ứng dụng + `build.bat` + cấu hình PyInstaller + cấu hình trình cài đặt (installer) + mẫu CSV + tài liệu hướng dẫn, thay vì chỉ là một bản nguyên mẫu (prototype) một phần. Tôi sẽ tải lên tệp CSV và hàng loạt tệp PDF. Sau khi nhấp vào nút đối sánh tên và tệp PDF, tệp đã xử lý sẽ được gửi đến địa chỉ email được cung cấp trong tệp CSV
lưu ý: Lỗi này bắt nguồn từ một tiến trình con (subprocess), và nhiều khả năng không phải là sự cố của pip.
ERROR: Failed building wheel for Levenshtein
Failed to build Levenshtein
error: failed-wheel-build-for-install
× Failed to build installable wheels for some pyproject.toml based projects
╰─> Levenshtein
ERROR: Failed to install required packages
cpanel webmail Thiết lập email trên công cụ ứng dụng
LOGIC TỰ ĐỘNG ĐỐI SÁNH PDF: EmployeeID, FirstName, MiddleName, LastName
ĐỐI SÁNH DỰA TRÊN TÊN
Nếu không tìm thấy Mã nhân viên (Employee ID) trong tên tệp, hãy triển khai phương thức đối sánh phụ có kiểm soát dựa trên tên nhân viên.
Ví dụ:
PDF:
```
Abel Harry Anthony.pdf
```
CSV:
```
10152 | Abel | Harry | Anthony | abel@example.com
```
Ứng dụng cần nhận diện:
```
Abel Harry Anthony
```
và đối sánh khớp với bản ghi trong CSV.
Logic đối sánh có thể được thay đổi để ứng dụng sử dụng bất kỳ 3 trong 4 trường CSV sau:
* `ID`
* `First Name`
* `Middle Name`
* `Last Name`
PDF đầu vào:
10004_Vihang_Wani_SalarySlip_March_2026.pdf
không cần đổi tên tệp pdf một khi nó đã được đính kèm, đồng thời hiển thị cho tôi trên bảng điều khiển (dashboard) tất cả các tệp đính kèm trước khi gửi email
có thể được xây dựng thành một ứng dụng máy tính để bàn Windows thực hiện các việc sau:
1. Nhập tệp CSV nhân viên.
2. Cho phép bạn chọn một thư mục chứa hàng trăm/hàng nghìn tệp PDF.
3. Trích xuất Mã nhân viên (Employee ID) từ mỗi tên tệp.
4. Tìm nhân viên tương ứng trong tệp CSV.
5. Đổi tên tệp PDF theo một định dạng đã xác định.
6. Hiển thị các báo cáo thành công, không khớp, trùng lặp và lỗi.
7. Cung cấp bản dựng Windows chỉ với một cú nhấp chuột để tạo ra tệp `.exe`.
Đối với ví dụ của bạn: Đầu vào: SumitShyamraoTunkikar_0020063_Aug_2026.pdf
CSV: 20063 | Sumit | Shyamrao | Tunkikar
Đầu ra: 20063_Sumit_Shyamrao_Tunkikar.pdf
Hoặc
Đầu vào: Abel Harry Anthony.pdf
CSV: 10152 | Abel | Harry | Anthony
Đầu ra:10152_Abel_Harry_Anthony.pdf
Hoặc
Đầu vào: AbhishekYadav_0020311_Aug_2026.pdf
CSV: 20311 | Abhishek | Yadav
Đầu ra:20311_Abhishek_Yadav.pdf
AN TOÀN
Các tệp PDF gốc được giữ nguyên theo mặc định.
Kết quả đầu ra được ghi vào một thư mục riêng biệt.
Thêm Mẫu Đặt tên (Naming Templates): Cấu hình các mẫu đổi tên:
thêm các Placeholder:
Xác định hình thức của tệp pdf sau khi đổi tên
ví dụ: Mẫu (Pattern)
SalarySlip
Hoặc
SalarySlip_
Xem trước trực tiếp (Live preview)
20311_Abhishek_Yadav_SalarySlip_August_2026.pdf
đặc tả kỹ thuật thành:
Logic đối sánh có thể được thay đổi để ứng dụng sử dụng bất kỳ 3 trong 4 trường CSV:
* `ID + First Name + Middle Name + Surname`
* `ID + First Name + Surname`
* `First Name + Middle Name + Surname` khi không có ID
* Xử lý các tên viết liền nhau chẳng hạn như `SumitShyamraoTunkikar`
* Xử lý các tên có khoảng trắng chẳng hạn như `Abel Harry Anthony`
* Chuẩn hóa các ID có số 0 ở đầu: `0020063` → `20063`
* Giữ nguyên các tệp PDF gốc
* Không bao giờ ghi đè lên một tệp PDF đầu ra đã tồn tại
* Tách biệt thư mục Đầu vào (Input) và Đầu ra (Output)
* Thêm các mẫu đặt tên có thể cấu hình:
* ``
* ``
* ``
* ``
* ` Tôi sẽ chọn tháng`
* ` Tôi sẽ chọn năm`
* Trích xuất `Month` và `Year` từ tên tệp gốc ở những nơi có sẵn
* Cung cấp tính năng xem trước trực tiếp (live preview)
* Cung cấp bảng Xem trước/Rà soát (Preview/Review) trước khi xử lý
* Xuất các báo cáo không khớp/trùng lặp/lỗi
* Bao gồm tính năng Hoàn tác (Undo) cho lượt chạy xuất dữ liệu hiện tại
Phương thức đối sánh: bắt buộc sử dụng bất kỳ 3 trong 4 trường CSV