크로노스
경력근거: 매입 사이트(WATCHUP Market 초기 버전) 개발
※ 실제 산출물이 아닌 AI 예측 시안입니다.
크로노스는 10년간 쌓은 트레이딩 거래 데이터로 홍콩·미국·일본·한국 딜러가 쓰는 WATCHUP Pro 를 운영하고, 이번 자리의 첫 업무로 WATCHUP Market 초기 버전인 매입 사이트와 Pro·Market 연동을 적었습니다. 사들인 시계를 해외 딜러에게 되파는 회사라서 매입가의 상한이 곧 딜러 거래가이고, 그 거래가가 네 나라 통화로 이미 Pro 에 있기 때문에 이 판정이 크로노스에서 성립합니다. 이 포트폴리오는 여러 통화의 딜러 거래가를 원화로 맞춰 매입 희망가와 견주는 규칙과 그 결과를 보는 관리자 페이지를 보여줍니다. 시계 진품 감정이나 상태 등급 판별에 대한 전문성은 주장하지 않습니다.
크로노스는 홍콩과 한국 매장에서 10년간 명품 시계를 트레이딩했고, 그 거래 데이터로 딜러용 시장 데이터 서비스 WATCHUP Pro 를 홍콩·미국·일본·한국 딜러에게 내고 있습니다. 매입 견적의 기준값이 이미 회사 안에 여러 통화로 쌓여 있습니다.
주요업무 첫 줄이 WATCHUP Market 초기 버전인 매입 사이트 개발이고, 그다음이 Pro 와 Market 간 연동입니다. 매입 신청을 Pro 거래 데이터와 맞춰 보는 일이 두 업무가 만나는 자리입니다.
크로노스는 Claude Code·Codex 로 개발하고, 사람은 무엇을 만들지 글로 정의한 뒤 에이전트가 만든 코드를 읽고 문제를 잡습니다. 판정 규칙을 글로 먼저 적고 정답 세트로 결과를 대조하는 구성이 그 일하는 방식과 같습니다.
매입 사이트에 들어온 신청 목록과 WATCHUP Pro 딜러 거래 내역, 통화별 환율표를 받아 신청마다 네 판정 중 하나를 붙입니다. 신청자는 레퍼런스 번호를 「126610 LN」·「Rolex 124060」처럼 제각각 적으므로 먼저 Pro 가 쓰는 번호 꼴로 맞추고, 홍콩 달러·미국 달러·엔으로 찍힌 딜러 거래가는 거래일 기준 환율로 원화로 바꿉니다. 같은 레퍼런스·상태·구성품의 최근 30일 거래가 중앙값을 희망가와 견주고, 가장 최근 거래가 30일을 넘었으면 금액 판정을 미룹니다. 매입 담당자는 어느 신청에 희망가를 낮춘 견적을 보낼지, 트레이딩 담당자는 어느 시계를 되팔 곳이 있는지 같은 화면에서 봅니다.
매입 신청을 받아 견적을 내는 크로노스 매입 담당자와, 사들인 시계를 딜러에게 되파는 트레이딩 담당자
매입 신청이 늘면 담당자가 Pro 화면에서 레퍼런스를 하나씩 검색해 통화를 머릿속으로 바꾸며 견적을 냅니다. 이 방식에서는 상태와 구성품이 다른 거래까지 섞여 기준값이 흔들리고, 거래가 뜸한 레퍼런스는 몇 달 전 가격이 그대로 기준이 됩니다. 번호 꼴과 통화를 먼저 맞추고 같은 조건 거래만 골라 중앙값을 내면, 비싸게 사들일 신청과 기준이 낡은 신청이 견적 전에 걸러집니다.
매입 담당자가 신청 목록과 Pro 거래 내역, 환율표를 올리면 신청마다 네 판정 중 하나와 견준 거래가 목록이 나오는 관리자 페이지입니다. 레퍼런스 번호 꼴을 맞추는 규칙과 거래일 기준 환율로 원화를 내는 계산, 같은 조건 30일 중앙값이 이 주에 들어갑니다. Pro 거래는 파일로 받는 것으로 시작하고, Pro API 연동은 3주차로 둡니다.
지난 매입 신청 150건에 제가 판정을 먼저 적어 두고, 도구가 같은 판정을 낸 건수를 판정별로 셉니다. 희망가가 높은 신청에는 중앙값과 견준 거래 수를 담은 신청자 회신 초안이 붙어, 매입 담당자가 고쳐서 보냅니다.
매입 신청이 저장되면 WATCHUP Pro 거래 API 에서 그 레퍼런스의 최근 거래를 끌어와 판정하고, 환율표는 매일 한 번 갱신합니다. 30일 넘게 거래가 없는 레퍼런스는 트레이딩 담당자 화면에 따로 모여 딜러에게 시세를 물어볼 목록이 됩니다.
매입 담당자가 그날 신청 목록과 Pro 거래 내역, 환율표를 올리면 희망가가 높은 신청이 맨 위 묶음에 서고, 한 신청을 펼치면 견준 거래가 통화·환율·원화 금액으로 나오는 과정을 시연합니다.
「126610 LN」·「Rolex 124060」·소문자로 적은 오데마 피게 번호가 Pro 번호 꼴로 맞춰져 같은 거래와 견줘지는지, 같은 번호를 다르게 적은 두 신청이 같은 중앙값을 받는지 화면에서 읽습니다.
30일 경계 당일의 거래, 41일 전이라 빠지는 거래, 일요일 거래의 환율 기준일, Pro 에 없는 튜더 레퍼런스, 모델명 칸이 비어 있는 신청을 섞은 입력에서 판정이 어디로 가는지 보여주고, 금액 칸에 글자가 섞인 파일 10종을 올려도 화면이 서는지 확인합니다.
매입 신청 150건마다 제가 먼저 적은 판정과 도구의 판정이 같은지 보고, 판정별로 맞은 비율을 냅니다. 거래 내역과 정답을 모두 제가 지은 합성 기준이라 이 값은 견적 실력이 아니라 규칙이 적은 대로 도는지를 잰 수입니다.
이 판정으로 비싸게 사들인 시계가 실제로 줄었는지는 크로노스의 실제 매입가와 딜러에게 되판 가격을 넣어야 잴 수 있고, 위 일치율은 거기까지 말하지 못합니다. 그 기록이 오면 같은 러너로 다시 잴 수 있게 정답 표 서식을 맞춰 둡니다.
매입 신청과 딜러 거래, 거기에 붙인 정답 판정을 모두 제가 지었습니다. 판정이 맞는 수는 규칙이 제가 적은 대로 돈다는 뜻이지 견적을 잘 낸다는 뜻이 아니라서, 면접에서는 어느 신청이 금액 판정까지 가고 어느 신청이 보류되는지를 보여주는 데서 그칩니다.
희망가가 중앙값보다 한참 높거나 낮은 신청만 넣으면 30일 창을 잘못 잘라도 판정이 안 바뀝니다. 마지막 거래가 딱 30일째인 노틸러스, 41일 전이라 창 밖으로 빠지는 홍콩 거래, 일요일 엔화 거래, 「126610 LN」처럼 번호를 제각각 적은 신청, Pro 에 없는 튜더, 풀세트 거래만 있는 레퍼런스에 시계만 들어온 신청을 일부러 넣었습니다.
같은 조건 거래가 한 건뿐이면 그 한 건이 곧 중앙값이 되어 기준이 약합니다. 화면에 견준 거래 수를 항상 함께 띄우고, 몇 건 이상일 때만 금액 판정을 믿을지는 실데이터 분포를 본 뒤 정합니다.
딜러 거래가는 시계 상태의 세부 차이, 예를 들어 폴리싱 여부나 보증서 날짜를 담지 않습니다. 상태 등급을 더 잘게 나누는 일은 감정 담당자의 기준이 있어야 하므로 도입 단계 과제로 둡니다.
희망가를 낮춰 달라는 회신은 초안까지만 만들고 보내는 일은 매입 담당자가 합니다. 최종 매입가는 실물 검수 뒤 사람이 정합니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
WATCHUP Market 매입 사이트에 개인 신청자가 올린 매입 신청 목록입니다. ref_no 는 신청자가 입력한 그대로라 공백·브랜드 이름·소문자가 섞여 들어오고, asking_price 는 원화 희망가입니다. Pro 에 거래가 없는 레퍼런스, 모델명 칸이 비어 있는 신청, 같은 레퍼런스의 풀세트 거래만 있는데 시계만 들어온 신청을 일부러 담았습니다.
| request_id | ref_no | model_name | condition | box_papers | asking_price | requested_at |
|---|---|---|---|---|---|---|
| BR-1042 | 126610LN | 롤렉스 서브마리너 데이트 | 중고 | 풀세트 | 16,500,000 | 2026-09-22 |
| BR-1044 | 326934 | 롤렉스 스카이드웰러 | 중고 | 풀세트 | 24,000,000 | 2026-09-22 |
| BR-1047 | 310.30.42.50.01.001 | 오메가 스피드마스터 프로페셔널 | 중고 | 시계만 | 6,200,000 | 2026-09-23 |
| BR-1049 | IW371605 | — | 중고 | 시계만 | 7,800,000 | 2026-09-23 |
| BR-1051 | M79830RB-0001 | 튜더 블랙베이 GMT | 미착용 | 풀세트 | 5,100,000 | 2026-09-24 |
아래 JSON Schema 에 맞는 매입 신청 행을 더 만들어 주세요. {"type":"object","properties":{"request_id":{"type":"string"},"ref_no":{"type":"string","description":"신청자가 입력한 레퍼런스 번호 원문입니다."},"model_name":{"type":["string","null"]},"condition":{"type":"string","enum":["미착용","중고"]},"box_papers":{"type":"string","enum":["풀세트","보증서만","시계만"]},"asking_price":{"type":"integer","minimum":0,"description":"원화 희망가입니다."},"requested_at":{"type":"string","description":"신청일 YYYY-MM-DD 입니다."}},"required":["request_id","ref_no","model_name","condition","box_papers","asking_price","requested_at"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) ref_no 에 브랜드 이름·공백·소문자가 섞인 신청, (2) 같은 레퍼런스를 다르게 적은 신청 두 건, (3) pro_trades 에 한 번도 나온 적 없는 레퍼런스, (4) model_name 이 null 인 신청, (5) 희망가가 같은 조건 거래가 중앙값의 110% 언저리에 걸친 신청. asking_price 는 원화 정수로 쓰고, 생성한 행은 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"request_id":{"type":"string"},"ref_no":{"type":"string","description":"신청자가 입력한 레퍼런스 번호 원문입니다."},"model_name":{"type":["string","null"]},"condition":{"type":"string","enum":["미착용","중고"]},"box_papers":{"type":"string","enum":["풀세트","보증서만","시계만"]},"asking_price":{"type":"integer","minimum":0,"description":"원화 희망가입니다."},"requested_at":{"type":"string","description":"신청일 YYYY-MM-DD 입니다."}},"required":["request_id","ref_no","model_name","condition","box_papers","asking_price","requested_at"]}WATCHUP Pro 에 기록된 홍콩·미국·일본·한국 딜러 간 거래 내역입니다. price 는 거래 통화 금액 그대로이고 condition·box_papers 는 Pro 가 쓰는 영문 값입니다. 신청일에서 정확히 30일 전 거래, 41일 전이라 창 밖으로 빠지는 거래, 일요일 거래, 같은 레퍼런스지만 구성품이 달라 견줄 수 없는 거래를 일부러 담았습니다.
| trade_no | ref_no | condition | box_papers | price | currency | traded_at | market |
|---|---|---|---|---|---|---|---|
| PT-88011 | 126610LN | pre-owned | full_set | 81,500 | HKD | 2026-09-03 | HK |
| PT-88024 | 126610LN | pre-owned | full_set | 1,560,000 | JPY | 2026-09-10 | JP |
| PT-88037 | 126610LN | pre-owned | full_set | 14,800,000 | KRW | 2026-09-16 | KR |
| PT-88042 | 126610LN | pre-owned | full_set | 82,000 | HKD | 2026-09-18 | HK |
| PT-87750 | 126610LN | pre-owned | full_set | 80,000 | HKD | 2026-08-12 | HK |
아래 JSON Schema 에 맞는 딜러 거래 행을 더 만들어 주세요. {"type":"object","properties":{"trade_no":{"type":"string"},"ref_no":{"type":"string"},"condition":{"type":"string","enum":["unworn","pre-owned"]},"box_papers":{"type":"string","enum":["full_set","papers_only","watch_only"]},"price":{"type":"number","minimum":0},"currency":{"type":"string","enum":["HKD","USD","JPY","KRW"]},"traded_at":{"type":"string","description":"거래일 YYYY-MM-DD 입니다."},"market":{"type":"string","enum":["HK","US","JP","KR"]}},"required":["trade_no","ref_no","condition","box_papers","price","currency","traded_at","market"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) 어떤 신청일에서 정확히 30일 전과 31일 전에 찍힌 같은 레퍼런스 거래, (2) 토요일·일요일 거래, (3) 같은 레퍼런스에 상태나 구성품만 다른 거래, (4) 같은 조건 거래가 한 건뿐인 레퍼런스. currency 와 market 은 서로 맞게 쓰고, 생성한 행은 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"trade_no":{"type":"string"},"ref_no":{"type":"string"},"condition":{"type":"string","enum":["unworn","pre-owned"]},"box_papers":{"type":"string","enum":["full_set","papers_only","watch_only"]},"price":{"type":"number","minimum":0},"currency":{"type":"string","enum":["HKD","USD","JPY","KRW"]},"traded_at":{"type":"string","description":"거래일 YYYY-MM-DD 입니다."},"market":{"type":"string","enum":["HK","US","JP","KR"]}},"required":["trade_no","ref_no","condition","box_papers","price","currency","traded_at","market"]}딜러 거래가를 원화로 바꾸는 통화별 기준 환율표입니다. 매일이 아니라 기준일이 띄엄띄엄 있어, 거래일보다 늦지 않은 가장 최근 기준일 줄을 골라 써야 합니다. krw_rate 는 해당 통화 1단위의 원화 값입니다.
| currency | krw_rate | rate_date |
|---|---|---|
| HKD | 177.2 | 2026-07-01 |
| HKD | 178 | 2026-08-15 |
| HKD | 178.4 | 2026-09-01 |
| HKD | 178.85 | 2026-09-15 |
| USD | 1,391.5 | 2026-09-01 |
아래 JSON Schema 에 맞는 환율 행을 더 만들어 주세요. {"type":"object","properties":{"currency":{"type":"string","enum":["HKD","USD","JPY","KRW"]},"krw_rate":{"type":"number","exclusiveMinimum":0},"rate_date":{"type":"string","description":"기준일 YYYY-MM-DD 입니다."}},"required":["currency","krw_rate","rate_date"]} 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) 기준일 사이가 2주 넘게 비는 통화, (2) 같은 통화의 기준일이 거래일 하루 뒤에 있어 쓰면 안 되는 줄, (3) JPY 처럼 1단위 값이 10원 아래인 통화. 생성한 행은 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"currency":{"type":"string","enum":["HKD","USD","JPY","KRW"]},"krw_rate":{"type":"number","exclusiveMinimum":0},"rate_date":{"type":"string","description":"기준일 YYYY-MM-DD 입니다."}},"required":["currency","krw_rate","rate_date"]}| TypeScript | 레퍼런스 번호 맞추기, 환율 기준일 고르기, 원화 환산, 30일 중앙값, 판정 차례를 담은 규칙 엔진과 화면 코드의 언어입니다. |
| Next.js | 매입 사이트의 신청 화면과 매입 담당자용 관리자 페이지를 한 프로젝트로 만들고 서버 쪽에서 판정 API 를 둡니다. |
| PostgreSQL | 매입 신청과 Pro 거래, 환율표를 담는 저장소입니다. 레퍼런스·상태·구성품·거래일 인덱스로 30일 조회를 받칩니다. |
| REST API | 3주차에 WATCHUP Pro 거래 데이터를 Market 쪽으로 끌어오는 연동 규격입니다. 판정 결과도 같은 꼴로 내려 줍니다. |
| Claude Code | 규칙 명세를 글로 적어 판정 엔진과 화면을 나눠 맡기고, 돌아온 코드는 정답 세트 대조를 통과해야 합칩니다. |
| Codex | 환율 조회와 번호 맞추기 같은 작은 함수의 경계 케이스 테스트를 따로 쓰게 해 규칙 엔진 쪽 코드와 서로 검토합니다. |
| 배포 | 1주차부터 Vercel 로 올려 매입 담당자가 웹 주소로 들어와 그날 신청을 올려 봅니다. |
| 장애 대응 | Pro 거래 파일이나 환율표가 비어 들어오면 판정을 멈추지 않고 그 신청만 판정 보류로 두고 사유를 남깁니다. |
| LLM | 판정이 정해진 뒤 희망가를 낮춰 달라고 신청자에게 보낼 회신 초안을 씁니다. |
✗ fail → 번호를 못 맞춘 신청이 1할을 넘으면 번호 정리 규칙을 먼저 넓히고, 그때까지 그 신청은 Pro 에 거래가 없는 레퍼런스로 두지 않고 따로 세웁니다.
✓ pass → 매입 신청 150건 정답 대조와 신청자 회신 초안으로 2주차를 엽니다.
✗ fail → 어긋난 신청만 모아 30일 창과 10% 문턱, 상태·구성품 묶는 범위를 다시 잡습니다.
✓ pass → 3주차 Pro 거래 API 연동과 매일 환율 갱신으로 넘어갑니다.
위 예측 UI 는 3주차까지 완주했을 때의 화면입니다. 1주차에 실제로 만드는 것은 아래 표시된 화면 하나입니다.
verdict사유 라벨 · request_id + 한 줄 요약(근거 수치 포함)화면·코드·면접에서 이 단어를 그대로 씁니다. 키는 출력 스키마의 enum 과 같습니다.
딜러 거래가보다 비쌈희망가 높음거래가가 오래됨거래가 오래됨Pro 에 거래가 없는 레퍼런스Pro 거래 없음거래가 안거래가 안매입 신청 하나가 레퍼런스 번호 맞추기와 원화 환산, 같은 조건 30일 중앙값 계산을 거쳐 어떤 매입가 판정을 받는지 남기는 형식입니다. 판정은 규칙이 정하고 신청자 회신 초안만 모델이 씁니다.
{"type":"object","properties":{"request_id":{"type":"string"},"ref_no":{"type":"string","description":"buy_requests 에 적혀 온 번호 원문입니다."},"ref_norm":{"type":"string","description":"ref_no 에서 브랜드 이름과 공백을 떼고 대문자로 올린 값입니다."},"condition":{"type":"string"},"box_papers":{"type":"string"},"asking_price":{"type":"integer","minimum":0},"comparable_count":{"type":"integer","minimum":0,"description":"requested_at 기준 30일 전부터 requested_at 까지 같은 ref_norm·condition·box_papers 로 찍힌 pro_trades 줄 수입니다."},"median_price_krw":{"type":["integer","null"],"description":"그 거래들의 price 에 traded_at 보다 늦지 않은 가장 최근 rate_date 의 krw_rate 를 곱한 원화 금액의 중앙값입니다. 짝수 건이면 가운데 두 값의 평균을 원 단위로 반올림합니다. comparable_count 가 0 이면 비웁니다."},"premium_pct":{"type":["number","null"],"description":"asking_price 를 median_price_krw 로 나눈 값에서 1 을 빼고 100 을 곱해 소수 첫째 자리로 반올림한 값입니다. median_price_krw 가 없으면 비웁니다."},"last_traded_at":{"type":["string","null"],"description":"같은 ref_norm 의 가장 최근 traded_at 입니다."},"last_trade_age_days":{"type":["integer","null"],"description":"requested_at 에서 last_traded_at 을 뺀 날수입니다."},"verdict":{"type":"string","enum":["거래가 안","딜러 거래가보다 비쌈","거래가가 오래됨","Pro 에 거래가 없는 레퍼런스"]},"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":["request_id","ref_no","ref_norm","condition","box_papers","asking_price","comparable_count","verdict","evidence","summary"]}[
{
"request_id": "BR-1042",
"ref_no": "126610LN",
"ref_norm": "126610LN",
"condition": "중고",
"box_papers": "풀세트",
"asking_price": 16500000,
"comparable_count": 4,
"median_price_krw": 14680450,
"premium_pct": 12.4,
"last_traded_at": "2026-09-18",
"last_trade_age_days": 4,
"verdict": "딜러 거래가보다 비쌈",
"evidence": [
{
"field": "asking_price",
"value": 16500000
},
{
"field": "price",
"value": 81500
},
{
"field": "price",
"value": 1560000
},
{
"field": "price",
"value": 14800000
},
{
"field": "price",
"value": 82000
},
{
"field": "krw_rate",
"value": 178.85
},
{
"field": "trade_no",
"agg": "count",
"value": 4
}
],
"summary": "서브마리너 데이트 중고 풀세트의 최근 30일 딜러 거래 4건 중앙값이 1,468만원인데 희망가가 1,650만원이라 12.4% 높습니다.",
"hedge": "8월 12일 홍콩 거래는 신청일보다 41일 앞서 중앙값에서 뺐고, 시계만 거래된 9월 12일 건도 구성품이 달라 뺐습니다."
},
{
"request_id": "BR-1060",
"ref_no": "126710BLRO",
"ref_norm": "126710BLRO",
"condition": "미착용",
"box_papers": "풀세트",
"asking_price": 28500000,
"comparable_count": 2,
"median_price_krw": 25412870,
"premium_pct": 12.1,
"last_traded_at": "2026-09-22",
"last_trade_age_days": 4,
"verdict": "딜러 거래가보다 비쌈",
"evidence": [
{
"field": "asking_price",
"value": 28500000
},
{
"field": "price",
"value": 142000
},
{
"field": "price",
"value": 18200
},
{
"field": "krw_rate",
"value": 1397.2
},
{
"field": "trade_no",
"agg": "count",
"value": 2
}
],
"summary": "GMT 마스터 II 펩시 미착용 풀세트는 최근 딜러 거래 2건 중앙값이 2,541만원이라 희망가 2,850만원이 12.1% 높습니다.",
"hedge": "견준 거래가 2건뿐이고, 중고로 거래된 9월 10일 건은 상태가 달라 뺐습니다."
},
{
"request_id": "BR-1053",
"ref_no": "15510st.oo.1320st.06",
"ref_norm": "15510ST.OO.1320ST.06",
"condition": "중고",
"box_papers": "풀세트",
"asking_price": 53000000,
"comparable_count": 3,
"median_price_krw": 52614000,
"premium_pct": 0.7,
"last_traded_at": "2026-09-20",
"last_trade_age_days": 4,
"verdict": "거래가 안",
"evidence": [
{
"field": "ref_no",
"value": "15510st.oo.1320st.06"
},
{
"field": "asking_price",
"value": 53000000
},
{
"field": "price",
"value": 292000
},
{
"field": "price",
"value": 37800
},
{
"field": "price",
"value": 5550000
},
{
"field": "krw_rate",
"value": 9.48
},
{
"field": "trade_no",
"agg": "count",
"value": 3
}
],
"summary": "로열 오크 41 중고 풀세트는 홍콩·미국·일본 거래 3건 중앙값 5,261만원 대비 희망가가 0.7% 높아 거래가 안에 있습니다.",
"hedge": "소문자로 적힌 번호를 대문자로 올려 Pro 번호와 맞췄고, 일요일인 9월 20일 엔화 거래는 9월 15일 환율로 바꿨습니다."
},
{
"request_id": "BR-1055",
"ref_no": "126610 LN",
"ref_norm": "126610LN",
"condition": "중고",
"box_papers": "풀세트",
"asking_price": 15900000,
"comparable_count": 4,
"median_price_krw": 14680450,
"premium_pct": 8.3,
"last_traded_at": "2026-09-18",
"last_trade_age_days": 7,
"verdict": "거래가 안",
"evidence": [
{
"field": "ref_no",
"value": "126610 LN"
},
{
"field": "asking_price",
"value": 15900000
},
{
"field": "price",
"value": 81500
},
{
"field": "price",
"value": 82000
},
{
"field": "trade_no",
"agg": "count",
"value": 4
}
],
"summary": "공백을 넣어 적은 서브마리너 데이트 신청도 같은 거래 4건과 견줘졌고, 희망가 1,590만원은 중앙값보다 8.3% 높아 10% 문턱 안입니다.",
"hedge": null
},
{
"request_id": "BR-1058",
"ref_no": "5711/1A-010",
"ref_norm": "5711/1A-010",
"condition": "중고",
"box_papers": "풀세트",
"asking_price": 145000000,
"comparable_count": 1,
"median_price_krw": 140620000,
"premium_pct": 3.1,
"last_traded_at": "2026-08-26",
"last_trade_age_days": 30,
"verdict": "거래가 안",
"evidence": [
{
"field": "traded_at",
"value": "2026-08-26"
},
{
"field": "requested_at",
"value": "2026-09-25"
},
{
"field": "price",
"value": 790000
},
{
"field": "krw_rate",
"value": 178
},
{
"field": "asking_price",
"value": 145000000
}
],
"summary": "노틸러스 중고 풀세트는 정확히 30일 전 홍콩 거래 1건과 견줘 희망가가 3.1% 높아 거래가 안에 들어옵니다.",
"hedge": "마지막 거래가 30일째라 오래됨 문턱에 딱 걸려 있고 견준 거래가 1건뿐입니다. 하루만 늦게 신청됐어도 금액 판정을 미뤘을 신청입니다."
},
{
"request_id": "BR-1047",
"ref_no": "310.30.42.50.01.001",
"ref_norm": "310.30.42.50.01.001",
"condition": "중고",
"box_papers": "시계만",
"asking_price": 6200000,
"comparable_count": 0,
"median_price_krw": null,
"premium_pct": null,
"last_traded_at": "2026-07-18",
"last_trade_age_days": 67,
"verdict": "거래가가 오래됨",
"evidence": [
{
"field": "traded_at",
"value": "2026-07-18"
},
{
"field": "requested_at",
"value": "2026-09-23"
}
],
"summary": "스피드마스터 프로페셔널은 Pro 의 마지막 거래가 67일 전이라 그 가격으로 견적을 내지 않았습니다.",
"hedge": "트레이딩 담당자가 홍콩 딜러에게 현재 시세를 물어본 뒤 다시 판정합니다."
},
{
"request_id": "BR-1049",
"ref_no": "IW371605",
"ref_norm": "IW371605",
"condition": "중고",
"box_papers": "시계만",
"asking_price": 7800000,
"comparable_count": 0,
"median_price_krw": null,
"premium_pct": null,
"last_traded_at": "2026-07-05",
"last_trade_age_days": 80,
"verdict": "거래가가 오래됨",
"evidence": [
{
"field": "model_name",
"value": null
},
{
"field": "traded_at",
"value": "2026-07-05"
},
{
"field": "requested_at",
"value": "2026-09-23"
}
],
"summary": "IW371605 는 Pro 의 마지막 거래가 80일 전 일본 거래라 기준으로 쓰지 않았습니다.",
"hedge": "신청자가 모델명을 비워 두어 문장에는 레퍼런스 번호만 썼습니다."
},
{
"request_id": "BR-1051",
"ref_no": "M79830RB-0001",
"ref_norm": "M79830RB-0001",
"condition": "미착용",
"box_papers": "풀세트",
"asking_price": 5100000,
"comparable_count": 0,
"median_price_krw": null,
"premium_pct": null,
"last_traded_at": null,
"last_trade_age_days": null,
"verdict": "Pro 에 거래가 없는 레퍼런스",
"evidence": [
{
"field": "ref_no",
"value": "M79830RB-0001"
},
{
"field": "trade_no",
"agg": "count",
"value": 0
}
],
"summary": "튜더 블랙베이 GMT 는 Pro 거래 내역에 이 레퍼런스가 한 번도 없어 딜러 거래가로 견적을 낼 수 없습니다.",
"hedge": "Pro 가 이 레퍼런스를 다른 번호 꼴로 적었을 수도 있어 트레이딩 담당자가 번호를 확인합니다."
},
{
"request_id": "BR-1064",
"ref_no": "124060",
"ref_norm": "124060",
"condition": "중고",
"box_papers": "시계만",
"asking_price": 11500000,
"comparable_count": 0,
"median_price_krw": null,
"premium_pct": null,
"last_traded_at": "2026-09-24",
"last_trade_age_days": 2,
"verdict": "거래가가 오래됨",
"evidence": [
{
"field": "box_papers",
"value": "시계만"
},
{
"field": "traded_at",
"value": "2026-09-24"
},
{
"field": "requested_at",
"value": "2026-09-26"
},
{
"field": "trade_no",
"agg": "count",
"value": 0
}
],
"summary": "서브마리너 노데이트 중고 시계만 신청은 최근 30일 안에 같은 구성품으로 찍힌 딜러 거래가 없어 풀세트 거래가로 견적을 내지 않았습니다.",
"hedge": "이 레퍼런스의 풀세트 거래는 이틀 전에도 있어 마지막 거래일만 보면 오래되지 않았습니다. 구성품이 달라 견줄 거래가가 없다는 뜻이라, 트레이딩 담당자가 시계만 거래 시세를 따로 확인합니다."
}
][자동 검증 · 코드가 판정합니다] 1. verdict 가 네 값 중 하나인지 확인합니다. 규칙이 정한 값이라 모델이 새 값을 지어내면 그 응답을 버립니다. 2. request_id·ref_no·ref_norm·condition·box_papers·asking_price·comparable_count·verdict·evidence·summary 필드가 빠짐없이 존재하는지 확인합니다. 3. asking_price·comparable_count·median_price_krw 가 0 이상인지 확인합니다. 4. ref_norm 을 ref_no 원문에서 다시 만듭니다. 앞머리 브랜드 이름(Rolex·Omega·Tudor·AP·Patek)과 공백을 떼고 대문자로 올리며, 점·슬래시·하이픈은 남깁니다. 5. median_price_krw 를 다시 계산합니다. 같은 ref_norm 에 condition 은 미착용→unworn·중고→pre-owned, box_papers 는 풀세트→full_set·보증서만→papers_only·시계만→watch_only 로 이어 고른 30일 거래의 price 에, 같은 currency 에서 traded_at 보다 늦지 않은 가장 최근 rate_date 의 krw_rate 를 곱해 중앙값을 냅니다. 짝수 건의 평균이 0.5 원으로 끝나면 올립니다. 6. premium_pct 가 asking_price 와 median_price_krw 로 다시 계산한 값과 같은지 확인합니다. 7. last_trade_age_days 가 requested_at 에서 last_traded_at 을 뺀 날수와 같은지 다시 계산합니다. 8. Pro 에 거래가 없는 레퍼런스는 ref_norm 이 pro_trades.ref_no 에 한 줄도 없는지 다시 셉니다. 9. 거래가가 오래됨은 last_trade_age_days 가 30 을 넘는지 다시 계산합니다. 30 과 같으면 오래됐다고 보지 않습니다. 다만 같은 ref_norm 은 30일 안에 거래가 있는데 같은 condition·box_papers 거래가 30일 안에 한 건도 없으면, 견줄 거래가가 30일 안에 없는 것이라 이 판정으로 둡니다. 이때 last_trade_age_days 는 30 이하로 나오므로 summary·hedge 에 구성품이나 상태가 달라 뺐다고 적습니다. 10. 딜러 거래가보다 비쌈은 asking_price × 100 이 median_price_krw × 110 보다 큰지, 거래가 안은 그 이하인지 정수로 다시 계산합니다. 반올림한 premium_pct 로 견주지 않습니다 — 10.04% 가 10.0 으로 보여도 10% 를 넘은 것입니다. 11. evidence 의 field 이름이 buy_requests·pro_trades·fx_rates 에 있는 컬럼인지 대조합니다. 없는 이름을 인용하면 회신 초안을 버리고 기본 문구로 되돌립니다. 12. evidence 의 value 가 수록된 행의 원문 값과 같은지 확인합니다. 여러 줄을 세어 얻은 수는 agg 를 적습니다. 13. summary 가 존댓말로 끝나는지 확인합니다. [판정 차례 · 위 규칙이 둘 이상 동시에 걸릴 때] 신청 한 건에는 판정을 하나만 남깁니다. ① Pro 에 거래가 없는 레퍼런스 → ② 거래가가 오래됨 → ③ 딜러 거래가보다 비쌈 → ④ 거래가 안. 거래가가 30일을 넘긴 레퍼런스는 희망가가 높아도 금액 판정을 하지 않습니다. 낡은 가격으로 견적을 내지 않기 위해서입니다. [하드 케이스 · 판정이 갈리는 이유] BR-1062 의 「Rolex 124060」은 브랜드 이름을 떼어 124060 으로 맞춰지고, 원화 거래 12,600,000 과 홍콩 거래 12,608,925 원의 중앙값 12,604,463 원 대비 3.1% 높아 거래가 안으로 갑니다. BR-1044 는 거래 3건 중앙값 23,516,350 원 대비 2.1% 높아 거래가 안입니다. BR-1064 는 이틀 전 풀세트 거래가 있지만 시계만 거래가 30일 안에 없어 규칙 9 단서로 거래가가 오래됨에 갑니다. [평가 러너 · 2주차] 손으로 매긴 정답 판정 150건과 자동 판정을 대조해 판정별 일치율을 내고, 어긋난 신청은 따로 모아 30일 창과 10% 문턱, 번호 정리 규칙의 빈칸을 다시 봅니다. [수동 검증 · 사람이 봅니다] 1. 딜러 거래가보다 비쌈으로 간 신청 20건을 열어 희귀 다이얼처럼 거래가보다 높게 사도 되는 경우인지 트레이딩 담당자가 판단합니다. 2. 견준 거래가 1~2건뿐인 신청을 모아, 몇 건부터 금액 판정을 믿을지 매입 담당자와 정합니다.
근거: 매입 사이트(WATCHUP Market 초기 버전) 개발