# Check Approve

> Sinh sẵn 1-liner để trace 1 lệnh approve/return/reject của DMS trên log BE (docker) + FE proxy, ghi ra file .sh cho user copy-paste lên product server. Dùng khi user nói "viết lệnh check approve", "check duyệt request <CODE>", "approve treo / không thấy lệnh duyệt", "/check-approve".

- Skill: `rheinmir/check-approve` (Agent Skill)
- Install (CLI): `npx skillmds@latest add rheinmir/check-approve`
- Raw SKILL.md: https://api.skillmd.com/api/skills/rheinmir/check-approve/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: rheinmir (https://skillmd.com/u/rheinmir)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/rheinmir/check-approve

---


# Skill: check-approve

## Purpose

Khi 1 request DMS "ấn approve mà bị treo" / không rõ lệnh duyệt có tới BE chưa, user cần **1 lệnh 1 dòng** để paste lên **product server** (`ubuntu@hcm-bonbon-sv03`) — agent KHÔNG có SSH tới product nên KHÔNG tự chạy, chỉ sinh lệnh ([[feedback_product_server_debug]]). Skill này sinh sẵn lệnh BE + FE, ghi ra file `.sh` (tránh lỗi xuống dòng khi copy) và in inline.

## Triggers

- `/check-approve <REQ-CODE> [--since 120m]`
- User: "viết lệnh check (approve/duyệt)", "request <CODE> approve bị treo", "không thấy lệnh duyệt trong log", "check duyệt ở be/fe"

## Input

| Tham số | Ý nghĩa | Default |
|---------|---------|---------|
| `<REQ-CODE>` | Mã request, vd `BAF-CTD-26050043` | bắt buộc |
| `--since` | Khoảng thời gian docker logs | `120m` |
| `--be-container` | Container backend (nếu user biết) | placeholder `<BE_CONTAINER>` |
| `--user` | Username FE để lọc proxy log | placeholder `<FE_USER>` (vd `trangntt`) |

`<REQ-CODE>` thường gắn `SUM-ID` (vd `1010228`) — hỏi user nếu cần lọc hẹp hơn.

## Steps

1. **Resolve** — lấy `<REQ-CODE>`, `--since`, container/user nếu user cung cấp; còn lại để placeholder cho user tự điền.
2. **Generate** — dựng 2 one-liner (BE + FE) theo template dưới, **giữ trên 1 dòng** (không xuống dòng).
3. **Write** — ghi vào `scratchpad/check-approve-<REQ-CODE>.sh` (hoặc path user chỉ định). Nếu user nói "ghi vào folder log của wiki" → ghi `.sh`/`.txt`, KHÔNG `.md` (tránh OKF frontmatter hook).
4. **Show** — in cả 2 lệnh inline trong câu trả lời để user copy nhanh. **KHÔNG tự chạy trên product.**

## Command templates

**BE (docker logs trên product) — lệnh tổng hợp các endpoint approve:**
```bash
docker logs <BE_CONTAINER> --since 120m 2>&1 | grep -i -B2 -A2 -e BAF-CTD-26050043 -e <SUM_ID> | grep -i -e POST -e Action -e Approve -e Reject -e Return -e UpdateGenTask -e GetGenTaskById -e UpdateTask -e "ApproveSummary/Approve" -e QuickApprove -e UpdateRequestByApproveGroup
```

**BE — bản gọn (chỉ lọc theo mã request):**
```bash
docker logs <BE_CONTAINER> --since 120m 2>&1 | grep -i -e POST -e approve -e UpdateGenTask -e ApproveSummary -e UpdateRequestByApproveGroup -e BAF-CTD-26050043
```

**FE (dms-proxy log) — lọc theo user + request:**
```bash
docker logs <FE_CONTAINER> --since 120m 2>&1 | grep -i -e "dms-proxy" -e BAF-CTD-26050043 -e <FE_USER> -e Approve -e Action
```

> Thay `<BE_CONTAINER>` / `<FE_CONTAINER>` bằng container thật (`docker ps`). Đổi `--since` nếu duyệt đã lâu (vd `6h`). Đổi `BAF-CTD-26050043` thành mã request cần check.

## Đọc kết quả

- **Có** `POST /api/ApproveSummary/Approve` (hoặc `UpdateGenTask`, `UpdateRequestByApproveGroup`) kèm mã request → lệnh duyệt ĐÃ tới BE.
- **Không có** dòng POST nào dù FE báo đã ấn → request treo ở FE / proxy, chưa gọi BE → soi tiếp [[concepts/approve-action-flow]] và proxy.
- Endpoint per-module xem [[entities/dms-modules]] (BAF/VEN01/CashAdv… khác nhau).

## Giới hạn

- KHÔNG tự SSH/chạy lệnh trên product — chỉ sinh lệnh ([[feedback_product_server_debug]]).
- Mặc định trace trên **product** (hcm-bonbon-sv03), không phải local.

## Origin
- **Raw:** distill từ session 6902c846 / c2f1149e (2026-06-25, debug approve treo BAF-CTD-26050043/30/26060030)
- **Generated by:** /orca-eval finding #3 (250626-eval-report)

