코스맥스
경력근거: 현업의 업무 프로세스와 요구사항을 분석하고, 이를 데이터·AI·시스템 기반의 기술적 해결책으로 설계 및 구현
※ 실제 산출물이 아닌 AI 예측 시안입니다.
코스맥스의 첫 업무는 '현업의 업무 프로세스와 요구사항을 분석하고, 이를 데이터·AI·시스템 기반의 기술적 해결책으로 설계 및 구현' 이고, 그다음이 '사내 연구·비즈니스 업무를 지원하는 웹 서비스 및 AI 기반 업무 시스템 개발·운영·고도화' 입니다. 여기서 말하는 현업은 브랜드사가 맡긴 처방을 개발하는 사내 연구 조직이고, 그 처방은 나라별 출시를 전제로 만들어져 성분마다 수출국 한도를 안고 있습니다. 자기 브랜드를 팔지 않고 브랜드사 제품을 개발해 생산하는 회사라서, 한 처방이 여러 나라 규정을 동시에 통과해야 하는 대조 부담이 이 회사의 연구 업무에서 나옵니다. 이 포트폴리오는 표기가 다른 두 표를 같은 단위로 바꿔 성분마다 맞추고 사유로 나누는 기술을 보여줍니다. 화장품 성분 독성이나 각국 고시 해석 전문성은 주장하지 않습니다. 고시 조문을 어떻게 읽어야 하는지는 규제 담당의 일이라 제가 아는 척할 자리가 아닙니다. 물어 오면 모른다고 답하고, 성분 코드와 배합비를 규정표에 어떻게 붙였는지로 이야기를 돌리겠습니다.
첫 업무가 '현업의 업무 프로세스와 요구사항을 분석하고' 이를 기술적 해결책으로 설계·구현하는 것이고, 두 번째가 '사내 연구·비즈니스 업무를 지원하는 웹 서비스 및 AI 기반 업무 시스템 개발·운영·고도화' 입니다. 연구원이 처방을 수출국 규정과 맞춰 보는 일이 그 사내 업무 하나입니다.
'현업 사용자와 직접 협업하며 프로토타입 제작 → 사용자 피드백 수집 → 기능 개선 → 실제 서비스 적용까지 수행' 이 업무로 적혀 있고, 생성형 AI 로 'LLM, RAG, Agent 등 생성형 AI 기술을 활용한 업무 자동화' 를 함께 듭니다. 연구원이 처방 한 건을 올려 보고 판정 기준을 고쳐 달라고 말하는 자리가 이 화면입니다.
'개발한 서비스의 배포·운영 및 클라우드 인프라/데이터 파이프라인 연계' 가 업무에 있고, 우대사항이 'Java/Spring Boot, View, Python 등 기반의 Backend/Web 서비스 개발 경험자' 와 'CI/CD, Docker 컨테이너 기반 개발·배포 자동화 경험자' 를 듭니다. 규정표가 바뀔 때마다 판정을 다시 돌리는 일정 작업이 그 운영에 그대로 얹힙니다.
연구원이 올린 처방의 성분 행을 수출국 규정표와 성분마다 맞춰 다섯 갈래로 나눕니다. 배합비는 1.20 처럼 퍼센트로 적히기도 하고 향료처럼 ppm 으로 적히기도 해서 같은 퍼센트 수로 바꿔 견주고, 한도 행은 나라와 성분 코드에 제형 구분까지 맞춰 고르며 같은 구분이 없으면 전 제품 행을 씁니다. 금지로 잡힌 성분과 규정표에 아예 없는 성분, 처방을 고친 날보다 규정이 나중에 바뀐 성분은 따로 사유를 답니다. 판정에 쓴 배합비와 한도, 두 날짜를 화면에 함께 실어 연구원이 어느 성분을 다시 볼지 그 자리에서 정합니다.
브랜드사 의뢰 처방을 검토하는 코스맥스 사내 연구원
처방이 통관에서 막히는 이유는 연구원이 규정을 몰라서가 아니라, 나라마다 다른 한도표와 개정일을 성분 수십 종에 하나씩 대조할 시간이 없기 때문입니다. 두 표를 성분마다 맞춰 보면 생산에 넘기기 전에 다시 볼 성분이 사유별로 나옵니다.
처방 성분 표와 나라별 규정표를 올리면 성분마다 한도 안·한도를 넘김·그 나라에서 금지·규정에 없는 성분·규정이 처방보다 나중에 바뀜 중 하나를 판정하고, 배합비와 한도, 두 날짜를 붙여 사유별로 묶어 보여주는 관리자 페이지가 도는 완결품입니다. 규정표는 연구원이 정리한 표를 올려 쓰는 것으로 두고, 고시 원문을 읽어 표를 만드는 일은 3주차로 미룹니다.
여러 처방 판정을 합쳐 나라별·성분별로 걸린 횟수를 세고, 두 처방 이상에서 같은 사유로 걸린 성분을 배합 표준 손질 후보로 냅니다.
걸린 성분을 나라별로 나눠 브랜드사에 보낼 검토 요청서를 조립하고, 규정표가 바뀌면 그 성분을 쓰는 옛 처방을 다시 판정해 알림으로 냅니다.
처방 번호 F-2026-4417 하나로 화면을 열면 성분 38종이 다섯 사유 카드로 갈려 있고, 카드를 펼치면 배합비와 고른 한도, 한도를 고를 때 쓴 제형 구분이 함께 보입니다. 이 화면을 그대로 시연합니다.
정답 판정을 손으로 단 성분 120건으로 일치율을 잽니다. 처방과 규정표가 모두 합성 더미이므로 이 일치율은 성능이 아니라 데모 조건에서 규칙이 의도대로 갈리는지를 보는 값입니다.
한도 칸이 빈 규정 행, ppm 으로 적힌 배합비, 제형이 맞는 행이 없어 전 제품 행으로 내려가는 성분 — 이런 것들만 모은 입력 30종을 먼저 넣습니다. 여기서도 사유별 건수가 그대로 나오고 카드 묶음이 흐트러지지 않아야 다음으로 넘어갑니다.
수출 대상을 EU·중국에서 미국·일본까지 넓히면 어느 성분의 사유가 뒤집히는지를 회귀 케이스로 남깁니다. 나라를 더하는 일이 규칙 수정이 아니라 규정표 추가로 끝나는지 보는 자리입니다.
이 네 줄은 작성자가 꾸민 처방과 규정표 안에서만 참인 숫자입니다. 성분 하나 때문에 수출국 세관에서 되돌아오는 일이 실제로 줄었는지는, 사내 규제 담당이 같은 성분을 어떻게 판단했는지와 맞대 봐야 알 수 있습니다. 이 포트폴리오가 남기는 것은 그 맞대보기를 바로 시작할 수 있는 화면과 정답 대조판입니다.
처방 성분 표와 나라별 규정표는 둘 다 작성자가 꾸민 것이고, 일치율은 그 안에서만 성립합니다. 규칙이 의도대로 돈다는 뜻이지 실제 수출 검토를 대신한다는 뜻이 아닙니다. 코스맥스의 실 처방과 사내 규제 담당의 확인이 들어와야 성능을 말할 수 있습니다.
더미가 깨끗하면 규칙이 늘 맞으므로, 한도 칸이 비어 있는 규정 행과 ppm 표기 배합비, 규정표에 없는 사내 원료 코드, 개정일이 처방보다 뒤인 행을 일부러 넣어 두었습니다.
이 포트폴리오는 표기가 다른 두 표를 같은 단위로 바꿔 성분마다 맞추고 사유로 나누는 기술을 보여줍니다. 화장품 성분 독성이나 각국 고시 해석 전문성은 주장하지 않습니다. 판정은 퍼센트 비교와 날짜 계산이 정하고 클로드는 검토 요청 문구만 씁니다.
한도를 넘겼다는 판정이 그 처방을 버리라는 뜻은 아닙니다. 제형과 사용 부위에 따라 다른 조항을 쓰는 성분도 있어, 배합비를 낮출지 조항을 다시 볼지는 연구원이 정합니다.
처방 배합비는 브랜드사와 맺은 비밀 유지 범위 안에 있어, 성분 코드와 퍼센트가 사내 밖으로 나가는 순간 계약 문제가 됩니다. 그래서 판정도 검토 요청 문구 작성도 사내에 두는 구성을 먼저 확정하고 화면을 올립니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
연구원이 개발 중인 처방의 성분 행입니다. 성분 번호와 처방 번호, 처방 이름, 제형 구분, 수출국, 성분 코드와 이름, 배합비, 처방 수정일을 한 행에 둡니다. 한 처방이 여러 나라로 나가면 같은 성분이 나라마다 한 행씩 들어옵니다. 배합비는 1.20 처럼 퍼센트로 적히기도 하고 향료처럼 12,000ppm 으로 적히기도 해서 규정표의 퍼센트 한도와 그대로는 견줄 수 없습니다. 규정표에 아직 없는 사내 원료 코드도 섞어 두어 사유가 갈리게 둡니다.
| item_no | formula_id | formula_name | product_category | target_country | ingredient_code | ingredient_name | pct | revised_at |
|---|---|---|---|---|---|---|---|---|
| FI-001 | F-2026-4417 | 수분크림 | leave-on | EU | PHENOX | Phenoxyethanol | 1.20 | 2026-06-12 |
| FI-002 | F-2026-4417 | 수분크림 | leave-on | EU | GLYCER | Glycerin | 8.00 | 2026-06-12 |
| FI-003 | F-2026-4417 | 수분크림 | leave-on | EU | BUTPAR | Butylparaben | 0.14 | 2026-06-12 |
| FI-004 | F-2026-4417 | 수분크림 | leave-on | EU | TOCOPH | Tocopherol | 0.50 | 2026-06-12 |
| FI-005 | F-2026-4417 | 수분크림 | leave-on | 중국 | METPAR | Methylparaben | 0.15 | 2026-06-12 |
아래 JSON Schema 를 그대로 만족하는 처방 성분 행을 350개 더 만들어 주세요. 처방을 열둘쯤 두고 처방마다 성분을 20~40종 답니다. 제형 구분은 leave-on·rinse-off 중에서 고르고 수출국은 EU·중국·미국·일본 중에서 고르되 한 처방이 두 나라 이상으로 나가게 씁니다. 배합비는 대부분 소수점 둘째 자리 퍼센트 문자열로 쓰고 향료 성분 몇 행은 '12,000ppm'·'8000 ppm' 처럼 ppm 으로 씁니다. 스무 행에 한 번꼴로 규정표에 없는 사내 원료 코드를 넣고, 처방 수정일은 2026년 상반기로 둡니다. 형식을 일부러 깨뜨린 파일도 5건 만들되 배합비에 '약 1.2%' 처럼 어림한 말을 넣는 식으로 만드세요. 판정 결과나 사유는 넣지 마세요.
{"type": "object", "properties": {"item_no": {"type": "string"}, "formula_id": {"type": "string"}, "formula_name": {"type": "string"}, "product_category": {"type": "string"}, "target_country": {"type": "string"}, "ingredient_code": {"type": "string"}, "ingredient_name": {"type": "string"}, "pct": {"type": "string"}, "revised_at": {"type": "string"}}, "required": ["item_no", "formula_id", "formula_name", "product_category", "target_country", "ingredient_code", "ingredient_name", "pct", "revised_at"]}{"type": "object", "properties": {"item_no": {"type": "string"}, "formula_id": {"type": "string"}, "formula_name": {"type": "string"}, "product_category": {"type": "string"}, "target_country": {"type": "string"}, "ingredient_code": {"type": "string"}, "ingredient_name": {"type": "string"}, "pct": {"type": "string"}, "revised_at": {"type": "string"}}, "required": ["item_no", "formula_id", "formula_name", "product_category", "target_country", "ingredient_code", "ingredient_name", "pct", "revised_at"]}나라별 화장품 성분 규정표입니다. 규정 번호와 나라, 성분 코드와 이름, 제형 구분, 허용 한도, 금지 여부, 개정일을 한 행에 둡니다. 제한을 두지 않는 성분은 한도 칸이 비어 있고, 같은 나라 같은 성분에 제형별 행과 전 제품 행이 함께 서 있기도 합니다. 개정일이 처방 수정일보다 뒤인 행도 두어 사유가 갈리게 둡니다.
| limit_no | country | ingredient_code | ingredient_name | product_category | max_pct | is_banned | revision_date |
|---|---|---|---|---|---|---|---|
| RL-0001 | EU | PHENOX | Phenoxyethanol | 전 제품 | 1 | false | 2024-11-05 |
| RL-0002 | EU | GLYCER | Glycerin | 전 제품 | — | false | 2023-05-14 |
| RL-0003 | EU | BUTPAR | Butylparaben | 전 제품 | 0.14 | false | 2026-08-01 |
| RL-0004 | EU | TOCOPH | Tocopherol | 전 제품 | 1 | false | 2022-09-30 |
| RL-0005 | 중국 | METPAR | Methylparaben | 전 제품 | — | true | 2025-12-01 |
아래 JSON Schema 를 그대로 만족하는 나라별 규정 행을 300개 더 만들어 주세요. 나라는 EU·중국·미국·일본으로 두고 성분 코드는 처방 쪽과 같은 체계로 씁니다. 제형 구분은 전 제품을 기본으로 하되 일부 성분은 leave-on·rinse-off 행을 따로 둡니다. 한도는 0.01에서 25.00 사이 수로 쓰고 열 행에 한 번꼴로 비웁니다. 금지 여부는 대부분 거짓이고 파라벤 계열 몇 행만 참으로 둡니다. 개정일은 2022년부터 2026년 사이로 흩고 몇 행은 2026년 하반기로 둡니다. 처방에 나오는 성분 중 일부는 일부러 넣지 마세요. 판정 결과는 넣지 마세요.
{"type": "object", "properties": {"limit_no": {"type": "string"}, "country": {"type": "string"}, "ingredient_code": {"type": "string"}, "ingredient_name": {"type": "string"}, "product_category": {"type": "string"}, "max_pct": {"type": ["number", "null"]}, "is_banned": {"type": "boolean"}, "revision_date": {"type": "string"}}, "required": ["limit_no", "country", "ingredient_code", "ingredient_name", "product_category", "max_pct", "is_banned", "revision_date"]}{"type": "object", "properties": {"limit_no": {"type": "string"}, "country": {"type": "string"}, "ingredient_code": {"type": "string"}, "ingredient_name": {"type": "string"}, "product_category": {"type": "string"}, "max_pct": {"type": ["number", "null"]}, "is_banned": {"type": "boolean"}, "revision_date": {"type": "string"}}, "required": ["limit_no", "country", "ingredient_code", "ingredient_name", "product_category", "max_pct", "is_banned", "revision_date"]}| Python | 배합비 표기를 퍼센트 수로 바꾸고 두 표를 성분마다 맞춰 다섯 사유로 가르는 판정 규칙을 맡습니다. |
| Java/Spring Boot | 연구원이 처방을 올리고 판정 결과를 받아 가는 사내 서비스 API 를 맡습니다. |
| Web 서비스 | 사유별로 묶인 판정 카드와 성분 상세를 여는 관리자 페이지 화면을 맡습니다. |
| SQL | 여러 처방 판정을 쌓아 나라별·성분별로 걸린 횟수를 2주차에 집계합니다. |
| 데이터 파이프라인 | 연구 조직이 관리하는 처방 표와 규정표를 판정이 읽는 두 표로 맞춰 올리는 적재 단계를 맡습니다. |
| LLM API | 걸린 성분의 사유를 브랜드사에 보낼 검토 요청 문구로 바꿉니다. |
| RAG | 3주차 검토 요청서에 고시 원문의 해당 조항을 붙이려고 나라별 규정 문서 색인을 둡니다. |
| Docker | 판정 서비스와 화면을 이미지 한 벌로 묶어 사내 환경에서 같은 결과가 나오게 합니다. |
| CI/CD | 규정표를 고칠 때마다 판정 회귀를 돌린 뒤 배포하도록 파이프라인을 둡니다. |
| AWS | 2주차부터 판정 서비스와 화면을 AWS 로 배포해 운영합니다. |
✗ fail → 규정표가 처방 성분의 절반도 못 덮으면 판정 대신 성분 코드 대응표를 먼저 만듭니다. 사내 원료 코드를 나라별 성분명에 잇기 전에는 규정에 없는 성분만 쌓입니다.
✓ pass → 2주차 나라별 집계로 넘어갑니다.
✗ fail → 처방마다 다른 성분만 걸리면 표준 손질 후보를 내지 않고 처방별로 둡니다.
✓ pass → 3주차 검토 요청서와 개정 알림으로 넘어갑니다.
위 예측 UI 는 3주차까지 완주했을 때의 화면입니다. 1주차에 실제로 만드는 것은 아래 표시된 화면 하나입니다.
verdict사유 라벨 · item_no + 한 줄 요약(근거 수치 포함)화면·코드·면접에서 이 단어를 그대로 씁니다. 키는 출력 스키마의 enum 과 같습니다.
한도 안한도 안한도를 넘김한도 초과그 나라에서 금지금지 성분규정에 없는 성분규정 없음규정이 처방보다 나중에 바뀜규정 개정처방 성분 하나가 그 수출국 규정을 지키는지 정합니다. 다섯 사유 중 하나를 싣고 퍼센트로 바꾼 배합비와 고른 한도, 한도를 고를 때 쓴 제형 구분, 개정일과 처방 수정일의 일수 차이를 함께 담아 화면 카드와 검토 요청서가 그대로 읽습니다.
{"type": "object", "properties": {"verdict_no": {"type": "string"}, "formula_id": {"type": "string"}, "formula_name": {"type": "string"}, "item_no": {"type": "string"}, "target_country": {"type": "string"}, "ingredient_code": {"type": "string"}, "ingredient_name": {"type": "string"}, "limit_no": {"type": ["string", "null"]}, "verdict": {"type": "string", "enum": ["한도 안", "한도를 넘김", "그 나라에서 금지", "규정에 없는 성분", "규정이 처방보다 나중에 바뀜"]}, "pct_value": {"type": ["number", "null"], "description": "formula_items.pct 를 % 단위 수로 바꾼 값입니다. ppm 으로 적힌 값은 콤마를 떼고 10000 으로 나눕니다"}, "limit_pct": {"type": ["number", "null"], "description": "고른 regulation_limits 행의 max_pct 입니다. 그 행이 없거나 한도가 비어 있으면 null 입니다"}, "matched_category": {"type": ["string", "null"], "description": "한도를 고를 때 쓴 regulation_limits.product_category 입니다. 처방과 같은 구분이 없으면 전 제품 행을 씁니다"}, "days_after_revision": {"type": ["integer", "null"], "description": "regulation_limits.revision_date 에서 formula_items.revised_at 을 뺀 일수입니다. 규정이 처방보다 앞서거나 견줄 규정 행이 없으면 null 입니다"}, "evidence": {"type": "array", "items": {"type": "object", "properties": {"table": {"type": "string", "enum": ["formula_items", "regulation_limits"]}, "field": {"type": "string"}, "agg": {"type": ["string", "null"]}, "value": {}}, "required": ["table", "field", "value"]}}, "summary": {"type": "string"}, "hedge": {"type": ["string", "null"]}}, "required": ["verdict_no", "formula_id", "item_no", "target_country", "ingredient_code", "verdict", "evidence", "summary"]}[
{
"verdict_no": "RV-001",
"formula_id": "F-2026-4417",
"formula_name": "수분크림",
"item_no": "FI-001",
"target_country": "EU",
"ingredient_code": "PHENOX",
"ingredient_name": "Phenoxyethanol",
"limit_no": "RL-0001",
"verdict": "한도를 넘김",
"pct_value": 1.2,
"limit_pct": 1,
"matched_category": "전 제품",
"days_after_revision": null,
"evidence": [
{
"table": "formula_items",
"field": "pct",
"agg": null,
"value": "1.20"
},
{
"table": "regulation_limits",
"field": "max_pct",
"agg": null,
"value": 1
},
{
"table": "regulation_limits",
"field": "product_category",
"agg": null,
"value": "전 제품"
}
],
"summary": "페녹시에탄올을 1.20% 로 올렸는데 EU 한도가 1.00% 라 0.20%포인트 넘습니다.",
"hedge": null
},
{
"verdict_no": "RV-002",
"formula_id": "F-2026-4417",
"formula_name": "수분크림",
"item_no": "FI-005",
"target_country": "중국",
"ingredient_code": "METPAR",
"ingredient_name": "Methylparaben",
"limit_no": "RL-0005",
"verdict": "그 나라에서 금지",
"pct_value": 0.15,
"limit_pct": null,
"matched_category": "전 제품",
"days_after_revision": null,
"evidence": [
{
"table": "formula_items",
"field": "pct",
"agg": null,
"value": "0.15"
},
{
"table": "regulation_limits",
"field": "is_banned",
"agg": null,
"value": true
},
{
"table": "regulation_limits",
"field": "revision_date",
"agg": null,
"value": "2025-12-01"
}
],
"summary": "메틸파라벤이 0.15% 들어 있는데 중국은 이 성분을 금지로 두어 배합비와 상관없이 걸립니다.",
"hedge": null
},
{
"verdict_no": "RV-003",
"formula_id": "F-2026-4417",
"formula_name": "수분크림",
"item_no": "FI-003",
"target_country": "EU",
"ingredient_code": "BUTPAR",
"ingredient_name": "Butylparaben",
"limit_no": "RL-0003",
"verdict": "규정이 처방보다 나중에 바뀜",
"pct_value": 0.14,
"limit_pct": 0.14,
"matched_category": "전 제품",
"days_after_revision": 50,
"evidence": [
{
"table": "formula_items",
"field": "revised_at",
"agg": null,
"value": "2026-06-12"
},
{
"table": "regulation_limits",
"field": "revision_date",
"agg": null,
"value": "2026-08-01"
},
{
"table": "formula_items",
"field": "pct",
"agg": null,
"value": "0.14"
}
],
"summary": "부틸파라벤 한도가 처방을 고친 2026년 6월 12일보다 50일 뒤인 8월 1일에 바뀌어, 지금 배합비가 옛 한도 기준입니다.",
"hedge": "개정본 한도가 0.14% 그대로일 수도 있어 연구원이 개정 고시를 확인한 뒤 배합비를 그대로 둘지 정합니다."
},
{
"verdict_no": "RV-004",
"formula_id": "F-2026-4417",
"formula_name": "수분크림",
"item_no": "FI-006",
"target_country": "중국",
"ingredient_code": "KR-AX-0092",
"ingredient_name": "코스맥스 신규 보습 원료",
"limit_no": null,
"verdict": "규정에 없는 성분",
"pct_value": 0.3,
"limit_pct": null,
"matched_category": null,
"days_after_revision": null,
"evidence": [
{
"table": "formula_items",
"field": "ingredient_code",
"agg": null,
"value": "KR-AX-0092"
},
{
"table": "regulation_limits",
"field": "ingredient_code",
"agg": "count",
"value": 6
},
{
"table": "formula_items",
"field": "pct",
"agg": null,
"value": "0.30"
}
],
"summary": "신규 보습 원료 코드가 중국 규정에 올라 있는 여섯 성분 어디에도 없어 허용 여부를 정할 근거가 없습니다.",
"hedge": "사내 코드가 중국 성분명 표기로 아직 이어지지 않은 것일 수 있으므로, 반려가 아니라 확인이 필요한 성분으로 넘깁니다."
},
{
"verdict_no": "RV-005",
"formula_id": "F-2026-4417",
"formula_name": "수분크림",
"item_no": "FI-002",
"target_country": "EU",
"ingredient_code": "GLYCER",
"ingredient_name": "Glycerin",
"limit_no": "RL-0002",
"verdict": "한도 안",
"pct_value": 8,
"limit_pct": null,
"matched_category": "전 제품",
"days_after_revision": null,
"evidence": [
{
"table": "formula_items",
"field": "pct",
"agg": null,
"value": "8.00"
},
{
"table": "regulation_limits",
"field": "max_pct",
"agg": null,
"value": null
},
{
"table": "regulation_limits",
"field": "is_banned",
"agg": null,
"value": false
}
],
"summary": "글리세린은 EU 규정에 올라 있고 한도 칸이 비어 있어 배합비 8.00% 를 그대로 둡니다.",
"hedge": "한도 칸이 비어 있는 것은 제한을 두지 않는다는 뜻으로 읽습니다. 고시 원문을 받아 그 해석이 맞는지 한 번 더 봅니다."
},
{
"verdict_no": "RV-006",
"formula_id": "F-2026-4417",
"formula_name": "수분크림",
"item_no": "FI-009",
"target_country": "EU",
"ingredient_code": "LINALO",
"ingredient_name": "Linalool",
"limit_no": "RL-0008",
"verdict": "한도 안",
"pct_value": 1.2,
"limit_pct": 1.5,
"matched_category": "전 제품",
"days_after_revision": null,
"evidence": [
{
"table": "formula_items",
"field": "pct",
"agg": null,
"value": "12,000ppm"
},
{
"table": "regulation_limits",
"field": "max_pct",
"agg": null,
"value": 1.5
}
],
"summary": "향료 성분이 ppm 으로 적혀 있어 1.20% 로 바꿔 보면 EU 한도 1.50% 안에 듭니다.",
"hedge": null
},
{
"verdict_no": "RV-007",
"formula_id": "F-2026-4502",
"formula_name": "클렌징폼",
"item_no": "FI-013",
"target_country": "중국",
"ingredient_code": "TIO2",
"ingredient_name": "Titanium Dioxide",
"limit_no": "RL-0011",
"verdict": "한도를 넘김",
"pct_value": 12,
"limit_pct": 10,
"matched_category": "전 제품",
"days_after_revision": null,
"evidence": [
{
"table": "formula_items",
"field": "pct",
"agg": null,
"value": "12.00"
},
{
"table": "regulation_limits",
"field": "max_pct",
"agg": null,
"value": 10
},
{
"table": "formula_items",
"field": "product_category",
"agg": null,
"value": "rinse-off"
}
],
"summary": "씻어내는 제형이라 중국 규정에서 leave-on 행을 못 쓰고 전 제품 한도 10.00% 를 쓰는데, 배합비가 12.00% 라 2.00%포인트 넘습니다.",
"hedge": null
}
][자동 검증 · 코드가 판정합니다] 1. verdict 가 다섯 값 중 하나인지 확인합니다. 2. verdict_no·formula_id·item_no·target_country·ingredient_code·verdict·evidence·summary 가 모두 채워졌는지 확인합니다. 3. pct_value 가 formula_items.pct 를 퍼센트 수로 바꾼 값과 같은지 다시 계산합니다. ppm 으로 적힌 값은 콤마를 떼고 10000 으로 나눕니다. 4. days_after_revision 이 regulation_limits.revision_date 에서 formula_items.revised_at 을 뺀 일수와 같은지 다시 계산합니다. 규정이 처방보다 앞서거나 견줄 규정 행이 없으면 null 인지 봅니다. 5. pct_value 가 0 이상 100 이하, limit_pct 가 0 이상 100 이하인지 범위를 봅니다. 6. 한도 행은 나라와 성분 코드, 제형 구분이 모두 같은 행을 먼저 고르고 없으면 그 나라 그 성분의 전 제품 행을 고릅니다. matched_category 가 실제로 고른 행의 product_category 와 같은지 대조합니다. 7. 그 나라 그 성분의 regulation_limits 행이 하나도 없으면 verdict 가 규정에 없는 성분이고 limit_no·limit_pct·matched_category 가 모두 null 인지 확인합니다. 8. 고른 행의 is_banned 가 참이면 verdict 가 그 나라에서 금지인지 확인합니다. 9. days_after_revision 이 0 보다 크면 verdict 가 규정이 처방보다 나중에 바뀜인지 확인합니다. 10. pct_value 가 limit_pct 보다 크면 verdict 가 한도를 넘김인지 확인합니다. 11. verdict 가 한도 안이면 위 네 검사에 하나도 걸리지 않는지 다시 봅니다. 12. 판정 차례는 규정에 없는 성분, 그 나라에서 금지, 규정이 처방보다 나중에 바뀜, 한도를 넘김 순으로 먼저 걸리는 갈래를 씁니다. 다만 고른 행의 max_pct 가 비어 있으면 제한을 두지 않는 성분이라 한도 비교를 돌리지 않습니다. FI-002 와 FI-007 이 그런 성분입니다. 13. limit_no 가 있으면 regulation_limits 에 실재하는 행 번호이고 그 행의 country·ingredient_code 가 성분 행과 같은지 대조합니다. 14. evidence 의 field 이름이 두 데이터셋에 실재하는 컬럼인지 대조합니다. 15. agg 가 없는 evidence 의 value 가 그 컬럼에 수록된 행 값과 같은지 확인합니다. 16. summary 가 존댓말로 끝나는지 확인합니다. [평가 러너 · 2주차] 1. 성분 120건에 손으로 정답 판정을 달아 사유별 일치율을 냅니다. 2. 나라별·성분별로 걸린 횟수를 세어 두 처방 이상에서 되풀이되는 성분을 추립니다. [수동 검증 · 사람이 봅니다] 1. 개정 고시의 한도가 실제로 바뀌었는지 연구원이 원문을 받아 확인합니다. 2. 규정표에 없던 사내 원료 코드를 그 나라 성분명 표기와 이어 붙입니다.