{
  "issueId": "4107",
  "environment": "dev",
  "scenario": "daily-collection-cancellation",
  "source": "Redmine #4107 + 송인준 TA 일수금 취소 추가 재QA 요청 2026-09-08",
  "sourceText": "송인준님의 QA 요청에 따라 비스킷 링크 개발계 TA 계정으로 정산관리 > 수납관리에서 당월·진행중 상태의 박재민_가맹 일수금 취소 기능을 재검증합니다. Redmine: https://itsm.bix.bz/issues/4107",
  "scope": "기본 TA 계정 jjmta01을 새로 로그인한다. ADMIN이 박재민_가맹(BP100008)에 재QA 전용 진행중 일수금을 생성하고, TA가 수납관리에서 당월·진행중 조건으로 조회해 취소한 뒤 취소 상태, 금액, 일시, 잔여 금액과 새로고침 후 유지 여부를 확인한다.",
  "checklist": [
    "TA: 수납관리에서 진행중 일수금을 취소하면 취소 상태, 취소 금액·일시, 잔여 금액 0원이 반영되고 재조회 후에도 유지되는지 확인"
  ],
  "roles": [
    "TA"
  ],
  "routeCandidates": "../../../../qa-results/issues/4107/dev/route-candidates.json",
  "subjectAccounts": [
    { "role": "TA", "label": "기본 TA 계정 jjmta01", "envRole": "TA" }
  ],
  "setupSteps": [
    {
      "name": "TA 재로그인 및 대상 메뉴 접근",
      "kind": "state-verify",
      "role": "ADMIN",
      "application": "admin",
      "targetRoles": ["TA"],
      "description": "TA 계정으로 다시 로그인하고 정산관리 > 수납관리 화면에서 당월·진행중 조건으로 박재민_가맹(BP100008)을 조회한다.",
      "required": true,
      "mutation": "none"
    },
    {
      "name": "재QA 전용 일수금 생성 및 TA 취소",
      "kind": "data-create",
      "role": "ADMIN",
      "application": "admin",
      "targetRoles": ["TA"],
      "description": "ADMIN이 박재민_가맹에 재QA 전용 일수금을 생성한 뒤 TA 수납관리 화면에서 취소한다.",
      "required": true,
      "mutation": "persistent",
      "guardEnv": "QA_4107_ALLOW_INSTALLMENT_MUTATION"
    }
  ],
  "pages": [
    {
      "name": "가맹점 관리",
      "application": "admin",
      "path": "/business/vendor-manage",
      "tenantParam": "tenantId",
      "roles": ["TA"],
      "searchButtonSelector": "button:has-text('검색')",
      "filters": [
        {
          "name": "가맹점",
          "type": "autocomplete",
          "value": "박재민_가맹",
          "queryParam": "vendorIds"
        }
      ]
    },
    {
      "name": "수납관리",
      "application": "admin",
      "path": "/master-accounting/installment-manage",
      "tenantParam": "tenantId",
      "roles": ["TA"],
      "searchButtonSelector": "button:has-text('검색')",
      "filters": [
        {
          "name": "조회 시작일",
          "type": "date",
          "value": "2026-09-01",
          "queryParam": "from"
        },
        {
          "name": "조회 종료일",
          "type": "date",
          "value": "2026-09-30",
          "queryParam": "to"
        },
        {
          "name": "상태",
          "type": "select",
          "value": "진행중",
          "queryParam": "status"
        }
      ],
      "recordsSelector": "[role='row'], tr",
      "dataRequestUrlPattern": "/api/v1/installments"
    }
  ]
}
