Skip to content

Phiếu mua dừa ​

Ai dùngQuản trị viên Quản lý Quản lý thu mua Nhân viên kho Nhân viên phân bổ & QC Nhân viên thu mua

Mỗi xe dừa trái có một phiếu mua dừa. Dịch vụ: receiving-ticket-service. Công thức các giá trị tính: Tính toán phiếu mua dừa.

Tạo phiếu ​

MãYêu cầu
FR-TKT-1Mọi phiếu phải thuộc một kế hoạch thu mua dừa trái tuần. Ngày giao hàng phải nằm trong 7 ngày của tuần kế hoạch, theo giờ ICT, cả khi tạo lẫn khi sửa (DELIVERY_DATE_OUTSIDE_PLAN_WEEK); portal chỉ cho chọn 7 ngày đó. Kế hoạch đã xoá: 404; kế hoạch cơm dừa: 400 PLAN_TYPE_MISMATCH.
FR-TKT-2Tạo từ dòng kế hoạch: hệ thống phải lấy NCC, sản phẩm, HTX và (Khoan ngoài) đối tác khoan từ dòng. Dòng Khoan ngoài chưa có đối tác khoan thì không tạo được. Người dùng nhập ngày giao, buổi, Biển số xe, nhân viên thu mua, ghi chú.
FR-TKT-3Phiếu tự do (không có dòng kế hoạch) phải có NCC, sản phẩm, quy trình, HTX, lý do phát sinh, ngày giao, biển số; Khoan ngoài phải có đối tác khoan đang có vai trò đối tác khoan.
FR-TKT-4Lý do phát sinh lấy từ danh mục, chỉ nhận mã đang hoạt động: Dời ngày, Đổi nhà cung cấp, Đổi đối tác khoan, Phát sinh ngoài kế hoạch, Chưa lập phiếu trước khi giao gia công.
FR-TKT-5Nhân viên thu mua của phiếu phải là người được phân công cho NCC (PURCHASER_NOT_ASSIGNED, cả khi tạo và khi sửa). Khi tạo mà không chọn ai, server tự điền: người tạo chỉ có quyền create:assigned là chính họ; người tạo khác nhận người được phân công duy nhất (đang hoạt động) của NCC, có nhiều hơn một thì để trống.
FR-TKT-6Phiếu mới có trạng thái Đang xử lý (in_progress).
FR-TKT-7Biển số được chuẩn hoá (viết hoa, bỏ ký tự khác chữ số, chữ cái, Đ) rồi phải khớp ^[0-9]{2}[A-ZĐ]{1,2}[1-9]?[0-9]{5}$ hoặc dạng cũ ^[0-9]{2}[A-ZĐ]{1,2}[0-9]{4}$. Sai: TRUCK_PLATE_INVALID.
FR-TKT-8Xe được đăng ký ở vendor-service nếu chưa có, rồi liên kết với NCC. Liên kết thất bại không được chặn việc tạo phiếu.
FR-TKT-9Trước khi tạo, portal phải kiểm tra phiếu trùng: cùng NCC, sản phẩm, quy trình, đối tác khoan, HTX, ngày giao (ICT) và biển số, trên mọi phạm vi. Có phiếu trùng thì hỏi lại; người dùng vẫn được tạo.

Dữ liệu theo quy trình ​

Quy trình: outsourced_drilling (Khoan ngoài) hoặc inhouse_drilling (Khoan nội bộ).

