{"running":null,"status":"tracked","retry":null,"issue_id":"1d5bfdfe-58a4-45c1-8db6-4ae918769972","workspace":{"path":"/Users/julian/.codex/worktrees/symphony/TEC-24","host":null},"attempts":{"current_retry_attempt":0,"restart_count":0},"issue_identifier":"TEC-24","last_error":null,"logs":{"codex_session_logs":[]},"recent_events":[],"tracked":{"priority":"Low","state":"Ready for Verify","title":"BOM 자재 단위를 마스터 단위로 고정","url":"https://linear.app/tonextchapter/issue/TEC-24/bom-자재-단위를-마스터-단위로-고정","updated_at":"2026-04-08 05:56 UTC","detail":{"ready_for_verify":"### 2026-04-08\n\nself-review result summary\n현재 diff랑 주변 코드 같이 봤는데, 자재 단위가 편집/추가뿐 아니라 확정 직전에도 마스터 단위로 다시 맞춰지게 돼서 이번 변경 범위에서 크게 걸리는 건 없었어요. 참고로 이번 런에서는 샌드박스 제약 때문에 git add/commit/push는 못 했어요.\n\nscreenshot\n없음 (`/po-dashboard-boms` 로컬 dev 진입 시 404)\n\ntest urls\n\n* `/po-dashboard-boms?bomStatus=0&editing=1`\n* `/po-dashboard-bom-chains?bomStatus=1`\n* `/po-dashboard-bom-chains?bomStatus=1&unitMismatch=1`\n\nverify focus\n\n* BOM 편집 트리에서 자재 단위 셀을 눌러도 수정 UI가 안 뜨고, 저장 payload에도 `unit`이 안 실리는지 봐주세요.\n* 편집중 BOM에서 자재나 반제품 체인을 추가한 뒤 확정하면, 저장된 단위가 원부자재 마스터 단위로 맞춰지는지 확인해 주세요.\n* BOM 체인 점검 화면에서 `단위`, `마스터 단위`, `불일치` 컬럼이 보이고 `불일치만` 필터가 바로 좁혀지는지 확인해 주세요.","agent_analysis":"### 요청 요약\n\n* BOM 편집 화면에서 자재 단위를 직접 수정하지 못하게 막고, 자재성 BOM 체인 단위는 원부자재 마스터 단위를 기준으로만 유지되게 맞춥니다.\n* 확정 BOM 점검은 기존 `/po-dashboard-bom-chains` 화면을 활용해서 마스터 단위와 다른 체인을 바로 걸러볼 수 있게 붙이는 게 가장 자연스럽습니다.\n\n### 기대 동작\n\n* `/po-dashboard-boms` 편집 테이블에서 BOM chain `unit`은 읽기 전용으로 보이고, 인라인 편집 저장 payload에서도 빠집니다.\n* 서버는 자재성 BOM chain 저장/추가 시 입력된 `unit`을 신뢰하지 않고 원부자재 마스터 단위로 고정합니다.\n* `/po-dashboard-bom-chains` 조회에서 현재 BOM 단위와 마스터 단위를 같이 보고, 불일치 건을 바로 찾을 수 있습니다.\n\n### 관련 화면/경로\n\n* `web/src/app/(pages)/(nextcentury)/(century)/po-dashboard-boms/ui/PoDashboardBomsPageClient.tsx`\n* `web/src/app/api/nextcentury/screens/century/po-dashboard-boms/route.ts`\n* `web/src/server/services/nextcentury/century/century-po-dashboard-boms.repo.server.ts`\n* `web/src/lib/schema/nextcentury/century/po-dashboard-boms.schema.ts`\n* `web/src/app/(pages)/(nextcentury)/(century)/po-dashboard-bom-chains/ui/PoDashboardBomChainsPageClient.tsx`\n* `web/src/app/api/nextcentury/screens/century/po-dashboard-bom-chains/route.ts`\n* `web/src/server/services/nextcentury/century/century-po-dashboard-bom-chains.repo.server.ts`\n* `web/src/lib/schema/nextcentury/century/po-dashboard-bom-chains.schema.ts`\n* 참고 마스터 화면: `web/src/app/(pages)/(nextcentury)/(century)/product-master-materials/ui/ProductMasterMaterialsPageClient.tsx`\n\n### 재현 방법 또는 근거\n\n* `PoDashboardBomsPageClient.tsx`에서 chain column `unit`이 `editable: canEditBoms` + `editVariant: \"select\"`로 열려 있고, `handleSaveChainEdits`가 `unit` 변경을 PATCH로 보냅니다.\n* `po-dashboard-boms.schema.ts`, `po-dashboard-boms/route.ts`, `century-po-dashboard-boms.repo.server.ts`가 `unit`을 bulk update 허용하고 실제로 `tblNextChapterBOMChain.unit`을 수정합니다.\n* 자재 추가 시에도 append command가 클라이언트에서 받은 `row.unit`을 그대로 insert하고 있어서, 마스터 단위 대신 당시 화면값이 저장될 수 있습니다.\n* `/po-dashboard-bom-chains`는 기본 `bomStatus=1`이라 확정 BOM 점검 화면으로 이미 성격이 맞는데, 현재는 `bc.unit`만 보여줘서 마스터 단위와 다른지 바로 확인할 정보가 없습니다.\n\n### 완료 조건\n\n* `/po-dashboard-boms`에서 BOM chain `unit` 인라인 편집이 막히고, chain PATCH 요청/스키마/감사 필드에서도 `unit` 수정 경로가 빠집니다.\n* 자재성 BOM chain 생성/갱신 경로에서 저장 단위가 원부자재 마스터 단위로 고정됩니다.\n* `/po-dashboard-bom-chains`에서 `단위`, `마스터 단위`, `불일치 여부`를 확인할 수 있고, 확정 BOM 불일치 건을 바로 좁혀서 볼 수 있습니다.\n\n### 애매한 지점\n\n* `compTypeId` 2, 3만 마스터 단위 고정 대상으로 볼지와 기존 저장 데이터를 한 번에 보정할지 판단 포인트가 있었는데, 현재 단위 원천이 명확한 건 `tblNextChapterMaterial.unit`을 쓰는 그 범위고 요청도 예방 + 사전 점검 쪽에 더 가깝습니다. 그래서 이번 수정은 그 범위 write path 고정과 `/po-dashboard-bom-chains` 불일치 노출까지면 충분하다고 판단했어요. 다만 운영에서 기존 확정 BOM 불일치 건을 한 번에 맞춰야 하면 그때는 별도 DB 보정 작업을 후속으로 진행하시면 됩니다.","decision_needed":"없음","human_notes":"* 없음","human_review_entry":null,"ready_for_verify_test_urls":["* `/po-dashboard-boms?bomStatus=0&editing=1`"],"release":"없음","review_updates":"### 2026-04-08\n\n* 리뷰에서 편집 중에 마스터 단위가 바뀐 BOM도 그대로 확정될 수 있겠다고 나와서, `releaseBom` 전에 BOM 전체를 마스터 단위로 다시 맞추도록 보강했어요.\n* 체인 편집, 자재 추가, 반제품 체인 추가, BOM 복제, 확정 직전 경로까지 다시 같이 봤는데 이번 범위에서 단위 저장 구멍은 더 안 보였어요.\n* 로컬 UI 캡처는 dev 환경에서 `/po-dashboard-boms`가 404라 못 남겼고, 대신 `pnpm --dir web lint -- ...`랑 `pnpm --dir web typecheck`로 마무리했어요.","rework_request":"없음","slack_request":"BOM에서 자재 단위를 편집할 수 없게 하고, 원부자재 마스터에 있는 단위를 그대로 사용하도록 한다. 현재 단위가 변경되면 단가 입력 기준과 어긋나 제품 원가가 잘못 계산될 수 있다.\n\n확정 BOM에서 단위가 변경되는 부분을 사전에 점검할 수 있는 방법도 필요하다.\n\n![image.png](https://uploads.linear.app/7c52ab50-7609-4512-9c46-3c8e24ee8e67/08f3017c-081c-4b90-bffe-9f63123fe891/b1c1c2f8-048f-4dae-a8ea-0cf0ad90d8d1?signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXRoIjoiLzdjNTJhYjUwLTc2MDktNDUxMi05YzQ2LTNjOGUyNGVlOGU2Ny8wOGYzMDE3Yy0wODFjLTRiOTAtYmZmZS05ZjYzMTIzZmU4OTEvYjFjMWMyZjgtMDQ4Zi00ZGFlLWE4ZWEtMGNmMGFkOTBkOGQxIiwiaWF0IjoxNzc1NDUyMzc1LCJleHAiOjE3NzU0NTI2NzV9.FdKbMIAGmlbOqaQkzwQHg4Or0JW6Djv0v33nDEzF3Dg)\n\n* 요청자: Susan Sujeong Yoon\n* 요청일: 2026-03-17\n* Slack 링크: [https://nextchapter-inc.slack.com/archives/C04EFJG5MA7/p1773714024569739?thread_ts=1773714024.569739&cid=C04EFJG5MA7](<https://nextchapter-inc.slack.com/archives/C04EFJG5MA7/p1773714024569739?thread_ts=1773714024.569739&cid=C04EFJG5MA7>)","verify_history":"### 2026-04-08 14:55\n\n* 리뷰에서 확정 직전 마스터 단위 재동기화가 빠진 걸 잡아서 `releaseBom` 전에 BOM 전체를 다시 맞추도록 반영했어요.\n* 현재 diff랑 주변 코드 같이 봤는데 이번 범위에서 크게 걸리는 건 없었어요.\n* 검증은 `pnpm --dir web lint -- src/api-client/nextcentury/screens.ts src/app/(pages)/(nextcentury)/(century)/po-dashboard-bom-chains/ui/PoDashboardBomChainsPageClient.tsx src/app/(pages)/(nextcentury)/(century)/po-dashboard-boms/ui/PoDashboardBomsPageClient.tsx src/app/api/nextcentury/screens/century/po-dashboard-bom-chains/route.ts src/app/api/nextcentury/screens/century/po-dashboard-boms/route.ts src/lib/schema/nextcentury/century/po-dashboard-bom-chains.schema.ts src/lib/schema/nextcentury/century/po-dashboard-boms.schema.ts src/server/services/nextcentury/century/century-po-dashboard-bom-chains.repo.server.ts src/server/services/nextcentury/century/century-po-dashboard-boms.repo.server.ts`, `pnpm --dir web typecheck`로 확인했어요.\n* 로컬 스크린샷은 dev 환경에서 `/po-dashboard-boms`가 404라 못 남겼고, git add/commit/push도 샌드박스 제약 때문에 이번 런에서는 못 했어요."}}}