/ Samantra (CPTG) / Process & Specifications Hub

PBI Process Flow & Specification Repository

Centralized repository for business boundaries, activity workflows, and 1-click test evidence traceability across all Sprints.

SPRINT 14 ROUTINE WORKFLOW

ภาพรวมลำดับการทำงานจริงของระบบ (5 Stages Workflow Progression)

Sprint 14 Routine: Cross-PBI Sequence Diagram
sequenceDiagram
    autonumber
    actor Planner as ผู้จัดการแผนจัดซื้อ (Planner)
    participant UI as หน้าจอ Routine Plan
    participant Morning as รายงานประมาณการสินค้าคงเหลือ
    participant Calc as โมดูลคำนวณรายวัน
    participant Alloc as โมดูลจัดสรรสัดส่วน
    participant Partner as โมดูลกระจายยอดคู่ค้า
    participant Export as โมดูลสรุปและส่งออก Excel

    Planner->>UI: 1. เลือกโรงงาน, วัตถุดิบ, สัปดาห์ (#379873)
    UI->>Morning: 2. ดึงสต็อกคงเหลือยกมา และค้างรับสุทธิ (#379273)
    Morning-->>UI: ส่งมอบข้อมูลตั้งต้น (Initial Data Snapshot)
    Planner->>UI: 3. ปรับยอดแผนรายวัน
    UI->>Calc: ส่งคำนวณยอดคงเหลือสุทธิและผลต่างสะสม
    Planner->>UI: 4. กด Auto Allocation หรือปรับสัดส่วน (#379751)
    UI->>Alloc: ประมวลผลจัดสรรสัดส่วนโควตา
    Planner->>UI: 5. ปรับยอดรายวันของคู่ค้าแต่ละเจ้า (#379899)
    UI->>Partner: ตรวจสอบผลรวมคู่ค้าตรงกับยอดโรงงาน 100%
    Planner->>UI: 6. ตรวจสอบแนวโน้ม 5 สัปดาห์ & ดาวน์โหลด (#378167)
    UI->>Export: สร้างและส่งมอบไฟล์ Excel
          
Step 1: Selection & Filter Gate
#379873

PBI 379873: 4.Routine— การเก็บข้อมูลที่ผู้ใช้กรอกและโปรแกรมขน พร้อม Snapshot และล้างข้อมูลรายวัน

Sprint 14 Routine › ● TEST READY (Sprint 14 Routine)
IN SCOPE 6 ข้อกำหนดหลัก
  • ✓การเข้าถึงและการกำหนดสิทธิ์การแก้ไขข้อมูลหน้า `Routine` (แก้ไข/บันทึกได้เฉพาะวันที่ทำแผนปัจจุบัน)
  • ✓การบันทึกข้อมูลใน Tab `ภาพรวม` และ Tab `แผนคู่ค้า`
  • ✓การเก็บ Snapshot ครบทุก Tab, Section, Row, Column และ Field ณ เวลา `23:59:00` ตามเวลาไทย จากข้อมูลที่บันทึกล่าสุดในฐานข้อมูล (Unsaved changes ไม่ถูกนำมารวม)
  • ✓ลำดับการทำงาน (Sequence): ต้อง Snapshot สำเร็จก่อน จึงเริ่ม Clear ข้อมูล
  • ✓ขอบเขตการ Clear ข้อมูลรายวัน:
  • ✓Tab `ภาพรวม`: Clear เฉพาะ `เสนอ`, `โอน` และ `โปรแกรมขน`
OUT OF SCOPE ส่งมอบในโมดูลอื่น
  • ✕การ Clear ข้อมูลนอกเหนือจาก Scope ที่ระบุ
  • ✕การเปลี่ยนแปลงสูตรคำนวณใน Routine
  • ✕การสร้าง/แก้ไข Mapping คู่ค้า
  • ✕การ Restore ข้อมูลย้อนหลังกลับมาเป็นปัจจุบัน
Process Workflow Activity Diagram
flowchart TD
    %% ==========================================
    %% Activity Diagram / BPMN: การบันทึก Snapshot และล้างข้อมูลรายวัน
    %% ==========================================
    subgraph Lane_User ["👤 ฝั่งผู้ใช้งาน (Local Trader)"]
        U_Start(["เริ่มต้น: เข้าสู่เมนูการทำแผน Routine"])
        U_Select["เลือกวัตถุดิบ และวันที่ทำแผน"]
        U_EditCurrent["กรอกและแก้ไขข้อมูลในแท็บ ภาพรวม และ แผนรายคู่ค้า"]
        U_ClickSave["กดปุ่ม บันทึก"]
        U_ViewHistory["ดูข้อมูลย้อนหลัง และใช้ตัวกรองประวัติ"]
    end

    subgraph Lane_System ["⚙️ ฝั่งระบบงาน (บันทึกข้อมูลและระบบอัตโนมัติรอบดึก)"]
        S_CheckDate{"วันที่ทำแผนเป็นวันปัจจุบันหรือไม่?"}
        S_SaveDB["บันทึกข้อมูลลงฐานข้อมูลสำเร็จ"]
        S_LoadHistory["แสดงข้อมูลย้อนหลังแบบอ่านอย่างเดียว"]
        S_TriggerTime["ถึงเวลา 23:59:00 น. ตามเวลาประเทศไทย"]
        S_TakeSnapshot["ดึงข้อมูลล่าสุดสร้างภาพจำลองข้อมูล ครบทั้ง 2 แท็บ"]
        S_CheckSnapshot{"การสร้าง Snapshot สำเร็จหรือไม่?"}
        S_HaltClear["ระงับกระบวนการล้างข้อมูลทั้งหมดเพื่อความปลอดภัย"]
        S_ExecuteClear["ดำเนินการล้างข้อมูลตามขอบเขตที่กำหนด"]
        S_ClearOverview["ล้างข้อมูลแท็บภาพรวม: ยอดเสนอ, โอน, โปรแกรมขน"]
        S_ClearVendor["ล้างข้อมูลแท็บแผนรายคู่ค้า: ยอดรอเปิด, โอน, โปรแกรมขน"]
        S_ClearProg["ล้างข้อมูลโปรแกรมขน: เฉพาะวันก่อนหน้า และวันปัจจุบัน"]
        S_NewDay["เริ่มต้นวันใหม่: ช่องที่ถูกล้างจะเป็นค่าว่าง และไม่ดึงค่าเดิมมาแสดง"]
        S_End(["สิ้นสุดกระบวนการ"])
    end

    U_Start --> U_Select
    U_Select --> S_CheckDate

    S_CheckDate -->|"เป็นวันปัจจุบัน"| U_EditCurrent
    U_EditCurrent --> U_ClickSave
    U_ClickSave --> S_SaveDB
    S_SaveDB --> S_TriggerTime

    S_CheckDate -->|"เป็นวันย้อนหลัง (อดีต)"| S_LoadHistory
    S_LoadHistory --> U_ViewHistory
    U_ViewHistory --> S_End

    S_TriggerTime --> S_TakeSnapshot
    S_TakeSnapshot --> S_CheckSnapshot

    S_CheckSnapshot -->|"ไม่สำเร็จ"| S_HaltClear
    S_HaltClear --> S_End

    S_CheckSnapshot -->|"สำเร็จ"| S_ExecuteClear
    S_ExecuteClear --> S_ClearOverview
    S_ExecuteClear --> S_ClearVendor
    S_ExecuteClear --> S_ClearProg

    S_ClearOverview --> S_NewDay
    S_ClearVendor --> S_NewDay
    S_ClearProg --> S_NewDay
    S_NewDay --> S_End
Step 2: Morning Data & Core Calculation
#379273

PBI 379273: 1.Routine— ภาพรวม และการคำนวณ

Sprint 14 Routine › SPEC COMPLETED (TEST PENDING)
ADO
IN SCOPE 6 ข้อกำหนดหลัก
  • ✓การโหลดข้อมูล Tab ภาพรวม ตาม Product และ วันที่ทำแผน
  • ✓การตรวจสอบสิทธิ์ Local Trader และ Resource routine_report
  • ✓การแสดงผลและการจัดเรียง 20 โรงงานมาตรฐานตามประเภท (สัตว์บก → สัตว์น้ำ → สัตว์เลี้ยง) และ Standard Order รวมถึงโรงงานที่มีสิทธิ์เพิ่มเติมต่อท้ายกลุ่ม
  • ✓การคำนวณ Overview, Summary Information, Category Summary และ Grand Total ทุกคอลัมน์ตามสูตร Calculation Base
  • ✓การแก้ไขและบันทึก Manual Input และ Prefilled Header Fields (พื้นที่ Confirm, สินค้าคงเหลือ, ค้างรับ, ราคา) ของวันที่ปัจจุบัน
  • ✓การแสดงผล Mode Read-only สำหรับวันที่ทำแผนย้อนหลัง
OUT OF SCOPE ส่งมอบในโมดูลอื่น
  • ✕แผนการขนส่ง 5 สัปดาห์ (PBI 379751)
  • ✕Export File Excel (PBI 378167)
  • ✕การเก็บข้อมูลโปรแกรมขน Snapshot และล้างข้อมูลรายวัน (PBI 379873)
Upstream Data Dependencies: รายงานสินค้าคงเหลือ Morning (Stock, Pending, Current Usage, Confirm Area), Contract Report 08:00 (ค้างรับ/ต้นทุนค้างรับ), Pricing Simulation Report, Master Plant
Process Workflow Activity Diagram
flowchart TD
    %% ==========================================
    %% Activity Diagram / BPMN: ภาพรวม และการคำนวณ
    %% ==========================================
    subgraph Lane_User ["👤 ฝั่งผู้ใช้งาน (Local Trader)"]
        U_Start(["เริ่มต้น: เข้าสู่ระบบเมนูการทำแผน Routine"])
        U_SelectProdDate["เลือกวัตถุดิบ และวันที่ทำแผน"]
        U_EditData["กรอกและแก้ไขตัวเลขในช่องที่เปิดให้แก้ไข"]
        U_Action{"เลือกการดำเนินการ"}
        U_Save["กดปุ่ม บันทึก"]
        U_Navigate["เปลี่ยนเมนู หรือรีเฟรชหน้า ขณะมีข้อมูลค้างบันทึก"]
        U_Stay["เลือก อยู่ต่อ ในหน้าเดิม"]
        U_Leave["เลือก ออกจากหน้า"]
    end

    subgraph Lane_System ["⚙️ ฝั่งระบบงาน (ระบบคำนวณและตรวจสอบสิทธิ์)"]
        S_CheckPerm{"ตรวจสอบสิทธิ์การใช้งาน"}
        S_DenyAccess["ปฏิเสธการเข้าถึง หรือซ่อนเมนู"]
        S_CheckDate{"ตรวจสอบวันที่ทำแผน"}
        S_LoadHistory["โหลดข้อมูลย้อนหลังแบบอ่านอย่างเดียว"]
        S_LoadCurrent["โหลดข้อมูลรอบปัจจุบัน พร้อมเปิดช่องให้กรอกข้อมูล"]
        S_Recalculate["คำนวณผลลัพธ์และตรวจสอบค่าแบบทันที"]
        S_Validate{"ตรวจสอบความถูกต้องของข้อมูล"}
        S_SaveSuccess["บันทึกข้อมูลสำเร็จ และอัปเดตสถานะ"]
        S_ShowModal["แสดงหน้าต่างยืนยันการออกจากหน้า"]
        S_Discard["ละทิ้งข้อมูลที่ยังไม่บันทึก และเปลี่ยนหน้าจอ"]
        S_End(["สิ้นสุดกระบวนการ"])
    end

    U_Start --> S_CheckPerm
    S_CheckPerm -->|"ไม่มีสิทธิ์"| S_DenyAccess
    S_DenyAccess --> S_End

    S_CheckPerm -->|"มีสิทธิ์ถูกต้อง"| U_SelectProdDate
    U_SelectProdDate --> S_CheckDate

    S_CheckDate -->|"วันที่ในอดีต (ย้อนหลัง)"| S_LoadHistory
    S_LoadHistory --> S_End

    S_CheckDate -->|"วันปัจจุบัน"| S_LoadCurrent
    S_LoadCurrent --> U_EditData
    U_EditData --> S_Recalculate
    S_Recalculate --> U_Action

    U_Action -->|"บันทึกข้อมูล"| U_Save
    U_Save --> S_Validate
    S_Validate -->|"ข้อมูลถูกต้อง"| S_SaveSuccess
    S_SaveSuccess --> S_End

    U_Action -->|"ออกจากหน้าจอ"| U_Navigate
    U_Navigate --> S_ShowModal
    S_ShowModal --> U_Stay
    S_ShowModal --> U_Leave

    U_Stay --> U_EditData
    U_Leave --> S_Discard
    S_Discard --> S_End
Step 3: Auto Allocation & Ratio Tuning
#379751

PBI 379751: 2.Routine —ภาพรวม แผนการขนส่ง 5 สัปดาห์

Sprint 14 Routine › SPEC COMPLETED (TEST PENDING)
ADO
IN SCOPE 0 ข้อกำหนดหลัก
  • ✓ระบบทำงานตามขอบเขตข้อกำหนดที่ผ่านการวิเคราะห์
OUT OF SCOPE ส่งมอบในโมดูลอื่น
  • ✕การกู้คืนข้อมูลย้อนหลัง (Data Recovery)
  • ✕การคำนวณและการแสดงผลใน Tab อื่นๆ เช่น Tab `แผนคู่ค้า`
Process Workflow Activity Diagram
flowchart TD
    %% ==========================================
    %% Activity Diagram / BPMN: ภาพรวม แผนการขนส่ง 5 สัปดาห์
    %% ==========================================
    subgraph Lane_User ["👤 ฝั่งผู้ใช้งาน (Local Trader)"]
        U_Start(["เริ่มต้น: เข้าสู่เมนูการทำแผน Routine"])
        U_SelectDate["เลือก วันที่ทำแผน ในปฏิทิน"]
        U_InputProg["กรอกหรือแก้ไขยอดโปรแกรมขน
(เฉพาะโรงงานที่ตนเองดูแล)"] U_Action{"เลือกการดำเนินการ"} U_ClickCancel["กดปุ่ม ยกเลิก"] U_ClickSave["กดปุ่ม บันทึก"] end subgraph Lane_System ["⚙️ ฝั่งระบบงาน (ระบบตรวจสอบและคำนวณ)"] S_CheckDateType{"ตรวจสอบประเภทของวันที่เลือก"} S_ModeSunday["เข้าสู่โหมดดูอย่างเดียว
(ซ่อนส่วนกรอก 5 สัปดาห์ และซ่อนปุ่มบันทึก)"] S_ModeHistory["เข้าสู่โหมดดูอย่างเดียว
(ข้อมูลย้อนหลัง ไม่อนุญาตให้แก้ไข)"] S_DisableFuture["ปิดการเลือกวันในอนาคตบนปฏิทิน"] S_LoadCurrent["โหลดตารางแผน 5 สัปดาห์
(เริ่มต้นวันจันทร์ของรอบสัปดาห์ปัจจุบัน)"] S_CheckPlantPermission{"ตรวจสอบสิทธิ์การดูแลโรงงาน"} S_LockOtherPlant["กำหนดโรงงานอื่นเป็นโหมดดูอย่างเดียว"] S_Calculate["คำนวณยอดโปรแกรมขนสะสม และ O/H อัตโนมัติแยกตามสัปดาห์"] S_RevertData["คืนค่าข้อมูลในตารางกลับเป็นค่าก่อนแก้ไข"] S_Validate{"ตรวจสอบความถูกต้อง (เป็นจำนวนเต็ม)"} S_SaveSuccess["บันทึกข้อมูลลงระบบสำเร็จ และเปิดให้แก้ไขต่อได้"] S_End(["สิ้นสุดกระบวนการ"]) end U_Start --> U_SelectDate U_SelectDate --> S_CheckDateType S_CheckDateType -->|"เลือกวันอาทิตย์"| S_ModeSunday S_ModeSunday --> S_End S_CheckDateType -->|"เลือกวันย้อนหลัง (อดีต)"| S_ModeHistory S_ModeHistory --> S_End S_CheckDateType -->|"วันในอนาคต"| S_DisableFuture S_DisableFuture --> U_SelectDate S_CheckDateType -->|"วันปัจจุบัน (จันทร์-เสาร์)"| S_LoadCurrent S_LoadCurrent --> S_CheckPlantPermission S_CheckPlantPermission -->|"โรงงานที่ไม่ได้ดูแล"| S_LockOtherPlant S_LockOtherPlant --> S_End S_CheckPlantPermission -->|"โรงงานที่ตนเองดูแล"| U_InputProg U_InputProg --> S_Calculate S_Calculate --> U_Action U_Action -->|"ยกเลิกการแก้ไข"| U_ClickCancel U_ClickCancel --> S_RevertData S_RevertData --> S_End U_Action -->|"ต้องการบันทึก"| U_ClickSave U_ClickSave --> S_Validate S_Validate -->|"ข้อมูลถูกต้อง"| S_SaveSuccess S_SaveSuccess --> S_End
Step 4: Partner Delivery Breakdown
#379899

PBI 379899: 3.Routine— แผนรายคู่ค้า

Sprint 14 Routine › SPEC COMPLETED (TEST PENDING)
ADO
IN SCOPE 6 ข้อกำหนดหลัก
  • ✓การกรองข้อมูลด้วย Filter `คู่ค้า` (Single-select, ค้นหาได้, ตัวเลือก "ทั้งหมด") และ Filter `สัปดาห์ของโปรแกรมขน` (Multi-select สูงสุด 5 Week จาก Plan Period ปัจจุบัน)
  • ✓การจัดลำดับและการแสดงผลโรงงาน/คู่ค้า (ลำดับโรงงานตาม Tab ภาพรวม, จัดเรียงชื่อคู่ค้าตามอักษรไทย ก–ฮ ภายในโรงงาน, ไม่แยกประเภทโรงงาน, การแสดงข้อความ `ไม่พบข้อมูล` เมื่อไม่มีข้อมูลคู่ค้า)
  • ✓การดึงข้อมูล Read-only ของ `ค้างรับ` จาก Contract Report Summary ( ณ เวลา 08:00 น. ของวันที่ทำแผนที่เลือก, การวมค่า Remaining กรณีชื่อคู่ค้าซ้ำ, การแสดง `0` เมื่อเป็น 0 และ `-` เมื่อไม่มี record)
  • ✓การกรอกข้อมูล Manual Input ในช่อง `รอเปิด`, `โอน` และปริมาณแผนรายวันของคู่ค้า (อนุญาตเฉพาะจำนวนเต็มบวก/ลบ/0 ห้ามมีทศนิยม, ค่าเริ่มต้นเป็น Cell ว่าง)
  • ✓การดึงข้อมูล Read-only ของ `โปรแกรมขน` จาก Tab ภาพรวม
  • ✓การคำนวณยอดสรุป: `รวม` ใต้หมวด ยอดตั้งต้น (`ค้างรับ + รอเปิด + โอน`), `รวมคู่ค้า` (SUM Detail Row), `ผลต่าง` รายวัน (`โปรแกรมขน - รวมคู่ค้า`), และ `คงเหลือ` สะสมตามลำดับ Week (คำนวณรวมทุก Week แม้ถูกกรองออก และแสดงค่าติดลบด้วยสีดำ)
OUT OF SCOPE ส่งมอบในโมดูลอื่น
  • ✕การสร้างหรือแก้ไขข้อมูลหลักคู่ค้า (Master Data) และการแก้ไขหน้า Contract Report
  • ✕การส่งออกไฟล์ (Export Flat File)
  • ✕การล้างข้อมูลต้นทางของ `โปรแกรมขน` ใน Tab ภาพรวม (เนื่องจากเป็นข้อมูล Read-only จาก Tab ภาพรวม)
Process Workflow Activity Diagram
flowchart TD
    %% ==========================================
    %% Activity Diagram / BPMN: แผนรายคู่ค้า
    %% ==========================================
    subgraph Lane_User ["👤 ฝั่งผู้ใช้งาน (Local Trader)"]
        U_Start(["เริ่มต้นเข้าใช้งาน"])
        U_OpenTab["เปิดแท็บ แผนรายคู่ค้า"]
        U_SelectFilter["เลือกตัวกรอง คู่ค้า และ สัปดาห์โปรแกรมขน"]
        U_InputData["กรอกหรือแก้ไขข้อมูล รอเปิด, โอน และแผนรายวันของคู่ค้า"]
        U_Action{"เลือกทำรายการ"}
        U_HoverClick["ชี้เมาส์หรือคลิกที่เซลล์ตัวเลข"]
        U_Save["กดปุ่ม บันทึก"]
        U_Nav["กดรีเฟรช หรือออกจากหน้า ขณะมีข้อมูลค้างบันทึก"]
        U_ConfirmStay["เลือก อยู่ต่อ"]
        U_ConfirmLeave["เลือก ออกจากหน้า"]
    end

    subgraph Lane_System ["⚙️ ฝั่งระบบงาน (ระบบคำนวณและประมวลผล)"]
        S_LoadData["โหลดข้อมูลและกรองตามเงื่อนไขที่เลือก"]
        S_CheckVendor{"ตรวจสอบข้อมูลคู่ค้าของโรงงาน"}
        S_ShowEmpty["แสดงข้อความแจ้งเตือน ไม่พบข้อมูล"]
        S_RenderTable["แสดงแถวคู่ค้าเรียงลำดับ ก-ฮ พร้อมยอดค้างรับแบบอ่านอย่างเดียว"]
        S_Calculate["คำนวณยอดรวมตั้งต้น, รวมคู่ค้า, ผลต่างรายวัน และคงเหลือสะสม"]
        S_ShowTooltip["แสดงกล่องข้อความอธิบายหัวคอลัมน์ และฐานการคำนวณแบบเต็ม"]
        S_Validate{"ตรวจสอบความถูกต้อง (เป็นจำนวนเต็ม)"}
        S_SaveSuccess["บันทึกข้อมูลสำเร็จ และอัปเดตสถานะล่าสุด"]
        S_ShowModal["แสดงหน้าต่างยืนยันการออกจากหน้า"]
        S_KeepData["คงข้อมูลที่ผู้ใช้แก้ไขไว้"]
        S_DiscardData["ละทิ้งข้อมูลที่แก้ไข และสลับหน้าจอ"]
        S_End(["สิ้นสุดกระบวนการ"])
    end

    U_Start --> U_OpenTab
    U_OpenTab --> U_SelectFilter
    U_SelectFilter --> S_LoadData
    S_LoadData --> S_CheckVendor

    S_CheckVendor -->|"ไม่พบข้อมูลคู่ค้า"| S_ShowEmpty
    S_ShowEmpty --> S_End

    S_CheckVendor -->|"พบข้อมูลคู่ค้า"| S_RenderTable
    S_RenderTable --> U_InputData
    U_InputData --> S_Calculate
    S_Calculate --> U_Action

    U_Action -->|"ตรวจสอบรายละเอียด"| U_HoverClick
    U_HoverClick --> S_ShowTooltip
    S_ShowTooltip --> U_InputData

    U_Action -->|"ยืนยันข้อมูล"| U_Save
    U_Save --> S_Validate
    S_Validate -->|"ข้อมูลถูกต้อง"| S_SaveSuccess
    S_SaveSuccess --> S_End

    U_Action -->|"เปลี่ยนเส้นทาง/รีเฟรช"| U_Nav
    U_Nav --> S_ShowModal
    S_ShowModal --> U_ConfirmStay
    S_ShowModal --> U_ConfirmLeave

    U_ConfirmStay --> S_KeepData
    S_KeepData --> U_InputData

    U_ConfirmLeave --> S_DiscardData
    S_DiscardData --> S_End
Step 5: Multi-Week Rollup & Final Export
#378167

PBI 378167: 5.Routine— Export File Excel

Sprint 14 Routine › SPEC COMPLETED (TEST PENDING)
ADO
IN SCOPE 0 ข้อกำหนดหลัก
  • ✓ระบบทำงานตามขอบเขตข้อกำหนดที่ผ่านการวิเคราะห์
OUT OF SCOPE ส่งมอบในโมดูลอื่น
  • ✕การ Export Calculation Base ภายในระบบ
  • ✕การแก้ไขข้อมูลจากไฟล์ที่ Export แล้ว
  • ✕การส่งข้อมูลโดยตรงไปยัง Supplier จากระบบ
Process Workflow Activity Diagram
flowchart TD
    %% ==========================================
    %% Activity Diagram / BPMN: ส่งออกไฟล์ Excel
    %% ==========================================
    subgraph Lane_User ["👤 ฝั่งผู้ใช้งาน (Local Trader)"]
        U_Start(["เริ่มต้น: เข้าสู่หน้าจอและเลือกตัวกรอง"])
        U_SelectFilter["เลือกวัตถุดิบ, วันที่ทำแผน, คู่ค้า และสัปดาห์"]
        U_ClickExport["กดปุ่ม ส่งออกไฟล์ (Export File)"]
        U_DownloadFile["ดาวน์โหลดไฟล์ Excel เข้าเครื่องคอมพิวเตอร์"]
    end

    subgraph Lane_System ["⚙️ ฝั่งระบบงาน (ตรวจสอบสิทธิ์และสร้างไฟล์รายงาน)"]
        S_CheckPerm{"ตรวจสอบสิทธิ์การส่งออกรายงาน"}
        S_DenyAction["ไม่อนุญาตการทำงาน และไม่สร้างไฟล์"]
        S_CheckUnsaved{"มีข้อมูลที่แก้ไขค้างไว้และยังไม่บันทึกหรือไม่?"}
        S_ShowModalWarn["แสดงหน้าต่างแจ้งเตือนให้บันทึกข้อมูลก่อนส่งออก"]
        S_GenerateExcel["ประมวลผลสร้างไฟล์ Excel ตามเงื่อนไขและตัวกรอง"]
        S_CheckGenResult{"สร้างไฟล์สำเร็จหรือไม่?"}
        S_ShowError["แสดงข้อผิดพลาดตามเงื่อนไข และรองรับการลองใหม่"]
        S_ServeFile["ส่งไฟล์ ชื่อวัตถุดิบ_วันเดือนปี.xlsx ที่มีชีทภาพรวมและแผนคู่ค้า"]
        S_End(["สิ้นสุดกระบวนการ"])
    end

    U_Start --> U_SelectFilter
    U_SelectFilter --> U_ClickExport
    U_ClickExport --> S_CheckPerm

    S_CheckPerm -->|"ไม่มีสิทธิ์"| S_DenyAction
    S_DenyAction --> S_End

    S_CheckPerm -->|"มีสิทธิ์ถูกต้อง"| S_CheckUnsaved

    S_CheckUnsaved -->|"มีข้อมูลค้างบันทึก"| S_ShowModalWarn
    S_ShowModalWarn --> S_DenyAction

    S_CheckUnsaved -->|"ไม่มีข้อมูลค้าง (บันทึกแล้ว)"| S_GenerateExcel
    S_GenerateExcel --> S_CheckGenResult

    S_CheckGenResult -->|"ไม่สำเร็จ"| S_ShowError
    S_ShowError --> S_End

    S_CheckGenResult -->|"สำเร็จ"| S_ServeFile
    S_ServeFile --> U_DownloadFile
    U_DownloadFile --> S_End
Step 1: Ticket Management & Details
#385662

PBI #385662: [Local Price Ticket] PBI-17 Trader หน้ารายการและรายละเอียดคำขอ

Sprint 14.1 Local Price › SPEC COMPLETED (TEST PENDING)
ADO
IN SCOPE 4 ข้อกำหนดหลัก
  • ✓หน้ารายการคำขอ: ฟิลเตอร์ประเทศ, ฟิลเตอร์สถานะ (Badge Cards), ช่องค้นหาเลขที่ตั๋ว/ชื่อผู้ขอ, ตารางรายการ 9 คอลัมน์, Pagination
  • ✓หน้ารายละเอียดคำขอ: แท็บที่ 1 (ข้อมูลทั่วไปและตารางโรงงาน), แท็บที่ 2 (ความคิดเห็นและราคาเสนอของ Approver แต่ละท่าน), แท็บที่ 3 (ประวัติการเปลี่ยนสถานะ)
  • ✓ความปลอดภัยของปุ่ม Action: ซ่อน/แสดงปุ่ม แก้ไข, ยกเลิก, ทำสำเนา ตามสถานะใบและบทบาทผู้ใช้
  • ✓Deep Link Guard: การเข้าถึงหน้าตรงผ่าน URL เมื่อไม่มีสิทธิ์
OUT OF SCOPE ส่งมอบในโมดูลอื่น
  • ✕การกดบันทึกสร้างใบใหม่ (อยู่ใน PBI #383337)
  • ✕การกดตัดสินใจอนุมัติหรือต่อรองราคาของ Approver (อยู่ใน PBI #385663 / #385666)
  • ✕การส่งราคาวิ่งเข้า WinFeed (อยู่ใน PBI #383347)
Process Workflow Activity Diagram
flowchart TD
    %% กำหนด Swimlanes สองฝั่งชัดเจน
    subgraph UserLane ["👤 ฝั่งผู้ใช้งาน (Local Trader / Approver / Support)"]
        A1["เริ่มต้น: เปิดเข้าระบบเมนู Local Price Ticket"]
        A2["เลือกตัวกรองประเทศ หรือกดเลือกแท็บสถานะคำขอ"]
        A3["คลิกเลือกแถว Ticket ในตารางเพื่อเปิดดูรายละเอียด"]
        A4{"บทบาทและสิทธิ์ของผู้ใช้?"}
        A5["Trader ที่เป็นเจ้าของใบ: เห็นปุ่ม แก้ไข / ยกเลิก / ส่งคำขอ"]
        A6["Trader อื่น หรือ Support: ดูข้อมูลแบบอ่านอย่างเดียว ไร้ปุ่มแก้ไข"]
        A7["คลิกดูแท็บความคิดเห็น Approver และกดไอคอนอ่านเหตุผล"]
    end

    subgraph SystemLane ["⚙️ ฝั่งระบบงาน (Local Price Portal & Security Gate)"]
        B1["ระบบตรวจสิทธิ์ Country Permission และ Role ประจำตัว"]
        B2["กรองและแสดงเฉพาะ Ticket ในประเทศที่ผู้ใช้มีสิทธิ์"]
        B3["โหลดข้อมูลรายละเอียดคำขอและตารางเปรียบเทียบราคาโรงงาน"]
        B4{"ผู้ใช้พยายามเข้าผ่าน Deep Link โดยไม่มีสิทธิ์?"}
        B5["ปฏิเสธการเข้าถึง แสดงหน้า 404/403 ไม่เปิดเผยข้อมูล Ticket"]
        B6["แสดงผล Dialog ความคิดเห็นของ Approver แบบ Read-only รายโรงงาน"]
    end

    %% เส้นทางเชื่อมต่อข้ามแดน
    A1 --> B1
    B1 --> B2
    B2 --> A2
    A2 --> A3
    A3 --> B3
    B3 --> A4
    A4 -->|เป็นเจ้าของและใบยังเปิด| A5
    A4 -->|ไม่ใช่เจ้าของหรือสิทธิ์อ่าน| A6
    A6 --> A7
    A5 --> A7
    A7 --> B6

    %% เส้นทางความปลอดภัย Deep Link
    A1 -.->|พิมพ์ URL ตรงข้ามประเทศ| B4
    B4 -->|ไม่มีสิทธิ์ในประเทศนั้น| B5