Xác nhận BNG Booking Platform sẵn sàng cho đối tác tích hợp đầu tiên. Mỗi mục có PASS / FAIL kèm bằng chứng.
Kiểm chứng bằng dry-run thật:PILOT-DRY-RUN.md. Friction:PILOT-FRICTION-LOG.md.
Ngày kiểm: 2026-07-06. Không thay đổi code/schema/deploy trong sprint này.
| # | Mục | Trạng thái | Bằng chứng / Ghi chú |
|---|---|---|---|
| 1 | Sandbox sẵn sàng | ✅ PASS* | Dry-run local: Availability→Booking→Confirm→Cancel chạy trọn (exit 0). Staging up (/health=200). *Điều kiện: partner phải được BNG allowlist IP để tới /api/booking/* trên staging (xem #12 + Friction F-1). |
| 2 | API Key provisioning | ✅ PASS | ops issue-key --deliver cấp key sandbox active, kiểm chứng trong dry-run (key auth thành công). Cấp thủ công có kiểm soát (một lần, kênh bí mật). |
| 3 | Domain | ✅ PASS | staging-api.booking.bngagency.vn phân giải, phục vụ HTTPS. |
| 4 | HTTPS | ✅ PASS | curl https://staging-api.booking.bngagency.vn/health → HTTP 200 (TLS OK). |
| 5 | OpenAPI | ✅ PASS | docs/integration/openapi.yaml parse hợp lệ, 0 dangling ref, 0 orphan; đã bổ sung TENANT_INACTIVE (đồng bộ implementation). |
| 6 | Postman | ✅ PASS | bng-booking.postman_collection.json + .postman_environment.json — JSON hợp lệ, mọi path ⊆ OpenAPI, environment không secret. |
| 7 | Examples | ✅ PASS | docs/integration/examples/ (curl/JS/Python). curl/flow.sh chạy end-to-end trong dry-run (200/201/200/200). |
| 8 | Error Catalog | ✅ PASS | docs/integration/API-ERROR-CATALOG.md — đủ mã hiện hành gồm TENANT_INACTIVE (bổ sung trong sprint này). |
| 9 | Operations Guide | ✅ PASS | docs/operations/PARTNER-OPERATIONS.md + TENANT-OPERATIONS.md (cấp/rotate/suspend/reactivate/revoke, xử lý nghi lộ key). |
| 10 | Rollback | ✅ PASS | Access rollback kiểm chứng: suspend/revoke Partner (Beta-4) + suspend/archive Tenant (Beta-5) chặn request tức thì, reactivate khôi phục. Deployment rollback: có runbook (ngoài phạm vi sprint). |
| 11 | Known Limitations | ✅ PASS | Đã tổng hợp: rate-limit chưa cưỡng chế; staging IP-allowlist gate; cấp key thủ công; suspended tenant→403. Xem cuối file + Friction Log. |
| 12 | Sandbox access cho partner ngoài | ⚠️ CONDITIONAL | /api/booking/* trả 403 nginx cho IP chưa allowlist (đã kiểm chứng live). Cần BNG allowlist IP egress của partner (bước onboarding, đã tài liệu hoá trong Integration Guide §2.3). Không self-serve. |
\* PASS với điều kiện onboarding do BNG thực hiện (allowlist IP + cấp key). Đây là pilot BNG-facilitated, không phải self-serve mở.
/api/booking/*.issue-key, giao một lần) — chưa self-serve.TENANT_INACTIVE / 401 UNAUTHENTICATED — trạng thái vận hành phía BNG, không retry.