# QA Report - Redmine #4420 (dev)

- Generated: 2026-10-30T16:33:36.998441+09:00
- Redmine: https://itsm.bix.bz/issues/4420
- QA Redmine: https://itsm.bix.bz/issues/4465
- Subject: 가맹점 휴일 이체 중복 항목 삭제·기존 설정 유지
- Workflow Status: 실제 개발계 UI 검증 완료 · 원복 확인
- Status: FAIL
- Result JSON: artifacts/result-summary.json
- Roles: ADMIN
- Checklist Total: 11
- Checklist Passed: 10
- Checklist Failed: 1
- Checklist Blocked: 0
- Checklist Skipped: 0

## 결과

**10건 통과·실패 1건, 확인불가·제외 0건.** 모바일 390px에서 수정 버튼 오른쪽28px 잘림을 A10 실패로 기록했습니다. 중복 제거·설정 저장·원복 등 나머지10건은 통과했습니다. 개발계 실제 Chrome에서 TypeScript `.spec.ts` + Playwright로 실행했습니다. 가맹점 일반정보의 중복 항목은 없고, 정산정보의 휴일 지갑 이체는 한 번 표시됩니다. 비고만 저장해도 기존 값이 유지되며, 휴일 설정 양방향 저장·새로고침·재진입이 통과했습니다.

요청자·QA 담당·완료 알림 수신자는 모두 김경주입니다. ADMIN 단독으로 실행했으며 김경주_법인·김경주_영업·가맹점은 대상 데이터입니다. 역할별 별도 로그인 QA는 수행 범위에 포함하지 않았습니다.

## 대상과 원복

정확히 `김경주_가맹`인 레코드는 없었습니다. 접두어 검색 43개 중 사용자가 선택한 **김경주_가맹_D+1(1일 후), BP100611**만 임시 수정했습니다. 최초 휴일 설정은 미사용(false), 비고는 비어 있음(null)이었습니다.

비고 단독 저장, 사용→미사용, 미사용→사용을 각각 확인한 뒤 `finally`에서 최초 값으로 복구했습니다. 마지막에 새로고침·재진입해 휴일 값과 비고, 다른 설정까지 최초 상세 데이터와 대조했습니다. 지갑 잔고와 수정 시각은 설정 원복 비교에서 제외했습니다. 원본 상세와 저장 요청은 비공개로 보관하며 공개 자료에는 개인·인증 정보를 담지 않았습니다.

김경주_법인(BP100559)과 김경주_영업(BP100564)은 기존 휴일 항목과 미사용 값이 새로고침 뒤에도 유지됐습니다. 두 데이터는 저장하지 않았습니다. 신규 가맹점 생성, 권한·공유 프리셋 변경, 실제 금융 실행은 하지 않았습니다.

## 배포 근거와 실행 범위

