볼트앤너트
경력근거: 산업 도메인의 요구사항을 소프트웨어 구조와 기능으로 구체화
※ 실제 산출물이 아닌 AI 예측 시안입니다.
공고는 주요업무를 제조 현장과 협력기관 그리고 내부의 업무 및 문제 파악으로 열고, 바로 다음 줄에 산업 도메인의 요구사항을 소프트웨어 구조와 기능으로 구체화를 둡니다. 가공 건을 어느 공장에 넘길지는 현장에서 오래 해 온 사람의 감각으로 정해지는데, 그 감각을 공정·소재·치수·공차 네 칸으로 옮겨 놓지 않으면 소프트웨어가 붙을 자리가 생기지 않습니다. 이 화면은 그 옮겨 적기를 발주 한 건과 공장 열두 곳으로 실제로 해 본 결과물입니다. 다만 이 포트폴리오는 도메인 요구사항을 데이터 모델과 규칙, 화면으로 세우는 과정을 보여줍니다. 절삭 가공과 표면처리의 공정 지식은 주장하지 않습니다. 이 부품을 어떤 순서로 깎느냐고 물으시면 공장에 물어야 아는 일이라고 답하겠습니다.
주요업무 첫 줄이 제조 현장과 협력기관 그리고 내부의 업무 파악이고 바로 다음 줄이 산업 도메인의 요구사항을 소프트웨어 구조와 기능으로 옮기는 일입니다. 현장에서 말로 오가는 배정 기준을 표와 규칙으로 세우는 것이 이 자리의 첫 업무입니다.
주요업무에 시스템과 기능의 설계, 구현 및 테스트가 한 줄로 들어 있고 자격요건은 필요한 기능을 독립적으로 설계·구현할 수 있는 사람을 찾습니다. 규칙을 정하고 화면까지 세운 뒤 시험으로 막는 한 덩어리를 맡는 자리입니다.
자격요건에 AI가 만든 결과물의 동작과 품질을 스스로 판단할 수 있는 사람이 적혀 있고 주요업무에는 코드의 구조와 품질 검토가 있습니다. 모델이 쓴 문장을 규칙으로 되받아 검사하는 구성이 이 요구와 그대로 맞닿습니다.
바로발주에 들어온 가공 건의 발주 명세 한 줄을 파트너 공장 목록과 맞춰, 공장마다 받을 수 있는지 없는지와 그 사유를 한 줄로 세우는 운영 화면입니다. 입력은 도면 파일이 아니라 공정·소재·가장 긴 쪽 치수·요구 공차가 이미 칸으로 적힌 표이고, 도면에서 그 칸을 뽑아내는 일은 이 화면 앞에 따로 붙습니다. 공장은 먼저 그 공정을 하는 곳으로 좁혀 세우고, 공정이 다른 공장은 목록 맨 아래 접은 자리에 건수로만 묶습니다. 공정 이름 조회, 소재 표기를 대문자로 올리고 공백과 하이픈을 털어 맞추는 계산, 최대 치수와 공차 두 수치의 비교가 판정을 정합니다. 판정이 정해진 뒤에 모델이 하는 일은 막힌 사유를 담당자가 공장에 그대로 보낼 회신 문구로 옮겨 적는 것입니다.
바로발주에 들어온 가공 건을 파트너 공장에 배정하는 운영 담당자
배정이 되돌아오는 이유는 공장이 일을 미뤄서가 아니라 도면에 적힌 소재와 치수, 공차가 그 공장 설비 범위 밖이기 때문입니다. 발주 한 건을 공장 목록과 한 번에 맞춰 두면 담당자는 전화를 돌리기 전에 넘길 수 있는 곳부터 봅니다.
담당자가 쓰는 화면 하나가 돕니다. 발주 명세와 공장 설비 표를 올리면 발주를 고를 때마다 그 공정을 하는 공장이 판정별로 서고 어느 값이 그 판정을 만들었는지 그 자리에서 펼쳐집니다. 공정이 다른 공장은 맨 아래 접힌 자리에 건수로만 묶여 화면을 어지럽히지 않습니다. 1주차는 바로발주 시스템에 붙지 않고 관리자 화면에서 내려받은 파일 두 장을 읽는 것으로 시작합니다.
발주 10건과 공장 12곳을 맞춘 120건을 손으로 적은 정답표와 대조해 판정 일치 수를 내고, 어긋난 건이 소재 표기 정리에서 갈라졌는지 수치 비교에서 갈라졌는지 나눠 리포트로 냅니다. 막힌 사유를 공장에 보낼 회신 문구로 옮기는 모델 호출이 붙고 인용한 컬럼이 입력에 없으면 그 응답을 버립니다.
배정한 뒤 공장이 보낸 수락과 반려를 되받아 쌓고, 배정 가능으로 보냈는데 반려가 잦은 공장의 어느 칸이 실제와 다른지 설비 표 수정 후보로 냅니다.
담당자가 발주 명세와 공장 설비 표를 올리면 발주마다 그 공정을 하는 공장만 판정별로 뜨고, 어느 값이 그 판정을 만들었는지 그 자리에서 펼쳐집니다. 공정이 다른 공장은 맨 아래 접힌 자리에 건수로만 남습니다.
공차 칸이 비어 있는 도면, 수량이 한 개뿐인 시제품, 소재를 소문자와 하이픈으로 적은 발주를 섞은 입력 30종을 넣어도 화면이 죽지 않고 어느 값 때문에 그 판정이 나왔는지 읽힙니다.
열 이름이 빠지거나 최대 치수 칸이 비거나 인코딩이 깨진 파일 12종을 올려도 목록 대신 어느 줄이 왜 걸렸는지 이슈로 뜨고 나머지 발주는 그대로 판정됩니다.
발주 10건과 공장 12곳을 맞춘 120건으로 판정 일치 수를 냅니다. 단, 발주도 설비 표도 제가 칸을 채워 만든 것이라 이 수는 배정 적중률이 아니라 표기가 흔들리고 값이 비어도 판정 차례가 안 무너지는지만 말합니다.
위 수치는 더미데이터 자가채점이며 실제 배정 적중률은 바로발주에 쌓인 실제 발주와 파트너 공장의 회신 이력이 있어야 측정됩니다. 이 포트폴리오는 그 검증을 바로 돌릴 수 있는 상태로 만듭니다.
판정 일치 수는 제가 만든 발주에 제가 정답을 붙여 낸 숫자라 성능 증명이 아닙니다. 면접에서는 실제 도면에서 최대 치수와 공차를 어떻게 뽑아낼지부터 이야기하겠습니다.
정답을 단 사람과 발주를 지어낸 사람이 같아서 잘 맞는 것은 당연합니다. 공차가 비어 있는 도면, 수량이 한 개인 시제품, 설비가 낼 수 있는 가장 촘촘한 공차와 값이 똑같이 걸리는 경계값, 소재를 소문자와 하이픈으로 적은 줄을 더미에 일부러 섞어 쉬운 발주만 골라 푸는 함정을 피합니다.
설비 표에 적힌 최대 치수는 기계가 움직이는 거리이지 그 크기 부품을 실제로 물릴 수 있다는 뜻이 아닙니다. 지그와 치공구 사정으로 못 받는 경우가 남으므로 배정 가능은 후보 목록이지 확정이 아니라고 화면에 적어 둡니다.
소재 표기를 대문자와 공백, 하이픈만 털어 맞추므로 알루미늄처럼 한글로 적힌 표기나 A6061 같은 다른 규격 이름은 같은 소재로 보지 못합니다. 그런 줄은 소재를 못 다룸 쪽으로 흘러가니, 현장 표기 사전을 붙이는 일은 도입 단계 과제로 따로 잡습니다.
이 포트폴리오는 산업 도메인의 요구사항을 데이터 모델과 규칙으로 옮기는 과정을 보여줍니다. 절삭 가공과 표면처리의 공정 지식은 주장하지 않고, 판정은 네 칸의 값 비교로만 합니다.
실제로 도입하면 도면 파일에서 최대 치수와 공차를 읽어 내는 일이 앞에 붙습니다. 3D 도면 해석은 1주차 범위 밖이라 여기서는 이미 표로 정리된 발주 명세를 입력으로 받습니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
바로발주에 들어온 가공 건의 명세입니다. 공정과 소재, 가장 긴 쪽 치수, 요구 공차, 수량을 담습니다. 소재는 발주자가 적은 원문 표기 그대로 두어 대문자와 하이픈이 섞이게 했고, 도면에 공차가 안 적힌 건은 tolerance_mm 을 비워 두어 공차 항목을 건너뛰게 했습니다.
| order_id | part_name | process | material | max_dim_mm | tolerance_mm | qty | due_date | note |
|---|---|---|---|---|---|---|---|---|
| O-20418 | 센서 브라켓 | CNC 밀링 | AL6061 | 420 | 0.02 | 30 | 2026-09-24 | — |
| O-20419 | 구동 샤프트 | CNC 선반 | S45C | 180 | 0.01 | 12 | 2026-09-22 | 동심도 관리 요청 |
| O-20420 | 커버 플레이트 | 레이저 절단 | SUS 304 | 900 | 0.15 | 200 | 2026-09-30 | — |
| O-20421 | 시제품 하우징 | 3D 프린팅 | PLA | 240 | — | 1 | 2026-09-18 | 도면에 공차 기재 없음 |
| O-20422 | 제어함 케이스 | 판금 절곡 | SPCC | 610 | 0.3 | 80 | 2026-10-02 | — |
아래 JSON Schema 에 정확히 맞는 가공 발주 명세 행 30개를 JSON 배열로 만들어 주세요.
{"type":"object","properties":{"order_id":{"type":"string"},"part_name":{"type":"string"},"process":{"type":"string","enum":["CNC 밀링","CNC 선반","레이저 절단","판금 절곡","3D 프린팅"]},"material":{"type":"string"},"max_dim_mm":{"type":"integer","minimum":1,"maximum":3000},"tolerance_mm":{"type":["number","null"],"minimum":0.005,"maximum":1},"qty":{"type":"integer","minimum":1,"maximum":5000},"due_date":{"type":"string"},"note":{"type":["string","null"]}},"required":["order_id","part_name","process","material","max_dim_mm","tolerance_mm","qty","due_date","note"]}
조건: order_id 는 O-2 로 시작하는 다섯 자리 일련번호로 서로 다르게 씁니다. part_name 은 브라켓·샤프트·하우징·플레이트·프레임 계열의 부품 이름으로 씁니다. material 은 AL6061·SUS304·S45C·SPCC·SPHC·PLA·ABS 계열을 쓰되 표기를 일부러 흔들어 al-6061·SUS 304 처럼도 적습니다. max_dim_mm 은 50 부터 2600 사이, tolerance_mm 은 0.005 부터 0.5 사이로 흩뿌립니다.
쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: tolerance_mm 이 비어 있는 행 3건, qty 가 1 인 시제품 행 2건, tolerance_mm 이 0.005 로 최솟값에 걸리는 행 2건, 소문자와 하이픈이 섞인 소재 표기 4건, 어느 공장 설비도 넘어서는 2000mm 이상 행 2건.
JSON 배열만 출력합니다.{"type":"object","properties":{"order_id":{"type":"string"},"part_name":{"type":"string"},"process":{"type":"string","enum":["CNC 밀링","CNC 선반","레이저 절단","판금 절곡","3D 프린팅"]},"material":{"type":"string"},"max_dim_mm":{"type":"integer","minimum":1,"maximum":3000},"tolerance_mm":{"type":["number","null"],"minimum":0.005,"maximum":1},"qty":{"type":"integer","minimum":1,"maximum":5000},"due_date":{"type":"string"},"note":{"type":["string","null"]}},"required":["order_id","part_name","process","material","max_dim_mm","tolerance_mm","qty","due_date","note"]}파트너 공장이 밝힌 설비 범위입니다. 공장 한 곳이 맡는 공정과 다루는 소재 목록, 물릴 수 있는 가장 큰 치수, 낼 수 있는 가장 촘촘한 공차, 받는 최소 수량을 담습니다. 소재 목록도 공장이 적어 보낸 표기 그대로라 같은 소재가 AL6061·AL 6061·AL-6061 로 갈라져 있습니다.
| shop_id | shop_name | process | materials | max_dim_mm | min_tolerance_mm | min_qty | lead_time_days |
|---|---|---|---|---|---|---|---|
| S-101 | 대성정밀 | CNC 밀링 | ["AL6061","SUS304","S45C"] | 600 | 0.01 | 10 | 7 |
| S-114 | 한울테크 | CNC 밀링 | ["AL 6061","SPCC"] | 300 | 0.02 | 5 | 5 |
| S-122 | 세진CNC | CNC 밀링 | ["SUS304","S45C"] | 800 | 0.02 | 20 | 9 |
| S-137 | 포스밀 | CNC 밀링 | ["AL-6061","SUS304"] | 500 | 0.05 | 30 | 4 |
| S-141 | 삼정선반 | CNC 선반 | ["S45C","SUS304"] | 400 | 0.005 | 10 | 6 |
아래 JSON Schema 에 정확히 맞는 파트너 공장 설비 행 20개를 JSON 배열로 만들어 주세요.
{"type":"object","properties":{"shop_id":{"type":"string"},"shop_name":{"type":"string"},"process":{"type":"string","enum":["CNC 밀링","CNC 선반","레이저 절단","판금 절곡","3D 프린팅"]},"materials":{"type":"array","items":{"type":"string"}},"max_dim_mm":{"type":"integer","minimum":1,"maximum":5000},"min_tolerance_mm":{"type":"number","minimum":0.005,"maximum":1},"min_qty":{"type":"integer","minimum":1,"maximum":500},"lead_time_days":{"type":"integer","minimum":1,"maximum":60}},"required":["shop_id","shop_name","process","materials","max_dim_mm","min_tolerance_mm","min_qty","lead_time_days"]}
조건: shop_id 는 S- 로 시작하는 세 자리 번호로 서로 다르게 씁니다. shop_name 은 정밀·기계·판금·레이저가 붙은 국내 가공 업체 이름처럼 씁니다. materials 는 두세 개짜리 배열로 쓰고 같은 소재라도 공장마다 표기를 다르게 적습니다. max_dim_mm 은 200 부터 3000 사이, min_tolerance_mm 은 0.005 부터 0.3 사이로 흩뿌립니다.
쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: min_tolerance_mm 이 0.005 로 최솟값에 걸리는 행 2건, min_qty 가 1 인 행 1건, min_qty 가 100 이상이라 소량 발주를 못 받는 행 2건, 소재를 한 종류만 다루는 행 2건.
JSON 배열만 출력합니다.{"type":"object","properties":{"shop_id":{"type":"string"},"shop_name":{"type":"string"},"process":{"type":"string","enum":["CNC 밀링","CNC 선반","레이저 절단","판금 절곡","3D 프린팅"]},"materials":{"type":"array","items":{"type":"string"}},"max_dim_mm":{"type":"integer","minimum":1,"maximum":5000},"min_tolerance_mm":{"type":"number","minimum":0.005,"maximum":1},"min_qty":{"type":"integer","minimum":1,"maximum":500},"lead_time_days":{"type":"integer","minimum":1,"maximum":60}},"required":["shop_id","shop_name","process","materials","max_dim_mm","min_tolerance_mm","min_qty","lead_time_days"]}| TypeScript | 두 표를 읽는 규칙부터 화면까지 한 언어로 씁니다. 밀리미터와 개수가 섞이지 않도록 비교 함수마다 단위를 타입으로 박습니다. |
| React | 발주를 고르면 공장 목록이 판정별로 서는 화면입니다. 근거를 펼치는 카드도 여기 있습니다. |
| Next.js | 판정 API 와 화면을 한 저장소에 두고 파일 업로드부터 결과까지 한 번에 올립니다. |
| PostgreSQL | 발주 명세와 공장 설비를 담습니다. 공정 이름과 공장 번호에 건 인덱스가 목록을 세우는 시간을 좌우합니다. |
| Vitest | 소재 표기 정리와 수치 비교 규칙을 입력과 기대 판정 표로 놓고 시험합니다. 공고가 말한 시스템과 기능의 테스트가 이 자리입니다. |
| Claude | 막힌 사유를 공장에 보낼 회신 문구로 옮기는 기본 모델입니다. |
| Claude Code | 규칙 시험 케이스와 더미데이터 증강 스크립트를 쓰는 데 씁니다. 생성한 코드는 시험을 돌려 확인한 뒤 넣습니다. |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우려면 120건 정답표와 판정을 맞춰 보는 단계로 넘어갑니다.
✓ pass → 여기까지도 완결입니다. 더 키우려면 공장 회신을 되받아 설비 표 수정 후보를 내는 단계로 확장합니다.
위 예측 UI 는 3주차까지 완주했을 때의 화면입니다. 1주차에 실제로 만드는 것은 아래 표시된 화면 하나입니다.
verdict사유 라벨 · shop_id + 한 줄 요약(근거 수치 포함)화면·코드·면접에서 이 단어를 그대로 씁니다. 키는 출력 스키마의 enum 과 같습니다.
배정 가능배정 가능그 공정을 안 함공정 없음그 소재를 못 다룸소재 불가크기가 설비를 넘음크기 초과공차가 설비보다 촘촘함공차 미달발주 한 건과 공장 한 곳을 맞춰 받을 수 있는지와 그 사유를 남기는 형식입니다. 다섯 판정 값은 대조 규칙이 정하고 회신 문구만 모델이 씁니다.
{"type":"object","properties":{"order_id":{"type":"string"},"shop_id":{"type":"string"},"shop_name":{"type":"string"},"verdict":{"type":"string","enum":["배정 가능","그 공정을 안 함","그 소재를 못 다룸","크기가 설비를 넘음","공차가 설비보다 촘촘함"]},"size_gap_mm":{"type":["integer","null"],"description":"order_specs.max_dim_mm 에서 shop_capabilities.max_dim_mm 을 뺀 값입니다. 두 수치는 evidence 에 그대로 싣습니다. 크기가 설비 안에 들어가면 null 로 둡니다"},"tolerance_gap_mm":{"type":["number","null"],"description":"shop_capabilities.min_tolerance_mm 에서 order_specs.tolerance_mm 을 뺀 값입니다. 두 수치는 evidence 에 그대로 싣습니다. 도면에 공차가 없거나 설비 안에 들어가면 null 로 둡니다"},"evidence":{"type":"array","items":{"type":"object","properties":{"dataset":{"type":"string"},"field":{"type":"string"},"agg":{"type":["string","null"],"enum":["count",null]},"value":{"type":["string","number","null"]},"quote":{"type":["string","null"]}},"required":["dataset","field","value"]}},"summary":{"type":"string"},"hedge":{"type":["string","null"]}},"required":["order_id","shop_id","shop_name","verdict","size_gap_mm","tolerance_gap_mm","evidence","summary","hedge"]}[
{
"order_id": "O-20418",
"shop_id": "S-101",
"shop_name": "대성정밀",
"verdict": "배정 가능",
"size_gap_mm": null,
"tolerance_gap_mm": null,
"evidence": [
{
"dataset": "order_specs",
"field": "process",
"value": "CNC 밀링"
},
{
"dataset": "shop_capabilities",
"field": "process",
"value": "CNC 밀링"
},
{
"dataset": "order_specs",
"field": "material",
"value": "AL6061",
"quote": "AL6061"
},
{
"dataset": "shop_capabilities",
"field": "materials",
"value": "AL6061",
"quote": "AL6061"
},
{
"dataset": "order_specs",
"field": "max_dim_mm",
"value": 420
},
{
"dataset": "shop_capabilities",
"field": "max_dim_mm",
"value": 600
},
{
"dataset": "order_specs",
"field": "tolerance_mm",
"value": 0.02
},
{
"dataset": "shop_capabilities",
"field": "min_tolerance_mm",
"value": 0.01
},
{
"dataset": "order_specs",
"field": "qty",
"value": 30
},
{
"dataset": "shop_capabilities",
"field": "min_qty",
"value": 10
}
],
"summary": "대성정밀은 CNC 밀링에 AL6061 을 다루고 최대 600mm 까지 물리며 0.01mm 공차를 냅니다. 센서 브라켓의 420mm 와 0.02mm 는 그 범위 안입니다.",
"hedge": null
},
{
"order_id": "O-20418",
"shop_id": "S-114",
"shop_name": "한울테크",
"verdict": "크기가 설비를 넘음",
"size_gap_mm": 120,
"tolerance_gap_mm": null,
"evidence": [
{
"dataset": "order_specs",
"field": "process",
"value": "CNC 밀링"
},
{
"dataset": "shop_capabilities",
"field": "process",
"value": "CNC 밀링"
},
{
"dataset": "order_specs",
"field": "max_dim_mm",
"value": 420
},
{
"dataset": "shop_capabilities",
"field": "max_dim_mm",
"value": 300
},
{
"dataset": "shop_capabilities",
"field": "materials",
"value": "AL 6061",
"quote": "AL 6061"
}
],
"summary": "센서 브라켓은 가장 긴 쪽이 420mm 인데 한울테크가 물릴 수 있는 크기는 300mm 까지입니다. 120mm 가 남습니다.",
"hedge": null
},
{
"order_id": "O-20418",
"shop_id": "S-122",
"shop_name": "세진CNC",
"verdict": "그 소재를 못 다룸",
"size_gap_mm": null,
"tolerance_gap_mm": null,
"evidence": [
{
"dataset": "order_specs",
"field": "process",
"value": "CNC 밀링"
},
{
"dataset": "shop_capabilities",
"field": "process",
"value": "CNC 밀링"
},
{
"dataset": "order_specs",
"field": "material",
"value": "AL6061",
"quote": "AL6061"
},
{
"dataset": "shop_capabilities",
"field": "materials",
"value": "SUS304",
"quote": "SUS304"
}
],
"summary": "세진CNC 는 CNC 밀링을 하지만 SUS304 와 S45C 만 가공합니다. 센서 브라켓의 AL6061 은 설비 목록에 없습니다.",
"hedge": null
},
{
"order_id": "O-20418",
"shop_id": "S-137",
"shop_name": "포스밀",
"verdict": "공차가 설비보다 촘촘함",
"size_gap_mm": null,
"tolerance_gap_mm": 0.03,
"evidence": [
{
"dataset": "order_specs",
"field": "process",
"value": "CNC 밀링"
},
{
"dataset": "order_specs",
"field": "material",
"value": "AL6061",
"quote": "AL6061"
},
{
"dataset": "order_specs",
"field": "tolerance_mm",
"value": 0.02
},
{
"dataset": "shop_capabilities",
"field": "min_tolerance_mm",
"value": 0.05
}
],
"summary": "포스밀이 낼 수 있는 가장 촘촘한 공차는 0.05mm 인데 센서 브라켓 도면은 0.02mm 를 요구합니다. 0.03mm 만큼 모자랍니다.",
"hedge": null
},
{
"order_id": "O-20418",
"shop_id": "S-163",
"shop_name": "대한레이저",
"verdict": "그 공정을 안 함",
"size_gap_mm": null,
"tolerance_gap_mm": null,
"evidence": [
{
"dataset": "order_specs",
"field": "process",
"value": "CNC 밀링"
},
{
"dataset": "shop_capabilities",
"field": "process",
"value": "레이저 절단"
}
],
"summary": "센서 브라켓은 CNC 밀링 발주인데 대한레이저는 레이저 절단만 합니다. 소재와 치수는 보지 않습니다.",
"hedge": null
},
{
"order_id": "O-20421",
"shop_id": "S-185",
"shop_name": "큐브프린팅",
"verdict": "배정 가능",
"size_gap_mm": null,
"tolerance_gap_mm": null,
"evidence": [
{
"dataset": "order_specs",
"field": "process",
"value": "3D 프린팅"
},
{
"dataset": "shop_capabilities",
"field": "process",
"value": "3D 프린팅"
},
{
"dataset": "order_specs",
"field": "material",
"value": "PLA",
"quote": "PLA"
},
{
"dataset": "shop_capabilities",
"field": "materials",
"value": "PLA",
"quote": "PLA"
},
{
"dataset": "order_specs",
"field": "max_dim_mm",
"value": 240
},
{
"dataset": "shop_capabilities",
"field": "max_dim_mm",
"value": 300
},
{
"dataset": "order_specs",
"field": "tolerance_mm",
"value": null
},
{
"dataset": "order_specs",
"field": "qty",
"value": 1
},
{
"dataset": "shop_capabilities",
"field": "min_qty",
"value": 1
}
],
"summary": "시제품 하우징은 PLA 240mm 짜리라 큐브프린팅의 300mm 설비에 들어갑니다. 한 개짜리 발주도 이 공장의 최소 수량과 같아 그대로 받습니다.",
"hedge": "이 도면에는 공차가 적혀 있지 않아 공차 항목을 보지 않았습니다. 시제품이라 담당자가 공차를 비운 것인지 빠뜨린 것인지는 이 화면에서 정해지지 않습니다."
},
{
"order_id": "O-20423",
"shop_id": "S-137",
"shop_name": "포스밀",
"verdict": "배정 가능",
"size_gap_mm": null,
"tolerance_gap_mm": null,
"evidence": [
{
"dataset": "order_specs",
"field": "process",
"value": "CNC 밀링"
},
{
"dataset": "shop_capabilities",
"field": "process",
"value": "CNC 밀링"
},
{
"dataset": "order_specs",
"field": "material",
"value": "al-6061",
"quote": "al-6061"
},
{
"dataset": "shop_capabilities",
"field": "materials",
"value": "AL-6061",
"quote": "AL-6061"
},
{
"dataset": "order_specs",
"field": "max_dim_mm",
"value": 260
},
{
"dataset": "shop_capabilities",
"field": "max_dim_mm",
"value": 500
},
{
"dataset": "order_specs",
"field": "tolerance_mm",
"value": 0.05
},
{
"dataset": "shop_capabilities",
"field": "min_tolerance_mm",
"value": 0.05
},
{
"dataset": "order_specs",
"field": "qty",
"value": 6
},
{
"dataset": "shop_capabilities",
"field": "min_qty",
"value": 30
}
],
"summary": "지그 베이스는 소재가 al-6061 로 적혀 있지만 대문자로 올리고 하이픈을 털면 포스밀이 다루는 AL-6061 과 같은 값입니다. 크기 260mm 와 공차 0.05mm 모두 설비 안입니다.",
"hedge": "발주 수량 6개가 포스밀의 최소 수량 30개에 못 미칩니다. 최소 수량 아래를 받을지는 담당자가 공장과 통화해 정하는 일이라 판정을 바꾸지 않습니다."
}
][자동 검증 · 코드가 판정합니다] 1. verdict 가 다섯 값(배정 가능·그 공정을 안 함·그 소재를 못 다룸·크기가 설비를 넘음·공차가 설비보다 촘촘함) 중 하나인지 확인합니다. 판정은 규칙이 정하므로 모델이 다른 값을 쓰면 그 응답을 버립니다. 2. order_id·shop_id·verdict·evidence·summary 다섯 필드가 샘플에 모두 있는지 확인합니다. 3. max_dim_mm 이 1 이상 3000 이하인지, tolerance_mm 이 0.005 이상 1 이하인지, qty 가 1 이상 5000 이하인지 범위를 확인합니다. 4. size_gap_mm 을 order_specs.max_dim_mm 에서 shop_capabilities.max_dim_mm 을 뺀 값으로 다시 계산해 evidence 에 실린 두 수치와 맞는지 봅니다. 5. tolerance_gap_mm 을 shop_capabilities.min_tolerance_mm 에서 order_specs.tolerance_mm 을 뺀 값으로 다시 계산해 evidence 에 실린 두 수치와 맞는지 봅니다. 6. evidence 의 field 가 order_specs·shop_capabilities 에 실재하는 컬럼 이름인지 대조합니다. 없는 이름을 인용하면 회신 문구가 지어낸 문장이라는 뜻이라 규칙이 만든 기본 문구로 되돌립니다. 7. agg 가 없는 evidence 값이 그 컬럼에 수록된 행 값과 같은지 대조합니다. 8. evidence 의 quote 가 수록 샘플의 원문 그대로인지 확인합니다. 9. summary 와 hedge 가 존댓말로 끝나는 한국어 문장인지 확인합니다. 10. order_specs.tolerance_mm 이 비어 있으면 tolerance_gap_mm 은 null 이고 공차 항목을 보지 않습니다. O-20421 이 조건이 성립한 경우이고, O-20418 은 공차가 적혀 있어 성립하지 않은 경우입니다. 11. 대조 범위를 공정으로 먼저 좁힙니다. order_specs.process 와 shop_capabilities.process 가 같은 공장만 판정 목록에 세우고, 공정이 다른 공장은 판정을 그 공정을 안 함으로 남기되 목록 맨 아래 접은 자리에 건수로만 묶습니다. 발주 10건과 공장 12곳을 맞춘 120건 가운데 88건이 이 접은 자리로 들어가므로, 좁히지 않으면 화면 넉 줄 중 석 줄이 볼 필요 없는 공장이 되고 크기와 공차로 걸린 여섯 건이 그 아래 묻힙니다. 12. 좁힌 뒤 판정은 그 소재를 못 다룸, 크기가 설비를 넘음, 공차가 설비보다 촘촘함, 배정 가능 순으로 앞에서 걸리면 뒤를 보지 않습니다. 되돌아왔을 때 다시 배정하는 품이 큰 쪽을 앞에 둔 순서입니다. 13. 갈래마다 걸리는 조건은 아래와 같습니다. · 그 공정을 안 함은 order_specs.process 가 그 공장의 shop_capabilities.process 와 다를 때입니다. 이 값은 이 공장을 볼 필요가 없다는 표시라 다른 네 갈래와 같은 자리에 세우지 않습니다. · 그 소재를 못 다룸은 공정이 같은데 order_specs.material 을 대문자로 올리고 공백과 하이픈을 턴 값이 shop_capabilities.materials 를 같은 방식으로 턴 목록에 없을 때입니다. · 크기가 설비를 넘음은 order_specs.max_dim_mm 이 shop_capabilities.max_dim_mm 보다 클 때입니다. · 공차가 설비보다 촘촘함은 order_specs.tolerance_mm 이 shop_capabilities.min_tolerance_mm 보다 작을 때입니다. · 배정 가능은 위 네 갈래에 하나도 걸리지 않은 공장입니다. 14. order_specs.qty 가 shop_capabilities.min_qty 보다 작으면 그 두 수치를 hedge 에 적고 판정은 그대로 둡니다. O-20423 과 포스밀이 조건이 성립한 경우이고, O-20418 과 대성정밀은 수량이 최소 수량 이상이라 성립하지 않은 경우입니다. [평가 러너 · 2주차] 1. 발주 10건과 공장 12곳을 맞춘 120건을 손으로 적은 정답표와 대조해 판정 일치 수를 냅니다. 어긋난 건이 소재 표기 정리에서 갈라졌는지 수치 비교에서 갈라졌는지 나눠 리포트에 답니다. [수동 검증 · 사람이 봅니다] 1. 배정 가능으로 뜬 공장에 실제로 넘겨도 되는지 표본 20건을 담당자와 봅니다. 설비 목록에 안 적힌 치공구 사정으로 못 받는 경우가 남습니다. 2. 소재 표기를 터는 규칙이 현장 표기를 얼마나 담는지 분기마다 다시 봅니다. 한글 표기와 다른 규격 이름이 얼마나 들어오는지가 기준입니다.