래딩랩스
경력근거: 국내 중소기업이 해외 바이어를 효율적으로 발굴할 수 있도록
공고가 사업 목표로 적은 '신뢰할 수 있는 바이어 정보를 제공하여 정보 오류율을 10% 이하로 낮춤' 은 선하증권 추출본에서 같은 회사가 표기 차이로 여러 건으로 갈리는 문제를 먼저 닫아야 닿습니다. 이 화면은 갈린 표기를 담당자가 확정해 회사 단위로 합치는 자리를 웨이비즈 안에 두고, '1인 개발자로서 인프라, 프론트, 백엔드의 구분 없이 주요 기능을' 직접 설계하고 구현하라는 요구대로 적재와 규칙과 화면과 잠금 조건까지 한 사람이 닫습니다. 이 포트폴리오는 표기가 흔들리는 레코드를 규칙으로 묶어 사람이 화면에서 확정해야 다음 단계가 열리게 만드는 제품 구현을 보여주며, 무역 실무와 선하증권 해석과 미국 화장품 유통 도메인 전문성은 주장하지 않습니다. HS 코드 체계나 통관 실무의 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
공고는 신뢰할 수 있는 바이어 정보를 제공해 정보 오류율을 10% 이하로 낮추는 것을 사업 목표로 적습니다. 같은 회사가 표기 차이로 여러 건으로 갈리는 것이 그 오류의 큰 몫이라, 확정하는 자리를 제품 화면 안에 둡니다.
웨이비즈는 선하증권 데이터와 수출 관련 데이터로 미국 화장품 바이어 정보를 제공합니다. 그 데이터의 수하인 상호가 건마다 흔들린다는 점이 이 화면이 다루는 입력입니다.
공고는 인프라와 프론트와 백엔드를 구분하지 않고 주요 기능을 AI 툴로 직접 설계하고 구현하라고 적습니다. 화면 하나를 데이터 모델과 잠금 규칙까지 혼자 닫는 방식으로 그 요구에 그대로 답합니다.
웨이비즈에서 내려받은 선하증권 추출본을 올리면 'ABC COSMETICS INC' 와 'ABC COSMETICS, INC.' 와 'ABC COSM INC' 처럼 표기만 다른 행들이 후보 묶음으로 모여 나오고, 해외영업 담당자가 묶음마다 합칠지 떼어 놓을지 보류할지 화면에서 하나씩 확정하는 웹 화면입니다. 확정할 때마다 회사 단위 거래 건수와 총 물량과 최근 수입월이 그 자리에서 다시 합산되어 상위 바이어 순서가 눈앞에서 바뀌고, 미결 묶음이 하나라도 남아 있으면 연락할 바이어 목록 내보내기는 잠긴 채로 있습니다. 내보낸 목록의 회사마다 담당자가 확정한 원본 선하증권 행이 그대로 묶여 있어, 어느 표기에서 온 회사인지 화면에서 되짚습니다.
미국 화장품 바이어를 찾는 국내 수출 기업의 해외영업 담당자입니다. 내려받은 바이어 목록에 같은 회사가 표기만 바뀐 채 세 번 나와 거래량이 쪼개지는 바람에 큰 바이어를 작은 곳으로 넘겨 봤고, 이미 연락한 회사에 다른 이름인 줄 알고 또 연락한 적도 있어, 연락처를 추리기 전에 같은 회사인지부터 화면에서 정리해 두고 싶어 합니다.
상호와 주소와 HS 코드를 정규화한 뒤 규칙으로는 후보 묶음까지만 만들고 같은 회사인지의 확정을 담당자에게 남기면, 담당자가 화면에서 묶음을 하나씩 정리하는 동안 표기가 갈린 채로 집계된 바이어 목록이 밖으로 나갈 자리가 사라집니다.
선하증권 추출본 CSV 를 올려 상호와 주소를 정규화하고 규칙으로 후보 묶음을 만드는 적재 층, 묶음마다 합치기와 떼기와 보류를 담당자가 확정하는 화면, 확정할 때마다 회사 단위 집계와 상위 바이어 순서를 다시 계산하는 순수 함수, 미결 묶음이 0 일 때만 열리는 내보내기까지 Next.js 한 앱으로 묶은 완결품입니다. 업로드 중 상태와 빈 상태, 열 이름이 어긋난 파일을 올렸을 때의 실패 화면을 함께 채웁니다. 실제 웨이비즈 데이터 연동 대신 CSV 업로드로 시작합니다.
확정 이력을 남겨 잘못 합친 묶음을 이전 상태로 되돌리고, 두 담당자가 같은 묶음을 동시에 확정할 때 나중 저장이 앞 저장을 덮지 않게 리비전으로 막으며, 담당자 라벨 대비 규칙 후보의 재현율과 오탐을 규칙별로 정리한 리포트가 함께 남는 상태입니다.
확정된 회사 단위로 월별 수입 물량 추이와 상위 바이어 순위를 화면 안 차트로 보고, 상위 회사마다 어느 선하증권 행이 근거인지 인용한 영문 아웃리치 문안 초안을 파일로 내려받는 흐름이 붙은 상태입니다. 발송은 하지 않고 대상 목록과 문안까지만 만듭니다.
같은 회사가 세 가지 표기로 갈린 더미 추출본 300행을 올려, 묶음을 확정하기 전에는 내보내기가 잠겨 있고 담당자가 합치기를 누르는 순간 상위 바이어 순서가 바뀌는 흐름을 화면에서 시연합니다.
법인격 접미사가 다르거나 주소가 비어 있거나 HS 코드가 어긋난 하드 케이스 40건을 섞어도 같은 추출본에는 항상 같은 후보 묶음이 나오고, 묶음 설명이 인용한 문자열이 항상 원본 행의 실제 값인 것을 단위 테스트로 보여줍니다.
2주차에는 담당자가 같은 회사라고 표시한 표기 쌍 중 규칙 후보가 걸러 올린 비율과, 다른 회사인데 같은 묶음에 들어간 비율을 규칙별로 냅니다(표본: 라벨 쌍 200건, 자가 라벨).
위 수치는 작성자가 만든 더미 추출본과 자가 라벨 기준이라 성능 증명이 아니라 데모 조건 동작이며, 실제 담당자가 어떤 표기를 같은 회사로 보는지는 래딩랩스의 실제 선하증권 데이터와 실 담당자 확정 기록이 있어야 측정됩니다. 이 포트폴리오는 그 검증을 바로 돌릴 수 있는 상태까지 만듭니다.
재현율과 오탐 수치는 작성자가 만든 더미 추출본과 자가 라벨 기준의 자가채점이라 성능 증명이 아닙니다. 면접에서는 화면 동작과 잠금 구조로 솔직하게 설명합니다.
정답을 내가 만들었으니 묶음이 잘 맞는 게 당연해지는 함정이 있어, 이름이 비슷하지만 다른 회사인 쌍과 상호에 오탈자가 섞인 쌍, 상호가 플레이스홀더로 들어간 행을 더미에 일부러 넣습니다.
이 포트폴리오는 표기가 흔들리는 레코드를 규칙으로 묶어 사람이 화면에서 확정해야 다음 단계가 열리게 만드는 제품 구현을 보여주며, 무역 실무와 선하증권 해석과 미국 화장품 유통 도메인 전문성은 주장하지 않습니다. 관세 분류나 통관 실무의 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
규칙만으로는 같은 주소를 쓰는 계열사와 사명을 바꾼 같은 회사를 구분하지 못합니다. 그런 묶음은 보류로 남겨 미결로 세고, 사유 없이 잠금을 우회하는 길을 만들지 않습니다.
실제 도입 시 웨이비즈 데이터 직접 연동과 실 담당자 확정 기록에 맞춘 규칙 재보정이 필요합니다. 이는 도입 단계 과제로 분리합니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
웨이비즈에서 내려받았다고 가정한 선하증권 추출본입니다. 같은 회사가 표기만 달리해 여러 행으로 갈려 있고, 이름이 비슷하지만 다른 회사와 오탈자가 섞인 상호와 상호가 플레이스홀더로 들어간 행이 함께 있어 화면에서 실제로 확정할 거리가 남아 있습니다.
| record_id | consignee_raw | consignee_address | shipper_name | hs_code | arrival_port | weight_kg | arrival_month |
|---|---|---|---|---|---|---|---|
| BOL0001 | ABC COSMETICS INC | 1200 WILSHIRE BLVD, LOS ANGELES, CA | SEOUL BEAUTY CO., LTD. | 3304.99 | LOS ANGELES, CA | 1,240.5 | 2026-03 |
| BOL0002 | ABC COSMETICS, INC. | 1200 WILSHIRE BLVD LOS ANGELES CA 90017 | SEOUL BEAUTY CO., LTD. | 3304.99 | LOS ANGELES, CA | 980 | 2026-04 |
| BOL0003 | ABC COSM INC | — | KBEAUTY LABS INC | 3304.20 | LONG BEACH, CA | 310 | 2026-05 |
| BOL0004 | ABC COSMETIC LABS LLC | 88 HARBOR DR, SAN DIEGO, CA | SEOUL BEAUTY CO., LTD. | 3304.99 | SAN DIEGO, CA | 2,200 | 2026-02 |
| BOL0005 | GLOW HOUSE DISTRIBUTION | 455 W 34TH ST, NEW YORK, NY | DAEGU COSMETIC CO. | 3304.10 | NEW YORK, NY | — | 2026-01 |
아래 Zod 스키마에 맞는 선하증권 추출본 60행을 JSON 배열로 생성합니다.
{"type":"object","properties":{"record_id":{"type":"string"},"consignee_raw":{"type":"string"},"consignee_address":{"type":["string","null"]},"shipper_name":{"type":"string"},"hs_code":{"type":"string"},"arrival_port":{"type":"string"},"weight_kg":{"type":["number","null"]},"arrival_month":{"type":"string"}},"required":["record_id","consignee_raw","consignee_address","shipper_name","hs_code","arrival_port","weight_kg","arrival_month"]}
쉬운 데이터만 만들지 말고 다음 하드 케이스를 반드시 섞습니다: (1) 같은 회사가 법인격 접미사(INC·, INC.·CORP·LLC)와 쉼표·마침표만 달리해 세 행 이상으로 갈린 회사 4곳, (2) 이름이 비슷하지만 주소와 입항지가 전혀 다른 별개 회사 쌍 3쌍, (3) 상호에 오탈자가 있는 행 3건, (4) consignee_address 가 null 인 행 5건, (5) weight_kg 가 null 이거나 0 이거나 4만 이상으로 극단인 행 각 2건, (6) hs_code 가 0000.00 또는 9999.99 인 비정상 행 2건, (7) consignee_raw 가 'N/A' 나 'UNKNOWN' 같은 플레이스홀더인 행 2건, (8) 같은 주소를 쓰지만 상호가 확연히 다른 계열사로 보이는 쌍 1쌍. arrival_month 는 2025-10 부터 2026-06 사이의 YYYY-MM 형식으로 씁니다. JSON 배열만 냅니다.{"type":"object","properties":{"record_id":{"type":"string"},"consignee_raw":{"type":"string"},"consignee_address":{"type":["string","null"]},"shipper_name":{"type":"string"},"hs_code":{"type":"string"},"arrival_port":{"type":"string"},"weight_kg":{"type":["number","null"]},"arrival_month":{"type":"string"}},"required":["record_id","consignee_raw","consignee_address","shipper_name","hs_code","arrival_port","weight_kg","arrival_month"]}담당자가 예전에 이미 확정해 둔 바이어 명부입니다. 새 추출본의 묶음이 기존 회사에 붙는지 새 회사인지 판단하는 기준이 되고, 이미 합쳐져 사라진 회사와 연락하지 않기로 한 회사가 섞여 있어 확정 화면에서 그대로 되살아나지 않는지 확인합니다.
| buyer_id | canonical_name | known_aliases | country | first_confirmed_month | status |
|---|---|---|---|---|---|
| by_abc | ABC COSMETICS INC | ["ABC COSMETICS, INC.","ABC COSM INC"] | US | 2025-08 | active |
| by_abclabs | ABC COSMETIC LABS LLC | [] | US | 2025-11 | active |
| by_glow | GLOW HOUSE DISTRIBUTION LLC | ["GLOWHOUSE DISTRIBUTION LLC"] | US | 2025-09 | active |
| by_glow_old | GLOW HOUSE LLC | [] | US | 2024-05 | merged_away |
| by_pacific | PACIFIC BEAUTY SUPPLY CORP | ["PACIFIC BEUATY SUPPLY CORP"] | US | 2025-06 | active |
아래 Zod 스키마에 맞는 바이어 명부 40행을 JSON 배열로 생성합니다.
{"type":"object","properties":{"buyer_id":{"type":"string"},"canonical_name":{"type":"string"},"known_aliases":{"type":"array","items":{"type":"string"}},"country":{"type":"string"},"first_confirmed_month":{"type":"string"},"status":{"type":"string","enum":["active","merged_away","do_not_contact"]}},"required":["buyer_id","canonical_name","known_aliases","country","first_confirmed_month","status"]}
조건: status 는 active 가 대부분이고 merged_away 6건, do_not_contact 3건을 넣습니다. 다음 하드 케이스를 반드시 섞습니다: (1) canonical_name 이 서로 비슷하지만 별개인 회사 쌍 4쌍, (2) known_aliases 가 빈 배열인 회사 12건, (3) merged_away 인 회사의 canonical_name 이 다른 active 회사의 known_aliases 에 그대로 들어 있는 쌍 3쌍, (4) country 가 US 가 아닌 회사 3건. first_confirmed_month 는 2024-01 부터 2026-05 사이의 YYYY-MM 형식으로 씁니다. JSON 배열만 냅니다.{"type":"object","properties":{"buyer_id":{"type":"string"},"canonical_name":{"type":"string"},"known_aliases":{"type":"array","items":{"type":"string"}},"country":{"type":"string"},"first_confirmed_month":{"type":"string"},"status":{"type":"string","enum":["active","merged_away","do_not_contact"]}},"required":["buyer_id","canonical_name","known_aliases","country","first_confirmed_month","status"]}담당자 페르소나가 두 선하증권 행의 수하인이 같은 회사인지 직접 붙인 정답 라벨입니다. 규칙이 만든 후보 묶음과 대조하는 2주차 재현율과 오탐의 기준이 되며, 규칙으로는 갈리지 않는 계열사와 사명 변경 쌍을 unsure 로 두어 무조건 합치도록 몰지 않는지 확인합니다.
| pair_id | left_record_id | right_record_id | verdict | basis | note |
|---|---|---|---|---|---|
| P001 | BOL0001 | BOL0002 | same | address | 접미사 표기만 다르고 주소가 같습니다 |
| P002 | BOL0001 | BOL0003 | same | name | 주소가 비어 있어 상호 축약만으로 판단했습니다 |
| P003 | BOL0001 | BOL0004 | different | address | 이름은 비슷하지만 주소와 입항지가 다릅니다 |
| P004 | BOL0002 | BOL0004 | different | address | — |
| P005 | BOL0005 | BOL0006 | same | address | 띄어쓰기와 접미사만 다릅니다 |
아래 Zod 스키마에 맞는 동일 회사 라벨 200쌍을 JSON 배열로 생성합니다.
{"type":"object","properties":{"pair_id":{"type":"string"},"left_record_id":{"type":"string"},"right_record_id":{"type":"string"},"verdict":{"type":"string","enum":["same","different","unsure"]},"basis":{"type":"string","enum":["name","address","hs_code","port","none"]},"note":{"type":["string","null"]}},"required":["pair_id","left_record_id","right_record_id","verdict","basis","note"]}
조건: verdict 는 same 이 40%, different 가 45%, unsure 가 15% 가 되게 하고 basis 는 name·address·hs_code·port·none 에 고르게 퍼뜨립니다. 다음 하드 케이스를 반드시 섞습니다: (1) 상호는 매우 비슷하지만 different 인 쌍 20건, (2) 상호는 많이 다르지만 주소가 같아 same 인 쌍 10건, (3) 한쪽 주소가 null 이라 상호만으로 판단한 same 쌍 10건, (4) 상호가 플레이스홀더라 basis 가 none 이고 different 인 쌍 8건, (5) 같은 물류 대행 주소를 공유하는 계열사로 보여 unsure 인 쌍 12건. verdict 가 different 인 쌍의 note 는 대체로 null 로 두고, unsure 인 쌍에는 무엇을 더 확인해야 하는지 한 문장으로 적습니다. left_record_id 와 right_record_id 는 bol_records 의 record_id 를 씁니다. JSON 배열만 냅니다.{"type":"object","properties":{"pair_id":{"type":"string"},"left_record_id":{"type":"string"},"right_record_id":{"type":"string"},"verdict":{"type":"string","enum":["same","different","unsure"]},"basis":{"type":"string","enum":["name","address","hs_code","port","none"]},"note":{"type":["string","null"]}},"required":["pair_id","left_record_id","right_record_id","verdict","basis","note"]}| TypeScript | 묶음 상태와 확정 결과의 타입을 정의하고, 확정 결과로 집계를 다시 계산하는 함수를 순수 함수로 두어 화면과 서버가 같은 코드로 같은 숫자를 내게 하는 언어입니다. 같은 확정 조합에는 항상 같은 집계가 나오는지 단위 테스트로 고정합니다 |
| React | 후보 묶음 카드와 그 안의 원본 표기 목록, 합치기와 떼기와 보류 버튼, 미결 개수 배지를 그리는 화면 층이며, 확정할 때마다 상위 바이어 순서와 내보내기 잠금 상태를 다시 그립니다 |
| Next.js | 업로드와 묶음 확정과 목록 미리보기를 한 앱으로 묶는 프레임워크이며, 서버 액션으로 확정을 저장하고 로딩 화면과 실패 화면을 라우트 단위로 둡니다 |
| Node.js | 업로드 처리와 묶음 확정 API 를 맡습니다. 내보내기 요청은 서버에서도 미결 묶음이 0 인지 다시 확인한 뒤에만 받습니다 |
| Python | 선하증권 CSV 를 읽어 법인격 접미사와 주소와 HS 코드를 정규화하고 블로킹으로 후보 묶음을 만드는 적재 층입니다. 묶음마다 어떤 규칙이 걸렸고 어떤 원본 문자열이 근거인지 함께 남깁니다 |
| 딥러닝 | 사전학습된 문자열 임베딩으로 철자가 어긋난 상호까지 후보에 넣는 데만 씁니다. 모델을 직접 학습시키지 않고, 임베딩이 올린 후보도 규칙 근거가 함께 붙어야 화면에 나옵니다 |
| PostgreSQL | 선하증권 행과 후보 묶음과 확정 이력을 담고 확정된 회사와 원본 행의 연결을 한곳에 둡니다. 2주차에 리비전 컬럼을 더해 동시 확정 충돌을 잡습니다 |
| Superset | 3주차에 확정된 회사 단위 월별 수입 추이를 화면 안 차트로 그리면서 같은 질의를 Superset 에도 얹어, 공고 우대사항의 데이터 시각화 도구 경험에 닿습니다 |
| AI 코딩 도구 | 공고가 요구하는 AI 툴 활용 개발 방식대로 구현을 코딩 에이전트로 진행하고, 에이전트가 낸 코드는 집계 순수 함수의 단위 테스트를 통과해야 반영합니다 |
✓ pass → 여기서 멈춰도 완결입니다. 더 키우려면 확정 이력 되돌리기와 동시 확정 충돌 처리로 넘어갑니다.
✓ pass → 확정된 회사 단위 추이 차트와 영문 아웃리치 문안 초안 단계로 넘어갑니다.
담당자가 화면에서 묶음을 모두 확정한 뒤에만 만들어지는 연락 대상 바이어 목록입니다. 회사마다 확정한 원본 선하증권 행이 그대로 묶여 있고 집계와 순위는 그 확정 결과에서만 계산되며, 미결 묶음이 남아 있으면 생성 자체가 막힙니다.
{"type":"object","properties":{"export_id":{"type":"string"},"source_file":{"type":"string"},"confirmed_at":{"type":"string"},"buyers":{"type":"array","items":{"type":"object","properties":{"buyer_id":{"type":"string"},"canonical_name":{"type":"string"},"merged_record_ids":{"type":"array","items":{"type":"string"},"minimum":1},"shipment_count":{"type":"integer"},"total_weight_kg":{"type":"number"},"last_arrival_month":{"type":"string"},"rank":{"type":"integer"},"confirmed_by":{"type":"string"},"evidence_quotes":{"type":"array","items":{"type":"string"},"minimum":1}},"required":["buyer_id","canonical_name","merged_record_ids","shipment_count","total_weight_kg","last_arrival_month","rank","confirmed_by","evidence_quotes"]},"minimum":1},"unresolved_group_count":{"const":0},"split_decisions":{"type":"array","items":{"type":"object","properties":{"group_id":{"type":"string"},"kept_apart_record_ids":{"type":"array","items":{"type":"string"}},"reason":{"type":"string"}},"required":["group_id","kept_apart_record_ids","reason"]}},"excluded_buyer_ids":{"type":"array","items":{"type":"string"}},"hedge":{"type":"string"}},"required":["export_id","source_file","confirmed_at","buyers","unresolved_group_count","split_decisions","excluded_buyer_ids","hedge"]}[
{
"export_id": "EXP-2026-06-01",
"source_file": "waybeez_bol_2026H1.csv",
"confirmed_at": "2026-06-14",
"buyers": [
{
"buyer_id": "by_abc",
"canonical_name": "ABC COSMETICS INC",
"merged_record_ids": [
"BOL0001",
"BOL0002",
"BOL0003"
],
"shipment_count": 3,
"total_weight_kg": 2530.5,
"last_arrival_month": "2026-05",
"rank": 1,
"confirmed_by": "sales_kim",
"evidence_quotes": [
"ABC COSMETICS INC",
"ABC COSMETICS, INC.",
"ABC COSM INC"
]
},
{
"buyer_id": "by_abclabs",
"canonical_name": "ABC COSMETIC LABS LLC",
"merged_record_ids": [
"BOL0004"
],
"shipment_count": 1,
"total_weight_kg": 2200,
"last_arrival_month": "2026-02",
"rank": 2,
"confirmed_by": "sales_kim",
"evidence_quotes": [
"ABC COSMETIC LABS LLC"
]
},
{
"buyer_id": "by_miami",
"canonical_name": "MIAMI SKIN TRADING CO",
"merged_record_ids": [
"BOL0010",
"BOL0011"
],
"shipment_count": 2,
"total_weight_kg": 1890,
"last_arrival_month": "2026-06",
"rank": 3,
"confirmed_by": "sales_kim",
"evidence_quotes": [
"MIAMI SKIN TRADING",
"MIAMI SKIN TRADING CO"
]
}
],
"unresolved_group_count": 0,
"split_decisions": [
{
"group_id": "G_ABC",
"kept_apart_record_ids": [
"BOL0004"
],
"reason": "상호는 비슷하지만 주소와 입항지가 달라 떼어 놓았습니다"
}
],
"excluded_buyer_ids": [
"by_sunset"
],
"hedge": "이 목록은 작성자가 만든 더미 추출본을 담당자 페르소나가 확정한 합성 결과이며, 실제 선하증권 데이터의 표기 분포와는 다를 수 있습니다."
},
{
"export_id": "EXP-2026-06-02",
"source_file": "waybeez_bol_west_2026Q2.csv",
"confirmed_at": "2026-06-20",
"buyers": [
{
"buyer_id": "by_glow",
"canonical_name": "GLOW HOUSE DISTRIBUTION LLC",
"merged_record_ids": [
"BOL0005",
"BOL0006"
],
"shipment_count": 2,
"total_weight_kg": 1450,
"last_arrival_month": "2026-03",
"rank": 1,
"confirmed_by": "sales_park",
"evidence_quotes": [
"GLOW HOUSE DISTRIBUTION",
"GLOWHOUSE DISTRIBUTION LLC"
]
},
{
"buyer_id": "by_pacific",
"canonical_name": "PACIFIC BEAUTY SUPPLY CORP",
"merged_record_ids": [
"BOL0007",
"BOL0008"
],
"shipment_count": 2,
"total_weight_kg": 1360,
"last_arrival_month": "2026-05",
"rank": 2,
"confirmed_by": "sales_park",
"evidence_quotes": [
"PACIFIC BEAUTY SUPPLY CORP",
"PACIFIC BEUATY SUPPLY CORP"
]
}
],
"unresolved_group_count": 0,
"split_decisions": [
{
"group_id": "G_PLACEHOLDER",
"kept_apart_record_ids": [
"BOL0009"
],
"reason": "수하인 상호가 플레이스홀더라 어느 회사에도 붙이지 않았습니다"
}
],
"excluded_buyer_ids": [],
"hedge": "총 물량 합계는 weight_kg 가 비어 있던 행을 0 으로 두고 계산한 값이라 실제 물량과 차이가 있으며, 합성 더미 기준의 숫자입니다."
}
][자동 검증 · 스크립트가 전수 수행] 1. 출력이 Zod 스키마를 통과하는지 확인합니다(형식이 깨진 목록이 밖으로 나가는 것을 차단). 2. unresolved_group_count 가 0 인지 확인하고, 화면의 미결 개수와 서버가 다시 센 미결 개수가 같은지 대조합니다. 3. 모든 merged_record_ids 가 bol_records 에 실재하고 회사끼리 겹치지 않는지 확인합니다. 한 행이 두 회사에 동시에 묶이면 거절합니다. 4. shipment_count 가 merged_record_ids 개수와 같고, total_weight_kg 가 그 행들의 weight_kg 합과 같으며(null 은 0 으로 처리), last_arrival_month 가 그중 최댓값인지 확인합니다. 같은 확정 조합에는 항상 같은 값이 나오므로 집계를 그대로 재현합니다. 5. rank 가 total_weight_kg 내림차순과 일치하고 1부터 빈틈없이 증가하는지 확인합니다. 6. 모든 evidence_quotes 가 묶인 원본 행 consignee_raw 의 실제 값인지 확인합니다(지어낸 상호 차단). 7. split_decisions 의 kept_apart_record_ids 가 규칙이 같은 묶음으로 올렸던 행인지 대조합니다. 애초에 같은 묶음이 아니었던 행이 떼기 기록에 있으면 거절합니다. 8. excluded_buyer_ids 가 buyer_directory 에서 status 가 do_not_contact 이거나 merged_away 인 회사만 담고 있는지 확인합니다. 9. 미결 묶음이 남은 상태의 내보내기 요청을 서버가 거절하고, 화면의 잠금 상태와 서버 판정이 같은지 확인합니다. [수동 검증 · 사람이 표본 확인] 1. 담당자가 떼어 놓은 묶음의 사유가 주소와 입항지 근거와 어긋나지 않는지 목록 30건을 표본 검토합니다. 2. 보류로 남긴 계열사 묶음이 실제로 사람 확인이 필요한 경우인지 확인합니다.
근거: 국내 중소기업이 해외 바이어를 효율적으로 발굴할 수 있도록