Unreleased · Supabase & Platform
Các thay đổi dưới đây chưa được gán phiên bản hoặc ngày phát hành.
Added
- Lưu và phân loại Workflow Template: Thêm bảng mẫu Job và liên kết category/tag theo workspace, RLS cho quyền đọc/chỉnh, RPC đồng bộ metadata, cùng ràng buộc cho phép task bán hàng có chỉ tiêu tối thiểu
0đơn.
Fixed
-
Hiển Thị Bằng Chứng Giao Dịch Kho Trong Chi Tiết Ca Làm (
ExecutionDetailPage.tsx,rpc_get_execution_record_by_id,TaskStockTransactionProofMapper.ts):- Nhúng trực tiếp toàn bộ dữ liệu giao dịch kho (
transactions,items,photos, tên kho xuất/nhập, phân loại vật tư và nhãn thu hồiis_returnable) trong RPCrpc_get_execution_record_by_id(SECURITY DEFINER), giải quyết triệt để lỗi không hiển thị thông tin hoặc lỗi cú pháp join PostgREST phía client. - Đồng bộ mapping
isReturnabletrênTaskStockTransactionProofMappervà hoàn thiện hiển thị card chi tiết bằng chứng giao dịch kho với huy hiệu trạng thái, phân tuyến kho, danh sách vật tư và hình ảnh chứng từ.
- Nhúng trực tiếp toàn bộ dữ liệu giao dịch kho (
-
Khắc Phục Lỗi RPC
submit_step_proof(“record v_proof has no field submitted_data”) (20260921031000_fix_task_validation_evaluate_proof_stock_transaction.sql,20260921031100_update_rpc_get_execution_record_stock_transaction.sql):- Sửa hàm
task_validation.evaluate_proofcho taskstock_transactionđể kiểm tra trực tiếp quan hệ từ bảngtask_stock_transactionsthay vì truy cập trườngsubmitted_datakhông tồn tại trênv_proof(task_execution_proofs). - Cập nhật hàm
public.rpc_get_execution_record_by_idtrả vềsubmitted_datavàproof_stock_transactioncho các task loạistock_transaction.
- Sửa hàm
-
Khắc Phục Lỗi Khởi Tạo Dữ Liệu Task Kho Hàng (
stock_transaction) Khi Chỉnh Sửa Job Trong Job Builder (JobRemoteDataSource.ts,TaskBuilder.tsx,TaskBuilderEditorContext.tsx):- Bổ sung
task_metric_stock_transactionvà bảng quan hệtask_metric_stock_transaction_assetsvàoSELECT_FIELDScủaJobRemoteDataSource.ts. - Hoàn thiện ánh xạ hai chiều giữa Supabase relational metrics/assets và DTO
config(assets,transaction_type,transaction_status,max_transactions,require_photos,min_photos,from_warehouse_id,to_warehouse_id) tronggetJobByIdvàcreateJob. - Bổ sung chuẩn hoá cấu hình task
stock_transactionkhi nạp dữ liệu bước công việc (initialNodes) và khi lưu payload (handleSave) trongTaskBuilder.tsx. - Bổ sung nhãn hiển thị
Kho hàngcho taskstock_transactiontrongTaskBuilderEditorContext.tsx.
- Bổ sung
-
Khắc Phục Lỗi Runtime Error
[object Object]Khi Tải Lên Hình Ảnh / Chứng Từ (SupabaseUploadRemoteDataSource.ts,useUploadController.ts,20260920160000_upload_path_resolver_text_resource.sql):- Tạo mới migration
20260920160000_upload_path_resolver_text_resource.sqlcập nhật RPCresolve_upload_foldercho phép nhậnp_resource_id text(thay vì bắt buộc kiểuuuid), hỗ trợ các định danh bản nháp (draft,new, uuid) kèm cơ chế kiểm tra chống duyệt thư mục trái phép (path traversal protection). - Chuẩn hóa việc bọc và chuyển đổi toàn bộ lỗi từ Supabase Storage và PostgREST thành các
Errorinstances hợp lệ thay vì ném raw object trongSupabaseUploadRemoteDataSource.ts, tránh hiển thịRuntime Error [object Object]. - Bổ sung cơ chế fallback tự động sinh đường dẫn lưu trữ deterministic
${workspaceId}/${folderScope}/${feature}/${resourceId}trong trường hợp RPC gặp sự cố mạng hoặc quyền truy cập. - Bọc khối xử lý file và tạo đường dẫn trong
try/catchvới hàm trích xuất thông điệp lỗiextractErrorMessagetronguseUploadController.ts, đảm bảo trạng thái upload của từng file hiển thị rõ ràng và không làm crash ứng dụng.
- Tạo mới migration
-
Khắc Phục Lỗi RPC
search_stock_assets_with_balance& Kiểm Tra Tham Số UUID (StockAssetSelect.tsx):- Bổ sung
SECURITY DEFINERvàGRANT EXECUTEcho function PostgreSQLsearch_stock_assets_with_balancetrên Supabase. - Chuẩn hóa kiểm tra hợp lệ UUID (
isValidUuid) đối vớiworkspaceId,folderId,warehouseIdtrongStockAssetSelect.tsx, lọc bỏ các giá trị"all","none",""trước khi truyền vào database. - Tối ưu hóa cơ chế tự động fallback truy vấn trực tiếp bảng
stock_assetsvàstock_balancesmột cách êm ái, đảm bảo người dùng luôn tìm kiếm sản phẩm thành công mà không gặp lỗi console.
- Bổ sung
-
Khắc Phục Lỗi 500 “Key length is zero” Trong Edge Function
process-photo:- Bổ sung giá trị dự phòng mặc định tin cậy cho biến môi trường
PHOTO_HMAC_SECRET(gigee_evidence_hmac_secret_2026) vàPUBLIC_WEB_URL(https://dashboard.gigee.vn), giúp Edge Function không bị lỗi khi chạy ở môi trường local hoặc khi thiếu biến môi trường tùy chỉnh. - Bổ sung cơ chế bảo vệ phòng vệ (defensive fallback) bên trong hàm
generateHmacSignatuređể ngăn chặn lỗiDOMException: Key length is zerotừ Web Crypto API khi khóa bị trống.
- Bổ sung giá trị dự phòng mặc định tin cậy cho biến môi trường
-
Bổ Sung Kích Hoạt Thông Báo Khi Duyệt Nhiệm Vụ & Toàn Bộ Ca Làm Việc (
task_approved&execution_approved):- Bổ sung database function
handle_task_approval_notificationvà triggertr_task_approval_notificationtrên bảngpublic.task_execution_proofs: Tự động gửi thông báotask_approvedcho Người làm (Worker) khi Người thuê phê duyệt một bằng chứng nhiệm vụ (status = 'approved'). - Bổ sung database function
handle_execution_status_notificationvà triggertr_execution_status_notificationtrên bảngpublic.job_execution_records: Tự động gửi thông báoexecution_approvedcho Người làm và các Người theo dõi (Followers có bậtfollow_execution_approve_push) khi toàn bộ ca làm việc được phê duyệt hoàn thành (status = 'approved'), đồng thời gửi thông báoexecution_rejectedkhi ca làm việc bị từ chối (status = 'rejected'). - Cập nhật bộ test pgTAP
notification_trigger_enums_test.sqlxác minh toàn diện các chu trình duyệt nhiệm vụ và ca làm việc.
- Bổ sung database function
-
Khắc Phục Lỗi Kích Hoạt & Hiển Thị Thông Báo Khi Người Làm (Worker) Follow Người Thuê (Hirer):
- Cập nhật các hàm RPC PostgreSQL (
rpc_list_notifications,rpc_mark_notifications_read,rpc_delete_read_notifications) để hỗ trợ đồng thời thông báo thuộc workspace hiện tại và thông báo toàn cục của người dùng (workspace_id IS NULL). - Đảm bảo Người thuê (Hirer) khi đang mở bất kỳ Workspace nào trên Web Dashboard vẫn luôn nhận được thông báo khi có Người làm bấm Follow.
- Tinh chỉnh trigger
handle_user_followed_notification()kiểm tra an toàn cấu hình khi người dùng chưa có bản ghiuser_notification_settings. - Cập nhật đếm số thông báo chưa đọc (
unreadCount) trongNotificationRemoteDataSource.tstrên Web Dashboard.
- Cập nhật các hàm RPC PostgreSQL (
Added
-
Hệ Thống Tri-Mode Task Builder Thiết Kế Các Bước & Nhiệm Vụ Đa Chế Độ (
TaskBuilder.tsx,TaskStudioBuilder.tsx,TaskPipelineBuilder.tsx,TaskFlowBuilder.tsx):- Tri-Mode View Switcher & Local Storage: Cho phép chuyển đổi tức thì giữa 3 chế độ xem dùng chung một nguồn dữ liệu thời gian thực và tự động lưu ghi nhớ chế độ xem đã chọn vào
localStorage:- Studio Mode (3 Cột - Mặc định): Bố cục 3 cột chuyên nghiệp (Cây các bước ➡️ Không gian làm việc của bước ➡️ Bảng thuộc tính Inspector cố định) tối ưu cho việc nhập liệu nhanh của người dùng vận hành chuyên sâu, tích hợp khả năng kéo thả phân chia độ rộng cột tuỳ biến (
ResizablePanelGroup). - Pipeline Mode: Thiết kế các bước theo dòng thời gian dọc (Vertical Timeline) trực quan theo phong cách Notion/Linear, hỗ trợ kéo thả đổi thứ tự các bước (
@dnd-kit/sortable), chọn bước tiên quyết (Dependencies) qua dropdown rõ ràng, tóm tắt cấu hình task bằng badge thông minh và chỉnh sửa chuyên sâu qua Slide-over Sheet rộng rãi. - Flow Diagram Mode: Đóng gói lại sơ đồ mạng lưới DAG Canvas (
@xyflow/react) với khả năng tự động dàn trang (Horizontal LR / Vertical TB), căn chỉnh tự động khi không có edges, nối dây liên kết trực tiếp và minimap.
- Studio Mode (3 Cột - Mặc định): Bố cục 3 cột chuyên nghiệp (Cây các bước ➡️ Không gian làm việc của bước ➡️ Bảng thuộc tính Inspector cố định) tối ưu cho việc nhập liệu nhanh của người dùng vận hành chuyên sâu, tích hợp khả năng kéo thả phân chia độ rộng cột tuỳ biến (
- Tái Thiết Kế Giao Diện JobFormModal Toàn Màn Hình & Tinh Gọn UX (
JobFormModal.tsx):- Mặc định mở ở chế độ toàn màn hình (
isFullScreen: true) mở rộng tối đa không gian thao tác. - Tinh giản Header: Gộp thanh Stepper điều hướng các bước, nút Phóng to/Thu nhỏ và nút Đóng (X) trên cùng một dòng, giải phóng 100% chiều rộng cho TaskBuilder ở Bước 4.
- Căn giữa các form nhập liệu ở Bước 1, 2, 3 (
max-w-2xl mx-auto) giúp tập trung trải nghiệm người dùng, trong khi Bước 4 TaskBuilder hiển thị full-bleed rộng rãi. - Di chuyển nút “Chỉ định thành viên” và “Tạo QR & Link mời” xuống thanh Footer đồng hàng với nút Lưu.
- Mặc định mở ở chế độ toàn màn hình (
- Việt Hoá Toàn Diện & Chuẩn Hoá Ánh Xạ Lỗi Supabase/PostgreSQL (
jobErrorMapper.ts):- Xây dựng bộ ánh xạ lỗi chi tiết chuyển đổi các mã lỗi PostgreSQL (
23505,23503,23502,42501,22P02), PostgREST (PGRST116,PGRST301) và Next.js API Routes thành thông báo tiếng Việt trực quan, thân thiện với người dùng. - Áp dụng đồng bộ cho
JobFormModal,JobAssignMemberModal,JobInviteModal,JobListPage,JobKanbanView, vàTaskBuilderPage.
- Xây dựng bộ ánh xạ lỗi chi tiết chuyển đổi các mã lỗi PostgreSQL (
- Single Source of Truth: Đồng bộ dữ liệu hai chiều và bảo toàn trạng thái cấu hình 100% khi chuyển đổi qua lại giữa cả 3 chế độ.
- Tích Hợp TaskRegistry Động: Tự động kết nối với toàn bộ các module nhiệm vụ (GPS Geofence, Photo Proof, Biểu mẫu FormX, Bán hàng, Kho hàng) với form cấu hình và kiểm định hợp lệ.
- Tri-Mode View Switcher & Local Storage: Cho phép chuyển đổi tức thì giữa 3 chế độ xem dùng chung một nguồn dữ liệu thời gian thực và tự động lưu ghi nhớ chế độ xem đã chọn vào
-
Mở Rộng Hệ Thống Quản Trị Kho Hàng & Chuỗi Cung Ứng Toàn Diện (Inventory Hub - 3-Tier Architecture):
- Kiến trúc 3 Tầng: Nâng cấp phân tầng quản lý kho chuẩn nghiệp vụ gồm: Lệnh kho & Yêu cầu (Stock Orders) ➡️ Giao dịch kho & Sổ cái (Stock Transactions & Movement Ledger) ➡️ Tồn kho tức thời (Stock Balances Snapshot).
- 8 Phân loại Tài sản & Vật tư (Asset Types): Mở rộng đầy đủ 8 nhóm nghiệp vụ (
product,premium,sampling,posm,uniform,equipment,consumable,other), bổ sung định mức an toàn tối thiểu (min_stock_level), cờ thu hồi sau ca (is_returnable) và mã vạch (barcode). - Phân hệ Lệnh Kho & Cấp Phát (
StockOrdersSubTab.tsx,StockOrderFormModal.tsx,StockOrderDetailDrawer.tsx,StockOrderApprovalModal.tsx,StockOrderFulfillmentModal.tsx):- Quản lý quy trình dự trù, đề xuất cấp phát vật tư PG/PB trước ca và nhân viên kỹ thuật trước khi lắp đặt.
- Cơ chế phê duyệt Lệnh kho kèm trigger tự động khóa giữ chỗ (
booked_unit_qty/inbound_unit_qty) trênstock_balances. - Hỗ trợ xuất kho thực tế theo từng đợt (1 Lệnh kho ➡️ N Giao dịch vật lý) và hoàn tất lệnh.
- Phân hệ Kiểm Kê & Cân Đối Tồn Kho (
StockAuditsSubTab.tsx,StockAuditFormModal.tsx,StockAuditDetailDrawer.tsx):- Tạo phiếu kiểm kê chu kỳ theo từng địa điểm kho, ghi nhận số lượng thực đếm và phân loại nguyên nhân chênh lệch (
damage,expired,loss,sampling_usage,data_error,unrecorded_sale,other). - Bấm “Chốt kiểm kê & Cân đối kho” tự động kích hoạt RPC
complete_stock_auditsinh bút toán điều chỉnh (adjustment) đồng bộ tức thời số tồn kho thực tế.
- Tạo phiếu kiểm kê chu kỳ theo từng địa điểm kho, ghi nhận số lượng thực đếm và phân loại nguyên nhân chênh lệch (
- Bảng Điều Khiển & Cảnh Báo Kho Real-time (
StockOverviewSubTab.tsx):- Thống kê chỉ số KPI: tổng danh mục SKU, tồn khả dụng, lệnh chờ duyệt, cảnh báo hết hàng (Stockout), tồn dưới định mức an toàn và cận hạn sử dụng trong 30 ngày.
- Biểu đồ cơ cấu phân bổ danh mục vật tư.
- Sổ Thẻ Kho & Báo Cáo Xuất - Nhập - Tồn (
StockLedgerSubTab.tsx,StockSummaryReportSubTab.tsx):- Sổ Thẻ kho (Movement Ledger): Theo dõi dòng thời gian biến động nhập/xuất/điều chuyển và số dư tồn lũy kế theo từng mặt hàng và kho hàng.
- Báo cáo Xuất - Nhập - Tồn (In-Out-Balance): Thống kê số dư đầu kỳ, nhập, xuất, điều chỉnh, tồn cuối kỳ và giá trị tồn theo kỳ kế toán, hỗ trợ xuất báo cáo định dạng CSV.
- Hub Quản Trị Kho 7-Tabs (
StockListPage.tsx):- Nâng cấp giao diện thành Inventory Hub với 7 tab: Bảng điều khiển (
overview), Lệnh kho (orders), Giao dịch (transactions), Danh mục hàng hoá (assets), Tồn kho tức thời (balances), Kiểm kê (audits), Báo cáo & Thẻ kho (reports).
- Nâng cấp giao diện thành Inventory Hub với 7 tab: Bảng điều khiển (
- Tích hợp Thẻ kho trên Trang Chi tiết Mặt hàng (
StockAssetDetailPage.tsx):- Bổ sung tab chuyển đổi giữa bảng tồn kho phân bổ theo từng kho và Sổ Thẻ kho theo dòng thời gian của mặt hàng đó.
-
Tìm Kiếm Sản Phẩm Kèm Thông Tin Tồn Kho Bằng RPC & Sắp Xếp Form Giao Dịch Kho (
StockTransactionFormModal.tsx):- Tạo mới RPC PostgreSQL
search_stock_assets_with_balancevà componentStockAssetSelect.tsxhỗ trợ tìm kiếm sản phẩm theo tên/SKU kèm hiển thị tức thì số lượng tồn kho thực tế (unitQty), số lượng khả dụng (availableQty) và đang giữ (bookedUnitQty) theo từng kho xuất/nhập được chọn. - Tích hợp component
LocationSelectvới phạm viscope="workspace"và gọi RPCsearch_locationstrên Supabase cho các trường chọn Kho xuất và Kho nhập. - Tích hợp
UploadGridWidgettừ moduleupload(upload_api) cho phép tải lên, xem trước nhiều hình ảnh / chứng từ biên bản giao nhận kho, và sắp xếp vị trí trường tải ảnh xuống cuối cùng của form (sau danh sách sản phẩm) theo trải nghiệm người dùng tối ưu. - Đồng bộ toàn diện trường
photos?: string[]qua các tầng kiến trúc Clean Architecture:StockTransactionEntity,StockTransactionDto,IStockRepository,StockRemoteDataSourcevàStockRepository.
- Tạo mới RPC PostgreSQL
-
Cơ Chế Kiểm Duyệt & Đối Soát Bằng Chứng Giao Dịch Kho (
StockTransactionValidation.tsx,StockTransactionProofView.tsx,20260921032000_stock_task_proof_mutation_guard.sql,20260921032100_stock_task_evaluate_proof_audit_rules.sql):- Phân Định Rõ Hai Giai Đoạn: Vận hành kho vật lý diễn ra theo thời gian thực (trước, trong, sau ca) ➔ Đối soát & Nghiệm thu ca làm việc (Job Review) diễn ra sau khi ca kết thúc mà không đảo ngược các biến động vật lý thực tế.
- Trigger Bảo Vệ Bằng Chứng (
prevent_task_stock_transaction_mutation): Bảo toàn dữ liệu giao dịch gốc (hàng hoá, số lượng, định tuyến, ảnh biên bản), cấm xoá phiếu, đồng thời cho phép thủ kho xác nhận phiếu (confirmed_by,status). - Trợ Lý Đối Soát Tự Động 4 Quy Tắc (
evaluate_proof): Đánh giá chi tiết (1) Số lượng phiếu, (2) Danh mục vật tư & định mức, (3) Định tuyến kho, (4) Ảnh biên bản bàn giao tối thiểu. - Nâng Cấp Giao Diện Đối Soát Web Dashboard: Bảng checklist trực quan trên
StockTransactionValidationvà hiển thị chi tiết vật tư, nhãn “Thu hồi sau ca” (isReturnable) trênStockTransactionProofView.
-
Kiến trúc Revision Nguyên tử và Task Contract v2 (Đợt 3 - Foundation Improvement):
- Atomic Publish RPC & Validation Guard (
publish_job_revision):- Thêm Migration
20260906232000_publish_job_revision_atomic_rpc.sqltriển khai RPC nguyên tử kích hoạt bản sửa đổi Job (publish_job_revision), áp dụng cơ chế khóa bi quanFOR UPDATEtrênjobsvàjob_revisions. - Tích hợp chốt kiểm tra tính toàn vẹn đồ thị có hướng (DAG Cycle Detection) ngăn ngừa vòng lặp luồng thực thi trong các bước (
job_steps/dependencies). - Kiểm định metric của từng Task: xác thực bắt buộc cấu hình toạ độ (
latitude,longitude,radius_meters) chogeofence, cấu hình số lượng ảnh và mẫu barcode chophoto_proof, và snapshot schema choformx. - Bảo vệ tính đồng thời khi bắt đầu thực thi ca (
start_job_execution) bằng khóa chia sẻFOR SHAREtrênjob_revisions, đảm bảo Worker chỉ gán vào revision đã xuất bản hoàn tất và ngăn chặn race-condition khi sửa đổi job song song.
- Thêm Migration
- Snapshot Terms Bất biến cho Job Revisions (Terms Immutability):
- Thêm Migration
20260906231000_revision_atomic_snapshot_and_task_contract_v2.sqlbổ sung các trường snapshot terms vào bảngjob_revisions:title,payout_rate,billing_type,location_snapshot,schedule_config,terms_snapshot. - Tự động đóng băng (freeze) các điều khoản công việc tại thời điểm xuất bản (publish), bảo vệ quyền lợi tiền công của Worker và loại bỏ hoàn toàn rủi ro thay đổi điều khoản thanh toán hồi tố khi Hirer sửa Job gốc sau này.
- Thêm Migration
- Task Contract v2 & Hỗ trợ Đa Nhiệm vụ cho mỗi Bước (Multi-task Support):
- Nâng cấp
ITaskModule.tsvàTaskRegistry.tschuẩn hoá hợp đồng Task Contract v2: bổ sungversion,compatibleVersions, vàcapabilities(resubmittable,allowMultiplePerStep,requiresProof,supportsAutoValidation). - Cải tiến hàm giải quyết
TaskRegistry.resolve(type, version)hỗ trợ kiểm tra tính tương thích phiên bản theo chuẩn SemVer với cơ chế fallback an toàn. - Cấu trúc lại bảng
job_step_tasks: thay thế ràng buộc duy nhấtUNIQUE(step_id, type)bằngUNIQUE(step_id, task_key), bổ sung cộttask_key,schema_version,validator_version,capabilities. Cho phép một bước chứa nhiều nhiệm vụ cùng loại (ví dụ: nhiềuphoto_proofđộc lập cho từng vị trí/mặt hàng, nhiềuformx). - Nâng cấp
TaskBuilder.tsx,CustomStepNode.tsx,TaskModuleEditor.tsx, vàTaskBuilderEditorContext.tsxtrên Web Dashboard để quản trị viên có thể thêm, sửa, đổi têntask_key, và gỡ bỏ nhiều task trong cùng 1 bước linh hoạt.
- Nâng cấp
- Cập nhật Read Models cho Payroll & Execution Details:
- Thêm Migration
20260906233000_revision_read_models_snapshot_payroll.sqltái cấu trúc các truy vấn bảng lương (create_draft_payroll,create_draft_payroll_batch,rpc_list_approved_payroll_jobs) ưu tiên đọc đơn giápayout_ratevà tiêu đềtitletừ snapshot củajob_revisions(COALESCE(jr.payout_rate, j.payout_rate)). - Cập nhật các RPC giám sát ca làm việc (
rpc_get_execution_record_by_id,rpc_list_execution_records) trả về thông tin snapshot của revision kèm metadata hợp đồng v2 (task_key,schema_version,validator_version) trong proof details. - Đồng bộ tầng Data/Domain/Mapper của phân hệ
execution(ExecutionDto.ts,ExecutionEntity.ts,ExecutionRepository.ts) để hiển thị thông tin ca làm việc theo đúng snapshot thời điểm thực thi.
- Thêm Migration
- Atomic Publish RPC & Validation Guard (
-
Geocoding Edge Function (
supabase/functions/geocode/):- Edge Function
geocodecung cấp dịch vụ forward geocoding (địa chỉ → lat/lng) sử dụng chiến lược Fallback Waterfall: Geoapify (3,000 req/ngày) → OpenCage (2,500 req/ngày), tổng ~5,500 geocode/ngày miễn phí. - Hỗ trợ 2 input mode:
location_id(DB cache lookup + writeback vào bảnglocations) vàaddress(geocode trực tiếp). - Country bias Vietnam (
countrycode=vn) để ưu tiên kết quả địa chỉ Việt Nam. - Yêu cầu JWT (
verify_jwt = true) để ngăn chặn abuse.
- Edge Function
-
Tích hợp Tự động Lấy Tọa độ (
apps/hire_workspace/gigee):- Bổ sung nút “Lấy tọa độ tự động” vào
LocationFormModal.tsx, gọi Edge Functiongeocodeđể tự động điền Vĩ độ / Kinh độ dựa trên địa chỉ và phường/xã người dùng đã chọn. - Bổ sung nút “Xem bản đồ” cho phép mở Google Maps trực tiếp bằng tọa độ đã điền để người dùng kiểm tra đối soát vị trí.
- Bổ sung nút “Lấy tọa độ tự động” vào
-
BI Dashboard Platform (
apps/hire_workspace/,supabase/):- Thay overview tĩnh bằng dashboard widget dùng chung cho workspace và folder, có bộ lọc ngày, xuất Excel và 11 widget vận hành.
- Bổ sung layout 12/6/1 cột dùng dnd-kit, kéo sắp xếp, resize, catalog và drawer cấu hình; không dùng
react-grid-layout. - Thêm persistence có optimistic revision, security-invoker analytics RPC, RLS, quyền
bi/managevàfolders:*/bi/manage, cùng pgTAP regression tests.
-
Job Visibility & Folder/Workspace Membership Guard (
supabase/migrations/):- Bảo mật phân quyền hiển thị công việc (Job Visibility Architecture): Thêm cơ chế kiểm tra quyền truy cập công việc (
can_view_job_scope) trực tiếp vào các RPCpublic.search_jobsvàpublic.get_app_job_details. Ngăn chặn triệt để việc lộ các Private Jobs (nội bộ) cho Worker chưa tham gia Workspace/Folder. - Phân quyền ứng tuyển (
can_apply_to_job&job_applications_insertRLS): Ngăn chặn Worker vãng lai nộp đơn trái phép vào Private Job khi chưa là thành viên hoặc chưa nhận được mã mời. - Bộ kiểm thử tự động pgTAP (
supabase/tests/auth_rbac/jobs_search_visibility.test.sql): 10 bài test bao quát các kịch bản phân quyền giữa Non-member, Folder A Member, Folder B Member đối với tìm kiếm rỗng, tìm kiếm có từ khóa, truy cập chi tiết và nộp đơn ứng tuyển.
- Bảo mật phân quyền hiển thị công việc (Job Visibility Architecture): Thêm cơ chế kiểm tra quyền truy cập công việc (
-
Supabase DB Migration (
supabase/migrations/20260827000000_update_pgroonga_search_full_indexes.sql):- Re-create toàn bộ 15 PGroonga indexes trên cột
search_full(thuộc các bảngprofiles,workspaces,memberships,roles,permissions,invitations,configurations,metadatas,locations,locations_provinces,locations_wards,issues,stock_assets,notifies,jobs) bổ sung thuộc tínhWITH (tokenizer = 'TokenBigram', normalizers = 'NormalizerAuto')hỗ trợ tìm kiếm Tiếng Việt không dấu.
- Re-create toàn bộ 15 PGroonga indexes trên cột
-
Supabase DB Migration (
supabase/migrations/20260826230500_core_func_search_vn_geo_add_province_name.sql):- Cập nhật hàm RPC
search_vn_geobổ sung cộtprovince_name(COALESCE(p.full_name, p.name)). - Bổ sung kịch bản pgTAP unit test
supabase/tests/auth_rbac/search_vn_geo_province_name.test.sql.
- Cập nhật hàm RPC
-
Supabase DB Migration (
supabase/migrations/20260826225000_worker_profiles_add_is_onboarded.sql):- Bổ sung cột
is_onboarded(boolean DEFAULT false NOT NULL) vào bảngpublic.worker_profiles. - Bổ sung kịch bản pgTAP unit test
supabase/tests/auth_rbac/worker_profiles_is_onboarded.test.sqlkiểm tra sự tồn tại và giá trị mặc định của cộtis_onboarded.
- Bổ sung cột
-
Bổ sung Supabase DB Migration (
supabase/migrations/20260826221500_worker_profiles_add_id_card_fields.sql):- Khởi tạo enum type
gender_type(male,female,other) trong schemapublic. - Bổ sung các cột thông tin CCCD vào bảng
worker_profiles:full_name,id_card_number,date_of_birth,gender,id_card_issued_datevàid_card_front_photos(jsonb).
- Khởi tạo enum type
-
Hoàn Tất 100% Batch 1 Integration Test Suites Cho Toàn Bộ Backend / Database Mutations (
supabase):- Thêm pgTAP suite
supabase/tests/metadata/job_metadata_atomic_rls.test.sql(15 assertions) kiểm thử toàn diện RPCmutate_job_metadatascho các thao tácassign,remove,sync, xử lý lỗi workspace scope mismatch, kiểm tra rollback atomic và phân quyền workspace owner / folder editor / outsider. - Thêm pgTAP suite
supabase/tests/payrolls/payroll_atomic_rls.test.sql(18 assertions) kiểm thử các RPC atomic payroll:create_draft_payroll,add_payroll_adjustment,transition_payroll_status, kiểm tra tính toàn vẹn dữ liệu, tự động tính toán lại tổng tiền và ràng buộc chuyển trạng thái draft ➔ approved ➔ paid. - Bổ sung migration
20260822064000_fix_workspace_init_defaults_metadata_types.sqlkhởi tạo metadata types mặc định trong trigger workspace. - Bổ sung migration
20260822065000_fix_submit_step_proof_status_engine.sqlđồng bộ hóasubmit_step_proofvới Status Engine và photos JSONB format. - Toàn bộ 23 test suites (299/299 assertions) của Batch 1 (FormX, Issues, Stock, Locations, Metadata, Payrolls, Auth/RBAC, Workspaces, Executions, Validations, Status Engine, Unlock Cascades) đã PASS 100% trên Supabase local.
- Thêm pgTAP suite
VPS tooling
- Added offline
--dry-run/DRY_RUN=1previews with local prerequisite checks and redacted credentials. A leading wrapper flag is distinct from Supabase CLI’s connecteddb push --dry-run.
Changed
-
Sửa cập nhật trạng thái Task Validator trong System Configuration (
apps/hire_workspace/):- Bổ sung mapping tường minh
isActive→is_activetại Repository boundary, khắc phục lỗi công tắc “Kích hoạt sử dụng” không được gửi tới Supabase khi tạo hoặc cập nhật cấu hình. - Thêm regression tests xác minh chính xác payload DTO
snake_casecho cả luồng create và update.
- Bổ sung mapping tường minh
-
Sửa lỗi Privilege Escalation Forbidden khi Chấp nhận Lời mời (
supabase/migrations/):- Khắc phục xung đột giữa IAM Privilege Escalation Trigger và RPC
redeem_invitation: Thiết lập cờ bối cảnh transaction-local (app.is_redeeming_invitation) bên trong hàmpublic.redeem_invitationvà cập nhậtpublic.prevent_membership_privilege_escalation()để nhận diện bối cảnh chấp nhận lời mời hợp lệ, ngăn chặn việc báo lỗi giả42501 (Privilege escalation forbidden)khi người dùng mới gia nhập Workspace/Job. - Phòng vệ Chuyên sâu khi Tạo Lời mời (Defense-in-Depth on Invitations Creation): Cập nhật hàm trigger
public.validate_invitation_integrity()kiểm tra phân quyền người tạo lời mời, đảm bảo người dùng không thể tạo lời mời mang vai trò có quyền hạn vượt quá quyền hạn của chính mình. - Kiểm thử tự động pgTAP (
supabase/tests/auth_rbac/redeem_invitation.test.sql): Bổ sung 15 bài test kiểm tra chu trình tham gia lời mời và ngăn chặn các hành vi tự nâng quyền / tạo lời mời trái phép với trigger kích hoạt đầy đủ.
- Khắc phục xung đột giữa IAM Privilege Escalation Trigger và RPC
-
Pure JSONB Task Photo Proof Data Model: Chuyển đổi hoàn toàn bảng
task_proof_photosang sử dụng cộtphotos JSONBchứa danh sách Photo Evidence Objects, cập nhật đồng bộ các RPCsubmit_step_proofvàrpc_get_execution_record_by_id. -
Edge Function
process-photo:- Sửa lỗi sai phiên bản package
sqids(0.4.1->0.3.0) trongdeno.json. - Bổ sung quyền
GRANT ALL ON TABLE photo_evidences TO authenticated, anon, service_rolekhắc phục lỗi42501 permission denied. - Tích hợp vẽ banner và text watermark trực tiếp trên ảnh bằng
imagescript(NTP Server time, GPS coordinates, địa chỉ, SQID verification code, trạng thái bảo chứng) và xuất chuẩn file JPG chất lượng cao. - Thêm cơ chế tự động resolve
workspace_idhợp lệ khi client truyền fallback string và hỗ trợupsert: truecho Supabase Storage.
- Sửa lỗi sai phiên bản package
-
Domain-Agnostic Storage Architecture (Relative Storage Path):
- Chuyển đổi toàn diện cơ chế lưu trữ đường dẫn ảnh trong database (
photo_evidences.raw_photo_url,photo_evidences.stamped_photo_urlvàtask_proof_photo.photos JSONB) từ absolute URLs sang relative storage paths (ví dụ:workspace_id/general/evidences/stamped_xxx.jpg).
- Chuyển đổi toàn diện cơ chế lưu trữ đường dẫn ảnh trong database (
-
Explicit Image Decoding Error Propagation:
- Tại Server Edge Function (
process-photo/index.ts): Trả về trực tiếp HTTP 400 Bad Request kèm message giải thích chi tiết khi gặp lỗi giải mã ảnh (ví dụ:"Định dạng ảnh HEIC không được hỗ trợ xử lý trực tiếp. Vui lòng chuyển sang JPEG/PNG."), không nuốt lỗi hay âm thầm upload ảnh thiếu watermark.
- Tại Server Edge Function (
-
Watermark Local Timezone Conversion (UTC+7):
- Cập nhật Edge Function
process-photo/index.tstự động chuyển đổi True Server NTP Time sang múi giờ địa phương của client (client_timezone, mặc địnhAsia/Ho_Chi_Minh/UTC+7) khi in dòng chữ trên watermark ảnh (Thời gian NTP: DD/MM/YYYY HH:mm:ss (UTC+7)).
- Cập nhật Edge Function
UI Polish
- Permissions & Roles Management UI Polish, Shared Components & Negative Actions (
apps/hire_workspace/src/features/membership/):- Hỗ trợ Negative Actions (Quyền Phủ định / Cấm quyền
!):- Chuẩn hóa các action cấm (
!*,!read,!create,!edit,!delete,!read.me,!edit.me) với quy tắc IAM cốt lõi: Explicit Deny luôn luôn ghi đè (Override) Allow. - Hiển thị chip cấm quyền nổi bật với tone đỏ (
bg-rose-500/15 text-rose-600 border-rose-400/50) kèm iconBanvà nhãn tiếng Việt rõ ràng (Cấm Toàn quyền, Cấm Xem, Cấm Tạo, Cấm Sửa, Cấm Xóa, Cấm Xem của tôi, Cấm Sửa của tôi). - Tích hợp toggle chuyển đổi [Cho phép (Allow)] / [Cấm (Deny !)] ngay trong Popover gán quyền nhanh của Ma trận Vai trò và Form Tạo Quyền.
- Cập nhật
UserRepositoryvàIamServicevới bộ unit test toàn diện, bảo đảm việc phân quyền Deny Override chính xác 100%.
- Chuẩn hóa các action cấm (
- Danh mục Tài nguyên Động từ
system_configurations(type = 'iam_resource'):- Bổ sung Migration
20260830000100_seed_iam_resources_system_configurations.sqlseed mặc định 13 IAM Resources chuẩn vào bảngsystem_configurations. - Đăng ký
IAM_RESOURCE_TYPE_DEFtrongSystemConfigSchemaRegistrythuộc nhóm danh mụciam(Phân quyền & Bảo mật) với iconshield. - Tích hợp hook
useStandardResourcestự động nạp danh mục tài nguyên động từ bảngsystem_configurations(gồmcode,name,category,description). - Luôn duy trì cơ chế Fallback 100% về 13 tài nguyên chuẩn trong
STANDARD_RESOURCESkhi chưa có dữ liệu cấu hình hoặc khi đang tải. - Đồng bộ hiển thị linh hoạt trên
<ResourceDisplay />,<PermissionFormModal />,<RolesTab />và<PermissionsTab />.
- Bổ sung Migration
- Shared Presentation Components (
ResourceDisplay.tsx,ActionChip.tsx,ActionChipGroup.tsx): Trích xuất bộ 3 components dùng chung đạt chuẩn Single Source of Truth cho việc hiển thị Resource tiếng Việt thân thiện và Action Chips phân màu ngữ nghĩa. - Áp dụng Ma trận Vai trò (
RolesTab.tsx) & Drawer Phân quyền (RolePermissionsDrawer.tsx):- Chuẩn hóa cột Tài nguyên sang tiếng Việt thân thiện kèm mã kỹ thuật nhỏ.
- Chuyển đổi toàn bộ badge quyền trên các cột vai trò sang tiếng Việt (Toàn quyền, Xem, Tạo, Sửa, Xóa, Xem của tôi, Sửa của tôi) kèm tooltip chi tiết và sắp xếp thứ tự logic thống nhất.
- Drawer phân quyền hiển thị tên tiếng Việt rõ ràng cho cả bảng quyền đã gán và dropdown chọn quyền cần gán.
- Tên Resource Tiếng Việt Thân thiện (
PermissionsTab.tsx,standardPermissions.ts): Chuẩn hóa hiển thị tên tài nguyên bằng tiếng Việt rõ ràng (Thư mục & Dự án, Công việc (Jobs), Bảng lương & Chi trả, Hồ sơ nhân sự…) kèm mã kỹ thuật nhỏ. - Chuẩn hóa 7 Action Cốt lõi:
- Thu gọn và chuẩn hóa toàn bộ quyền hạn sang 7 Action tiêu chuẩn:
* (manage),read(kèm export),create(kèm import),edit,del (delete),r.me (read.me),e.me (edit.me). - Sắp xếp cố định thứ tự các action trên mọi dòng resource, giúp người dùng so sánh quyền giữa các tài nguyên chỉ bằng cách quét mắt theo cột dọc.
- Thu gọn và chuẩn hóa toàn bộ quyền hạn sang 7 Action tiêu chuẩn:
- Phân quyền Tạo Custom Actions cho Super Admin:
- Người dùng thông thường chỉ được chọn và thao tác trong phạm vi 7 Action và Resource tiêu chuẩn.
- Chỉ tài khoản Super Admin (
is_super_admin: true, thông qua hookuseIsSuperAdmin) mới được hiển thị ô nhập để tạo Action hoặc Resource tùy chỉnh đặc thù.
- Form Tạo Quyền Trực quan (
PermissionFormModal.tsx):- Tích hợp bộ chọn Resource phân theo danh mục (Dự án, Tài chính, Quản trị, Vận hành, Hệ thống).
- Hỗ trợ chọn đồng thời nhiều Action Chips để tạo hàng loạt quyền cho resource trong 1 thao tác.
- Hỗ trợ Negative Actions (Quyền Phủ định / Cấm quyền