TrườngÝ nghĩaKhoan ngoàiKhoan nội bộ
purchaseGrossWeightTổng khối lượng nhận vào tại đối tác khoan✓—
vendorDrillWaterWeightNước chiết xuất tại đối tác khoan✓—
intakeGrossWeightTổng khối lượng đến công ty (lần cân 1)✓✓
returnGrossWeightTổng khối lượng đi từ công ty (lần cân 2)✓✓
purchasedCoconutCountSố lượng trái dừa—✓
supplementaryDrilledWeightKhối lượng dừa khoan bổ sung✓—
supplementaryDrilledCoconutCountSố trái khoan bổ sung✓—
gcfDrillWaterWeightNước chiết xuất tại công ty✓✓
spoilDrilledWeightKhối lượng hư đã khoan✓—
spoilUndrilledWeightKhối lượng hư chưa khoan✓✓
sampleDrilledWeightMẫu 120 trái đã khoan (Khoan nội bộ: trọng lượng sau khoan)✓✓
sampleUndrilledWeightMẫu 120 trái nguyên—✓
sampleBrownMeatWeightCơm còn lớp nâu của mẫu✓✓
qaCoconutCountSố trái QA✓✓
inboundSealsSeal về nhà máy✓✓
outboundSealsSeal đi khoan✓—
drillingVendorIdĐối tác khoan✓—
MãYêu cầu
FR-TKT-10Gửi trường không thuộc quy trình của phiếu phải bị từ chối (400). drillingVendorId trên phiếu Khoan nội bộ: DRILLING_VENDOR_NOT_ALLOWED.
FR-TKT-11Gửi null là xoá giá trị; bỏ trường là giữ nguyên. Ô trống lưu null, không được lưu 0. Số 0 được tính là đã nhập.
FR-TKT-12purchasedCoconutCount, sampleDrilledWeight, sampleUndrilledWeight, sampleBrownMeatWeight, qaCoconutCount phải > 0. purchasedCoconutCount, supplementaryDrilledCoconutCount, qaCoconutCount phải là số nguyên (COCONUT_COUNT_NOT_WHOLE, details.field nêu trường); supplementaryDrilledCoconutCount ≥ 0. Mọi khối lượng còn lại phải ≥ 0.
FR-TKT-13returnGrossWeight phải nhỏ hơn intakeGrossWeight (RETURN_WEIGHT_NOT_BELOW_INTAKE). sampleBrownMeatWeight phải nhỏ hơn sampleDrilledWeight (SAMPLE_BROWN_MEAT_EXCEEDS_DRILLED). Khoan nội bộ: sampleDrilledWeight phải nhỏ hơn sampleUndrilledWeight (SAMPLE_DRILLED_EXCEEDS_UNDRILLED).
FR-TKT-14Mỗi chiều seal tối đa 20 seal, mỗi seal tối đa 100 ký tự; seal được cắt khoảng trắng, bỏ seal trống; trùng trong cùng danh sách bị từ chối.
FR-TKT-15Portal phải chặn số âm ở mọi ô khối lượng với thông báo Nhập một số hợp lệ không âm.

Quyền sửa theo nhóm trường ​

PATCH /api/coconut-receiving-tickets/{id} yêu cầu quyền của mọi nhóm mà yêu cầu chạm tới.

NhómTrườngQuyền coconut-receiving-tickets:Vai trò
Giao hàngnotes, truckPlate, inboundSeals, outboundSeals, deliveryDateupdate-deliveryAD MG PM WS QC; PU phạm vi được giao
Thông tin phiếuworkflowType, cooperativeId, purchaserId, productId, drillingVendorId, lotNoupdate-ticketAD MG PM WS
Khối lượng tại đối tácpurchaseGrossWeightupdate-processing-weightsAD MG PM WS
Cân tại công tytruckScaleRecordId, intakeGrossWeight, returnGrossWeight, purchasedCoconutCountupdate-company-weighingAD MG PM WS QC
Nước tại đối tácvendorDrillWaterWeightupdate-vendor-drill-waterAD MG PM WS QC
Khoan bổ sungsupplementaryDrilledWeight, supplementaryDrilledCoconutCount, gcfDrillWaterWeightupdate-supplementary-drillingAD MG PM WS QC
Hư hỏngspoilDrilledWeight, spoilUndrilledWeightupdate-spoil-weightsAD MG PM WS QC
Lấy mẫusampleDrilledWeight, sampleUndrilledWeight, sampleBrownMeatWeight, qaCoconutCountupdate-sample-weightsAD MG PM WS QC
MãYêu cầu
FR-TKT-16Chạm nhóm không có quyền: 403 FIELDS_NOT_EDITABLE, không lưu gì.
FR-TKT-17Nhóm chỉ có quyền phạm vi assigned thì phiếu phải nằm trong phạm vi, nếu không trả 404 RECEIVING_TICKET_NOT_FOUND.
FR-TKT-18Người chỉ có phạm vi assigned đổi deliveryDate, truckPlate khi phiếu đã có liên kết cân xe hoặc bất kỳ số đo nào: thay đổi đó bị bỏ qua. Portal phải khoá hai ô với dòng Khoá sau khi đã có dữ liệu cân.

