# PAR68-IT-007 รหัสพนักงานขายไม่ได้ถูกล็อกการตัด CID

**วันที่ 23/12/68**

**แก้ไขปัญหา  ชื่อ/สกุล/แผนก** คอมพิวเตอร์  
**เกิดเหตุการณ์อะไร (อธิบาย)**  <span style="text-decoration: underline;"> เนื่องจากได้รับแจ้งปัญหาเรื่องพนักงานขายโครงการ นางสาวพรรณิภา เก็บเจริญ ได้ขายสินค้าสินค้าเชือกผ้าแบนคละสี ลูกค้ารับสินค้าไป 4 แต่พนักงานตัด CID ลูกค้าแค่ 1 ซึ่งหากตัดไม่ตรงจะมีการแจ้งเตือนในระบบแต่บังเอิญรหัสพนักไม่ได้ถูกล็อก CID ไว้จึงสามารถทำได้ จึงขอให้ทางคอมพิวเตอร์หากแนวทางป้องกันและแก้ไข  
</span>

<table border="1" id="bkmrk-%E0%B8%AA%E0%B8%B2%E0%B9%80%E0%B8%AB%E0%B8%95%E0%B8%B8%E0%B8%82%E0%B8%AD%E0%B8%87%E0%B8%9B%E0%B8%B1%E0%B8%8D%E0%B8%AB%E0%B8%B2-%E0%B8%A1%E0%B8%B2%E0%B8%95%E0%B8%A3%E0%B8%81" style="width: 100%; height: 138.987px;"><colgroup><col style="width: 53.7417%;"></col><col style="width: 46.2345%;"></col></colgroup><tbody><tr style="height: 29.7875px;"><td class="align-center" style="height: 29.7875px;">**สาเหตุของปัญหา**</td><td class="align-center" style="height: 29.7875px;">**มาตรการแก้ไขปัญหา**</td></tr><tr style="height: 109.2px;"><td style="height: 109.2px;"> ณ วันที่ มีปัญหาโปรแกรม การตัดเครดิตใช้งานไม่ได้ แผนก IT ได้ทำการเลือกวิธีการใช้ fallback โดยการ ignored การตรวจสอบการตัด CID เพื่อให้กระบวนการขายเงินเชื่อ สามารถทำงานต่อ ณ ช่วงเวลานั้นได้ และไม่ได้มีการปรับคืนการตรวจสอบ CID และยอดเงิน ณ สิ้นวัน (หลังจากแก้ไขปัญหาแล้ว)   
  
 มีผลทำให้ user ที่ ignored ไว้ไม่ได้มีการปรับสถานะคืนจึงสามารถ บันทึกขายเงินเชื่อโดยไม่ได้ตรวจสอบยอดเงินใน CID จึงเกิดปัญหาไม่มีการแจ้งเตือน ดังที่กล่าวมา

</td><td style="height: 109.2px;">##### **แก้ไขเบื้องต้น** 

  
\- ปรับ status ให้กลับมาเช็ค CID และยอดเงิน กับ user ทุกคน

 ... <span style="color: rgb(45, 194, 107);">แก้ไขเรียบร้อยแล้ว</span>

#####   
การป้องกัน 

- ตรวจสอบสาเหตุ ปัญหาการตัด CID 
    - (api merchant error)
- แก้ไขและเพิ่ม test case พร้อมสร้าง unit test
- ทำ JOB Schedule ในการปรับให้กับพนักงานที่โดนปลดล๊อก และพนักงานใหม่ที่เข้ามา

##### สถานะการป้องกัน 

 <span style="color: rgb(45, 194, 107);">จัดทำ JOB Schedule ตรวจสอบเรียบร้อยแล้ว </span>

