{"id":12,"date":"2026-04-01T03:41:45","date_gmt":"2026-04-01T03:41:45","guid":{"rendered":"https:\/\/vannguyen.it.com\/?project=dntt-payment-request-workspace"},"modified":"2026-04-01T13:22:25","modified_gmt":"2026-04-01T13:22:25","slug":"dntt-payment-request-workspace","status":"publish","type":"project","link":"https:\/\/vannguyen.it.com\/?project=dntt-payment-request-workspace","title":{"rendered":"DNTT Payment Request Workspace"},"content":{"rendered":"<h3>Business Context<\/h3>\n<p>DNTT is a payment request workspace built as an operational business application, not just a form demo. The repository combines requester flow, approval routing, finance release control, ERP job handling, and audit visibility in one layered workspace.<\/p>\n<h3>Pain Points Addressed<\/h3>\n<ul>\n<li>Payment requests usually become fragile when draft handling, approval logic, attachments, finance release, and ERP synchronization are mixed into one path.<\/li>\n<li>Free-form approval design creates maintenance risk, inconsistent controls, and difficult UAT.<\/li>\n<li>ERP release should not happen automatically at final business approval because finance still needs operational control before sync.<\/li>\n<li>Audit, retry, and record visibility are often treated as afterthoughts even though they matter in real operations.<\/li>\n<\/ul>\n<h3>Application Solution<\/h3>\n<p>The project uses a layered stack with React web, Node.js API, PostgreSQL, Redis, MinIO, and a dedicated ERP worker. The application supports draft creation, submission, approval actions, attachment handling, department-based approval setup, request audit history, finance release control, outbound webhooks, and background ERP processing.<\/p>\n<h3>Workflow and Control Design<\/h3>\n<ul>\n<li>Submit is handled as a controlled transaction that validates data, resolves approvers, snapshots the workflow instance, and moves the request into <strong>Pending Approval<\/strong>.<\/li>\n<li>The approval chain stays intentionally structured: <strong>Line Manager &#8211; Reviewer &#8211; HOD &#8211; CFO &#8211; CEO<\/strong>, with conditional escalation instead of free-form workflow sprawl.<\/li>\n<li>Delegation is supported within validity windows, and approver deduplication avoids redundant steps.<\/li>\n<li>Record visibility follows a <strong>need-to-know<\/strong> model instead of exposing every request broadly.<\/li>\n<li>After business approval, the request enters a finance-controlled state before any ERP release happens.<\/li>\n<\/ul>\n<h3>Finance and ERP Layer<\/h3>\n<p>A strong part of the design is the separation between business approval and ERP synchronization. Finance Operations can keep a request on hold, approve only, reject, or explicitly release it to ERP. Once released, the worker processes the ERP job asynchronously, supports manual retry, and runs reconcile logic for anomalies. That keeps approval transactions clean and avoids tying ERP instability directly to user actions.<\/p>\n<h3>Current Delivery Status<\/h3>\n<ul>\n<li>Implemented: draft, submit, approve, reject, return, resubmit, cancel, finance release queue, ERP job list, retry, reconcile, approval setup UI\/API, audit timeline, and generic audit log API.<\/li>\n<li>Still open in the repo: attachment-level visibility, field masking, advanced template configuration, and production hardening beyond the current local and UAT scope.<\/li>\n<\/ul>\n<h3>Why This Project Matters<\/h3>\n<p>DNTT shows ownership across workflow control, approval design, finance operations, ERP integration boundaries, and environment orchestration. It reads less like a UI prototype and more like a system that was shaped around actual business operating pressure.<\/p>\n<h3>References<\/h3>\n<ul>\n<li><a href=\"http:\/\/dntt.vannguyen.it.com\/\" target=\"_blank\" rel=\"noreferrer\">Live demo<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dinhvansh\/DNTT\" target=\"_blank\" rel=\"noreferrer\">GitHub repository<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>A layered payment request platform with controlled approvals, finance release, ERP job orchestration, and audit visibility across web, API, worker, and infrastructure layers.<\/p>\n","protected":false},"featured_media":0,"template":"","class_list":["post-12","project","type-project","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vannguyen.it.com\/index.php?rest_route=\/wp\/v2\/project\/12","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vannguyen.it.com\/index.php?rest_route=\/wp\/v2\/project"}],"about":[{"href":"https:\/\/vannguyen.it.com\/index.php?rest_route=\/wp\/v2\/types\/project"}],"version-history":[{"count":3,"href":"https:\/\/vannguyen.it.com\/index.php?rest_route=\/wp\/v2\/project\/12\/revisions"}],"predecessor-version":[{"id":45,"href":"https:\/\/vannguyen.it.com\/index.php?rest_route=\/wp\/v2\/project\/12\/revisions\/45"}],"wp:attachment":[{"href":"https:\/\/vannguyen.it.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=12"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}