Trạng thái ​

MãYêu cầu
FR-TKT-19Trạng thái phải được hệ thống tính lại sau mỗi lần ghi; không ai chọn tay. Không trường bắt buộc nào có giá trị: in_progress. Đủ hết: complete. Còn lại: pending_data.
FR-TKT-20Trường bắt buộc, Khoan ngoài: purchaseGrossWeight, vendorDrillWaterWeight, intakeGrossWeight, returnGrossWeight, gcfDrillWaterWeight, supplementaryDrilledWeight, supplementaryDrilledCoconutCount, spoilUndrilledWeight, spoilDrilledWeight, sampleDrilledWeight, sampleBrownMeatWeight, qaCoconutCount, processingBatchWeight.
FR-TKT-21Trường bắt buộc, Khoan nội bộ: intakeGrossWeight, purchasedCoconutCount, returnGrossWeight, gcfDrillWaterWeight, spoilUndrilledWeight, sampleUndrilledWeight, sampleDrilledWeight, sampleBrownMeatWeight, qaCoconutCount, processingBatchWeight.
FR-TKT-22Phiếu Hoàn thành khi đủ mọi trường bắt buộc (FR-TKT-20, FR-TKT-21), kể cả khi chưa phân bổ: processingBatchWeight (Tổng phân phối) có giá trị theo FR-CAL-4 từ trước khi phân bổ, và được tính lại theo dòng phân bổ (FR-CAL-5) khi có; phiếu vẫn Hoàn thành.

Khoá theo phân bổ ​

Phiếu đã phân bổ khi: Khoan nội bộ có # Xe; Khoan ngoài có # Xe hoặc có ít nhất một dòng phân bổ. Hệ thống hỏi trực tiếp processing-allocation-service.

