21세기전파상(리퍼센트)
경력근거: 고객의 기기를 직접 매입하고 검수해 판매하는 사업과 파트너 상품을 검증해 판매하는 사업을 함께 운영합니다.
※ 실제 산출물이 아닌 AI 예측 시안입니다.
공고는 리퍼센트가 '고객의 기기를 직접 매입하고 검수해 판매하는 사업과 파트너 상품을 검증해 판매하는 사업을 함께 운영' 한다고 적고, 바꾸려는 문제로 '판매자마다 다른 품질 기준과 불투명한 가격' 을 듭니다. 파트너가 쓴 'S급' 을 리퍼센트 등급으로 바꾸고 판매가를 검수 등급 시세와 견주는 이 화면은 그 두 문장이 겹치는 곳에 있습니다. 다음 계획으로 'AI 기반 검수와 가치 평가 기술을 고도화하고, 기업 간 거래와 새로운 제휴 서비스를 확대' 한다고 하니, 입점 파트너가 늘수록 등급 표기를 맞추는 일도 늘어납니다. 이 자리는 'AI를 개발 과정 전반에 활용해 프로토타입과 MVP를 직접 구현' 하고 '프론트엔드부터 백엔드, 데이터베이스, 외부 서비스 연동, 배포까지' 맡습니다. 공고가 '이미 운영 중인 사업을 성장시키는 경험과 새로운 사업을 처음부터 만드는 경험' 을 함께 말하는데, 이 편은 앞쪽인 운영 중인 파트너 검증 사업에서 출발합니다. 이 포트폴리오는 파트너 설명을 검수 기록·기준표·시세표에 맞춰 판정하는 풀스택 구현을 보여줍니다. 중고 기기 검수 기술이나 시세 산정의 전문성은 주장하지 않습니다.
공고는 리퍼센트가 고객의 기기를 직접 매입·검수해 파는 사업과 파트너 상품을 검증해 파는 사업을 함께 운영한다고 적습니다. 파트너가 올린 등급·설명·판매가를 리퍼센트 검수 결과에 맞추는 일은 뒤쪽 사업에서 매일 생기고, 이 화면이 그 대조를 맡습니다.
회사 소개 첫 문단이 바꾸려는 문제로 판매자마다 다른 품질 기준과 불투명한 가격을 듭니다. 파트너별 등급 대응표로 'S급' 을 리퍼센트 등급으로 바꾸고, 판매가를 검수 등급 시세와 견주는 두 계산이 그 두 문제에 하나씩 닿습니다.
주요업무가 AI 를 개발 과정 전반에 써서 프로토타입과 MVP 를 직접 구현하고, 프론트엔드부터 배포까지 맡는 일입니다. 우대사항에는 AI API 로 제품 기능을 구현해 본 경험이 있습니다. 설명 문구를 Claude Haiku 로 읽고 규칙으로 판정하는 화면 하나를 배포까지 만드는 이 편의 범위가 그 요구에 맞습니다.
리퍼센트(21세기전파상) 상품 검증 담당자가 쓰는 파트너 입점 상품 판정 화면입니다. 파트너어드민으로 들어온 중고폰마다 파트너가 적은 등급·설명·판매가를 리퍼센트 검수 기록, 기기 종류별 등급 기준표, 파트너별 등급 대응표, 시세표에 대어 네 판정 가운데 하나와 그 근거를 보여줍니다. 설명에서 읽은 배터리 효율과 수리 이력은 파트너가 쓴 문구를 근거로 남기고, 원문에 없는 문구는 판정에 쓰지 않습니다.
리퍼센트에서 파트너 입점 상품을 검증해 판매에 올리는 상품 검증 담당자와 판매 파트너를 관리하는 매니저. 매일 파트너어드민으로 들어온 상품을 검수 결과와 같은 관리자 화면에서 맞춰 보고, 걸린 상품은 등급·가격을 고쳐 올리거나 사유를 붙여 파트너에게 되돌린다
파트너마다 'S급' 이 뜻하는 등급이 달라, 상품 검증 담당자는 파트너가 적은 등급을 리퍼센트 등급으로 바꿔 놓고 검수 기록의 흠집·찍힘·배터리를 기준표에 하나씩 대어 봅니다. 설명의 '무수리'·'배터리 효율 95%' 같은 문구를 검수 결과와 맞춰 보는 일도 눈으로 합니다. 대응표로 적힌 등급을 바꾸고, 검수 기록으로 등급을 다시 매기고, 설명 문구를 읽어 견주면 담당자는 하루 입고분 가운데 고쳐 올리거나 되돌릴 상품만 열어 봅니다.
상품 검증 담당자가 판정 화면을 열면 오늘 들어온 파트너 상품이 네 판정으로 나뉘고, 상품을 펼치면 왼쪽에 파트너가 적은 등급·설명·판매가, 오른쪽에 대응표로 바꾼 리퍼센트 등급, 검수 기록으로 다시 매긴 등급과 넘은 허용치, 설명에서 읽은 배터리 효율·수리 이력, 검수 등급 시세 대비 판매가가 나옵니다. 담당자는 상품마다 '고쳐 올림'·'되돌림' 을 골라 두 목록을 CSV 로 내려받습니다. 다섯 표는 더미로 시작하고, 설명 문구는 Claude Haiku 가 고른 부분을 규칙이 원문에서 다시 확인한 것만 씁니다.
작성자가 판정과 설명 속 배터리 효율·수리 이력을 직접 매긴 상품 50대를 정답 세트로 두고, 판정이 틀린 상품에는 원인 단계(등급 대응·등급 재산정·설명 읽기·시세 비교)를 붙여 모읍니다. 설명 읽기에서 틀린 문장은 프롬프트 예시를 고칠 때마다 다시 돌리는 회귀 세트가 됩니다.
파트너 매니저가 파트너별 탭을 열면 파트너가 쓰는 등급 표기마다 지난 4주 동안 검수 등급이 대응표보다 낮게 나온 비율이 나오고, 비율이 높은 표기는 대응표를 고칠 후보로 올라옵니다. 매니저가 대응표를 고치면 그 뒤 들어온 상품부터 새 대응을 씁니다.
상품 검증 담당자가 판정 화면을 열면 오늘 입고분 12대가 네 판정으로 나뉘고, PL-2207 을 펼치면 P03 의 'S급' 이 리퍼센트 최상급으로 바뀐 뒤 검수 화면 흠집 3개(최상급 허용 0개)로 상급까지 내려온 근거가 나옵니다.
같은 'S급' 을 파트너마다 다른 등급으로 쓰는 상품, '액정 교체 이력 없음' 처럼 부정이 붙은 설명, 배터리 측정값이 null 인 폴더블, 설명 배터리 효율이 검수값보다 정확히 3%p 높거나 판매가가 시세의 정확히 110% 인 상품을 섞어도 판정이 판정식대로 나오고, 모델이 원문에 없는 문구를 내면 그 문구는 판정에 들지 않습니다.
판매가 칸에 '52만' 이 글자로 들어오거나 검수 기록이 없는 상품 같은 깨진 입력 20종을 넣어도 나머지 상품의 판정은 그대로 나오고, 빠진 상품 번호와 이유는 대기열 맨 위에 따로 모입니다.
작성자가 판정과 설명 속 배터리 효율·수리 이력을 손으로 매긴 상품 50대로 화면 판정이 정답과 맞은 대수를 셉니다. 단, 상품과 정답을 모두 작성자가 만든 합성 기준이라 성능 검증이 아니라 데모 조건에서의 동작입니다.
위 수치는 작성자가 쓴 파트너 설명의 자가채점이며, 설명 읽기와 판정이 실제로 맞는 비율은 리퍼센트 파트너어드민의 실제 입점 상품과 검수 기록, 상품 검증 담당자의 확인이 있어야 잽니다. 이 포트폴리오는 그 측정을 바로 돌릴 수 있는 상태까지 만듭니다.
판정 정답 50대와 파트너 설명 문장은 전부 제가 지었습니다. 맞은 대수가 높게 나와도 제가 쓴 말투를 제 도구가 읽은 결과라 성능 증명이 아니고, 설명 읽기가 실제 파트너 말투에서 얼마나 맞는지는 파트너어드민의 실제 설명을 넣어야 압니다.
판정이 갈리는 상품을 골라 넣었습니다. 같은 'S급' 을 P03 은 최상급, P11 은 상급으로 쓰는 상품, 설명 배터리 효율이 검수값보다 정확히 3%p 높고 판매가가 시세의 정확히 110% 인 PL-2241, 배터리 측정값이 비어 있는 폴더블 PL-2233, 세 판정이 한꺼번에 걸리는 PL-2257, 그리고 '액정 교체 이력 없음' 을 똑같이 쓰고도 검수 결과가 달라 하나만 걸리는 PL-2230·PL-2252 가 그 자리입니다.
배터리 측정값이 없는 상품은 배터리 하한을 빼고 흠집·찍힘으로만 등급을 매기므로, PL-2233 처럼 최상급으로 나와도 배터리가 하한을 넘는지는 모릅니다. 이런 상품은 notes 에 남겨 담당자가 다시 재게 합니다.
등급 기준표의 허용치, 파트너별 등급 대응표, 시세표는 제가 정한 값입니다. 실제 도입에서는 리퍼센트 검수 기준과 입점 때 맞춘 등급 대응을 받아 바꾸고, 시세는 실제 거래가에서 다시 잡습니다. 중고 기기 검수 기준이나 시세 산정의 전문성은 주장하지 않습니다.
공고의 이 자리는 중고폰 밖의 새 사업도 탐색합니다. 이 편은 이미 운영 중인 파트너 검증 사업 안의 화면이라, 다른 상품군으로 옮길 때는 기준표의 열부터 다시 정합니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
파트너가 파트너어드민으로 올린 오늘 입고분 상품입니다. 파트너마다 등급 표기가 달라 P03 과 P11 이 같은 'S급' 을 쓰고, 설명은 '배터리 효율 95%'·'배터리 성능 최대치 88%'·'배터리 효율 80프로' 처럼 제각각 적혀 있습니다. '액정 교체 이력 없음' 처럼 부품 이름 뒤에 부정이 붙은 설명은 PL-2230 과 PL-2252 에 똑같이 넣어 검수에서 디스플레이 교체가 나온 PL-2252 만 걸리게 했고, 배터리 숫자가 없는 설명도 섞었습니다.
| listing_id | partner_id | device_type | model | storage | partner_grade | description | price | listed_at |
|---|---|---|---|---|---|---|---|---|
| PL-2207 | P03 | 바형 | iPhone 15 Pro | 256GB | S급 | S급 외관 깨끗해요. 배터리 효율 92%, 무수리 원본, 풀박스. | 1,030,000 | 2026-10-13T09:12:00+09:00 |
| PL-2215 | P11 | 바형 | iPhone 13 Pro | 128GB | S급 | 생활기스 약간 있어요. 배터리 효율 95%! 수리 이력 없음. | 520,000 | 2026-10-13T09:20:00+09:00 |
| PL-2221 | P03 | 바형 | iPhone 14 | 128GB | A급 | A급 무수리 원본입니다. 배터리 성능 최대치 88%. | 560,000 | 2026-10-13T09:31:00+09:00 |
| PL-2230 | P07 | 바형 | Galaxy S23 | 256GB | S | S급 상태 좋은 S23 입니다. 액정 교체 이력 없음, 배터리만 정품… | 520,000 | 2026-10-13T09:44:00+09:00 |
| PL-2233 | P07 | 폴더블 | Galaxy Z Flip5 | 256GB | 특S | 특S급 미개봉급, 힌지 소음 없어요. 무수리. | 690,000 | 2026-10-13T09:52:00+09:00 |
아래 JSON Schema 를 그대로 만족하는 파트너 입점 상품을 30건 더 만들어 주세요. {"type":"object","properties":{"listing_id":{"type":"string"},"partner_id":{"type":"string"},"device_type":{"type":"string","enum":["바형","폴더블","태블릿"],"description":"파트너어드민에서 고른 기기 종류입니다. 등급 기준표를 고르는 데 씁니다"},"model":{"type":"string"},"storage":{"type":"string"},"partner_grade":{"type":"string","description":"파트너가 자기 등급표로 적은 등급 표기 그대로입니다"},"description":{"type":"string","description":"파트너가 파트너어드민에 쓴 상품 설명 원문입니다"},"price":{"type":"integer","minimum":1,"description":"파트너가 정한 판매가(원)입니다"},"listed_at":{"type":"string","description":"ISO 8601, +09:00 입니다"}},"required":["listing_id","partner_id","device_type","model","storage","partner_grade","description","price","listed_at"]} partner_id 는 함께 주는 등급 대응표의 파트너(P03·P07·P11)를 쓰고, partner_grade 는 그 파트너가 대응표에 등록한 표기만 쓰세요. model·storage 는 아이폰 12~15 시리즈와 갤럭시 S23·S24·Z Flip5·Z Fold5 에서 고르고, device_type 은 Z 시리즈만 폴더블입니다. description 은 중고폰 판매자가 실제로 쓰는 짧은 구어체 한두 문장으로 쓰세요. 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) 배터리 효율을 '배터리 효율 93%'·'배터리 성능 최대치 89'·'배터리 90프로' 처럼 서로 다른 말로 적은 설명, (2) '액정 교체 이력 없음'·'배터리 제외 무수리' 처럼 부정이나 예외가 붙은 수리 언급, (3) 배터리 숫자를 적지 않은 설명, (4) 판매가가 검수 등급 시세의 정확히 110% 인 상품. 생성한 행은 반드시 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도(price 가 '52만' 같은 문자열, device_type 이 목록 밖)는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"listing_id":{"type":"string"},"partner_id":{"type":"string"},"device_type":{"type":"string","enum":["바형","폴더블","태블릿"],"description":"파트너어드민에서 고른 기기 종류입니다. 등급 기준표를 고르는 데 씁니다"},"model":{"type":"string"},"storage":{"type":"string"},"partner_grade":{"type":"string","description":"파트너가 자기 등급표로 적은 등급 표기 그대로입니다"},"description":{"type":"string","description":"파트너가 파트너어드민에 쓴 상품 설명 원문입니다"},"price":{"type":"integer","minimum":1,"description":"파트너가 정한 판매가(원)입니다"},"listed_at":{"type":"string","description":"ISO 8601, +09:00 입니다"}},"required":["listing_id","partner_id","device_type","model","storage","partner_grade","description","price","listed_at"]}파트너 매니저가 입점 때 파트너의 등급 표기를 리퍼센트 등급에 맞춰 등록한 대응표입니다. P03 의 'S급' 은 최상급이고 P11 의 'S급' 은 상급이라, 같은 표기라도 파트너에 따라 다른 등급이 됩니다.
| partner_id | partner_grade | grade | registered_at |
|---|---|---|---|
| P03 | S급 | 최상급 | 2026-03-04 |
| P03 | A급 | 상급 | 2026-03-04 |
| P03 | B급 | 중급 | 2026-03-04 |
| P03 | C급 | 하급 | 2026-03-04 |
| P07 | 특S | 최상급 | 2026-05-19 |
아래 JSON Schema 를 그대로 만족하는 파트너 등급 대응을 새 파트너 4곳 분량(파트너당 3~4행)으로 더 만들어 주세요. {"type":"object","properties":{"partner_id":{"type":"string"},"partner_grade":{"type":"string","description":"파트너가 쓰는 등급 표기입니다"},"grade":{"type":"string","enum":["최상급","상급","중급","하급"],"description":"그 표기에 대응하는 리퍼센트 등급입니다"},"registered_at":{"type":"string","description":"파트너 매니저가 입점 때 대응을 등록한 날(YYYY-MM-DD)입니다"}},"required":["partner_id","partner_grade","grade","registered_at"]} 파트너마다 등급 표기 체계를 하나 정해 쓰세요(S급/A급/B급, 특S/S/A, 최상/상/중 등). 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) 다른 파트너와 같은 표기를 쓰지만 한 등급 낮은 리퍼센트 등급에 대응하는 파트너, (2) 리퍼센트 하급에 대응하는 표기가 없는 파트너. 생성한 행은 반드시 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도(grade 가 목록 밖)는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"partner_id":{"type":"string"},"partner_grade":{"type":"string","description":"파트너가 쓰는 등급 표기입니다"},"grade":{"type":"string","enum":["최상급","상급","중급","하급"],"description":"그 표기에 대응하는 리퍼센트 등급입니다"},"registered_at":{"type":"string","description":"파트너 매니저가 입점 때 대응을 등록한 날(YYYY-MM-DD)입니다"}},"required":["partner_id","partner_grade","grade","registered_at"]}리퍼센트 검수 엔지니어가 입고된 상품을 진단한 기록입니다. 화면 흠집·외관 찍힘 수, 배터리 성능, 교체가 확인된 부품이 있습니다. 진단 도구가 배터리 성능을 읽지 못한 폴더블(PL-2233)은 battery_pct 가 null 입니다.
| listing_id | inspected_at | screen_scratches | body_dents | battery_pct | replaced_parts |
|---|---|---|---|---|---|
| PL-2207 | 2026-10-13T13:05:00+09:00 | 3 | 0 | 92 | [] |
| PL-2215 | 2026-10-13T13:18:00+09:00 | 2 | 1 | 86 | [] |
| PL-2221 | 2026-10-13T13:30:00+09:00 | 1 | 0 | 88 | ["디스플레이"] |
| PL-2230 | 2026-10-13T13:41:00+09:00 | 3 | 1 | 97 | ["배터리"] |
| PL-2233 | 2026-10-13T13:55:00+09:00 | 0 | 0 | — | [] |
아래 JSON Schema 를 그대로 만족하는 검수 기록을 함께 만든 상품 30건마다 하나씩 만들어 주세요. {"type":"object","properties":{"listing_id":{"type":"string"},"inspected_at":{"type":"string","description":"ISO 8601, +09:00 입니다"},"screen_scratches":{"type":"integer","minimum":0,"description":"검수 엔지니어가 센 화면 흠집 수입니다"},"body_dents":{"type":"integer","minimum":0,"description":"외관(프레임·후면) 찍힘 수입니다"},"battery_pct":{"type":["integer","null"],"minimum":0,"maximum":100,"description":"진단 도구가 읽은 배터리 성능(새 배터리 대비 %)입니다. 진단 도구가 읽지 못한 기종은 null 입니다"},"replaced_parts":{"type":"array","items":{"type":"string","enum":["디스플레이","배터리","후면 유리","카메라","충전 단자","메인보드"]},"description":"진단에서 교체 흔적이나 비정품이 확인된 부품입니다"}},"required":["listing_id","inspected_at","screen_scratches","body_dents","battery_pct","replaced_parts"]} listing_id 는 상품 표의 것을 쓰고, 흠집·찍힘 수와 배터리 성능은 파트너가 적은 등급과 대체로 맞게 두되 일부는 어긋나게 하세요. 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) battery_pct 가 null 인 갤럭시 기록, (2) 등급 허용치와 같은 흠집 수·배터리 성능(상급 흠집 3개, 상급 배터리 85%), (3) 설명은 무수리인데 replaced_parts 에 부품이 있는 기록, (4) battery_pct 가 100 인 배터리 교체 기록. 생성한 행은 반드시 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도(battery_pct 가 '86%' 같은 문자열)는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"listing_id":{"type":"string"},"inspected_at":{"type":"string","description":"ISO 8601, +09:00 입니다"},"screen_scratches":{"type":"integer","minimum":0,"description":"검수 엔지니어가 센 화면 흠집 수입니다"},"body_dents":{"type":"integer","minimum":0,"description":"외관(프레임·후면) 찍힘 수입니다"},"battery_pct":{"type":["integer","null"],"minimum":0,"maximum":100,"description":"진단 도구가 읽은 배터리 성능(새 배터리 대비 %)입니다. 진단 도구가 읽지 못한 기종은 null 입니다"},"replaced_parts":{"type":"array","items":{"type":"string","enum":["디스플레이","배터리","후면 유리","카메라","충전 단자","메인보드"]},"description":"진단에서 교체 흔적이나 비정품이 확인된 부품입니다"}},"required":["listing_id","inspected_at","screen_scratches","body_dents","battery_pct","replaced_parts"]}리퍼센트 등급 기준표라고 가정한 허용치입니다. 기기 종류마다 네 등급의 화면 흠집·외관 찍힘 최대치와 배터리 성능 하한이 있고, 하급은 배터리 하한이 0 입니다. 허용치 값은 작성자가 정한 합성 기준입니다.
| device_type | grade | grade_rank | max_screen_scratches | max_body_dents | min_battery_pct |
|---|---|---|---|---|---|
| 바형 | 최상급 | 1 | 0 | 0 | 90 |
| 바형 | 상급 | 2 | 3 | 1 | 85 |
| 바형 | 중급 | 3 | 8 | 3 | 80 |
| 바형 | 하급 | 4 | 20 | 6 | 0 |
| 폴더블 | 최상급 | 1 | 0 | 0 | 90 |
아래 JSON Schema 를 그대로 만족하는 등급 기준표를 스마트워치 한 종류 분량(4행)으로 더 만들어 주세요. {"type":"object","properties":{"device_type":{"type":"string","enum":["바형","폴더블","태블릿"]},"grade":{"type":"string","enum":["최상급","상급","중급","하급"]},"grade_rank":{"type":"integer","minimum":1,"maximum":4,"description":"1 이 가장 높은 등급입니다"},"max_screen_scratches":{"type":"integer","minimum":0,"description":"그 등급이 허용하는 화면 흠집 수의 최대입니다"},"max_body_dents":{"type":"integer","minimum":0,"description":"그 등급이 허용하는 외관 찍힘 수의 최대입니다"},"min_battery_pct":{"type":"integer","minimum":0,"maximum":100,"description":"그 등급이 요구하는 배터리 성능 하한입니다. 하급은 0 으로 하한이 없습니다"}},"required":["device_type","grade","grade_rank","max_screen_scratches","max_body_dents","min_battery_pct"]} grade_rank 1~4 를 한 번씩 쓰고, 등급이 낮을수록 허용치가 넓어지게 하세요. 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) 최상급의 흠집·찍힘 허용치 0, (2) 하급의 배터리 하한 0. 생성한 행은 반드시 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도(grade_rank 가 같은 두 행)는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"device_type":{"type":"string","enum":["바형","폴더블","태블릿"]},"grade":{"type":"string","enum":["최상급","상급","중급","하급"]},"grade_rank":{"type":"integer","minimum":1,"maximum":4,"description":"1 이 가장 높은 등급입니다"},"max_screen_scratches":{"type":"integer","minimum":0,"description":"그 등급이 허용하는 화면 흠집 수의 최대입니다"},"max_body_dents":{"type":"integer","minimum":0,"description":"그 등급이 허용하는 외관 찍힘 수의 최대입니다"},"min_battery_pct":{"type":"integer","minimum":0,"maximum":100,"description":"그 등급이 요구하는 배터리 성능 하한입니다. 하급은 0 으로 하한이 없습니다"}},"required":["device_type","grade","grade_rank","max_screen_scratches","max_body_dents","min_battery_pct"]}모델·용량·등급별 시세라고 가정한 가격표입니다. 판매가를 검수 등급의 시세와 견주는 데 씁니다. 가격은 작성자가 정한 합성 값입니다.
| model | storage | grade | price | price_date |
|---|---|---|---|---|
| iPhone 15 Pro | 256GB | 상급 | 950,000 | 2026-10-12 |
| iPhone 13 Pro | 128GB | 상급 | 500,000 | 2026-10-12 |
| iPhone 14 | 128GB | 상급 | 540,000 | 2026-10-12 |
| Galaxy S23 | 256GB | 상급 | 440,000 | 2026-10-12 |
| Galaxy Z Flip5 | 256GB | 최상급 | 650,000 | 2026-10-12 |
아래 JSON Schema 를 그대로 만족하는 시세를 상품 표에 나온 model·storage 마다 네 등급씩 채워 만들어 주세요. {"type":"object","properties":{"model":{"type":"string"},"storage":{"type":"string"},"grade":{"type":"string","enum":["최상급","상급","중급","하급"]},"price":{"type":"integer","minimum":1,"description":"그 등급의 시세(원)입니다"},"price_date":{"type":"string","description":"시세 기준일(YYYY-MM-DD)입니다"}},"required":["model","storage","grade","price","price_date"]} 같은 모델·용량에서는 등급이 낮을수록 가격이 낮게 하고, 최상급과 상급의 차이가 상급과 중급의 차이보다 작게 하세요. 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) 용량만 다른 같은 모델의 시세, (2) 상급과 중급의 시세 차이가 큰 폴더블. 생성한 행은 반드시 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도(price 가 0 이하)는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"model":{"type":"string"},"storage":{"type":"string"},"grade":{"type":"string","enum":["최상급","상급","중급","하급"]},"price":{"type":"integer","minimum":1,"description":"그 등급의 시세(원)입니다"},"price_date":{"type":"string","description":"시세 기준일(YYYY-MM-DD)입니다"}},"required":["model","storage","grade","price","price_date"]}| TypeScript | 등급 재산정, 설명 문구 재확인, 시세 초과율 계산, 판정 우선순위 규칙을 씁니다. |
| Next.js | 판정별 대기열과 '파트너가 적은 것 / 검수 결과' 두 칸 비교 화면, 서버 쪽 판정 실행을 맡습니다. |
| PostgreSQL | 다섯 표와 판정 결과, 담당자가 고른 처리(고쳐 올림·되돌림)를 마이그레이션으로 올린 스키마에 담습니다. |
| AI API (Claude Haiku) | 파트너 설명에서 배터리 효율 문구와 부품별 수리 언급을 고릅니다. 고른 문구는 규칙이 원문에서 다시 찾습니다. |
| 외부 서비스 연동 | 1주차는 파트너어드민과 검수 시스템에서 내보낸 CSV 를 올려 받고, 열 이름이 다르면 업로드 화면에서 맞춥니다. |
| 배포 | 1주차부터 Vercel 에 올려 담당자가 브라우저로 엽니다. |
| AI 코딩 도구 | Claude Code 로 규칙과 화면을 만들고, AI 가 쓴 판정 코드는 허용치와 같은 값·정확히 3%p·정확히 110% 사례 테스트로 동작을 확인합니다. |
| 사용 데이터 분석 | 3주차에 파트너별 등급 표기마다 검수 등급이 대응표보다 낮게 나온 비율을 셉니다. |
✗ fail → PL-2252 가 적은 대로 판매로 지나가면 '액정 교체 이력 없음' 을 교체로 읽은 것이니 부정 표현 예시와 status 읽기부터 다시 봅니다.
✓ pass → 여기서 멈춰도 완결입니다. 더 키우려면 손으로 매긴 정답 50대로 판정이 어느 단계에서 틀리는지 모으는 단계로 갑니다.
✓ pass → 여기까지도 완결입니다. 더 키우려면 파트너별 등급 표기의 하향 비율로 대응표 수정 후보를 보여주는 단계로 넓힙니다.
위 예측 UI 는 3주차까지 완주했을 때의 화면입니다. 1주차에 실제로 만드는 것은 아래 표시된 화면 하나입니다.
verdict사유 라벨 · listing_id + 한 줄 요약(근거 수치 포함)화면·코드·면접에서 이 단어를 그대로 씁니다. 키는 출력 스키마의 enum 과 같습니다.
적은 대로 판매적은 대로 판매적힌 등급보다 상태가 낮음등급 낮춤상품 설명과 검수 결과가 다름설명 불일치검수 등급 시세보다 비쌈시세 초과파트너 상품 하나에 검증 판정 하나와 그 근거(대응표로 바꾼 등급, 다시 매긴 등급과 넘은 허용치, 설명 문구, 시세 초과율)를 남기는 형식입니다.
{"type":"object","properties":{"listing_id":{"type":"string"},"partner_id":{"type":"string"},"device_type":{"type":"string"},"model":{"type":"string"},"storage":{"type":"string"},"price":{"type":"integer"},"verdict":{"type":"string","enum":["적은 대로 판매","적힌 등급보다 상태가 낮음","상품 설명과 검수 결과가 다름","검수 등급 시세보다 비쌈"],"description":"걸린 판정이 여럿이면 적힌 등급보다 상태가 낮음, 상품 설명과 검수 결과가 다름, 검수 등급 시세보다 비쌈 순으로 앞선 하나입니다. 하나도 걸리지 않으면 적은 대로 판매입니다"},"also_found":{"type":"array","items":{"type":"string","enum":["적힌 등급보다 상태가 낮음","상품 설명과 검수 결과가 다름","검수 등급 시세보다 비쌈"]}},"partner_grade":{"type":"string","description":"파트너가 적은 등급 표기 그대로입니다"},"mapped_grade":{"type":"string","enum":["최상급","상급","중급","하급"],"description":"partner_grade_map 에서 partner_id·partner_grade 짝으로 찾은 리퍼센트 등급입니다"},"inspected_grade":{"type":["string","null"],"enum":["최상급","상급","중급","하급",null],"description":"같은 device_type 의 grade_rules 가운데 흠집·찍힘·배터리 허용치를 모두 지키는 grade_rank 가 가장 작은 등급입니다. battery_pct 가 null 이면 배터리 하한은 견주지 않습니다. 하급 허용치도 넘으면 null(등급 외)입니다"},"mapped_grade_breaks":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"value":{"type":"integer"},"limit_field":{"type":"string"},"limit":{"type":"integer"}},"required":["field","value","limit_field","limit"]},"description":"mapped_grade 의 허용치 가운데 검수 값이 넘은 것입니다"},"inspected_battery_pct":{"type":["integer","null"],"description":"inspections.battery_pct 값입니다"},"battery_quote":{"type":["string","null"],"description":"description 에서 배터리 효율을 말한 문구 원문입니다. 없으면 null 입니다"},"claimed_battery_pct":{"type":["integer","null"],"description":"battery_quote 에서 규칙이 다시 읽은 숫자입니다"},"description_repairs":{"type":"array","items":{"type":"object","properties":{"part":{"type":"string","enum":["전체","디스플레이","배터리","후면 유리","카메라","충전 단자","메인보드"]},"status":{"type":"string","enum":["교체·수리","이력 없음"]},"quote":{"type":"string"}},"required":["part","status","quote"]},"description":"description 의 수리 언급입니다. quote 가 원문에 글자 그대로 있는 항목만 남습니다"},"unlisted_repairs":{"type":"array","items":{"type":"string","enum":["디스플레이","배터리","후면 유리","카메라","충전 단자","메인보드"]},"description":"inspections.replaced_parts 가운데 description_repairs 에 status 교체·수리로 없는 부품입니다"},"market_price":{"type":["integer","null"],"description":"model·storage·inspected_grade 가 짝이 맞는 market_prices.price 입니다"},"over_market_pct":{"type":["number","null"],"description":"정적 계산값입니다. (price − market_price) ÷ market_price × 100 을 소수 첫째 자리에서 반올림한 값입니다"},"evidence":{"type":"array","items":{"type":"object","properties":{"table":{"type":"string","enum":["partner_listings","partner_grade_map","inspections","grade_rules","market_prices"]},"row":{"type":["string","null"],"description":"그 표의 키입니다. partner_grade_map 은 partner_id/partner_grade, grade_rules 는 device_type/grade, market_prices 는 model/storage/grade 입니다"},"field":{"type":"string"},"value":{"type":["string","integer","number","null","array"]},"quote":{"type":"string","description":"description 원문에서 그대로 딴 문구입니다"},"agg":{"type":"string","enum":["count","sum","avg","min","max"]}},"required":["table","row","field"]}},"notes":{"type":"array","items":{"type":"string"},"description":"판정에 들지 않았지만 상품 검증 담당자가 볼 사실입니다"},"summary":{"type":"string"}},"required":["listing_id","partner_id","device_type","model","storage","price","verdict","also_found","partner_grade","mapped_grade","inspected_grade","mapped_grade_breaks","inspected_battery_pct","battery_quote","claimed_battery_pct","description_repairs","unlisted_repairs","market_price","over_market_pct","evidence","notes","summary"]}[
{
"listing_id": "PL-2207",
"partner_id": "P03",
"device_type": "바형",
"model": "iPhone 15 Pro",
"storage": "256GB",
"price": 1030000,
"verdict": "적힌 등급보다 상태가 낮음",
"also_found": [],
"partner_grade": "S급",
"mapped_grade": "최상급",
"inspected_grade": "상급",
"mapped_grade_breaks": [
{
"field": "screen_scratches",
"value": 3,
"limit_field": "max_screen_scratches",
"limit": 0
}
],
"inspected_battery_pct": 92,
"battery_quote": "배터리 효율 92%",
"claimed_battery_pct": 92,
"description_repairs": [
{
"part": "전체",
"status": "이력 없음",
"quote": "무수리 원본"
}
],
"unlisted_repairs": [],
"market_price": 950000,
"over_market_pct": 8.4,
"evidence": [
{
"table": "partner_listings",
"row": "PL-2207",
"field": "partner_grade",
"value": "S급"
},
{
"table": "partner_grade_map",
"row": "P03/S급",
"field": "grade",
"value": "최상급"
},
{
"table": "inspections",
"row": "PL-2207",
"field": "screen_scratches",
"value": 3
},
{
"table": "grade_rules",
"row": "바형/최상급",
"field": "max_screen_scratches",
"value": 0
},
{
"table": "inspections",
"row": "PL-2207",
"field": "body_dents",
"value": 0
},
{
"table": "inspections",
"row": "PL-2207",
"field": "battery_pct",
"value": 92
},
{
"table": "grade_rules",
"row": "바형/상급",
"field": "max_screen_scratches",
"value": 3
},
{
"table": "grade_rules",
"row": "바형/상급",
"field": "max_body_dents",
"value": 1
},
{
"table": "grade_rules",
"row": "바형/상급",
"field": "min_battery_pct",
"value": 85
},
{
"table": "partner_listings",
"row": "PL-2207",
"field": "description",
"quote": "배터리 효율 92%"
},
{
"table": "partner_listings",
"row": "PL-2207",
"field": "description",
"quote": "무수리 원본"
},
{
"table": "partner_listings",
"row": "PL-2207",
"field": "price",
"value": 1030000
},
{
"table": "market_prices",
"row": "iPhone 15 Pro/256GB/상급",
"field": "price",
"value": 950000
}
],
"notes": [
"판매가는 상급 시세보다 8.4% 높아 10% 를 넘지 않습니다. 검수 등급으로 고쳐 올릴 때 시세는 950,000원입니다."
],
"summary": "파트너 P03 의 'S급' 은 리퍼센트 최상급인데, 검수에서 화면 흠집 3개가 나와 최상급 허용치 0개를 넘고 상급 허용치 안에 듭니다."
},
{
"listing_id": "PL-2215",
"partner_id": "P11",
"device_type": "바형",
"model": "iPhone 13 Pro",
"storage": "128GB",
"price": 520000,
"verdict": "상품 설명과 검수 결과가 다름",
"also_found": [],
"partner_grade": "S급",
"mapped_grade": "상급",
"inspected_grade": "상급",
"mapped_grade_breaks": [],
"inspected_battery_pct": 86,
"battery_quote": "배터리 효율 95%",
"claimed_battery_pct": 95,
"description_repairs": [
{
"part": "전체",
"status": "이력 없음",
"quote": "수리 이력 없음"
}
],
"unlisted_repairs": [],
"market_price": 500000,
"over_market_pct": 4,
"evidence": [
{
"table": "partner_listings",
"row": "PL-2215",
"field": "partner_grade",
"value": "S급"
},
{
"table": "partner_grade_map",
"row": "P11/S급",
"field": "grade",
"value": "상급"
},
{
"table": "inspections",
"row": "PL-2215",
"field": "screen_scratches",
"value": 2
},
{
"table": "grade_rules",
"row": "바형/최상급",
"field": "max_screen_scratches",
"value": 0
},
{
"table": "inspections",
"row": "PL-2215",
"field": "body_dents",
"value": 1
},
{
"table": "grade_rules",
"row": "바형/상급",
"field": "max_body_dents",
"value": 1
},
{
"table": "inspections",
"row": "PL-2215",
"field": "battery_pct",
"value": 86
},
{
"table": "grade_rules",
"row": "바형/상급",
"field": "min_battery_pct",
"value": 85
},
{
"table": "partner_listings",
"row": "PL-2215",
"field": "description",
"quote": "배터리 효율 95%"
},
{
"table": "partner_listings",
"row": "PL-2215",
"field": "description",
"quote": "수리 이력 없음"
},
{
"table": "partner_listings",
"row": "PL-2215",
"field": "price",
"value": 520000
},
{
"table": "market_prices",
"row": "iPhone 13 Pro/128GB/상급",
"field": "price",
"value": 500000
}
],
"notes": [
"P03 의 'S급' 은 최상급이지만 P11 의 'S급' 은 대응표에서 상급이라, 검수 등급 상급과 같아 등급으로는 걸리지 않습니다."
],
"summary": "설명은 '배터리 효율 95%' 인데 검수에서 읽은 배터리 성능은 86% 로 9%p 낮습니다."
},
{
"listing_id": "PL-2221",
"partner_id": "P03",
"device_type": "바형",
"model": "iPhone 14",
"storage": "128GB",
"price": 560000,
"verdict": "상품 설명과 검수 결과가 다름",
"also_found": [],
"partner_grade": "A급",
"mapped_grade": "상급",
"inspected_grade": "상급",
"mapped_grade_breaks": [],
"inspected_battery_pct": 88,
"battery_quote": "배터리 성능 최대치 88%",
"claimed_battery_pct": 88,
"description_repairs": [
{
"part": "전체",
"status": "이력 없음",
"quote": "무수리 원본"
}
],
"unlisted_repairs": [
"디스플레이"
],
"market_price": 540000,
"over_market_pct": 3.7,
"evidence": [
{
"table": "partner_listings",
"row": "PL-2221",
"field": "partner_grade",
"value": "A급"
},
{
"table": "partner_grade_map",
"row": "P03/A급",
"field": "grade",
"value": "상급"
},
{
"table": "inspections",
"row": "PL-2221",
"field": "screen_scratches",
"value": 1
},
{
"table": "grade_rules",
"row": "바형/최상급",
"field": "max_screen_scratches",
"value": 0
},
{
"table": "inspections",
"row": "PL-2221",
"field": "battery_pct",
"value": 88
},
{
"table": "partner_listings",
"row": "PL-2221",
"field": "description",
"quote": "배터리 성능 최대치 88%"
},
{
"table": "inspections",
"row": "PL-2221",
"field": "replaced_parts",
"value": [
"디스플레이"
]
},
{
"table": "partner_listings",
"row": "PL-2221",
"field": "description",
"quote": "무수리 원본"
},
{
"table": "partner_listings",
"row": "PL-2221",
"field": "price",
"value": 560000
},
{
"table": "market_prices",
"row": "iPhone 14/128GB/상급",
"field": "price",
"value": 540000
}
],
"notes": [],
"summary": "설명에는 '무수리 원본' 이라고 적혀 있는데 검수에서 디스플레이 교체가 확인됐습니다."
},
{
"listing_id": "PL-2230",
"partner_id": "P07",
"device_type": "바형",
"model": "Galaxy S23",
"storage": "256GB",
"price": 520000,
"verdict": "검수 등급 시세보다 비쌈",
"also_found": [],
"partner_grade": "S",
"mapped_grade": "상급",
"inspected_grade": "상급",
"mapped_grade_breaks": [],
"inspected_battery_pct": 97,
"battery_quote": null,
"claimed_battery_pct": null,
"description_repairs": [
{
"part": "디스플레이",
"status": "이력 없음",
"quote": "액정 교체 이력 없음"
},
{
"part": "배터리",
"status": "교체·수리",
"quote": "배터리만 정품 교체"
}
],
"unlisted_repairs": [],
"market_price": 440000,
"over_market_pct": 18.2,
"evidence": [
{
"table": "partner_listings",
"row": "PL-2230",
"field": "partner_grade",
"value": "S"
},
{
"table": "partner_grade_map",
"row": "P07/S",
"field": "grade",
"value": "상급"
},
{
"table": "inspections",
"row": "PL-2230",
"field": "screen_scratches",
"value": 3
},
{
"table": "grade_rules",
"row": "바형/최상급",
"field": "max_screen_scratches",
"value": 0
},
{
"table": "grade_rules",
"row": "바형/상급",
"field": "max_screen_scratches",
"value": 3
},
{
"table": "inspections",
"row": "PL-2230",
"field": "body_dents",
"value": 1
},
{
"table": "inspections",
"row": "PL-2230",
"field": "battery_pct",
"value": 97
},
{
"table": "inspections",
"row": "PL-2230",
"field": "replaced_parts",
"value": [
"배터리"
]
},
{
"table": "partner_listings",
"row": "PL-2230",
"field": "description",
"quote": "액정 교체 이력 없음"
},
{
"table": "partner_listings",
"row": "PL-2230",
"field": "description",
"quote": "배터리만 정품 교체"
},
{
"table": "partner_listings",
"row": "PL-2230",
"field": "price",
"value": 520000
},
{
"table": "market_prices",
"row": "Galaxy S23/256GB/상급",
"field": "price",
"value": 440000
}
],
"notes": [
"설명에 배터리 효율 숫자가 없어 배터리 비교는 하지 않았습니다.",
"'액정 교체 이력 없음' 은 디스플레이를 바꾸지 않았다는 문장으로 읽었고, 검수에서도 디스플레이 교체는 나오지 않았습니다."
],
"summary": "판매가 520,000원이 상급 시세 440,000원보다 18.2% 높습니다."
},
{
"listing_id": "PL-2257",
"partner_id": "P07",
"device_type": "폴더블",
"model": "Galaxy Z Fold5",
"storage": "512GB",
"price": 1090000,
"verdict": "적힌 등급보다 상태가 낮음",
"also_found": [
"상품 설명과 검수 결과가 다름",
"검수 등급 시세보다 비쌈"
],
"partner_grade": "S",
"mapped_grade": "상급",
"inspected_grade": "중급",
"mapped_grade_breaks": [
{
"field": "battery_pct",
"value": 84,
"limit_field": "min_battery_pct",
"limit": 85
}
],
"inspected_battery_pct": 84,
"battery_quote": "배터리 성능 90%",
"claimed_battery_pct": 90,
"description_repairs": [
{
"part": "전체",
"status": "이력 없음",
"quote": "무수리"
}
],
"unlisted_repairs": [],
"market_price": 980000,
"over_market_pct": 11.2,
"evidence": [
{
"table": "partner_listings",
"row": "PL-2257",
"field": "partner_grade",
"value": "S"
},
{
"table": "partner_grade_map",
"row": "P07/S",
"field": "grade",
"value": "상급"
},
{
"table": "inspections",
"row": "PL-2257",
"field": "battery_pct",
"value": 84
},
{
"table": "grade_rules",
"row": "폴더블/상급",
"field": "min_battery_pct",
"value": 85
},
{
"table": "inspections",
"row": "PL-2257",
"field": "screen_scratches",
"value": 2
},
{
"table": "grade_rules",
"row": "폴더블/상급",
"field": "max_screen_scratches",
"value": 2
},
{
"table": "inspections",
"row": "PL-2257",
"field": "body_dents",
"value": 1
},
{
"table": "grade_rules",
"row": "폴더블/중급",
"field": "min_battery_pct",
"value": 80
},
{
"table": "partner_listings",
"row": "PL-2257",
"field": "description",
"quote": "배터리 성능 90%"
},
{
"table": "partner_listings",
"row": "PL-2257",
"field": "price",
"value": 1090000
},
{
"table": "market_prices",
"row": "Galaxy Z Fold5/512GB/중급",
"field": "price",
"value": 980000
}
],
"notes": [
"세 판정이 함께 걸려 우선순위가 가장 앞선 '적힌 등급보다 상태가 낮음' 을 판정으로 두고 나머지 둘은 also_found 에 둡니다."
],
"summary": "폴더블 상급의 배터리 하한 85% 에 검수 84% 가 못 미쳐 중급이고, 설명의 '배터리 성능 90%' 보다 6%p 낮으며, 판매가는 중급 시세보다 11.2% 높습니다."
},
{
"listing_id": "PL-2233",
"partner_id": "P07",
"device_type": "폴더블",
"model": "Galaxy Z Flip5",
"storage": "256GB",
"price": 690000,
"verdict": "적은 대로 판매",
"also_found": [],
"partner_grade": "특S",
"mapped_grade": "최상급",
"inspected_grade": "최상급",
"mapped_grade_breaks": [],
"inspected_battery_pct": null,
"battery_quote": null,
"claimed_battery_pct": null,
"description_repairs": [
{
"part": "전체",
"status": "이력 없음",
"quote": "무수리"
}
],
"unlisted_repairs": [],
"market_price": 650000,
"over_market_pct": 6.2,
"evidence": [
{
"table": "partner_listings",
"row": "PL-2233",
"field": "partner_grade",
"value": "특S"
},
{
"table": "partner_grade_map",
"row": "P07/특S",
"field": "grade",
"value": "최상급"
},
{
"table": "inspections",
"row": "PL-2233",
"field": "screen_scratches",
"value": 0
},
{
"table": "inspections",
"row": "PL-2233",
"field": "body_dents",
"value": 0
},
{
"table": "inspections",
"row": "PL-2233",
"field": "battery_pct",
"value": null
},
{
"table": "grade_rules",
"row": "폴더블/최상급",
"field": "max_screen_scratches",
"value": 0
},
{
"table": "grade_rules",
"row": "폴더블/최상급",
"field": "max_body_dents",
"value": 0
},
{
"table": "partner_listings",
"row": "PL-2233",
"field": "description",
"quote": "무수리"
},
{
"table": "partner_listings",
"row": "PL-2233",
"field": "price",
"value": 690000
},
{
"table": "market_prices",
"row": "Galaxy Z Flip5/256GB/최상급",
"field": "price",
"value": 650000
}
],
"notes": [
"배터리 측정값이 비어 있어 최상급의 배터리 하한 90% 는 견주지 않았습니다. 판매 전에 배터리를 다시 잽니다."
],
"summary": "흠집·찍힘이 0개라 폴더블 최상급 허용치 안이고, 판매가는 최상급 시세보다 6.2% 높아 10% 안입니다."
},
{
"listing_id": "PL-2241",
"partner_id": "P11",
"device_type": "바형",
"model": "iPhone 14 Pro",
"storage": "256GB",
"price": 759000,
"verdict": "적은 대로 판매",
"also_found": [],
"partner_grade": "A급",
"mapped_grade": "중급",
"inspected_grade": "중급",
"mapped_grade_breaks": [],
"inspected_battery_pct": 88,
"battery_quote": "배터리 효율 91%",
"claimed_battery_pct": 91,
"description_repairs": [
{
"part": "후면 유리",
"status": "교체·수리",
"quote": "후면 유리 사설 교체 1회"
}
],
"unlisted_repairs": [],
"market_price": 690000,
"over_market_pct": 10,
"evidence": [
{
"table": "partner_listings",
"row": "PL-2241",
"field": "partner_grade",
"value": "A급"
},
{
"table": "partner_grade_map",
"row": "P11/A급",
"field": "grade",
"value": "중급"
},
{
"table": "inspections",
"row": "PL-2241",
"field": "screen_scratches",
"value": 5
},
{
"table": "grade_rules",
"row": "바형/상급",
"field": "max_screen_scratches",
"value": 3
},
{
"table": "inspections",
"row": "PL-2241",
"field": "body_dents",
"value": 2
},
{
"table": "inspections",
"row": "PL-2241",
"field": "battery_pct",
"value": 88
},
{
"table": "grade_rules",
"row": "바형/중급",
"field": "max_screen_scratches",
"value": 8
},
{
"table": "grade_rules",
"row": "바형/중급",
"field": "max_body_dents",
"value": 3
},
{
"table": "grade_rules",
"row": "바형/중급",
"field": "min_battery_pct",
"value": 80
},
{
"table": "partner_listings",
"row": "PL-2241",
"field": "description",
"quote": "배터리 효율 91%"
},
{
"table": "inspections",
"row": "PL-2241",
"field": "replaced_parts",
"value": [
"후면 유리"
]
},
{
"table": "partner_listings",
"row": "PL-2241",
"field": "description",
"quote": "후면 유리 사설 교체 1회"
},
{
"table": "partner_listings",
"row": "PL-2241",
"field": "price",
"value": 759000
},
{
"table": "market_prices",
"row": "iPhone 14 Pro/256GB/중급",
"field": "price",
"value": 690000
}
],
"notes": [
"설명 배터리 효율 91% 는 검수 88% 보다 정확히 3%p 높아 판정식의 '3%p 넘게' 에 들지 않습니다.",
"판매가 759,000원은 중급 시세 690,000원의 정확히 110% 라 '10% 넘게' 에 들지 않습니다."
],
"summary": "P11 의 'A급' 은 리퍼센트 중급이고 검수도 중급이며, 설명에 적힌 후면 유리 교체가 검수 결과와 맞습니다."
},
{
"listing_id": "PL-2238",
"partner_id": "P03",
"device_type": "바형",
"model": "iPhone 15",
"storage": "128GB",
"price": 820000,
"verdict": "적은 대로 판매",
"also_found": [],
"partner_grade": "S급",
"mapped_grade": "최상급",
"inspected_grade": "최상급",
"mapped_grade_breaks": [],
"inspected_battery_pct": 100,
"battery_quote": "배터리 100%",
"claimed_battery_pct": 100,
"description_repairs": [
{
"part": "전체",
"status": "이력 없음",
"quote": "수리 이력 없습니다"
}
],
"unlisted_repairs": [],
"market_price": 780000,
"over_market_pct": 5.1,
"evidence": [
{
"table": "partner_listings",
"row": "PL-2238",
"field": "partner_grade",
"value": "S급"
},
{
"table": "partner_grade_map",
"row": "P03/S급",
"field": "grade",
"value": "최상급"
},
{
"table": "inspections",
"row": "PL-2238",
"field": "screen_scratches",
"value": 0
},
{
"table": "inspections",
"row": "PL-2238",
"field": "body_dents",
"value": 0
},
{
"table": "inspections",
"row": "PL-2238",
"field": "battery_pct",
"value": 100
},
{
"table": "grade_rules",
"row": "바형/최상급",
"field": "max_screen_scratches",
"value": 0
},
{
"table": "grade_rules",
"row": "바형/최상급",
"field": "max_body_dents",
"value": 0
},
{
"table": "grade_rules",
"row": "바형/최상급",
"field": "min_battery_pct",
"value": 90
},
{
"table": "partner_listings",
"row": "PL-2238",
"field": "description",
"quote": "배터리 100%"
},
{
"table": "partner_listings",
"row": "PL-2238",
"field": "description",
"quote": "수리 이력 없습니다"
},
{
"table": "partner_listings",
"row": "PL-2238",
"field": "price",
"value": 820000
},
{
"table": "market_prices",
"row": "iPhone 15/128GB/최상급",
"field": "price",
"value": 780000
}
],
"notes": [],
"summary": "흠집·찍힘이 없고 배터리 100% 라 최상급이며, 설명의 배터리 효율과 판매가가 검수 결과·시세와 맞습니다."
},
{
"listing_id": "PL-2252",
"partner_id": "P11",
"device_type": "바형",
"model": "iPhone 13",
"storage": "128GB",
"price": 430000,
"verdict": "상품 설명과 검수 결과가 다름",
"also_found": [],
"partner_grade": "S급",
"mapped_grade": "상급",
"inspected_grade": "상급",
"mapped_grade_breaks": [],
"inspected_battery_pct": 87,
"battery_quote": "배터리 87%",
"claimed_battery_pct": 87,
"description_repairs": [
{
"part": "디스플레이",
"status": "이력 없음",
"quote": "액정 교체 이력 없음"
}
],
"unlisted_repairs": [
"디스플레이"
],
"market_price": 410000,
"over_market_pct": 4.9,
"evidence": [
{
"table": "partner_listings",
"row": "PL-2252",
"field": "partner_grade",
"value": "S급"
},
{
"table": "partner_grade_map",
"row": "P11/S급",
"field": "grade",
"value": "상급"
},
{
"table": "inspections",
"row": "PL-2252",
"field": "screen_scratches",
"value": 2
},
{
"table": "inspections",
"row": "PL-2252",
"field": "body_dents",
"value": 0
},
{
"table": "inspections",
"row": "PL-2252",
"field": "battery_pct",
"value": 87
},
{
"table": "grade_rules",
"row": "바형/상급",
"field": "max_screen_scratches",
"value": 3
},
{
"table": "grade_rules",
"row": "바형/상급",
"field": "min_battery_pct",
"value": 85
},
{
"table": "inspections",
"row": "PL-2252",
"field": "replaced_parts",
"value": [
"디스플레이"
]
},
{
"table": "partner_listings",
"row": "PL-2252",
"field": "description",
"quote": "액정 교체 이력 없음"
},
{
"table": "partner_listings",
"row": "PL-2252",
"field": "description",
"quote": "배터리 87%"
},
{
"table": "partner_listings",
"row": "PL-2252",
"field": "price",
"value": 430000
},
{
"table": "market_prices",
"row": "iPhone 13/128GB/상급",
"field": "price",
"value": 410000
}
],
"notes": [
"같은 '액정 교체 이력 없음' 을 쓴 PL-2230 은 검수에서 디스플레이 교체가 나오지 않아 걸리지 않습니다. '액정' 과 '교체' 를 키워드로만 읽으면 이 상품은 교체를 밝힌 것으로 읽혀 지나갑니다."
],
"summary": "설명에는 '액정 교체 이력 없음' 이라고 적혀 있는데 검수에서 디스플레이 교체가 확인됐습니다."
}
][자동 검증 · 코드가 판정합니다] 1. verdict 가 적은 대로 판매·적힌 등급보다 상태가 낮음·상품 설명과 검수 결과가 다름·검수 등급 시세보다 비쌈 네 값 중 하나인지, also_found 가 적은 대로 판매를 뺀 세 값 중 하나인지 확인합니다. 2. 필수 필드 listing_id·partner_id·device_type·model·storage·price·verdict·also_found·partner_grade·mapped_grade·inspected_grade·mapped_grade_breaks·inspected_battery_pct·battery_quote·claimed_battery_pct·description_repairs·unlisted_repairs·market_price·over_market_pct·evidence·notes·summary 가 모두 존재하는지 확인합니다. 3. battery_quote 와 description_repairs 의 quote 가 그 listing_id 의 partner_listings.description 원문 substring 인지, battery_quote 에서 규칙이 다시 읽은 숫자가 claimed_battery_pct 와 같은지 확인합니다. 둘 중 하나라도 어긋난 모델 출력은 버리므로 원문에 없는 문구는 판정에 들지 않습니다. 4. 적힌 등급보다 상태가 낮음: mapped_grade 가 partner_grade_map 의 partner_id·partner_grade 짝에서 나온 grade 인지, inspected_grade 가 같은 device_type 의 grade_rules 에서 screen_scratches ≤ max_screen_scratches·body_dents ≤ max_body_dents·battery_pct ≥ min_battery_pct 를 모두 지키는 grade_rank 가 가장 작은 등급인지 다시 계산합니다. inspected_grade 의 grade_rank 가 mapped_grade 보다 크면 이 판정이 걸립니다. P03 의 S급(최상급)인 PL-2207 은 화면 흠집 3개로 상급이 되어 걸리고, P11 의 S급(상급)인 PL-2215 는 검수도 상급이라 걸리지 않습니다. 5. battery_pct 가 null 이면 배터리 하한은 견주지 않고 흠집·찍힘으로만 inspected_grade 를 다시 계산하며, notes 에 배터리 측정값이 비어 있다는 문장이 남습니다. PL-2233 이 이 경우이고, 측정값이 있는 나머지 상품은 배터리 하한까지 견줍니다. 6. 상품 설명과 검수 결과가 다름: claimed_battery_pct − inspected_battery_pct 를 다시 계산해 3 을 넘거나, unlisted_repairs 가 비어 있지 않으면 걸립니다. PL-2215 는 95 − 86 = 9 로 걸리고, PL-2241 은 91 − 88 = 3 이라 걸리지 않습니다. description 에 배터리 효율 숫자가 없으면 claimed_battery_pct 는 null 이고 배터리 비교는 하지 않습니다(PL-2230). PL-2221 은 replaced_parts 의 디스플레이가 description_repairs 에 교체·수리로 없어 걸리고, '액정 교체 이력 없음' 과 '배터리만 정품 교체' 를 쓴 PL-2230 은 replaced_parts 의 배터리가 교체·수리로 있어 걸리지 않습니다. 같은 '액정 교체 이력 없음' 을 쓴 PL-2252 는 replaced_parts 에 디스플레이가 있고 그 문구의 status 가 이력 없음이라 걸립니다. 7. 검수 등급 시세보다 비쌈: market_price 가 model·storage·inspected_grade 짝의 market_prices.price 인지 확인하고, over_market_pct 가 (price − market_price) ÷ market_price × 100 을 소수 첫째 자리에서 반올림한 값인지 다시 계산합니다. price × 100 이 market_price × 110 보다 크면 걸립니다. PL-2230 은 18.2% 로 걸리고, PL-2241 은 759,000원이 690,000원의 정확히 110% 라 걸리지 않습니다. 8. 한 상품에 여러 판정이 걸리면 적힌 등급보다 상태가 낮음, 상품 설명과 검수 결과가 다름, 검수 등급 시세보다 비쌈 순으로 앞선 하나가 verdict 이고 나머지는 also_found 입니다. 세 판정이 모두 걸린 PL-2257 로 이 순서를 다시 계산합니다. 9. evidence 의 table·field 가 partner_listings·partner_grade_map·inspections·grade_rules·market_prices 에 실재하는 컬럼인지 대조합니다. 10. evidence 의 quote 가 그 row 의 description 원문 substring 인지, agg 가 없는 value 가 그 row 의 그 컬럼 값과 같은지 확인합니다. 11. summary 가 존댓말로 끝나는지 확인합니다. [수동 검증 · 사람이 봅니다] 1. 배터리 측정값이 비어 있는 상품은 판정식이 배터리 하한을 견주지 않으므로, 상품 검증 담당자가 배터리를 다시 재고 등급을 확정합니다. 2. 걸린 상품을 검수 등급·시세로 고쳐 올릴지, 사유를 붙여 파트너에게 되돌릴지는 담당자가 정합니다. 3. partner_grade_map 의 대응이 파트너의 실제 등급 기준과 맞는지는 파트너 매니저가 입점 자료로 확인합니다. [평가 러너 · 2주차] 1. 작성자가 판정을 손으로 매긴 상품 50대에서 verdict 가 정답과 같은 대수를 셉니다. 2. 같은 50대에서 claimed_battery_pct 와 description_repairs 가 손으로 단 정답과 같은 대수를 세고, 틀린 상품에는 등급 대응·등급 재산정·설명 읽기·시세 비교 가운데 원인 단계를 붙입니다. [판정식에 더한 정의 · 오너 확인 항목] 1. 카드 inputs 에 없던 partner_listings.device_type 과 grade_rules.device_type·grade_rank 를 더했습니다. 폴더블은 바형과 허용치가 달라 기준표를 기기 종류별로 두고, '가장 높은 등급' 과 '낮으면' 은 grade_rank 로 셉니다. 2. battery_pct 가 null 인 상품은 배터리 하한을 빼고 등급을 매깁니다. 하급 허용치도 넘는 상품은 inspected_grade 를 null(등급 외)로 두고 적힌 등급보다 낮은 것으로 봅니다. 3. 판정식의 '3%p 넘게'·'10% 넘게' 는 같은 값을 포함하지 않습니다. 설명의 수리 언급은 status 가 교체·수리인 것만 허용 목록이 되고, '무수리'·'이력 없음' 은 목록에 아무것도 더하지 않습니다. 4. 판정이 여럿 걸리면 등급, 설명, 시세 순으로 앞선 하나를 verdict 로 둡니다. 5. 설명 문구를 고르는 일은 Claude Haiku 가 하고, 문구가 원문에 있는지와 숫자는 규칙이 다시 확인합니다.