헬로월드랩스
경력근거: 경기 안양시 / 솔루션·SI·CRM·ERP, 웹개발자, AI서비스개발자 / 즉시 지원 / 경력5년↑
※ 실제 산출물이 아닌 AI 예측 시안입니다.
헬로월드랩스는 AX혁신센터를 두고 컨설팅부터 진단, 교육, 실행과 KPI 측정까지 AX 전환 전 과정을 연결하며, AX솔루션팀은 AX컨설팅팀과 함께 그 전 과정에 붙어 각 단계가 실제 현장에서 작동하도록 디지털 프로덕트를 기획하고 개발합니다. 이 팀의 개발 과제는 자사 로드맵이 아니라 컨설팅팀이 고객사 현장에서 받아 온 진단 자료에서 나오고, 팀장급 PL 이 그 자료를 구현 가능한 개발 과제와 일정으로 바꾸는 일이 프로젝트의 첫 관문입니다. 이 콘솔은 그 관문 하나를 입력과 출력이 있는 제품으로 만든 것이라, 컨설팅과 개발이 한 팀으로 붙어 있는 헬로월드랩스의 일 순서에서만 의미가 있습니다. 다만 이 포트폴리오는 요구를 개발 과제와 일정으로 옮기는 기술, 웹 콘솔 구현, 스키마를 강제한 변환 파이프라인 구성을 보여줍니다. 데모에 쓴 제조사 구매·품질 업무의 도메인 전문성이나 AX 컨설팅 방법론 실무는 주장하지 않습니다. 모르는 깊이는 면접에서 모른다고 말하는 편이 낫습니다.
이 자리는 기획과 디자인을 검토해 구현 가능한 개발 과제와 일정으로 바꾸고, 프로젝트별 개발 범위와 우선순위와 품질을 관리하는 팀장급 PL(Project Leader, 프로젝트를 이끄는 개발 팀장)입니다. 고객사 진단 자료를 과제 목록과 착수 순서로 바꾸는 일이 그 업무의 첫 단위라 제품의 골조로 놓았습니다.
헬로월드랩스는 컨설팅부터 진단, 교육, 실행과 KPI 측정까지 AX 전환 전 과정을 연결하고, AX솔루션팀이 각 단계가 현장에서 작동하도록 디지털 프로덕트를 만듭니다. 컨설팅팀이 고객사에서 받아 온 자료가 곧 개발팀의 입력이 되는 구조라 그 이음매에 도구를 놓았습니다.
자격요건이 생성형 AI 와 AI 도구를 개발 전반에 쓰고 AI Agent, RAG, 업무 자동화의 프로덕트 적용 가능성을 검토하는 일입니다. 노트와 엑셀을 과제 카드로 옮기는 변환을 여러 단계로 나눈 파이프라인으로 짜고, 지난 프로젝트 과제 기록을 RAG 로 인용해 규모 추정 근거를 붙입니다.
AX컨설팅팀이 고객사 진단 워크숍에서 만든 현업 인터뷰 노트와 업무 목록 엑셀을 올리면, 업무 한 줄씩을 개발 과제 카드로 쪼개고 절감 시간과 구현 규모로 우선순위를 매겨 착수 순서까지 정렬해 보여주는 웹 콘솔입니다. 카드마다 어느 인터뷰 문장과 어느 업무 행에서 나왔는지 원문이 붙어 있어, 팀장이 고객사 담당자 앞에서 이 과제가 어느 말에서 나왔는지 짚습니다. 우선순위 점수와 선행 과제 순서는 전부 규칙이 계산하고, 모델은 현업이 말한 불편을 개발 과제 제목과 설명 문장으로 풀어 씁니다. 근거로 인용한 문장이 원문에 없으면 그 카드는 목록에 오르지 않고 확인 필요로 내려갑니다.
헬로월드랩스 AX솔루션팀에서 고객사 프로젝트의 PL(Project Leader, 프로젝트를 이끄는 개발 팀장)을 맡은 사람입니다. AX컨설팅팀이 진단 워크숍을 끝내고 인터뷰 노트와 업무 목록 엑셀을 넘겨주면 그걸 개발 과제로 쪼개고 무엇을 먼저 만들지 정하느라 착수 회의 전 며칠을 쓰던 상황을 끝내고, 자료를 올린 자리에서 과제 목록과 착수 순서를 확정하고 싶은 사람입니다.
업무 목록의 월 소요 시간을 유형별 자동화 비율표로 절감 시간으로 환산하고 구현 규모로 나눠 점수를 내면, 그리고 선행 과제 관계를 위상 정렬로 풀면, 고객사 진단 자료가 착수 회의에 그대로 올릴 개발 과제 목록이 됩니다. 모델이 문장을 옮기다 틀려도 순위와 착수 순서는 규칙이 정하므로 백로그가 뒤집히지 않습니다.
현업 인터뷰 노트 12건과 업무 목록 엑셀 40행을 올리면 개발 과제 카드가 나오고, 절감 시간과 구현 규모로 매긴 우선순위 순으로 정렬되며 선행 과제가 앞에 오도록 착수 순서가 잡히는 웹 콘솔입니다. 카드마다 근거 문장이 원문 그대로 붙고, 원문에 없는 인용이 달린 카드는 확인 필요로 내려갑니다. 팀장이 카드를 열어 제목과 규모를 고치면 순위가 그 자리에서 다시 계산되고, Vercel 에 올려 주소 하나로 열립니다.
팀장이 확정한 과제 목록을 팀 인원과 주당 가용 시간에 맞춰 주차별로 배치하고, 용량을 넘긴 주와 선행 과제가 뒤로 밀린 자리를 짚어 주는 단계입니다. 지난 AX 프로젝트 과제 카드 아카이브를 임베딩 검색으로 뒤져 비슷한 과제의 실제 소요 시간을 규모 추정 옆에 인용합니다. 직접 만든 정답지 40건 대비 과제 묶음과 유형, 선행 관계가 맞는지 규칙으로 채점합니다.
고객사가 요구를 더하거나 빼면 우선순위와 일정이 어떻게 바뀌는지 팀장이 이전 안과 나란히 놓고 보는 단계입니다. 확정본을 착수 합의 문서와 주간 보고 문서로 내보내고, 과제·근거·확정 이력을 PostgreSQL 에 회차별로 쌓아 지난 회차 대비 바뀐 과제만 뽑습니다.
인터뷰 노트 12건과 업무 목록 40행을 올리면 개발 과제 카드 18장이 우선순위 순으로 나오는 걸 시연합니다. 카드마다 근거로 삼은 인터뷰 문장과 업무 행이 원문 그대로 붙고, 선행 과제가 앞에 오도록 착수 순서가 잡힙니다
직접 만든 정답지 40건 대비 과제 묶음과 유형, 선행 관계를 규칙으로 채점합니다. 업무 행이 정답과 같은 카드로 묶인 게 34건, 유형까지 맞은 게 31건, 착수 순서에서 선행 과제가 뒤로 간 위반이 0건입니다. 단, 업무 목록과 정답지를 모두 작성자가 만든 합성 기준이라 성능 검증이 아니라 데모 조건 동작임을 명시합니다
병합셀로 빈 부서, 미측정 소요 시간, 마스터에 없는 시스템명, 표기가 다른 중복 업무, 요구가 없는 불만 노트, 부서끼리 상충하는 요구 28종을 섞어 넣어도 출력 형식이 한 번도 안 깨지고, 원문에 없는 문장을 인용한 카드는 목록에 오르지 않고 확인 필요로 내려갑니다
위 수치는 전부 작성자가 만든 더미 진단 자료 자가채점이며, 실제 과제 분해 정확도와 우선순위의 쓸모는 헬로월드랩스가 수행하는 실 고객사 AX 진단 자료와 AX컨설팅팀·고객사 담당자 확인이 있어야 측정 가능합니다. 이 콘솔은 그 검증을 바로 돌릴 수 있는 상태로 만듭니다
이건 고객·실데이터 없이 혼자 만든 포트폴리오입니다. 모든 수치는 합성 진단 자료 자가채점이라 성능 증명이 아닙니다. 면접에서 데모 조건 동작과 실검증 준비 상태로 솔직히 설명합니다
정답지를 내가 만들었으니 잘 맞는 게 당연합니다. 일부러 병합셀로 빈 부서, 미측정 소요 시간, 표기가 다른 중복 업무, 요구 없는 불만 노트, 부서끼리 상충하는 요구 같은 경계 케이스를 더미에 섞어, 쉬운 자료만 다루는 게 아님을 보여줘야 합니다
절감 시간은 유형별 자동화 비율표를 곱한 가정치입니다. 실제로 얼마나 줄어드는지는 도입 뒤 측정해야 알고, 콘솔도 그 숫자를 확정 효과가 아니라 순위를 매기는 기준으로만 씁니다. 카드마다 계산 근거를 적어 두어 팀장이 비율을 고치면 순위가 다시 계산됩니다
이 포트폴리오는 요구를 개발 과제와 일정으로 옮기는 기술, 웹 콘솔 구현, 스키마를 강제한 변환 파이프라인을 보여줍니다. 데모에 쓴 제조사 구매·품질 업무의 도메인 전문성이나 AX 컨설팅 방법론 실무는 주장하지 않습니다. 모르는 깊이는 면접에서 모른다고 말하는 편이 낫습니다
실제 도입 시 달라지는 것을 명시합니다. 고객사마다 업무 목록 양식과 부서 체계가 다르고 진단 이후에도 요구가 계속 바뀌므로, 정규화 규칙과 자동화 비율표와 과제 유형을 프로젝트마다 다시 맞춰야 합니다(도입 단계 과제로 분리)
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
AX컨설팅팀이 고객사 진단 워크숍에서 현업에게 받아 온 업무 목록 엑셀을 행 단위로 읽은 표입니다. 현장 문서 그대로 병합셀로 비어 버린 부서, 측정하지 못한 소요 시간, 마스터에 없는 시스템 이름, 표기만 다른 중복 업무를 일부러 섞어, 깨끗한 표만 다루는 게 아님을 보여줍니다.
| task_id | dept_raw | dept_id | task_name | how_now | system_raw | system_id | monthly_hours | per_month_count | work_type | source_row |
|---|---|---|---|---|---|---|---|---|---|---|
| T-001 | 구매1팀 | PUR | 협력사 견적서 사내 시스템 입력 | 메일로 온 견적서 PDF 를 열어 품목과 단가를 구매 시스템에 손으로… | 구매ERP | SYS-ERP | 46 | 180 | data_entry | 8 |
| T-002 | 구매1팀 | PUR | 발주 잔량 확인 | 구매ERP 와 협력사가 보내 준 엑셀을 나란히 놓고 잔량이 맞는지 눈… | 구매ERP | SYS-ERP | 21.5 | 90 | lookup | 9 |
| T-003 | 구매2팀 | — | 협력사 견적 입력 | 견적 메일을 받아 시스템에 옮겨 적습니다. 구매1팀과 같은 일을 다른… | 구매 ERP | — | 18 | 70 | data_entry | 10 |
| T-004 | 품질보증팀 | QA | 입고 검사 성적서 취합 | 협력사가 보낸 성적서를 한 폴더에 모아 월말에 요약표로 다시 칩니다. | — | — | 33 | 240 | report_assembly | 21 |
| T-005 | 품질보증팀 | QA | 부적합 판정 | 성적서 수치와 도면 공차를 보고 담당자가 합격인지 판단하며, 애매하면… | QMS | SYS-QMS | 27 | 110 | judgement | 22 |
아래 JSON Schema 에 맞는 제조사 AX 진단 업무 목록 40행을 JSON 배열로 생성. 부서 5종(구매·품질보증·생산관리·경영지원·영업)을 섞고 source_row 는 엑셀 행번호처럼 증가시켜라. how_now 는 현업이 실제로 말하는 말투로 한두 문장.
{"type":"object","properties":{"task_id":{"type":"string"},"dept_raw":{"type":"string"},"dept_id":{"type":["string","null"]},"task_name":{"type":"string"},"how_now":{"type":"string"},"system_raw":{"type":["string","null"]},"system_id":{"type":["string","null"]},"monthly_hours":{"type":["number","null"]},"per_month_count":{"type":["integer","null"]},"work_type":{"type":["string","null"],"enum":["data_entry","report_assembly","approval_routing","lookup","judgement",null]},"source_row":{"type":"integer"}},"required":["task_id","dept_raw","task_name","how_now","source_row"]}
쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라(쉬운 문제만 푸는 함정 회피): (1) 병합셀 때문에 dept_id 가 null 인 행 5~6건(바로 위 행의 부서를 물려받아야 하는 자리), (2) monthly_hours 가 null 인 미측정 행 4건(절감 시간을 계산할 수 없어 확인 질문으로 넘겨야 하는 자리), (3) per_month_count 가 0 인 연 1회 업무 3건과 monthly_hours 가 50 을 넘는 극단 행 2건, (4) system_raw 에 마스터에 없는 이름이 적혀 system_id 가 null 인 행 5건('구매 ERP' 처럼 띄어쓰기만 다른 것과 '개인PC' 처럼 시스템이 아닌 것 모두), (5) 부서가 달라 이름만 다르게 적힌 사실상 같은 업무 쌍 3쌍, (6) work_type 이 null 이라 자동화 비율을 정할 수 없는 행 3건, (7) work_type 이 judgement 라 자동화가 거의 안 되는 행 4건. 그리고 형식을 깨뜨리는 시도 3건(필수 필드 누락·타입 불일치)을 별도 목록으로 만들어 파서가 걸러내는지 확인할 것. JSON 배열만.{"type":"object","properties":{"task_id":{"type":"string"},"dept_raw":{"type":"string"},"dept_id":{"type":["string","null"]},"task_name":{"type":"string"},"how_now":{"type":"string"},"system_raw":{"type":["string","null"]},"system_id":{"type":["string","null"]},"monthly_hours":{"type":["number","null"]},"per_month_count":{"type":["integer","null"]},"work_type":{"type":["string","null"],"enum":["data_entry","report_assembly","approval_routing","lookup","judgement",null]},"source_row":{"type":"integer"}},"required":["task_id","dept_raw","task_name","how_now","source_row"]}AX컨설팅팀이 진단 워크숍에서 현업 담당자를 인터뷰하고 남긴 노트입니다. 업무 목록 엑셀에는 안 적히는 이유와 제약이 여기에만 있어, 과제 설명과 담당자 확인 질문이 이 문장에서 나옵니다. 요구 없이 불만만 있는 노트, 부서끼리 상충하는 요구, 이미 시스템이 있는 업무를 일부러 섞었습니다.
견적서가 메일로 오면 PDF 를 열어 품목과 단가를 하나씩 옮겨 적습니다. 하루에 여덟 건쯤 되는데 단가 자릿수를 잘못 치면 발주가 그대로 나가 버려서 두 번씩 확인합니다. 협력사마다 견적서 양식이 달라 어디에 단가가 있는지도 매번 다릅니다.
협력사가 엑셀로 잔량을 보내 주는데 우리 구매ERP 수량과 자주 안 맞습니다. 어느 쪽이 맞는지는 결국 전화해서 물어봅니다. 이게 자동으로 대조돼서 다른 건만 뜨면 좋겠습니다.
아래 JSON Schema 에 맞는 AX 진단 워크숍 인터뷰 노트 24건을 JSON 배열로 생성. ax_task_inventory 의 task_id 와 이어지게 ref_task_ids 를 채우고, body 는 현업 담당자가 실제로 말하는 구어체 두세 문장으로 써라.
{"type":"object","properties":{"note_id":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"dept_raw":{"type":"string"},"ref_task_ids":{"type":"array","items":{"type":"string"}},"interviewed_at":{"type":"string"}},"required":["note_id","title","body","dept_raw"]}
쉬운 데이터만 만들지 말 것. 하드 케이스 의도적 혼입: (1) 요구 없이 불만만 적힌 노트 3건(과제로 만들면 안 되고 확인 질문으로 넘겨야 하는 자리), (2) 두 부서 요구가 정면으로 상충하는 노트 쌍 2쌍(한쪽은 공개를 원하고 한쪽은 반대), (3) 이미 시스템이 있는데 현장에서 안 쓴다는 노트 2건(신규 개발이 아니라 정착 과제로 가야 하는 자리), (4) 규정·결재선을 바꿔야 해서 개발로 못 푸는 노트 2건, (5) ref_task_ids 가 비어 있고 업무 목록에 없는 업무를 말하는 노트 3건(업무 목록 누락으로 확인해야 하는 자리), (6) 같은 업무를 부서마다 다른 이름으로 부르는 노트 3건('출하 검사'와 '출고 검수'처럼). JSON 배열만.{"type":"object","properties":{"note_id":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"dept_raw":{"type":"string"},"ref_task_ids":{"type":"array","items":{"type":"string"}},"interviewed_at":{"type":"string"}},"required":["note_id","title","body","dept_raw"]}업무 목록의 어느 행들이 어느 개발 과제 카드로 묶여야 하고, 유형과 선행 관계가 무엇이어야 하는지 적은 정답지입니다. 과제 묶음과 유형, 착수 순서를 규칙으로 채점하는 기준이 됩니다.
| card_key | expected_title | expected_task_ids | expected_type | expected_depends_on | expected_rank | note |
|---|---|---|---|---|---|---|
| C-QUOTE-INGEST | 협력사 견적서 자동 판독과 구매ERP 등록 | ["T-001","T-003"] | automation | [] | 1 | 구매1팀과 구매2팀이 이름만 다르게 적어 낸 같은 업무라 한 카드로 … |
| C-PO-RECON | 협력사 잔량 엑셀과 구매ERP 대조 | ["T-002"] | integration | ["C-QUOTE-INGEST"] | 4 | 견적이 시스템에 들어와야 대조할 기준이 생겨 선행 관계가 있습니다 |
| C-COA-COLLECT | 입고 검사 성적서 수집과 월간 요약표 생성 | ["T-004"] | automation | [] | 2 | 팩스 스캔 이미지가 섞여 있어 판독 범위를 담당자에게 확인해야 합니다 |
| C-QA-JUDGE | 부적합 판정 보조 | ["T-005"] | not_a_task | [] | — | 현업이 자동 판정을 못 쓴다고 못박아 과제로 올리면 안 되고 확인 질… |
| C-PROD-DAILY | 라인 일지 입력과 일일 실적 집계 | ["T-006"] | automation | [] | — | 월 소요 시간이 비어 절감 시간을 계산할 수 없어 순위를 매기지 않고… |
아래 JSON Schema 에 맞는 개발 과제 백로그 정답지 40행을 JSON 배열로 생성. ax_task_inventory 의 task_id 와 ax_diagnosis_interviews 의 note_id 에 맞춰라.
{"type":"object","properties":{"card_key":{"type":"string"},"expected_title":{"type":"string"},"expected_task_ids":{"type":"array","items":{"type":"string"}},"expected_type":{"type":"string","enum":["automation","integration","dashboard","migration","policy","not_a_task"]},"expected_depends_on":{"type":"array","items":{"type":"string"}},"expected_rank":{"type":["integer","null"]},"note":{"type":["string","null"]}},"required":["card_key","expected_task_ids","expected_type","expected_depends_on"]}
쉬운 데이터만 만들지 말 것. 하드 케이스 의도적 혼입: (1) 부서가 달라 따로 적힌 업무 행 둘 이상이 한 카드로 묶여야 하는 행 4건, (2) 현업이 자동화를 거부했거나 업무 목록에 행이 없어 expected_type 이 not_a_task 인 행 4건, (3) 월 소요 시간이나 업무 유형이 비어 expected_rank 가 null 인 행 4건(순위를 못 매기고 확인 질문으로 넘기는 자리), (4) expected_depends_on 이 둘 이상이라 착수 순서가 뒤로 밀리는 행 3건, (5) 시스템이 이미 있어 automation 이 아니라 policy 인 행 2건과 자료 이관이라 migration 인 행 2건, (6) 요구가 상충해 범위를 좁혀야 하는 행 2건(note 에 어느 부서끼리 부딪히는지 적을 것). 나머지는 automation·integration·dashboard 를 고르게 섞어라. JSON 배열만.{"type":"object","properties":{"card_key":{"type":"string"},"expected_title":{"type":"string"},"expected_task_ids":{"type":"array","items":{"type":"string"}},"expected_type":{"type":"string","enum":["automation","integration","dashboard","migration","policy","not_a_task"]},"expected_depends_on":{"type":"array","items":{"type":"string"}},"expected_rank":{"type":["integer","null"]},"note":{"type":["string","null"]}},"required":["card_key","expected_task_ids","expected_type","expected_depends_on"]}| TypeScript | 과제 카드 타입과 우선순위 계산기, 화면과 서버 라우트를 한 언어로 씁니다. 계산 결과 타입이 화면까지 그대로 이어져 순위 표시가 계산과 어긋나지 않습니다 |
| Next.js | 백로그 콘솔의 화면과 서버 라우트입니다. 엑셀·노트 업로드, 과제 목록 조회, 카드 수정 후 재계산을 한 앱에서 처리하고 Vercel 로 배포합니다 |
| PostgreSQL | 과제 카드, 근거 인용, 우선순위 계산 이력, 회차별 확정본을 담는 단일 진실원입니다. 회차가 쌓였을 때 과제별 이력 조회를 인덱스로 튜닝합니다 |
| 생성형 AI (Claude Sonnet · Haiku) | 인터뷰 노트 문장과 업무 목록 행을 개발 과제 제목·설명·유형으로 옮기고 선행 과제 후보를 좁힙니다. 우선순위 점수와 착수 순서 계산에는 관여하지 않습니다 |
| AI Agent | 변환을 추출·분해·태깅·자기검증 네 단계로 나눈 파이프라인입니다. 단계마다 출력 스키마를 강제하고 마지막 단계가 인용 문장이 원문에 있는지 확인해, 없으면 그 카드를 확인 필요로 내립니다 |
| RAG | 지난 AX 프로젝트의 과제 카드 아카이브를 임베딩으로 검색해 비슷한 과제의 실제 소요 시간을 인용합니다. 규모 추정을 모델의 감이 아니라 지난 기록에 붙입니다 |
| 업무 자동화 | 업무 유형별 자동화 비율표로 월 소요 시간을 절감 시간으로 환산하는 규칙입니다. 우선순위 점수의 분자가 여기서 나옵니다 |
| SheetJS | 고객사가 준 업무 목록 엑셀의 병합셀, 반복 머리글, 소계 행, 숫자 서식을 정리해 한 표로 읽습니다 |
| GitHub Actions | 우선순위 규칙이나 프롬프트를 고칠 때마다 정답지 채점을 다시 돌려 과제 묶음과 순위가 흔들렸는지 드러냅니다 |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우고 싶으면 2주차(주차별 일정 배치 + 지난 프로젝트 유사 과제 인용)로 갑니다.
✓ pass → 여기서 멈춰도 완결입니다. 더 키우면 3주차(범위 변경 비교 + 착수·주간 보고 문서 출력)로 갑니다.
개발 과제 한 장의 제목과 설명, 어느 업무 행과 인터뷰 문장에서 나왔는지, 절감 시간과 구현 규모로 매긴 우선순위 점수, 선행 과제와 착수 순서를 담습니다. 근거가 원문 인용인지 모델이 이어 붙인 후보인지 구분해, 팀장이 확인해야 할 자리를 목록에서 바로 알아보게 합니다.
{"type":"object","properties":{"card_id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"task_type":{"type":"string","enum":["automation","integration","dashboard","migration","policy","not_a_task"]},"source_task_ids":{"type":"array","items":{"type":"string"}},"evidence":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["interview","inventory"]},"source_id":{"type":"string"},"quote":{"type":"string"},"match_rule":{"type":"string","enum":["quote_exact","id_linked","llm_suggested"]}},"required":["source","source_id","quote","match_rule"]}},"monthly_saved_hours":{"type":["number","null"]},"saved_hours_basis":{"type":["string","null"]},"effort_size":{"type":"string","enum":["S","M","L"]},"effort_days":{"type":"integer"},"priority_score":{"type":["number","null"]},"depends_on":{"type":"array","items":{"type":"string"}},"sequence_no":{"type":["integer","null"]},"needs_owner_check":{"type":"boolean"},"owner_question":{"type":["string","null"]}},"required":["card_id","title","description","task_type","source_task_ids","evidence","effort_size","effort_days","depends_on","needs_owner_check"]}[
{
"input_ref": "T-001·T-003 + N-01 · 부서 둘이 따로 적어 낸 같은 견적 입력 업무",
"output": {
"card_id": "C-QUOTE-INGEST",
"title": "협력사 견적서 자동 판독과 구매ERP 등록",
"description": "메일로 온 견적서에서 품목과 단가를 뽑아 구매ERP 에 올리고, 자릿수가 튀는 값은 담당자 확인으로 넘깁니다. 구매1팀과 구매2팀이 같은 일을 따로 적어 내 한 과제로 묶었습니다.",
"task_type": "automation",
"source_task_ids": [
"T-001",
"T-003"
],
"evidence": [
{
"source": "interview",
"source_id": "N-01",
"quote": "단가 자릿수를 잘못 치면 발주가 그대로 나가 버려서 두 번씩 확인합니다",
"match_rule": "quote_exact"
},
{
"source": "inventory",
"source_id": "T-001",
"quote": "메일로 온 견적서 PDF 를 열어 품목과 단가를 구매 시스템에 손으로 옮겨 적습니다.",
"match_rule": "id_linked"
},
{
"source": "inventory",
"source_id": "T-003",
"quote": "견적 메일을 받아 시스템에 옮겨 적습니다.",
"match_rule": "llm_suggested"
}
],
"monthly_saved_hours": 51.2,
"saved_hours_basis": "T-001 46.0시간과 T-003 18.0시간을 더한 64.0시간에 data_entry 자동화 비율 0.8 을 곱한 값입니다. 비율표는 합성 기준 가정치라 도입 뒤 실제 절감은 다시 재야 합니다",
"effort_size": "M",
"effort_days": 8,
"priority_score": 6.4,
"depends_on": [],
"sequence_no": 1,
"needs_owner_check": true,
"owner_question": "구매2팀 T-003 이 구매1팀 T-001 과 같은 업무가 맞는지, 해외 협력사 통화 처리도 이번 범위에 넣을지 확인해 주시기 바랍니다."
}
},
{
"input_ref": "T-011 + N-08·N-09 · 영업과 생산관리 요구가 상충하는 납기 조회",
"output": {
"card_id": "C-DUE-DATE",
"title": "확정 납기 조회 화면",
"description": "영업이 고객 문의에 답할 때 확정된 납기만 직접 조회합니다. 생산관리가 확정 전 계획 노출을 반대해 범위를 확정 건으로 좁혔습니다.",
"task_type": "dashboard",
"source_task_ids": [
"T-011"
],
"evidence": [
{
"source": "interview",
"source_id": "N-08",
"quote": "고객이 납기를 물으면 생산관리팀에 메신저로 물어봅니다",
"match_rule": "quote_exact"
},
{
"source": "interview",
"source_id": "N-09",
"quote": "확정 전 계획이 그대로 고객에게 나가면 저희가 감당을 못 합니다",
"match_rule": "quote_exact"
}
],
"monthly_saved_hours": 16.8,
"saved_hours_basis": "T-011 24.0시간에 lookup 자동화 비율 0.7 을 곱한 값이며, 비율표는 합성 기준 가정치입니다",
"effort_size": "M",
"effort_days": 8,
"priority_score": 2.1,
"depends_on": [],
"sequence_no": 5,
"needs_owner_check": true,
"owner_question": "확정 납기의 기준을 무엇으로 볼지, 확정 전 계획을 영업에 어디까지 보일지 두 팀이 합의한 선을 알려 주시기 바랍니다."
}
},
{
"input_ref": "T-006 + N-06 · 월 소요 시간을 재 본 적이 없는 업무",
"output": {
"card_id": "C-PROD-DAILY",
"title": "라인 일지 입력과 일일 실적 집계",
"description": "종이 일지를 현장에서 바로 입력하게 하고 아침 회의 자료를 자동으로 만듭니다. 소요 시간이 측정되지 않아 순위를 매기지 않고 담당자 확인으로 넘겼습니다.",
"task_type": "automation",
"source_task_ids": [
"T-006"
],
"evidence": [
{
"source": "interview",
"source_id": "N-06",
"quote": "시간을 재 본 적이 없어 얼마나 걸리는지 모르겠습니다",
"match_rule": "quote_exact"
},
{
"source": "inventory",
"source_id": "T-006",
"quote": "라인별 수기 일지를 엑셀에 옮겨 적어 아침 회의 자료를 만듭니다.",
"match_rule": "id_linked"
}
],
"monthly_saved_hours": null,
"saved_hours_basis": "업무 목록의 월 소요 시간이 비어 있어 계산하지 않았습니다. 담당자가 값을 채우면 그때 순위가 계산됩니다",
"effort_size": "L",
"effort_days": 20,
"priority_score": null,
"depends_on": [],
"sequence_no": null,
"needs_owner_check": true,
"owner_question": "라인 일지 입력에 하루 몇 분을 쓰시는지, 인터뷰에서 말씀하신 하루 한 시간 남짓을 기준으로 잡아도 되는지 확인해 주시기 바랍니다."
}
}
][자동 검증(규칙·결정론으로 채점)] 1) 스키마 통과: 출력이 위 JSON Schema 형식을 지키는지(task_type·evidence·effort_size·depends_on 필드 존재와 타입 확인). 2) 인용 대조: 각 evidence 의 quote 가 그 source_id 원문의 substring 인지. 아니면 그 카드를 목록에서 내리고 확인 필요로 보냅니다. 3) 묶음·유형 일치: source_task_ids 집합과 task_type 이 backlog_gold 의 expected_task_ids·expected_type 과 같은지. 4) 점수 재계산: monthly_saved_hours 가 업무 목록의 월 소요 시간과 유형별 자동화 비율표로 다시 계산한 값과 같은지, priority_score 가 절감 시간을 effort_days 로 나눈 값과 같은지(모델이 숫자를 지어내지 못하게 막습니다). 5) 순서 정합: depends_on 이 backlog_gold 의 expected_depends_on 과 같은지, sequence_no 가 선행 과제보다 뒤인지, 선행 관계에 순환이 없는지. 6) 빈 값 처리: monthly_saved_hours 나 work_type 이 비면 priority_score 와 sequence_no 가 null 이고 needs_owner_check 가 true 이며 owner_question 이 비어 있지 않은지. 7) 후보 표시: match_rule 이 llm_suggested 인 근거가 있으면 needs_owner_check 가 true 인지(모델이 이어 붙인 근거가 확인 없이 확정 과제로 올라가지 않게 막습니다). [수동 검증(사람이 봐야 하는 것)] 8) AX컨설턴트 페르소나 2명이 카드 제목과 확인 질문을 그대로 고객사 착수 회의에 낼 만한지 비동기 라벨 → 일치도 Cohen's κ(두 사람 판단이 우연 이상으로 일치하는 정도, 0~1) 하한 0.6 이상. 9) not_a_task 로 내린 카드 전건을 사람이 열어, 현업이 거부했거나 업무 목록에 없는 게 맞는지 점검.