MãYêu cầu
FR-TKT-23Chỉ đổi được quy trình khi phiếu chưa có dữ liệu: chưa có số cân/số lượng nào, chưa liên kết phiếu cân, chưa có seal (vào/ra), chưa có ảnh (cân, seal), chưa nhập tay số lô. Có rồi: 409 WORKFLOW_LOCKED_BY_DATA. Gửi lại đúng quy trình hiện có thì không bị từ chối. Áp dụng cho cả phiếu theo kế hoạch lẫn phiếu tự do; phiếu theo kế hoạch có thể khác quy trình của dòng kế hoạch, báo cáo kế hoạch–thực tế tính theo quy trình của phiếu. Portal chỉ cho chọn Quy trình khi được đổi, ngược lại hiện chỉ để xem.
FR-TKT-24Không được xoá phiếu đang có thẻ xe trong Phân bổ sơ chế (đã đưa vào ngày, có hay chưa có # Xe, có hay chưa có dòng): 409 TICKET_ALLOCATED_DELETE_BLOCKED; Trả về trước rồi mới xoá. Xoá là xoá mềm và cần delete:all (AD, MG, PM).
FR-TKT-25Phiếu đang có thẻ xe trong Phân bổ sơ chế (có hay chưa có # Xe, có hay chưa có dòng) không đổi được quy trình: 409 WORKFLOW_LOCKED_BY_ALLOCATION; Trả về trước. Sang Khoan ngoài phải chọn đối tác khoan trong cùng lần lưu (400 DRILLING_VENDOR_REQUIRED_FOR_WORKFLOW; portal báo ngay dưới ô Đối tác khoan và không gửi); sang Khoan nội bộ thì bỏ đối tác khoan.

Số lô ​

MãYêu cầu
FR-TKT-26Số lô tự sinh dạng {mã sản phẩm}-{yymmdd ngày phân bổ}[/{mã HTX}]-01, ví dụ DH-O-261007/LL-01. Hậu tố -01 cố định.
FR-TKT-27Số lô chỉ tồn tại khi thẻ xe của phiếu có # Xe; Trả về hoặc mất # Xe thì số lô bị xoá.
FR-TKT-28Số lô gõ tay được giữ nguyên (lotNoManual). Gửi số lô trống thì trả quyền sinh lại cho hệ thống.

Liên kết cân xe ​

MãYêu cầu
FR-TKT-29Bản ghi gợi ý: chiều Nhập, cùng biển số xe của phiếu (so sau khi bỏ dấu phân cách), lần cân 1 hoặc 2 nằm trong ngày giao (ICT) cộng thời gian ân hạn (mặc định 24 giờ), đối tác của bản ghi là NCC, sản phẩm khớp sản phẩm phiếu (hoặc danh mục khi bản ghi chỉ ánh xạ tới nhóm hàng), chưa gắn với phiếu khác. Bản ghi chưa ánh xạ không được gợi ý.
FR-TKT-30Phiếu mua dừa gắn tối đa một bản ghi, bản ghi phải đã có lần cân 1. Khi gắn: intakeGrossWeight = lần cân 1, returnGrossWeight = lần cân 2 (có thể còn trống).
FR-TKT-31Khi đã gắn, không được sửa tay hai số cân. Bỏ liên kết (truckScaleRecordId: "") xoá cả hai số.
FR-TKT-32Đổi biển số hoặc ngày giao: liên kết tự bỏ và hai số cân bị xoá khi lưu.
FR-TKT-33Khi xe cân lần 2 sau khi đã gắn: hệ thống (người ghi system) phải điền returnGrossWeight nếu còn trống. Lần cân 2 không nhỏ hơn lần cân 1 thì để trống và ghi log.
FR-TKT-34Một bản ghi cân xe chỉ gắn được cho một phiếu (mua dừa hoặc mua cơm dừa): 409 TRUCK_SCALE_RECORD_CLAIMED.

Tệp đính kèm ​

MãYêu cầu
FR-TKT-35Hai loại: Phiếu cân (weighing, tối đa 10 tệp) và Ảnh seal (seal, tối đa 40 tệp). Vượt: 409 ATTACHMENT_LIMIT_REACHED.
FR-TKT-36Chỉ nhận JPEG, PNG, WebP; mỗi tệp > 0 và ≤ 5 MB; tên tệp ≤ 255 ký tự.
FR-TKT-37Tải lên và xoá có hiệu lực ngay, không cần Lưu. Cần quyền manage-attachments với phạm vi tương ứng.

Danh sách, lịch sử, xuất file ​

MãYêu cầu
FR-TKT-38Danh sách lọc theo khoảng ngày giao, tối đa 93 ngày (DATE_RANGE_TOO_LARGE); lọc nhiều giá trị theo quy trình, NCC, đối tác khoan, trạng thái, nhân viên thu mua, HTX.
FR-TKT-39Mỗi lần thêm, sửa phiếu phải ghi lịch sử kèm ảnh chụp dữ liệu trước và sau. Thêm, gỡ tệp đính kèm ghi tên người thêm, gỡ tệp. Lịch sử hiển thị bỏ các lần ghi của system.
FR-TKT-40Portal xuất Excel riêng cho Khoan ngoài và Khoan nội bộ theo khoảng ngày và bộ lọc đang chọn.