[![image.png](https://km.nopadol.com/uploads/images/gallery/2025-12/scaled-1680-/Szj3deqduhA4saUV-image.png)](https://km.nopadol.com/uploads/images/gallery/2025-12/Szj3deqduhA4saUV-image.png)

</td></tr><tr><td>##### วิเคราะห์ 

กรณีนี้เป็น **เคสคลาสสิกของ Distributed System + Human Override + Missing Guardrail**  
ผมขอสรุปและแนะนำเป็น **เชิงสถาปัตยกรรม + เชิงกระบวนการ (Process/QA)** แบบจับต้องได้นะครับ

---

##### สรุปปัญหา (Root Cause แบบตรงประเด็น)

**ไม่ใช่ bug ธรรมดา แต่เป็น System Design Gap**

1. ERP *สามารถ bypass credit validation ได้*
2. credit9 down → มีการทำ **manual ignore / exception**
3. **ไม่มีระบบบังคับ revert / auto-heal**
4. การ override ผูกกับ **user-level** → ลืมเปิดกลับ
5. ไม่มี **ระบบตรวจจับความผิดปกติ (Mismatch Detection)**
6. QA ตรวจ feature แต่ **ไม่ได้ test “Failure Mode”**

> 👉 ผลลัพธ์:
> 
> - ERP ออกบิลเงินเชื่อ
> - credit9 ไม่ถูกตัด
> - ยอดไม่ตรง → CAR

</td><td>##### แนวคิดหลักที่ควรใช้แก้ (Key Principles)

ผมขอวางกรอบก่อน 5 ข้อนี้ แล้วค่อยลงวิธีปฏิบัติ

1. **Credit validation ต้องเป็น “Hard Gate” ไม่ใช่ Optional**
2. **Override ต้องมีอายุ (TTL) และ Audit**
3. **Failure ต้อง fail-safe (หยุด) ไม่ใช่ fail-open**
4. **ระบบต้อง detect inconsistency เอง**
5. **Human error ต้องถูกกันด้วยระบบ ไม่ใช่ความจำ**

</td></tr></tbody></table>

#### **Override Policy (ใช้ตอบ PAR )**

##### 🎯 วัตถุประสงค์

รองรับกรณี Credit9 Down **โดยไม่ทำให้ข้อมูลเพี้ยน**

##### 🔐 กฎ Override (บังคับ)

<div class="TyagGW_tableContainer" id="bkmrk-%E0%B8%AB%E0%B8%B1%E0%B8%A7%E0%B8%82%E0%B9%89%E0%B8%AD-%E0%B8%81%E0%B8%B3%E0%B8%AB%E0%B8%99%E0%B8%94-scope-%E0%B8%A3"><div class="group TyagGW_tableWrapper flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1068" data-start="843"><thead data-end="861" data-start="843"><tr data-end="861" data-start="843"><th data-col-size="sm" data-end="852" data-start="843">หัวข้อ</th><th data-col-size="sm" data-end="861" data-start="852">กำหนด</th></tr></thead><tbody data-end="1068" data-start="878"><tr data-end="919" data-start="878"><td data-col-size="sm" data-end="886" data-start="878">Scope</td><td data-col-size="sm" data-end="919" data-start="886">ระดับ Incident (ห้ามผูก user)</td></tr><tr data-end="946" data-start="920"><td data-col-size="sm" data-end="926" data-start="920">TTL</td><td data-col-size="sm" data-end="946" data-start="926">ต้องมีวันหมดอายุ</td></tr><tr data-end="991" data-start="947"><td data-col-size="sm" data-end="958" data-start="947">Approval</td><td data-col-size="sm" data-end="991" data-start="958">อย่างน้อย 2 คน (IT + Manager)</td></tr><tr data-end="1028" data-start="992"><td data-col-size="sm" data-end="1000" data-start="992">Audit</td><td data-col-size="sm" data-end="1028" data-start="1000">Log ครบ WHO / WHEN / WHY</td></tr><tr data-end="1068" data-start="1029"><td data-col-size="sm" data-end="1039" data-start="1029">Default</td><td data-col-size="sm" data-end="1068" data-start="1039">หมดเวลา = block อัตโนมัติ</td></tr></tbody></table>

</div></div>
#### **SOP เมื่อ Credit9 Down (Operational Ready)**

##### STEP 1: Incident Declaration

- เปิด Incident ID
- แจ้งทุกฝ่าย (Sales / Finance)

##### STEP 2: System Behavior

- ERP → **Block credit invoice**
- Cash only allowed

##### STEP 3: (ถ้าจำเป็นจริง)

- เปิด Override แบบ TTL
- ระบุ impact scope ชัดเจน

##### STEP 4: Recovery

- Credit9 กลับมา → Override ปิดอัตโนมัติ
- Run Reconciliation Job

#### **QA Checklist (ใช้แนบ CAR ได้เลย)**

##### Functional

- [ ]  Credit9 down → ERP ออกบิลไม่ได้
- [ ]  Override หมดอายุ → Block
- [ ]  ไม่มี reservation → Reject

##### Failure Mode

- [ ] Timeout
- [ ]  Partial outage
- [ ]  Human override error

##### Audit

- [ ]  Override log ครบ
- [ ]  Reconciliation report มีหลักฐาน