E-005 — Ứng dụng và cấp quyền¶
Nguồn: PRD prd-openapi-platform-2026-09-04 §5 (F14, F15, F4) · spine
architecture-openapi-platform-2026-09-04 (AD-3, AD-10, AD-12, AD-20, AD-21) · story chi tiết + AC ở
_bmad-output/planning-artifacts/epics.md (mục Epic E-005).
PO duyệt cấu trúc epic + ô parity: 05/09/2026 — duyệt cả danh sách epic và bảng story.
Đường duy nhất quyền ra đời: bên thứ ba tạo ứng dụng, đăng ký một sản phẩm cho một môi trường, ngân hàng duyệt và kích hoạt.
Vì sao làm — BRD tầng epic¶
Mục tiêu. Bên thứ ba tạo ứng dụng, đăng ký một sản phẩm cho một môi trường, và nhận credential. Đây là đường duy nhất quyền ra đời.
Nhóm yêu cầu trong PRD — F14, F15, F4¶
F14 — Ứng dụng của bên thứ ba¶
- FR-088 Ứng dụng là thực thể riêng nằm giữa Tổ chức và credential: tên, mã, tổ chức sở hữu, trạng thái, môi trường triển khai, người tạo, người phê duyệt, ngày tạo.
- FR-089 Một tổ chức có nhiều ứng dụng; mỗi ứng dụng có credential riêng (F4).
- FR-090 Môi trường triển khai của ứng dụng là một chiều riêng, khác với môi trường được cấp quyền ở F15 — PO chốt 05/09 giữ cả hai chiều.
- FR-091 Ứng dụng chỉ tạo được cho tổ chức đã được duyệt (F2).
- FR-092 Đình chỉ một ứng dụng độc lập với đình chỉ cả tổ chức — hai mức khác nhau.
- FR-093 Chấm dứt hợp đồng với tổ chức kéo theo vô hiệu mọi ứng dụng của tổ chức đó.
- FR-094 Danh sách ứng dụng lọc theo tổ chức, môi trường, trạng thái; phân trang.
F15 — Yêu cầu đăng ký sản phẩm API¶
Đây là quy trình duyệt thứ hai, khác hẳn onboard tổ chức ở F2, và là việc hằng ngày của trang quản trị.
- FR-095 Bên thứ ba tạo yêu cầu đăng ký cho bộ ba
Ứng dụng × Sản phẩm API × Môi trường. - FR-096 Mã yêu cầu sinh theo quy tắc nhận diện được, mang ứng dụng và môi trường.
- FR-097 Yêu cầu mang: tổ chức, ứng dụng, sản phẩm đăng ký, người liên hệ, người nộp, thời điểm nộp, môi trường.
- FR-098 Trạng thái: Chờ duyệt → (Đã duyệt | Từ chối), và tiến trình ba bước Tạo yêu cầu → Phê duyệt → Kích hoạt đăng ký. Kích hoạt là bước riêng: duyệt xong chưa chắc đã hiệu lực ngay.
- FR-099 Cùng một ứng dụng đăng ký nhiều môi trường độc lập — duyệt UAT không kéo theo duyệt Production, và từ chối một môi trường không ảnh hưởng môi trường kia.
- FR-100 ⛔ Chặn cứng (TT-01): duyệt yêu cầu mà sản phẩm suy ra nhóm
PIShoặcEWLTSchỉ được nếu tổ chức thuộc loại Ngân hàng hoặc Tổ chức trung gian thanh toán. Kiểm lại tại đúng thời điểm duyệt, vì cả loại pháp nhân lẫn nội dung sản phẩm đều đổi được. - FR-101 Duyệt hoặc từ chối đi qua mô hình maker/checker ở F3; từ chối bắt buộc nêu lý do và lý do đó hiển thị cho bên thứ ba.
- FR-102 Yêu cầu được duyệt và kích hoạt sinh ra bản ghi quyền (F4, FR-025) — đây là cách duy nhất quyền ra đời.
- FR-103 Danh sách yêu cầu lọc theo trạng thái, tổ chức, môi trường; phân trang.
F4 — Cấp quyền truy cập và credential¶
- FR-025 ⚠️ Sửa 05/09. Quyền truy cập không gán trực tiếp cho bên thứ ba theo bốn
nhóm nữa. Quyền là kết quả của một yêu cầu đăng ký được duyệt:
Ứng dụng × Sản phẩm API × Môi trường(F15). Bốn nhómINF/AIS/PIS/EWLTSvẫn tồn tại, nhưng là phân loại pháp lý suy từ nhãn của API (FR-070), không phải đơn vị cấp phát. - FR-026 ⛔ Chặn cứng (TT-01): yêu cầu đăng ký một Sản phẩm API mà nhóm suy ra có
PIShoặcEWLTSchỉ duyệt được nếu tổ chức sở hữu ứng dụng thuộc loại Ngân hàng hoặc Tổ chức trung gian thanh toán. Kiểm ở tầng nghiệp vụ phía máy chủ, chạy lại tại thời điểm duyệt. - FR-027 Cấp
client_idcho TPP. - FR-028 Sinh
client_secret, hiển thị đúng một lần, lưu dạng băm không đảo ngược được. - FR-029 Xoay vòng
client_secretvới thời gian chuyển tiếp cho phép hai secret cùng sống. - FR-030 Đăng ký danh sách
redirect_urihợp lệ cho TPP (bắt buộc cho luồng AIS/PIS về sau). - FR-031 ⚠️ Sửa 05/09. Hạn mức có hai nguồn khác bản chất, cùng tồn tại:
- Hạn mức thương mại nằm trong Gói đăng ký (
hạn mức,tần suất, kèmgiá) — điều khoản bán hàng, khác nhau theo gói (FR-084). - Trần pháp lý theo Điều 11.9 — giới hạn truy vấn tự động thông tin khách hàng, áp cho mọi bên thứ ba bất kể mua gói nào.
⛔ Cái nào chặt hơn thì cái đó thắng. Không được để một gói đắt tiền nâng hạn mức vượt
trần pháp lý. Admin đặt cả hai giá trị; portal-be thi hành giá trị nhỏ hơn.
- FR-032 Tách credential môi trường thử nghiệm và môi trường thật. [ASSUMPTION C6] Chưa
rõ sandbox chạy hạ tầng riêng hay dùng chung.
Bảng story → change¶
| Story | Service | Thứ tự bắt buộc | Ghi chú | Chặn bởi |
|---|---|---|---|---|
E-005/1.1 Schema Ứng dụng |
admin-be | 1 | cap/tpp-application · thực thể giữa Tổ chức và credential · PO chốt 12/09: chiều 1 «Giai đoạn triển khai» = DEVELOPMENT · SANDBOX · PRODUCTION (giữ hệ cũ), chỉ mô tả + lọc (FR-094), ⛔ không điều khiển quyền |
M:E-004/1.1 · M:E-001/1.1 |
E-005/2.1 Schema Yêu cầu đăng ký và Quyền |
admin-be | 2 | cap/api-registration-review · REGISTRATION là sổ cái chỉ ghi thêm · PO chốt 12/09: chiều 2 «Môi trường cấp quyền» = UAT · PRODUCTION; ⛔ Sandbox không phải giá trị đăng ký (mở cho mọi ứng dụng hoạt động đã nộp đăng ký, không cần duyệt — xem bảng «hai chiều» dưới) |
M:E-005/1.1 · M:E-003/1.1 |
E-005/2.2 Chặn theo loại pháp nhân |
admin-be | 3 | cap/api-registration-review · ⛔ AD-21 lớp 1, 2, 4 |
M:E-005/2.1 · M:E-004/1.1 · M:E-002/1.6 |
E-005/2.3 Duyệt và kích hoạt |
admin-be | 4 | cap/api-registration-review · kích hoạt là bước riêng |
M:E-005/2.2 · M:E-001/3.1 · TR:E-007/1.2 trước lần kích hoạt THẬT |
E-005/3.1 Cấp và lưu credential |
admin-be | 5 | cap/tpp-credential · ⛔ Argon2id, KHÔNG bcrypt · ⚠️ hai câu chưa chốt, hỏi PO trước khi mở change (12/09): ① credential sandbox cấp lúc nào (đề xuất: khi ứng dụng được duyệt) · ② UAT và PRODUCTION chung hay riêng bộ credential thật (AD-6 chỉ tách sandbox/thật) |
M:E-005/2.3 · M:E-005/1.1 |
E-005/1.5 Khai bảng đơn khai ứng dụng |
admin-be | 6 | cap/schema-migration · ⛔ vật mang của E-005/1.2 · AD-14: bảng portal-be GHI vẫn do admin-be KHAI · ⚠️ khác bảng Ứng dụng chính thức ở 1.1 |
M:E-001/1.1 · TK:E-005/1.2 |
E-005/1.2 Đơn khai ứng dụng |
portal-be | 7 | cap/tpp-application-request · ghi bảng đơn, ⛔ không ghi bản chính thức · chặn tới khi 1.5 xong · ⛔ PO chốt 11/09 tối (P6 BÁC): đơn chỉ lập được khi tổ chức của người dùng ĐÃ ĐƯỢC DUYỆT — đơn gắn to_chuc_id, ⛔ không gắn người/hồ sơ rồi nối sau; người chưa có tổ chức duyệt gọi tạo đơn nhận 403 theo phong bì AD-16 |
M:E-005/1.5 · M:E-004/2.8 · M:E-004/2.5 |
E-005/2.5 Nộp yêu cầu đăng ký |
portal-be | 8 | cap/api-registration-request · đọc danh mục đã xuất bản · ghi REGISTRATION do 2.1 khai — ⚠️ xác nhận bằng số đo trước khi mở change |
M:E-005/2.1 · M:E-004/2.8 · ⚠️THIẾU VẬT MANG: GRANT danh mục+sản phẩm |
E-005/3.4 Khai bảng đơn yêu cầu xoay khoá |
admin-be | 9 | cap/schema-migration · ⛔ vật mang của E-005/3.3 · AD-14 · ⚠️ khác bảng credential ở 3.1 |
M:E-001/1.1 · TK:E-005/3.3 |
E-005/3.3 Yêu cầu xoay khoá |
portal-be | 10 | cap/tpp-self-service · tạo đơn, không tự xoay · chặn tới khi 3.4 xong |
M:E-005/3.4 · M:E-005/3.1 · ⚠️THIẾU VẬT MANG: GRANT credential |
E-005/1.3 Màn Ứng dụng phía ngân hàng |
admin-fe | 11 | cap/admin-console-ui |
M:E-005/1.1 · M:E-001/5.5 |
E-005/2.4 Màn Yêu cầu đăng ký |
admin-fe | 12 | cap/admin-console-ui · ⛔ nút Phê duyệt vô hiệu kèm giải thích ngay khi mở màn |
M:E-005/2.2 · M:E-001/5.5 |
E-005/1.4 Màn Ứng dụng phía bên thứ ba |
portal-fe | 13 | cap/tpp-portal-ui · chỉ thấy của tổ chức mình, ràng buộc theo hàng · PO chốt 11/09 tối (P6 BÁC): người chưa có tổ chức duyệt thấy màn rỗng có hướng dẫn («tổ chức đang chờ thẩm định») đọc từ 1.2 trả rỗng — ⛔ không tự khai giả, ⛔ không nút Tạo · PO chốt 12/09: MỞ RỘNG AC — gồm cả Chi tiết ứng dụng (màn riêng AppDetailScreen, UX-DR13) và modal Tạo ứng dụng (CreateAppModal, nộp đơn qua 1.2); gói CCS lượt 12/09 |
M:E-005/1.2 · M:E-001/5.6 |
E-005/2.6 Màn đăng ký sản phẩm |
portal-fe | 14 | cap/tpp-portal-ui · nhắc hiệu lực chỉ ở một môi trường · PO chốt 12/09: SỬA AC — wizard năm bước (thêm bước 1 Chọn ứng dụng, đúng bộ ba FR-095) và ApiList danh sách API trong sản phẩm (nhãn nhóm TT64, cảnh báo PIS/EWLTS) ghép vào story này; gói CCS lượt 12/09 |
M:E-005/2.5 · M:E-001/5.6 · ⚠️THIẾU VẬT MANG: GRANT danh mục+sản phẩm (S2) |
E-005/3.2 Màn khoá truy cập |
portal-fe | 15 | cap/tpp-portal-ui · ⛔ màn rủi ro cao nhất, secret hiện một lần |
M:E-005/3.1 · M:E-001/5.6 |
E-005/2.8 Đọc đặc tả API theo đăng ký |
portal-be | 16 | cap/api-registration-request · PO duyệt 12/09 · trả đặc tả đã xuất bản của API thuộc sản phẩm ứng dụng đã đăng ký + trạng thái mở từng môi trường (Sandbox: ứng dụng hoạt động + đã nộp đăng ký, không cần duyệt; UAT/PRODUCTION: đăng ký đúng môi trường đã kích hoạt) |
M:E-002/1.8 · M:E-005/2.5 · ⚠️THIẾU VẬT MANG: GRANT danh mục+sản phẩm (S2) |
E-005/2.7 Màn Chi tiết API |
portal-fe | 17 | cap/tpp-portal-ui · PO duyệt 12/09 · sáu khối của gói (ApiDetailScreen); khối Gọi thử là E-009/1.4, ⛔ không thuộc story này |
M:E-005/2.8 · M:E-005/1.4 · M:E-005/2.6 |
| Chiều | Nhãn trên màn | Giá trị | Điều khiển | |
| --- | --- | --- | --- | |
của Ứng dụng (FR-090) |
Giai đoạn triển khai | DEVELOPMENT · SANDBOX · PRODUCTION |
chỉ mô tả + lọc | |
của Đăng ký (FR-095/FR-099) |
Môi trường cấp quyền | UAT · PRODUCTION |
quyền gọi API thật, mỗi môi trường một đăng ký | |
| Sandbox | — | không thuộc chiều nào | mở cho mọi ứng dụng đang hoạt động, không cần đăng ký được duyệt — scope = sản phẩm ứng dụng đã nộp đăng ký (kể cả chờ duyệt; lớp chặn 2.2 vẫn áp lúc nộp nên AD-21 không hở) (Điều 9 · FR-106); credential sandbox tách theo AD-6 |
Bổ sung 12/09/2026 (PO duyệt) — mở rộng 1.4, sửa 2.6 theo gói CCS lượt 2 (design/ @ 5ed1cc6).
Gói vẽ luồng Ứng dụng → Chi tiết ứng dụng → Đăng ký sản phẩm → Danh sách API → Chi tiết API → Gọi thử.
PO chốt 12/09 ba điều áp ngay, ⛔ không mở story mới cho ba điều này:
1.4gồm cả màn Chi tiết ứng dụng (AppDetailScreen, màn riêng theoUX-DR13, có card «Sản phẩm đã đăng ký» đọcREGISTRATIONcủa tổ chức mình — hàng 11AD-20, vẫn ⚠️THIẾU VẬT MANG S1–S3) và modal Tạo ứng dụng (CreateAppModal, nộp đơn qua1.2; Redirect URI bắt buộc — mục 3.1 Thông tư 64 đòiredirect_urikhớp giá trị đã khai). Nhánh «tổ chức chưa duyệt → màn rỗng, không nút Tạo» gói chưa vẽ — đã vào bản kê gửi CCS 12/09; lànportal-fedựng theo AC, ⛔ không chờ hình.2.6wizard năm bước (Chọn ứng dụng → Chọn sản phẩm → Chọn gói → Môi trường → Xác nhận); vào từ Chi tiết ứng dụng thì mở ở bước 2.ApiList(danh sách API trong sản phẩm: method · đường dẫn · subdomain · nhãn nhóm TT64 · cảnh báo khoản 3 Điều 5 khi cóPIS/EWLTS) là một phần của2.6, dùng ở bước chọn sản phẩm, bước xác nhận và trong Chi tiết ứng dụng. Nó đọc danh mục đã xuất bản qua2.5⇒2.6kế thừa ⚠️THIẾU VẬT MANGGRANTdanh mục+sản phẩm (S2).- Gói nêu «mâu thuẫn»: cột Môi trường của ứng dụng chọi bước chọn môi trường của đăng ký. ⛔ Không phải
mâu thuẫn —
FR-090PO chốt 05/09 giữ hai chiều (môi trường triển khai của ứng dụng ≠ môi trường được cấp quyền của đăng ký). Chỗ hở thật là tập giá trị của mỗi chiều (câu hỏi mở PRD) — đang trình PO.
Bổ sung 12/09/2026 chiều (PO duyệt từng dòng) — 2.7 · 2.8 và hai chiều môi trường. PO mở Chi tiết API
và Gọi thử vào GĐ1 (PRD §2 phi mục tiêu ghi PO SỬA 12/09). Chi tiết API = 2.8 (portal-be đọc đặc tả từ
E-002/1.8) + 2.7 (portal-fe); Gọi thử ở E-009 (đã chia story cùng ngày). Thứ tự ship: UU-TIEN-GD1 §B
B6–B7, sau B3–B5. Hai chiều môi trường chốt theo số đo hệ cũ (docs/mo-hinh-tu-portal-cu.md §3.2):
| Chiều | Nhãn trên màn | Giá trị | Điều khiển |
|---|---|---|---|
của Ứng dụng (FR-090) |
Giai đoạn triển khai | DEVELOPMENT · SANDBOX · PRODUCTION |
chỉ mô tả + lọc |
của Đăng ký (FR-095/FR-099) |
Môi trường cấp quyền | UAT · PRODUCTION |
quyền gọi API thật, mỗi môi trường một đăng ký |
| Sandbox | — | không thuộc chiều nào | mở cho mọi ứng dụng đang hoạt động, không cần đăng ký được duyệt — scope = sản phẩm ứng dụng đã nộp đăng ký (kể cả chờ duyệt; lớp chặn 2.2 vẫn áp lúc nộp nên AD-21 không hở) (Điều 9 · FR-106); credential sandbox tách theo AD-6 |
⇒ 2.6 bước Môi trường chỉ còn UAT · PRODUCTION; gói vẽ ba giá trị là lệch có chủ ý, làn portal-fe ghi
NGUON.md. Câu hỏi mở PRD «tập giá trị mỗi chiều» đóng bằng bảng này.
Bổ sung 08/09/2026 (PO duyệt) — E-005/1.5 và 3.4, hai cặp thiếu cùng dạng E-004/1.6.
Phát hiện khi soát 11 epic ngày 08/09. AD-14 buộc mọi bảng do admin-be khai, kể cả bảng
portal-be ghi; nhưng hai story portal-be dưới đây ghi bảng mà không story nào khai:
1.2ghi «bảng đơn, không ghi bản chính thức» — mà1.1chỉ khai Ứng dụng chính thức. Hai bảng khác nhau; AC nói thẳng điều đó và vẫn không ai bắt được.3.3«tạo đơn yêu cầu xoay khoá» — mà3.1khai credential, không khai bảng đơn.
⚠️ 2.5 không nằm trong nhóm này: nó ghi REGISTRATION, bảng 2.1 đã khai. Ghi ra vì ba story
trông giống nhau («ghi bảng đơn») nhưng chỉ hai cái thiếu nhà — ⛔ đừng mở story thứ ba cho đủ bộ.
⚠️ Ma trận quyền portal_app là một nửa của mỗi story khai bảng, không phải phần phụ: portal-be
có cổng khởi động đo quyền theo cột, thiếu GRANT đúng thì nó từ chối khởi động và triệu
chứng trông như lỗi của portal-be.
2.2 phải xong trước 2.3. Duyệt mà chưa có lớp chặn là mở đúng cái cửa mà AD-21 dựng
để đóng.
3.2 là story cần soi kỹ nhất trong cả epic: một lần đóng nhầm màn là một vòng phê duyệt nữa.
⚠️ THIẾU VẬT MANG — bốn hàng ma trận AD-20 chưa có chủ (đo 08/09/2026). Khác với hai cặp
1.5/3.4 ở trên (thiếu bảng), bốn chỗ này thiếu câu GRANT và vế hợp đồng:
2.5 đọc danh mục+sản phẩm đã xuất bản (hàng 8) · 3.3 đọc CREDENTIAL (hàng 2) · 1.4 đọc
APPLICATION chỉ của tổ chức mình (hàng 9) · REGISTRATION chỉ của tổ chức mình (hàng 11).
⛔ Và cơ chế ràng buộc theo HÀNG chưa có nhà ở tầng dữ liệu: quét 82 story, cụm «ràng buộc
theo hàng» xuất hiện đúng một lần — ở 1.4, một story portal-fe. Trục T_iso cấm đúng điều
đó («ở tầng dữ liệu, không phải lọc ở giao diện»). ⛔ Đề nghị S1, S2, S3 đang chờ
PO duyệt, xem docs/ra-soat-kien-truc-2026-09-08.md.
Các nhóm việc (feature)¶
Hệ Admin
- Ứng dụng — 5 story · 🟡 còn 12 mốc
- Yêu cầu đăng ký sản phẩm — 8 story · 🟡 còn 19 mốc
- Credential — 4 story · 🟡 còn 9 mốc
Hệ Portal
- Ứng dụng — 5 story · 🟡 còn 12 mốc
- Yêu cầu đăng ký sản phẩm — 8 story · 🟡 còn 19 mốc
- Credential — 4 story · 🟡 còn 9 mốc