인계된 수정 커밋은 `70d6224592b4d27f8a8f6a808f161fae0d0e1251`, 성공 배포 커밋은 `c07eed78be4aaa864c5a74ddd7bd366a0ebf37c1`입니다. [제품 배포 파이프라인 6278](https://gitlab.bix.bz/epoch/bigspay-front-admin/-/pipelines/6278)은 인계 시 확인된 근거이며, 본 판정은 실제 개발계 화면·저장·재조회 결과를 기준으로 했습니다. 제품 코드는 수정하지 않았습니다.

PC 너비 1440px와 모바일 너비 390px에서 수정 모달의 휴일 입력칸 좌우 경계와 취소·수정 버튼의 비중첩, 모달 개폐를 확인했습니다. 모바일 수정 버튼의 오른쪽 경계는418px로 390px 화면을 벗어났습니다. 공통 모달 하단 버튼 배치 영역의 문제이며 이번 변경으로 새로 발생한 회귀인지는 확인하지 않았습니다. 실제 휴대폰 OS나 다른 브라우저 검증을 뜻하지 않습니다.

## 실행 및 재현

```sh
QA4420_AUTH_ROLE=QA4373_ADMIN QA4420_ALLOW_VENDOR_MUTATION=1 npx tsx qa/issues/4420/dev/run.ts
```

`QA4420_AUTH_ROLE`은 저장된 ADMIN 인증 설정의 별칭입니다. 실행 전용 환경에서만 ADMIN으로 연결하며 전역 기본 계정은 덮어쓰지 않습니다. 하네스 `qa:run`이 실행 직전 재로그인하고, 테스트는 실제 인증 역할 ADMIN도 확인합니다. 기본 계정을 사용할 때는 해당 변수를 생략합니다.

목록 최초 로딩·검색 완료 대기와 선택칸 접근 이름을 보완한 뒤 전체11개 실행 후 캡처 검토에서 모바일 버튼 잘림을 발견했습니다. 버튼 화면 경계 검사를 추가한 실제 UI 재실행으로 A10 실패를 재현하고 기존 A10 판정을 대체했습니다. 최종 결과는 나머지10개 통과와 이 A10 재현을 합친11개입니다. 이전 자동화 진단의 실패를 제품 실패나 최종 결과에 합산하지 않았습니다. 응답 모의 처리 없이 실제 UI 클릭으로 저장했고, 승인 대상 외 변경 요청은 차단했습니다.

## Execution Summary

- Passed: 10
- Failed: 1
- Skipped: 0
- Blocked: 0
- Flaky: 0
- Duration: 216627ms

## 항목별 결과와 증거

| 항목 | 역할 | 결과 | 수행·기대 결과 | 실제 결과 | 증거 |
| --- | --- | --- | --- | --- | --- |
| A01 | ADMIN | PASS | 가맹점 수정 일반정보에서 중복 항목 존재 여부 확인. 일반정보의 휴일 이체 사용 여부가 없어야 함 | 일반정보에서 해당 항목 0개 확인 | [화면 1](artifacts/screenshots/01-A01-general.png) / [검증 값](artifacts/files/verification-details.json) |
| A02 | ADMIN | PASS | 정산정보의 휴일 지갑 이체 입력칸 수 확인. 정산정보에 휴일 지갑 이체가 한 번만 있어야 함 | 정산정보 선택칸·연결 입력값 각각 1개 확인 | [화면 1](artifacts/screenshots/02-A02-settlement.png) / [검증 값](artifacts/files/verification-details.json) |
| A03 | ADMIN | PASS | 최초 상세 값과 화면을 대조한 뒤 새로고침·재진입. 기존 미사용 값이 유지되어야 함 | 최초 값과 재진입 값 모두 미사용(false) 일치 | [화면 1](artifacts/screenshots/03-A03-reentry.png) / [검증 값](artifacts/files/verification-details.json) |
| A04 | ADMIN | PASS | 휴일 설정을 건드리지 않고 비고만 임시 저장·새로고침·재진입. 비고만 바뀌며 휴일 설정과 다른 설정은 유지 | 임시 비고 저장·재조회, 휴일 미사용과 다른 설정 유지 확인. finally 원복 확인 | [화면 1](artifacts/screenshots/04-A04-note-only.png) / [검증 값](artifacts/files/verification-details.json) |
| A05 | ADMIN | PASS | 사용 상태로 준비한 뒤 미사용으로 변경·저장·새로고침·재진입. 사용→미사용 변경이 유지되어야 함 | 사용(true) 저장을 확인한 뒤 미사용(false) 저장·재진입 일치. finally 원복 확인 | [화면 1](artifacts/screenshots/05-A05-disabled.png) / [검증 값](artifacts/files/verification-details.json) |
| A06 | ADMIN | PASS | 미사용에서 사용으로 변경·저장·새로고침·재진입. 미사용→사용 변경이 유지되어야 함 | 사용(true) 저장·재진입 값 일치. finally 원복 확인 | [화면 1](artifacts/screenshots/06-A06-enabled.png) / [검증 값](artifacts/files/verification-details.json) |
| A07 | ADMIN | PASS | 생성 모달에서 항목 수·사용/미사용 선택 후 취소. 일반정보 중복 없음·정산정보 1개, 선택 가능 | 중복 항목 0개·정산 선택칸 1개와 양방향 선택 확인. 저장·신규 생성 없이 취소 | [화면 1](artifacts/screenshots/07-A07-create-no-save.png) / [검증 값](artifacts/files/verification-details.json) |
| A08 | ADMIN | PASS | 김경주_법인 수정 화면·휴일 항목·새로고침 재진입 비교. 기존 법인 휴일 지갑 이체와 설정값 유지 | 항목 표시 유지, 최초·재진입 미사용(false) 일치. 법인 저장 없음 | [화면 1](artifacts/screenshots/08-A08-reentry.png) / [검증 값](artifacts/files/verification-details.json) |
| A09 | ADMIN | PASS | 김경주_영업 수정 화면·휴일 항목·새로고침 재진입 비교. 기존 영업점 휴일 이체 사용 여부와 설정값 유지 | 항목 표시 유지, 최초·재진입 미사용(false) 일치. 영업점 저장 없음 | [화면 1](artifacts/screenshots/09-A09-reentry.png) / [검증 값](artifacts/files/verification-details.json) |
| A10 | ADMIN | FAIL | 1440px·390px 너비에서 가맹점 수정 모달·입력·버튼 배치 및 취소 확인. 휴일 입력칸·취소·수정 버튼이 화면 안에 있고 겹침·잘림 없이 모달 개폐 정상 | PC 1440px에서는 정상. 모바일 390px에서 수정 버튼 x=354px·폭64px·오른쪽 끝418px로 화면 밖28px 잘림 재현. 휴일 입력칸·취소·모달 개폐는 정상 | [화면 1](artifacts/screenshots/10-A10-width-1440.png) / [화면 2](artifacts/screenshots/11-A10-width-390.png) / [검증 값](artifacts/files/verification-details.json) / [화면 재현 기록](https://pub-2726d2ecd69d4e12a4515edca8540068.r2.dev/qa/issues/4420/dev/artifacts/traces/01-trace.zip?v=787ae6a36dc236f8f0b37fc6e2e4f1adeb34eb01) |
| A11 | ADMIN | PASS | 최종 상세 재조회·화면과 최초 전체 설정 대조. 휴일 값·비고·다른 설정 모두 원래 값 복구 | 휴일 미사용(false)·빈 비고(null)와 다른 설정을 최초 상태와 대조해 복구 일치. 지갑 잔고·수정 시각은 비교 제외 | [화면 1](artifacts/screenshots/12-A11-restored.png) / [검증 값](artifacts/files/verification-details.json) |

## 모바일 문제 재현

1. ADMIN으로 가맹점 관리에서 BP100611을 검색해 수정 모달을 엽니다.
2. 브라우저 너비를390px로 설정합니다.
3. 하단 수정 버튼이 오른쪽 밖으로 잘리는지 확인합니다. 실제 측정: x=354px, 폭64px, 오른쪽418px.
4. PC1440px에서는 정상입니다. 저장 없이 취소로 닫을 수 있습니다.

기능 변경 요청10건은 통과했지만 요청된 모바일 배치 검사1건이 실패했습니다. 제품 코드는 수정하지 않았습니다.

## 요청 체크리스트

1. A01 가맹점 수정 일반정보의 휴일 이체 사용 여부 미표시
2. A02 정산정보 휴일 지갑 이체 정확히 한 번 표시
3. A03 기존 설정값·새로고침 재진입 유지
4. A04 비고만 저장해도 휴일 지갑 이체 유지
5. A05 사용→미사용 저장·재진입 유지
6. A06 미사용→사용 저장·재진입 유지
7. A07 생성 모달 중복 제거·정산 선택 가능(신규 생성 없음)
8. A08 김경주_법인 휴일 지갑 이체 기존 설정 유지
9. A09 김경주_영업 휴일 이체 사용 여부 기존 설정 유지
10. A10 PC·모바일 너비 수정 모달 배치·개폐
11. A11 가맹점 설정·비고 원복·새로고침 재진입 확인

## 완료 절차

검증 명령·PR·공개 배포를 확인하고 QA 하위 이슈를 종료합니다. 원본 #4420은 임의 완료하지 않습니다. 기존 개발계 QA방에 김경주만 멘션하여 짧은 최종 결과와 공개 보고서 링크를 전송합니다.
