인베트
경력근거: 오배송이나 파손 분쟁이 생기면 고객사는 해당 주문의 영상으로 사실을 확인하고 구매자에게 공유합니다
※ 실제 산출물이 아닌 AI 예측 시안입니다.
인베트는 Realpacking 을 오배송이나 파손 분쟁이 생기면 고객사가 해당 주문의 영상으로 사실을 확인하고 구매자에게 공유하는 서비스로 소개하고, 이 자리에 고객사용 웹관리자(CMS)를 문제 정의부터 배포·운영까지 맡깁니다. 주문 단위로 영상을 찍는 제품이라 분쟁 주문에 쓸 영상이 있는지는 촬영 기록과 주문번호, 출고 시각이 한 서비스 안에 있어야 계산되고, 그 판정이 서야 공유 기능의 가치가 섭니다. 이 포트폴리오는 영상 목록과 출고 기록을 주문 단위로 맞대는 Go 판정 서비스와, 문의 주문을 판정별로 보여주는 Next.js 화면을 보여줍니다. 물류 현장 운영이나 택배 분쟁 처리 실무에 대한 전문성은 주장하지 않습니다.
Realpacking 은 포장·출고 과정을 주문 단위로 영상 기록하고, 오배송이나 파손 분쟁이 생기면 고객사가 그 주문의 영상으로 사실을 확인해 구매자에게 공유하는 B2B SaaS 입니다. 이 포트폴리오는 분쟁 주문마다 보낼 수 있는 영상이 있는지를 웹관리자 안에서 먼저 알려 주는 기능 하나를 만듭니다.
주요업무는 고객사용 웹관리자(CMS)를 문제 정의부터 배포·운영까지 맡고, 화면(Next.js)부터 BFF, 백엔드 서비스(Go)까지 기능 단위로 개발하는 일입니다. 판정 규칙은 Go 서비스에, 판정 묶음 화면은 Next.js 에 두는 구성이 이 분담과 같습니다.
공고는 엣지 케이스와 실패 시나리오까지 고려해 작업을 마무리하고, AI 가 만든 코드와 결과를 검증 없이 쓰지 않는 사람을 원합니다. 출고 기록이 빈 주문, 한 영상에 여러 주문이 찍힌 경우, 길이 문턱과 딱 같은 영상을 Vitest 와 Go 테스트로 고정하는 작업이 여기에 닿습니다.
Realpacking 은 인베트가 운영하는 B2B SaaS 로, 고객사 출고 현장의 촬영 PC 가 포장 과정을 주문 단위로 영상에 담고 고객사는 웹관리자(CMS)에서 그 영상을 찾아 구매자용 전송페이지로 보냅니다. 이 기능은 웹관리자 안에서 고객사 CS 가 받은 문의 목록과 포장 영상 목록, 출고 기록을 받아 문의 주문마다 다섯 판정 중 하나를 붙입니다. 주문번호로 영상을 모으고, 출고 시각보다 뒤에 찍힌 영상을 걸러내고, 한 영상에 주문이 몇 건 연결됐는지 세며, 영상 길이를 같은 촬영 PC 영상의 중앙값과 견줍니다. CS 담당자는 구매자에게 답하기 전에 보낼 영상을 이 판정으로 고르고, 출고 현장 관리자는 같은 화면을 보고 영상이 빠지거나 짧은 촬영 PC 를 챙깁니다.
오배송·파손 문의가 들어오면 Realpacking 웹관리자(CMS)에서 그 주문의 영상을 찾아 구매자에게 보내는 고객사 CS 담당자와, 영상이 빠진 촬영 PC 를 챙기는 고객사 출고 현장 관리자 — 같은 화면을 보고 CS 는 답변을, 현장 관리자는 촬영 습관 교정을 맡는다
지금 CS 담당자는 문의가 오면 웹관리자에서 주문번호로 영상을 검색해 하나씩 열어 봅니다. 영상이 없거나, 반품 때 다시 찍은 영상만 있거나, 한 영상에 여러 주문이 찍혀 있다는 사실은 그 영상을 열어 본 뒤에야 드러나고, 그때는 이미 구매자에게 답할 시점입니다. 문의 목록이 들어오는 순간 주문번호·촬영 시각·출고 시각·영상 길이로 판정을 붙이면, CS 는 영상이 없는 주문부터 다른 증빙을 준비하고 현장 관리자는 같은 주에 촬영 습관을 고칩니다.
CS 담당자가 문의 목록, 포장 영상 목록, 출고 기록 세 파일을 올리면 문의 주문마다 다섯 판정 중 하나와 고른 영상·촬영 시각·출고 시각·촬영 PC 중앙값이 서는 웹관리자 화면입니다. 주문번호로 영상을 모아 출고 뒤 영상을 거르고, 한 영상의 주문 수를 세고, 촬영 PC 별 길이 중앙값을 내는 Go 판정 서비스가 이 주에 들어갑니다. 영상 파일 자체는 열지 않고 촬영 프로그램이 남기는 메타데이터만 봅니다.
출고 현장 관리자를 위해 촬영 PC 별로 영상 없음·여러 주문 한 영상·짧은 촬영 비율을 주 단위로 보여주는 탭을 붙입니다. 더미 고객사 두 곳의 문의 주문 200건에 손으로 정답 판정을 붙여 자동 판정과 대조하고, 판정 서비스와 화면을 AWS 로 배포해 운영합니다.
보낼 영상 있음으로 나온 문의마다 Claude 가 문의 종류, 주문번호, 촬영 시각과 출고 시각을 받아 전송페이지 링크에 붙여 보낼 구매자 안내 문안 초안을 씁니다. 영상이 없거나 출고 뒤 영상뿐인 문의에는 CS 가 다른 증빙을 요청할 사내 메모 초안을 씁니다.
CS 담당자가 「누리패션」 문의 10건을 올리면 영상이 하나도 없는 주문 20261001-88412 가 맨 위에, 반품 때 다시 찍은 영상만 있는 주문과 주문 세 건이 한 영상에 찍힌 주문이 그다음에 서고, 출고 전 영상이 있는 주문은 보낼 영상 묶음에 그 영상 번호가 붙는 과정을 시연합니다.
출고 현장 관리자가 6초 영상이 걸린 문의를 펼쳐 촬영 PC 3번의 중앙값 41초와 다른 영상 네 건의 길이를 읽고, 그 PC 에서 촬영을 일찍 멈추는 습관을 고칠지 정합니다.
출고 기록이 빈 주문, 출고 전후 영상이 하나씩 있는 주문, 중앙값의 정확히 30% 인 12초 영상을 한 고객사 문의로 묶어 올리면 주문마다 판정이 하나씩 서며, 촬영 시각이 빠지거나 길이가 문자로 적힌 영상 목록 10종을 받아도 해당 줄만 제외되고 다른 문의는 정상으로 판정됩니다.
더미 고객사 두 곳의 문의 주문 200건에 정답 판정을 먼저 붙여 두고 판정별로 어긋난 수를 셉니다. 문의와 영상 목록, 정답을 같은 사람이 만들었기에 이 숫자는 다섯 규칙이 적힌 순서대로 도는지를 보여줄 뿐, CS 담당자가 실제로 고를 영상과 같은지는 말하지 않습니다.
위 수치는 더미데이터 자가채점이며, 판정이 환불·재발송 비용을 실제로 줄이는지는 인베트 고객사의 실제 문의 기록과 영상 메타데이터, 분쟁 처리 결과가 있어야 측정됩니다. 웹관리자에 이미 있는 영상 메타데이터와 출고 연동 값을 바로 읽게 바꾸면 파일 업로드 없이도 같은 판정이 돕니다.
누리패션 문의 열 건의 정답은 분쟁 문의에 답해 본 CS 담당자가 아니라 제가 매겼습니다. 이 화면이 보여주는 것은 출고 기록이 빈 주문이나 문턱과 같은 길이의 영상에서 판정이 정해진 쪽으로 간다는 것이고, 실제 분쟁에서 이길 영상을 골랐다는 주장은 하지 않습니다.
주문번호로 영상이 있는지만 봐도 영상 하나에 주문 하나가 붙은 데이터에서는 다섯 판정 대부분이 맞아 보입니다. 반품 때 다시 찍은 V-55141, 출고 전후 영상이 하나씩인 주문 20260929-66102, 주문 세 건이 찍힌 V-55120, 출고 기록이 비어 있는 주문 20261001-88633 은 그 단순한 대조로는 틀리는 자리라 한 고객사 안에 넣었습니다.
이 판정은 영상 파일을 열지 않고 촬영 시각과 길이, 연결된 주문 수만 봅니다. 길이가 충분해도 송장이 화면 밖에 있거나 화질이 나쁘면 증빙이 되지 않으므로, 보낼 영상 있음은 CS 가 열어 볼 영상을 좁히는 데서 멈춥니다.
같은 촬영 PC 의 중앙값은 그 PC 가 주로 포장하는 상품에 따라 달라집니다. 작은 액세서리만 포장하는 PC 와 가구를 포장하는 PC 를 같은 30% 문턱으로 보는 것이 맞는지는 실제 고객사 영상 분포를 본 뒤 정할 도입 과제입니다.
이 포트폴리오는 영상 메타데이터와 출고 기록을 주문 단위로 맞대는 판정 서비스와 그 웹관리자 화면을 보여줍니다. 물류 현장 운영과 택배 분쟁 처리에 대한 전문성은 주장하지 않습니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
고객사 CS 가 구매자에게서 받은 오배송·파손·수량 부족 문의입니다. 문의 하나에 한 줄이고, order_no 는 Realpacking 촬영 프로그램이 읽는 주문번호와 같은 값입니다.
| claim_id | order_no | claim_type | claimed_at |
|---|---|---|---|
| CL-2610-001 | 20261001-88412 | 파손 | 2026-10-02T10:15:00+09:00 |
| CL-2610-002 | 20260930-77105 | 오배송 | 2026-10-02T10:40:00+09:00 |
| CL-2610-003 | 20260930-77230 | 오배송 | 2026-10-02T11:05:00+09:00 |
| CL-2610-004 | 20261001-88507 | 파손 | 2026-10-02T11:20:00+09:00 |
| CL-2610-005 | 20260929-66018 | 파손 | 2026-10-01T16:30:00+09:00 |
아래 JSON Schema 에 맞는 구매자 문의 행을 더 만들어 주세요. {"type":"object","properties":{"claim_id":{"type":"string","description":"고객사 CS 가 받은 구매자 문의 번호입니다."},"order_no":{"type":"string","description":"고객사 쇼핑몰 주문번호입니다. Realpacking 촬영 프로그램이 송장이나 주문서 바코드로 읽는 값과 같습니다."},"claim_type":{"type":"string","enum":["파손","오배송","수량 부족"]},"claimed_at":{"type":"string","description":"문의가 들어온 시각입니다. +09:00 오프셋이 붙은 ISO 8601 입니다."}},"required":["claim_id","order_no","claim_type","claimed_at"]} 고객사 한 곳의 한 주 문의를 20~60건 만들고, claimed_at 은 출고 1~5일 뒤로 씁니다. order_no 는 「주문일자-다섯 자리」 꼴로 쓰고 packing_videos·shipments 에 나오는 주문번호와 맞춥니다. 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) 포장 영상이 한 건도 없는 주문의 문의, (2) 같은 주문에 문의가 두 번 들어온 경우, (3) 출고 기록이 아직 연동되지 않은 주문의 문의. 생성한 행은 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"claim_id":{"type":"string","description":"고객사 CS 가 받은 구매자 문의 번호입니다."},"order_no":{"type":"string","description":"고객사 쇼핑몰 주문번호입니다. Realpacking 촬영 프로그램이 송장이나 주문서 바코드로 읽는 값과 같습니다."},"claim_type":{"type":"string","enum":["파손","오배송","수량 부족"]},"claimed_at":{"type":"string","description":"문의가 들어온 시각입니다. +09:00 오프셋이 붙은 ISO 8601 입니다."}},"required":["claim_id","order_no","claim_type","claimed_at"]}출고 현장 촬영 PC 가 남긴 포장 영상 목록입니다. 영상 하나에 주문이 여럿 찍히면 같은 video_id 가 주문마다 한 줄씩 나옵니다. 반품 확인 때 다시 찍어 출고 시각보다 뒤에 찍힌 영상, 주문 세 건이 한 영상에 찍힌 경우, 촬영 PC 중앙값보다 훨씬 짧은 영상을 일부러 담았습니다.
| video_id | order_no | station_id | recorded_at | duration_sec |
|---|---|---|---|---|
| V-55101 | 20260929-66018 | ST-01 | 2026-09-29T13:02:00+09:00 | 36 |
| V-55102 | 20261001-88702 | ST-01 | 2026-10-01T10:14:00+09:00 | 12 |
| V-55103 | 20261001-88690 | ST-01 | 2026-10-01T10:02:00+09:00 | 40 |
| V-55104 | 20260930-77290 | ST-01 | 2026-09-30T15:20:00+09:00 | 43 |
| V-55105 | 20260929-66150 | ST-01 | 2026-09-29T15:41:00+09:00 | 45 |
아래 JSON Schema 에 맞는 포장 영상 행을 더 만들어 주세요. {"type":"object","properties":{"video_id":{"type":"string","description":"촬영 프로그램이 만든 영상 번호입니다. 한 영상에 주문이 여럿 찍히면 같은 video_id 가 주문마다 한 줄씩 나옵니다."},"order_no":{"type":"string","description":"이 영상에 연결된 주문번호입니다."},"station_id":{"type":"string","description":"영상을 찍은 출고 현장의 촬영 PC 입니다."},"recorded_at":{"type":"string","description":"촬영을 시작한 시각입니다. +09:00 오프셋이 붙은 ISO 8601 입니다."},"duration_sec":{"type":"integer","minimum":1,"description":"영상 길이(초)입니다."}},"required":["video_id","order_no","station_id","recorded_at","duration_sec"]} 촬영 PC 3~6대가 하루에 영상 50~200개를 남기고, 영상 길이는 촬영 PC 마다 평소 30~90초 사이로 둡니다. 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) 한 video_id 에 order_no 2~4개가 연결된 영상, (2) 출고 시각보다 뒤에 찍힌 재포장·반품 확인 영상, (3) 같은 촬영 PC 중앙값의 30% 에 못 미치는 영상과 정확히 30% 인 영상, (4) 같은 주문에 출고 전후 영상이 하나씩 있는 경우. 생성한 행은 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"video_id":{"type":"string","description":"촬영 프로그램이 만든 영상 번호입니다. 한 영상에 주문이 여럿 찍히면 같은 video_id 가 주문마다 한 줄씩 나옵니다."},"order_no":{"type":"string","description":"이 영상에 연결된 주문번호입니다."},"station_id":{"type":"string","description":"영상을 찍은 출고 현장의 촬영 PC 입니다."},"recorded_at":{"type":"string","description":"촬영을 시작한 시각입니다. +09:00 오프셋이 붙은 ISO 8601 입니다."},"duration_sec":{"type":"integer","minimum":1,"description":"영상 길이(초)입니다."}},"required":["video_id","order_no","station_id","recorded_at","duration_sec"]}고객사 출고 기록입니다. 주문 하나에 한 줄이고, 택배사 연동이 늦어 출고 시각이 아직 들어오지 않은 주문은 shipped_at 이 null 입니다.
| order_no | shipped_at | carrier |
|---|---|---|
| 20261001-88412 | 2026-10-01T14:22:00+09:00 | CJ대한통운 |
| 20260930-77105 | 2026-09-30T17:40:00+09:00 | CJ대한통운 |
| 20260930-77230 | 2026-09-30T17:40:00+09:00 | CJ대한통운 |
| 20261001-88507 | 2026-10-01T14:22:00+09:00 | 롯데택배 |
| 20260929-66018 | 2026-09-29T17:35:00+09:00 | CJ대한통운 |
아래 JSON Schema 에 맞는 출고 기록 행을 더 만들어 주세요. {"type":"object","properties":{"order_no":{"type":"string"},"shipped_at":{"type":["string","null"],"description":"택배사에 넘긴 출고 시각입니다. 출고 기록이 아직 연동되지 않았으면 null 입니다."},"carrier":{"type":"string"}},"required":["order_no","shipped_at","carrier"]} 하루 출고는 택배사 집하 시각 두세 번에 몰리게 같은 shipped_at 을 여러 주문에 씁니다. 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) shipped_at 이 null 인 주문, (2) 포장 영상 촬영 시각과 정확히 같은 출고 시각, (3) 포장 영상은 있는데 출고 기록이 없는 주문. 생성한 행은 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"order_no":{"type":"string"},"shipped_at":{"type":["string","null"],"description":"택배사에 넘긴 출고 시각입니다. 출고 기록이 아직 연동되지 않았으면 null 입니다."},"carrier":{"type":"string"}},"required":["order_no","shipped_at","carrier"]}| Go | 주문번호로 영상을 모으고 출고 전후를 거르며 촬영 PC 별 중앙값을 내는 판정 서비스와, 판정을 내주는 API 입니다. |
| TypeScript | 판정 결과 타입과 화면 코드를 같은 타입으로 맞춰, Go API 응답이 바뀌면 화면 빌드에서 먼저 드러나게 합니다. |
| Next.js | 세 파일 업로드와 판정 묶음·문의 펼침 화면을 담은 웹관리자 페이지와 BFF 라우트입니다. |
| React | 판정별 문의 묶음, 영상이 여럿인 주문의 영상 목록, 2주차 촬영 PC 별 현황 표를 그립니다. |
| TanStack Query | 판정 목록과 문의 한 건의 근거를 불러오고, 출고 기록이 새로 들어오면 그 주문 판정만 다시 불러옵니다. |
| Tailwind CSS | 판정 묶음 색과 펼침 칸을 웹관리자 기존 화면과 같은 밀도로 맞춥니다. |
| Vitest | 출고 기록이 빈 주문, 문턱과 같은 길이의 영상, 출고 전후 영상이 섞인 주문을 화면 단위 테스트로 고정합니다. |
| Feature-Sliced Design | 문의 영상 판정을 하나의 feature 로, 문의·영상·출고를 entities 로 나눠 웹관리자 다른 기능과 섞이지 않게 둡니다. |
| PostgreSQL(AWS Aurora) | 문의·영상·출고 세 테이블과 판정 결과를 담고, 같은 video_id 의 주문 수와 촬영 PC 별 중앙값을 쿼리로 셉니다. |
| AWS | 2주차부터 판정 서비스와 웹관리자를 AWS 에 올려 운영합니다. |
| Claude Sonnet | 3주차에 구매자 안내 문안과 CS 사내 메모 초안을 씁니다. |
✗ fail → CS 담당자가 영상을 열어 본 결과와 판정이 자주 갈리면 여러 주문 한 영상을 짧은 촬영보다 앞에 둔 차례부터 바꿔 보고, 두 문제가 함께 있는 주문은 펼침 화면에 둘 다 남깁니다.
✓ pass → 2주차는 출고 현장 관리자가 볼 촬영 PC 별 현황 탭을 먼저 붙이고 AWS 에 올립니다.
✗ fail → 갈린 문의가 짧은 촬영에 몰리면 촬영 PC 마다 문턱을 따로 둘지, 출고 뒤 영상에 몰리면 같은 시각을 출고 전으로 본 규칙이 맞는지부터 확인합니다.
✓ pass → 3주차 구매자 안내 문안과 CS 사내 메모로 넘어갑니다.
위 예측 UI 는 3주차까지 완주했을 때의 화면입니다. 1주차에 실제로 만드는 것은 아래 표시된 화면 하나입니다.
verdict사유 라벨 · claim_id + 한 줄 요약(근거 수치 포함)화면·코드·면접에서 이 단어를 그대로 씁니다. 키는 출력 스키마의 enum 과 같습니다.
포장 영상 없음영상 없음출고 뒤에 찍힌 영상뿐출고 뒤 촬영뿐다른 주문과 한 영상에 찍힘여러 주문 한 영상촬영이 너무 짧음촬영 짧음보낼 영상 있음보낼 영상 있음문의 주문 하나가 주문번호 대조, 출고 전후 거름, 한 영상의 주문 수 세기, 촬영 PC 중앙값 견줌을 거쳐 어떤 판정을 받는지 남기는 형식입니다. 판정은 주문번호와 시각, 길이로 Go 서비스가 내리고, 모델은 3주차 구매자 안내 문안에만 씁니다.
{"type":"object","properties":{"claim_id":{"type":"string"},"order_no":{"type":"string"},"claim_type":{"type":"string"},"verdict":{"type":"string","enum":["보낼 영상 있음","포장 영상 없음","출고 뒤에 찍힌 영상뿐","다른 주문과 한 영상에 찍힘","촬영이 너무 짧음"]},"shipped_at":{"type":["string","null"]},"video_ids":{"type":"array","items":{"type":"string"},"description":"packing_videos 에서 이 order_no 와 짝지어진 video_id 목록입니다."},"checked_video_id":{"type":["string","null"],"description":"판정 근거가 된 영상입니다. 보낼 영상 있음이면 구매자에게 보낼 영상이고, 영상이 없으면 null 입니다."},"checked_recorded_at":{"type":["string","null"]},"checked_station_id":{"type":["string","null"]},"checked_duration_sec":{"type":["integer","null"],"minimum":1},"station_median_sec":{"type":["number","null"],"minimum":0,"description":"checked_station_id 와 같은 station_id 영상들의 duration_sec 중앙값입니다. 같은 video_id 는 한 번만 셉니다."},"short_threshold_sec":{"type":["number","null"],"minimum":0,"description":"station_median_sec × 0.3 을 소수 첫째 자리로 반올림한 값입니다. 판정은 반올림 전 값으로 duration_sec × 10 < station_median_sec × 3 인지 봅니다."},"orders_in_video":{"type":["integer","null"],"minimum":1,"description":"checked_video_id 와 짝지어진 서로 다른 order_no 수입니다."},"evidence":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"agg":{"type":["string","null"]},"value":{}},"required":["field","value"]}},"summary":{"type":"string"},"hedge":{"type":["string","null"]}},"required":["claim_id","order_no","claim_type","verdict","shipped_at","video_ids","checked_video_id","evidence","summary"]}[
{
"claim_id": "CL-2610-001",
"order_no": "20261001-88412",
"claim_type": "파손",
"verdict": "포장 영상 없음",
"shipped_at": "2026-10-01T14:22:00+09:00",
"video_ids": [],
"checked_video_id": null,
"checked_recorded_at": null,
"checked_station_id": null,
"checked_duration_sec": null,
"station_median_sec": null,
"short_threshold_sec": null,
"orders_in_video": null,
"evidence": [
{
"field": "order_no",
"value": "20261001-88412"
},
{
"field": "shipped_at",
"value": "2026-10-01T14:22:00+09:00"
},
{
"field": "video_id",
"agg": "count",
"value": 0
}
],
"summary": "주문 20261001-88412 는 10월 1일 14시 22분에 출고됐는데 이 주문번호로 찍힌 포장 영상이 한 건도 없습니다.",
"hedge": "촬영 PC 에서 주문번호를 읽히지 않고 포장했거나 영상 업로드가 실패했을 수 있습니다. 어느 쪽인지는 출고 현장 관리자가 그날 촬영 PC 기록을 보고 가립니다."
},
{
"claim_id": "CL-2610-002",
"order_no": "20260930-77105",
"claim_type": "오배송",
"verdict": "출고 뒤에 찍힌 영상뿐",
"shipped_at": "2026-09-30T17:40:00+09:00",
"video_ids": [
"V-55141"
],
"checked_video_id": "V-55141",
"checked_recorded_at": "2026-10-01T09:10:00+09:00",
"checked_station_id": "ST-03",
"checked_duration_sec": 44,
"station_median_sec": 41,
"short_threshold_sec": 12.3,
"orders_in_video": 1,
"evidence": [
{
"field": "recorded_at",
"value": "2026-10-01T09:10:00+09:00"
},
{
"field": "shipped_at",
"value": "2026-09-30T17:40:00+09:00"
}
],
"summary": "주문 20260930-77105 의 영상 V-55141 은 10월 1일 9시 10분에 찍혔는데 출고는 하루 앞선 9월 30일 17시 40분이라, 출고 상태를 보여주지 못합니다.",
"hedge": "반품 확인이나 재포장 때 다시 찍은 영상으로 보입니다. 구매자에게 보내면 오히려 출고 뒤 상태를 보여주게 됩니다."
},
{
"claim_id": "CL-2610-003",
"order_no": "20260930-77230",
"claim_type": "오배송",
"verdict": "다른 주문과 한 영상에 찍힘",
"shipped_at": "2026-09-30T17:40:00+09:00",
"video_ids": [
"V-55120"
],
"checked_video_id": "V-55120",
"checked_recorded_at": "2026-09-30T14:31:00+09:00",
"checked_station_id": "ST-02",
"checked_duration_sec": 58,
"station_median_sec": 39,
"short_threshold_sec": 11.7,
"orders_in_video": 3,
"evidence": [
{
"field": "video_id",
"value": "V-55120"
},
{
"field": "order_no",
"agg": "count",
"value": 3
},
{
"field": "duration_sec",
"value": 58
}
],
"summary": "주문 20260930-77230 의 유일한 영상 V-55120 에는 주문 세 건이 함께 찍혀 있어, 이 주문 상자를 따로 보여주기 어렵습니다.",
"hedge": "58초 영상 안에서 이 주문 상자가 나오는 구간을 잘라 보낼 수 있는지는 CS 담당자가 영상을 열어 보고 정합니다."
},
{
"claim_id": "CL-2610-004",
"order_no": "20261001-88507",
"claim_type": "파손",
"verdict": "촬영이 너무 짧음",
"shipped_at": "2026-10-01T14:22:00+09:00",
"video_ids": [
"V-55140"
],
"checked_video_id": "V-55140",
"checked_recorded_at": "2026-10-01T09:58:00+09:00",
"checked_station_id": "ST-03",
"checked_duration_sec": 6,
"station_median_sec": 41,
"short_threshold_sec": 12.3,
"orders_in_video": 1,
"evidence": [
{
"field": "duration_sec",
"value": 6
},
{
"field": "station_id",
"value": "ST-03"
},
{
"field": "duration_sec",
"value": 41
}
],
"summary": "주문 20261001-88507 의 영상 V-55140 은 6초뿐인데 촬영 PC 3번 영상 길이 중앙값은 41초라, 그 30%(12.3초)에 못 미칩니다.",
"hedge": "포장을 시작하기 전에 촬영을 멈췄을 가능성이 큽니다. 같은 촬영 PC 의 다른 영상 네 건은 38~47초입니다."
},
{
"claim_id": "CL-2610-006",
"order_no": "20260929-66102",
"claim_type": "오배송",
"verdict": "보낼 영상 있음",
"shipped_at": "2026-09-29T17:35:00+09:00",
"video_ids": [
"V-55121",
"V-55122"
],
"checked_video_id": "V-55121",
"checked_recorded_at": "2026-09-29T14:05:00+09:00",
"checked_station_id": "ST-02",
"checked_duration_sec": 39,
"station_median_sec": 39,
"short_threshold_sec": 11.7,
"orders_in_video": 1,
"evidence": [
{
"field": "recorded_at",
"value": "2026-09-29T14:05:00+09:00"
},
{
"field": "recorded_at",
"value": "2026-10-01T18:20:00+09:00"
},
{
"field": "shipped_at",
"value": "2026-09-29T17:35:00+09:00"
}
],
"summary": "주문 20260929-66102 에는 영상이 두 건인데, 출고 전 9월 29일 14시 5분에 찍은 V-55121(39초)을 구매자에게 보내면 됩니다.",
"hedge": "10월 1일에 찍힌 V-55122 는 출고 뒤 영상이라 고르지 않았습니다."
},
{
"claim_id": "CL-2610-007",
"order_no": "20261001-88633",
"claim_type": "파손",
"verdict": "보낼 영상 있음",
"shipped_at": null,
"video_ids": [
"V-55124"
],
"checked_video_id": "V-55124",
"checked_recorded_at": "2026-10-01T11:37:00+09:00",
"checked_station_id": "ST-02",
"checked_duration_sec": 35,
"station_median_sec": 39,
"short_threshold_sec": 11.7,
"orders_in_video": 1,
"evidence": [
{
"field": "shipped_at",
"value": null
},
{
"field": "video_id",
"value": "V-55124"
},
{
"field": "duration_sec",
"value": 35
}
],
"summary": "주문 20261001-88633 의 영상 V-55124 는 35초로 촬영 PC 2번 중앙값 39초에 가깝고 다른 주문과 섞이지 않아 보낼 수 있습니다.",
"hedge": "출고 기록에 shipped_at 이 비어 있어 영상이 출고 전에 찍혔는지는 견주지 못했습니다. 택배사 집하 시각이 들어오면 다시 판정합니다."
},
{
"claim_id": "CL-2610-009",
"order_no": "20261001-88702",
"claim_type": "오배송",
"verdict": "보낼 영상 있음",
"shipped_at": "2026-10-01T14:22:00+09:00",
"video_ids": [
"V-55102"
],
"checked_video_id": "V-55102",
"checked_recorded_at": "2026-10-01T10:14:00+09:00",
"checked_station_id": "ST-01",
"checked_duration_sec": 12,
"station_median_sec": 40,
"short_threshold_sec": 12,
"orders_in_video": 1,
"evidence": [
{
"field": "duration_sec",
"value": 12
},
{
"field": "station_id",
"value": "ST-01"
},
{
"field": "duration_sec",
"value": 40
}
],
"summary": "주문 20261001-88702 의 영상 V-55102 는 12초로 짧지만 촬영 PC 1번 중앙값 40초의 정확히 30% 라 미달이 아니어서 보낼 영상으로 셌습니다.",
"hedge": "30% 와 같은 값은 미달로 보지 않습니다. 12초 안에 상자 안 물건이 보이는지는 CS 담당자가 열어 보고 판단합니다."
}
][자동 검증 · 코드가 판정합니다] 1. verdict 가 보낼 영상 있음·포장 영상 없음·출고 뒤에 찍힌 영상뿐·다른 주문과 한 영상에 찍힘·촬영이 너무 짧음 다섯 값 중 하나인지 확인합니다. 2. claim_id·order_no·claim_type·verdict·shipped_at·video_ids·checked_video_id·evidence·summary 필드가 빠짐없이 있는지 확인합니다. 3. checked_duration_sec 가 1 이상이고 station_median_sec·short_threshold_sec 가 0 이상이며 orders_in_video 가 1 이상인지 확인합니다. 4. video_ids 를 packing_videos 에서, station_median_sec 를 같은 station_id 영상의 duration_sec 중앙값으로, orders_in_video 를 같은 video_id 의 order_no 수로 다시 계산합니다. 5. video_ids 가 비어 있으면 verdict 는 포장 영상 없음입니다. 6. shipped_at 이 null 이 아니고 그 주문 영상의 recorded_at 이 모두 shipped_at 보다 뒤이면 verdict 는 출고 뒤에 찍힌 영상뿐입니다. 7. 출고 전 영상이 있고 그 영상들이 모두 orders_in_video 2 이상이면 verdict 는 다른 주문과 한 영상에 찍힘입니다. 8. 출고 전이면서 주문 하나만 찍힌 영상이 있고 그 영상들의 duration_sec × 10 이 모두 station_median_sec × 3 보다 작으면 verdict 는 촬영이 너무 짧음입니다. 하나라도 같거나 크면 verdict 는 보낼 영상 있음입니다. 9. evidence 의 field 이름이 buyer_claims·packing_videos·shipments 에 있는 컬럼인지 대조합니다. 10. evidence 의 value 가 수록된 행의 원문 값과 같은지 확인합니다. 줄을 세어 얻은 수는 agg 를 적습니다. 11. summary 가 존댓말로 끝나는지 확인합니다. [판정 차례 · 위 규칙이 둘 이상 동시에 걸릴 때] 문의 하나에는 판정을 하나만 남깁니다. ① 포장 영상 없음 → ② 출고 뒤에 찍힌 영상뿐 → ③ 다른 주문과 한 영상에 찍힘 → ④ 촬영이 너무 짧음 → ⑤ 보낼 영상 있음. 영상이 여럿이면 출고 전 영상만 남기고, 그중 주문 하나만 찍혔고 길이가 충분한 영상이 하나라도 있으면 보낼 영상 있음으로 닫습니다. 출고 시각과 촬영 시각이 같으면 출고 전으로 셉니다. [하드 케이스 · 판정이 갈리는 이유] 주문 20261001-88633 은 shipments.shipped_at 이 null 인 결측이라 출고 전후 견줌을 건너뛰고 나머지 규칙으로 판정해 보낼 영상 있음이며, hedge 에 그 사실을 적습니다. 주문 20261001-88702 의 V-55102 는 12초로 촬영 PC 1번 중앙값 40초의 정확히 30% 라 미달이 아닙니다. 주문 20260929-66102 는 출고 전 영상과 출고 뒤 영상이 하나씩 있어 출고 전 V-55121 을 고릅니다. V-55120 은 주문 세 건에 한 줄씩 나오지만 중앙값을 셀 때는 한 번만 셉니다. [평가 러너 · 2주차] 더미 고객사 두 곳의 문의 주문 200건에 손으로 매긴 정답 판정과 자동 판정을 대조해 판정별 일치율을 내고, 어긋난 건은 따로 모아 30% 문턱과 영상 고르는 순서를 다시 봅니다. [수동 검증 · 사람이 봅니다] 1. 보낼 영상 있음으로 나온 영상에 실제로 상자 안 물건과 송장이 보이는지는 CS 담당자가 열어 보고 판단합니다. 2. 영상이 없거나 짧은 주문이 몰린 촬영 PC 에서 어떤 촬영 습관을 고칠지는 출고 현장 관리자가 정합니다.