{
  "issueId": "4149",
  "environment": "dev",
  "scenario": "balance-adjust-permission",
  "source": "Redmine #4149 QA 요청",
  "sourceText": "지급계좌·법인계좌·지갑 잔고 추가/차감 권한을 ADMIN USE_SYSTEM과 TA ta 프리셋에서 조합별로 검증하고, ADMIN/TA/CO 역할 범위와 잔고 조정 입력·취소·성공·영속성·권한 회수 및 최종 원복을 확인한다.",
  "scope": "개발계 ADMIN, TA, CO. 권한 변경은 ADMIN 세션의 API로만 수행하며 CO 프리셋은 읽기/화면 확인만 한다. 잔액은 1원 추가 후 1원 차감하여 순변경 0원으로 복구한다.",
  "roles": ["ADMIN", "TA", "CO"],
  "subjectAccounts": [
    { "role": "ADMIN", "label": "요청 지정 ADMIN 계정", "envRole": "ADMIN" },
    { "role": "TA", "label": "요청 지정 TA 계정", "envRole": "TA" },
    { "role": "CO", "label": "요청 지정 CO 계정", "envRole": "CO" }
  ],
  "checklist": [
    "USE_SYSTEM과 ta 프리셋의 변경 전 대상 권한 상태를 기록한다",
    "ADMIN에서 권한 없음·개별 1개·2개 조합·전체 권한별로 해당 잔고 조정만 노출되는지 확인한다",
    "TA에서 권한 없음·개별 1개·2개 조합·전체 권한별로 해당 잔고 조정만 노출되는지 확인한다",
    "ADMIN이 SYSTEM/테넌트 지급계좌·법인계좌·법인/영업점/가맹점 지갑을 추가·차감할 수 있는지 확인한다",
    "TA가 자기 테넌트 지급계좌·법인계좌·지갑만 조정 가능하고 허용되지 않은 범위는 조정할 수 없는지 확인한다",
    "CO 프리셋을 변경하지 않고 법인계좌관리와 지갑관리의 잔고 조정 버튼이 보이지 않는지 확인한다",
    "잔고 조정 창의 양수/음수 문구·예상 잔액·0원/사유 검증·확인 취소·성공·새로고침/재로그인 영속성을 확인한다",
    "권한 회수 후 재로그인 시 버튼 미노출과 USE_SYSTEM·ta 프리셋 최종 원복을 확인한다"
  ],
  "setupSteps": [
    {
      "name": "USE_SYSTEM·ta 대상 권한 상태 기록 및 임시 토글",
      "kind": "permission-toggle",
      "role": "ADMIN",
      "application": "admin",
      "targetRoles": ["ADMIN", "TA"],
      "description": "3개 잔고 조정 권한의 원래 permissionIds를 기록하고 8개 조합을 순회한다.",
      "spec": "balance-adjust-permission.spec.ts",
      "required": true,
      "mutation": "temporary",
      "guardEnv": "QA_4149_ALLOW_PERMISSION_MUTATION",
      "navigation": { "name": "사용자 프리셋 관리", "path": "/admin/member-preset" },
      "restore": { "required": true, "description": "USE_SYSTEM과 ta의 전체 permissionIds를 시작 상태와 동일하게 복구하고 재조회한다." }
    },
    {
      "name": "잔액 1원 추가 후 1원 차감",
      "kind": "data-update",
      "role": "ADMIN",
      "application": "admin",
      "targetRoles": ["ADMIN", "TA"],
      "description": "성공 검증 대상 잔액을 +1/-1로 상쇄해 최종 잔액을 시작 값으로 복구한다.",
      "required": true,
      "mutation": "temporary",
      "guardEnv": "QA_4149_ALLOW_BALANCE_MUTATION",
      "restore": { "required": true, "description": "각 대상의 최종 잔액이 시작 잔액과 같아야 한다." }
    }
  ],
  "pages": [
    { "name": "사용자 프리셋 관리", "application": "admin", "path": "/admin/member-preset", "tenantParam": "tenantId", "roles": ["ADMIN"] },
    { "name": "시스템 운영계좌관리", "application": "admin", "path": "/admin/master-accounting/system-disbursement-accounts", "tenantParam": "tenantId", "roles": ["ADMIN"] },
    { "name": "운영계좌 관리", "application": "admin", "path": "/master-accounting/disbursement-accounts", "tenantParam": "tenantId", "roles": ["ADMIN", "TA"] },
    { "name": "법인계좌관리", "application": "admin", "path": "/master-accounting/corporation-accounts", "tenantParam": "tenantId", "roles": ["ADMIN", "TA", "CO"] },
    { "name": "지갑관리", "application": "admin", "path": "/master-accounting/wallet-management", "tenantParam": "tenantId", "roles": ["ADMIN", "TA", "CO"] }
  ]
}
