{
  "issueId": "4085",
  "environment": "dev",
  "scenario": "url-search",
  "source": "local checklist",
  "sourceText": "#4085 DALQ 배송정보 개발계 QA\n\n대상 환경: dev\n대상 앱: admin, store\n대상 role: ADMIN, TA, CO, BO, VE\n조회기간: 2026-08-01 00:00:00 ~ 2026-08-31 23:59:59\n\n1. 전산에서 admin/ta/co/bo 계정으로 배송정보조회 메뉴 접근 가능 여부\n2. 목록의 결제일시, 거래번호, 주문번호, 승인번호, 가맹점 정보, 배송지, 상품, 배송상태 및 처리일시 표시\n3. 배송상태·거래번호·주문번호·MID·수령인·연락처·상품명·조회기간·조직 조건별 검색 결과와 건수\n4. admin은 선택 테넌트 전체, ta/co는 허용된 법인 하위 데이터만 조회되는지\n5. bo는 자기 영업점 하위 가맹점만 보이고 다른 영업점 가맹점은 조건으로 선택해도 조회되지 않는지\n6. bo 목록에서 법인 BP코드와 법인명이 표시되지 않는지\n7. 행 선택 시 이력 팝업이 열리고 주문접수부터 실제 순서대로 상태·택배사·송장번호·처리자·처리시각이 표시되는지\n8. 타 조직 배송정보 직접 접근 차단 및 목록 복귀 시 검색 조건·페이지 유지\n9. 현재 검색 조건으로 Excel 요청 후 기존 다운로드 진행 화면에서 파일 수신\n10. 다상품 거래가 상품별 행으로 생성되고 거래번호·승인번호·조직 BP코드·배송지·택배사·송장번호·처리일시가 화면 조건과 일치\n11. bo Excel에 법인 BP코드·법인명·MID 열이 없고 자기 하위 가맹점 데이터만 포함\n12. 스토어 거래내역에서 배송정보가 있는 DALQ 거래에 현재 배송상태와 배송 버튼이 표시되고 배송정보 없는 거래에는 잘못 표시되지 않는지\n13. 스토어 모달에서 수령인·연락처·주소·배송메모·상품정보와 주문·배송 시작·배송 완료 시각 표시\n14. ve가 주문접수 상태에서 택배사·송장번호만 먼저 저장할 수 있고 현재 정보와 변경 이력에 반영되는지\n15. ve가 배송중/배송완료를 단계와 관계없이 저장 가능하고 주문접수로 되돌리는 선택은 제공되지 않는지\n16. 택배사 또는 송장번호만 수정하면 상태 유지 및 이력 1건 추가\n17. 동일 상태·택배사·송장번호 재저장 시 중복 이력 미추가\n18. 택배사·송장번호 100자 초과 시 안내 후 저장 차단\n19. 변경 후 새로고침해도 현재 상태·택배사·송장번호·전체 이력 유지\n\n판정: 각 항목 PASS/FAIL/확인 불가. 실패 시 재현 절차·기대값·실제값·네트워크/API 오류 기록.",
  "scope": "개발계 비스킷링크 배송정보조회/이력/Excel 권한 범위와 비스킷페이 DALQ 배송정보 조회·변경·이력 유지 검증",
  "checklist": [
    "전산에서 admin/ta/co/bo 계정으로 배송정보조회 메뉴 접근 가능 여부",
    "목록의 결제일시, 거래번호, 주문번호, 승인번호, 가맹점 정보, 배송지, 상품, 배송상태 및 처리일시 표시",
    "배송상태·거래번호·주문번호·MID·수령인·연락처·상품명·조회기간·조직 조건별 검색 결과와 건수",
    "admin은 선택 테넌트 전체, ta/co는 허용된 법인 하위 데이터만 조회되는지",
    "bo는 자기 영업점 하위 가맹점만 보이고 다른 영업점 가맹점은 조건으로 선택해도 조회되지 않는지",
    "bo 목록에서 법인 BP코드와 법인명이 표시되지 않는지",
    "행 선택 시 이력 팝업이 열리고 주문접수부터 실제 순서대로 상태·택배사·송장번호·처리자·처리시각이 표시되는지",
    "타 조직 배송정보 직접 접근 차단 및 목록 복귀 시 검색 조건·페이지 유지",
    "현재 검색 조건으로 Excel 요청 후 기존 다운로드 진행 화면에서 파일 수신",
    "다상품 거래가 상품별 행으로 생성되고 거래번호·승인번호·조직 BP코드·배송지·택배사·송장번호·처리일시가 화면 조건과 일치",
    "bo Excel에 법인 BP코드·법인명·MID 열이 없고 자기 하위 가맹점 데이터만 포함",
    "스토어 거래내역에서 배송정보가 있는 DALQ 거래에 현재 배송상태와 배송 버튼이 표시되고 배송정보 없는 거래에는 잘못 표시되지 않는지",
    "스토어 모달에서 수령인·연락처·주소·배송메모·상품정보와 주문·배송 시작·배송 완료 시각 표시",
    "ve가 주문접수 상태에서 택배사·송장번호만 먼저 저장할 수 있고 현재 정보와 변경 이력에 반영되는지",
    "ve가 배송중/배송완료를 단계와 관계없이 저장 가능하고 주문접수로 되돌리는 선택은 제공되지 않는지",
    "택배사 또는 송장번호만 수정하면 상태 유지 및 이력 1건 추가",
    "동일 상태·택배사·송장번호 재저장 시 중복 이력 미추가",
    "택배사·송장번호 100자 초과 시 안내 후 저장 차단",
    "변경 후 새로고침해도 현재 상태·택배사·송장번호·전체 이력 유지"
  ],
  "roles": [
    "TA",
    "CO",
    "BO",
    "VE"
  ],
  "routeCandidates": "../../../../qa-results/issues/4085/dev/route-candidates.json",
  "setupSteps": [
    {
      "name": "배송정보 메뉴 권한과 사전 데이터 상태 확인",
      "kind": "state-verify",
      "role": "ADMIN",
      "application": "admin",
      "targetRoles": ["TA", "CO", "BO"],
      "description": "권한 변경 없이 각 계정의 메뉴 노출과 직접 URL 접근을 확인한다. 다른 법인·영업점, 배송중, 다상품 데이터가 없으면 해당 범위는 확인 불가로 기록한다.",
      "required": true,
      "mutation": "none",
      "navigation": {
        "name": "배송정보조회(달큐)",
        "path": "/payment-deliveries"
      }
    },
    {
      "name": "스토어 VE 로그인 사전 점검",
      "kind": "manual-precondition",
      "role": "VE",
      "application": "store",
      "targetRoles": ["VE"],
      "description": "제공된 VE 계정으로 개발계 스토어 로그인이 성공해야 배송 조회·변경 시나리오를 실행한다.",
      "required": true,
      "mutation": "none",
      "navigation": {
        "name": "로그인",
        "path": "/sign-in"
      }
    }
  ],
  "pages": [
    {
      "name": "배송정보조회",
      "application": "admin",
      "roles": ["TA", "CO", "BO"],
      "path": "/payment-deliveries",
      "tenantParam": "tenantId",
      "searchButtonSelector": "button:has-text('검색')",
      "excelDownloadButtonSelector": "text=배송정보 엑셀 다운로드",
      "excelQueuedSuccessText": ["엑셀 요청이 완료되었습니다."],
      "excelDocumentDownloadSelector": "text=다운로드",
      "excelResponseUrlPattern": "\\.xlsx(\\?|$)|cloudflarestorage.*excel",
      "filters": [
        {
          "name": "조회기간(시작)",
          "selector": "input[type='date']",
          "type": "textbox",
          "value": "2026-08-01",
          "queryParam": "from"
        },
        {
          "name": "조회기간(종료)",
          "selector": "input[type='date']",
          "type": "textbox",
          "value": "2026-08-31",
          "queryParam": "to"
        }
      ]
    },
    {
      "name": "비스킷페이 거래내역",
      "application": "store",
      "roles": ["VE"],
      "path": "/transactions",
      "tenantParam": "tenantId",
      "searchButtonSelector": "button:has-text('검색'), button:has-text('조회')",
      "filters": [
        {
          "name": "조회기간(시작)",
          "selector": "input[type='date']",
          "type": "textbox",
          "value": "2026-08-01",
          "queryParamCandidates": ["from"]
        }
      ]
    }
  ]
}
