eomsangdon and Claude Sonnet 5
a4b3e7d77a
feat(M01): 일위대가 조합 마스터 — 데이터 · 엔진 · 서버 길(화면은 아직)
...
PLAN 4-2. 조합 = 관리자가 이름을 붙이고 단가산출 로직을 골라 담은 묶음.
마스터에는 담은 로직 목록만 두고 수량·비율·계산은 두지 않음(4-0 확정 · 계산은 프로젝트 몫).
- 새 파일 `일위대가조합.json`(빈 채 · 줄은 사용자가 화면에서 만듦) · 테이블ID `UA`
· 원문이 없어 머리 `원문` 과 줄 `원문번호` 를 두지 않음(`mk.NO_NUMBER` 에 `UA`)
- 엔진 `scripts/master_combo.py` — 검사 넷(없는 로직 키 · 같은 로직 두 번 · 빈 조합
· 조합이 조합을 담음) · 「이 로직을 쓰는 조합」 거꾸로 찾기 · 미리 보기 계산
- `check_master.py` 에 「조합」 갈래 더함 · 저장 전 검사(`check_saved`)에도 얹어 422 로 막음
- 서버 `M01_MasterData_Store_Combo.py` — `GET /combos`·`/combo`·`/logic/combos`
· `POST /combo/new`·`/edit`·`/delete`·`/preview`(저장 없음)
- 조합은 요소 그룹이 아님 — `/groups` 는 여덟 그대로 두고 제 길로만 다룸
- 틀 `_틀.md` 10장 · 계약 `_화면_계약.md` 9장 · 시험 `test_m01_combo.py` 17
검증 — 견본 조합(13-4-1 · 13-4-2 · 13-2-1) 미리 보기 합계가 그 로직 셋의 시험 계산을
비목별로 더한 값과 같음 · 못 도는 줄은 그 줄만 멈추고 나머지 합계는 그대로 ·
저장 전 조합 줄로도 미리 보기 되고 아무것도 안 생김 · 검사 넷 다 422 · 낡은 판본 409 ·
정본 로직 안 바뀜 · `check_master 틀`·`조합` 0건 · pytest 44 통과(조합 17 + api 27)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01WaS48Nvs26o3aFUpcfJxVv
2026-09-21 23:50:42 +09:00
..
2026-09-09 17:12:30 +09:00
2026-09-18 19:02:42 +09:00
2026-09-18 22:29:50 +09:00
2026-09-18 16:48:56 +09:00
2026-09-19 20:07:24 +09:00
2026-09-17 19:42:32 +09:00
2026-09-12 21:48:39 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-17 19:42:32 +09:00
2026-09-09 17:12:30 +09:00
2026-09-17 19:42:32 +09:00
2026-09-17 19:42:32 +09:00
2026-09-17 19:42:32 +09:00
2026-09-17 19:42:32 +09:00
2026-09-17 19:42:32 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 22:43:28 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-17 19:42:32 +09:00
2026-09-12 21:48:39 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-14 09:30:59 +09:00
2026-09-09 17:12:30 +09:00
2026-09-14 08:49:38 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-15 06:49:19 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-14 08:40:49 +09:00
2026-09-14 13:48:24 +09:00
2026-09-19 20:07:24 +09:00
2026-09-13 09:23:38 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-14 12:49:08 +09:00
2026-09-14 13:48:24 +09:00
2026-09-09 17:12:30 +09:00
2026-09-14 13:48:24 +09:00
2026-09-09 17:12:30 +09:00
2026-09-14 14:28:07 +09:00
2026-09-09 17:12:30 +09:00
2026-09-15 06:27:28 +09:00
2026-09-15 02:36:25 +09:00
2026-09-15 02:36:25 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-12 16:16:19 +09:00
2026-09-14 09:10:47 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-17 19:42:32 +09:00
2026-09-17 19:42:32 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-14 09:30:59 +09:00
2026-09-13 09:23:38 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-14 11:50:31 +09:00
2026-09-15 00:15:11 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 22:19:47 +09:00
2026-09-17 19:42:32 +09:00
2026-09-14 09:10:47 +09:00
2026-09-09 17:12:30 +09:00
2026-09-14 22:43:10 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 21:58:07 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-14 13:14:20 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-14 14:47:38 +09:00
2026-09-19 20:07:24 +09:00
2026-09-14 23:43:58 +09:00
2026-09-09 17:12:30 +09:00
2026-09-13 14:48:13 +09:00
2026-09-09 17:12:30 +09:00
2026-09-14 04:42:28 +09:00
2026-09-13 14:48:13 +09:00
2026-09-14 04:26:48 +09:00
2026-09-09 17:15:57 +09:00
2026-09-14 17:24:32 +09:00
2026-09-14 12:28:36 +09:00
2026-09-09 17:15:57 +09:00
2026-09-14 22:40:49 +09:00
2026-09-18 20:01:27 +09:00
2026-09-13 17:23:12 +09:00
2026-09-17 19:42:32 +09:00
2026-09-14 21:38:53 +09:00
2026-09-15 03:14:25 +09:00
2026-09-14 12:28:36 +09:00
2026-09-13 18:36:37 +09:00
2026-09-09 17:15:57 +09:00
2026-09-12 18:18:57 +09:00
2026-09-14 12:22:35 +09:00
2026-09-14 12:42:49 +09:00
2026-09-17 19:42:32 +09:00
2026-09-12 13:14:13 +09:00
2026-09-14 15:02:43 +09:00
2026-09-14 16:53:25 +09:00
2026-09-14 16:20:51 +09:00
2026-09-15 02:36:25 +09:00
2026-09-14 17:27:53 +09:00
2026-09-13 17:02:26 +09:00
2026-09-14 19:05:55 +09:00
2026-09-18 01:18:24 +09:00
2026-09-14 11:35:02 +09:00
2026-09-15 05:30:32 +09:00
2026-09-09 17:15:57 +09:00
2026-09-17 16:06:14 +09:00
2026-09-15 01:34:52 +09:00
2026-09-15 01:34:52 +09:00
2026-09-09 17:15:57 +09:00
2026-09-15 01:34:52 +09:00
2026-09-14 20:54:28 +09:00
2026-09-14 19:44:18 +09:00
2026-09-14 18:25:22 +09:00
2026-09-18 07:05:07 +09:00
2026-09-09 17:15:57 +09:00
2026-09-14 10:41:19 +09:00
2026-09-15 02:36:25 +09:00
2026-09-17 19:42:32 +09:00
2026-09-15 03:55:12 +09:00
2026-09-17 19:42:32 +09:00
2026-09-15 01:08:43 +09:00
2026-09-13 23:58:38 +09:00
2026-09-14 17:08:14 +09:00
2026-09-12 18:18:57 +09:00
2026-09-14 12:09:18 +09:00
2026-09-15 06:49:19 +09:00
2026-09-14 20:54:28 +09:00
2026-09-14 17:42:49 +09:00
2026-09-14 05:59:32 +09:00
2026-09-15 04:18:14 +09:00
2026-09-14 21:32:21 +09:00
2026-09-17 19:42:32 +09:00
2026-09-15 05:58:50 +09:00
2026-09-09 17:15:57 +09:00
2026-09-14 09:39:42 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:15:57 +09:00
2026-09-09 23:36:17 +09:00
2026-09-14 17:42:04 +09:00
2026-09-14 15:59:11 +09:00
2026-09-14 16:01:50 +09:00
2026-09-14 16:24:33 +09:00
2026-09-09 17:15:57 +09:00
2026-09-14 07:09:53 +09:00
2026-09-14 07:09:53 +09:00
2026-09-14 12:28:36 +09:00
2026-09-14 18:21:24 +09:00
2026-09-13 18:47:35 +09:00
2026-09-13 21:55:50 +09:00
2026-09-14 06:32:14 +09:00
2026-09-14 12:28:36 +09:00
2026-09-09 17:15:57 +09:00
2026-09-13 19:46:29 +09:00
2026-09-13 20:00:38 +09:00
2026-09-14 00:27:29 +09:00
2026-09-14 17:10:26 +09:00
2026-09-15 00:44:33 +09:00
2026-09-13 17:52:04 +09:00
2026-09-14 01:09:23 +09:00
2026-09-14 12:28:36 +09:00
2026-09-14 11:44:01 +09:00
2026-09-09 17:15:57 +09:00
2026-09-09 17:15:57 +09:00
2026-09-09 23:02:04 +09:00
2026-09-15 00:44:33 +09:00
2026-09-09 17:15:57 +09:00
2026-09-17 19:42:32 +09:00
2026-09-10 00:06:22 +09:00
2026-09-13 22:55:27 +09:00
2026-09-14 01:10:55 +09:00
2026-09-15 06:00:07 +09:00
2026-09-14 12:56:02 +09:00
2026-09-09 23:29:30 +09:00
2026-09-15 05:33:34 +09:00
2026-09-15 02:15:48 +09:00
2026-09-15 02:47:59 +09:00
2026-09-14 05:10:41 +09:00
2026-09-14 16:59:47 +09:00
2026-09-14 23:04:31 +09:00
2026-09-14 18:01:34 +09:00
2026-09-14 02:43:14 +09:00
2026-09-10 00:06:22 +09:00
2026-09-15 01:34:52 +09:00
2026-09-14 08:37:58 +09:00
2026-09-14 04:06:40 +09:00
2026-09-14 21:29:04 +09:00
2026-09-14 05:29:05 +09:00
2026-09-14 20:32:30 +09:00
2026-09-14 03:37:18 +09:00
2026-09-14 00:01:30 +09:00
2026-09-15 00:04:41 +09:00
2026-09-14 20:12:09 +09:00
2026-09-14 18:27:36 +09:00
2026-09-14 22:40:49 +09:00
2026-09-09 21:22:15 +09:00
2026-09-14 16:59:47 +09:00
2026-09-14 07:04:09 +09:00
2026-09-15 03:29:21 +09:00
2026-09-13 23:29:16 +09:00
2026-09-15 00:04:41 +09:00
2026-09-15 05:14:39 +09:00
2026-09-14 22:55:45 +09:00
2026-09-09 22:43:14 +09:00
2026-09-18 07:05:07 +09:00
2026-09-09 23:50:23 +09:00
2026-09-14 11:55:23 +09:00
2026-09-14 03:24:53 +09:00
2026-09-14 15:55:44 +09:00
2026-09-15 04:48:36 +09:00
2026-09-14 21:29:04 +09:00
2026-09-13 23:58:38 +09:00
2026-09-14 00:01:30 +09:00
2026-09-14 07:01:46 +09:00
2026-09-14 11:55:23 +09:00
2026-09-14 03:24:33 +09:00
2026-09-09 21:38:19 +09:00
2026-09-13 17:05:36 +09:00
2026-09-14 22:07:48 +09:00
2026-09-14 19:22:08 +09:00
2026-09-15 04:19:23 +09:00
2026-09-15 03:29:21 +09:00
2026-09-13 09:08:10 +09:00
2026-09-14 08:03:12 +09:00
2026-09-13 22:35:41 +09:00
2026-09-18 03:10:57 +09:00
2026-09-17 19:38:09 +09:00
2026-09-15 00:23:33 +09:00
2026-09-16 15:41:58 +09:00
2026-09-14 20:13:25 +09:00
2026-09-17 19:38:09 +09:00
2026-09-15 02:47:59 +09:00
2026-09-14 08:57:24 +09:00
2026-09-14 09:40:24 +09:00
2026-09-15 04:11:25 +09:00
2026-09-15 01:08:56 +09:00
2026-09-14 00:53:31 +09:00
2026-09-14 19:44:18 +09:00
2026-09-14 19:44:18 +09:00
2026-09-18 13:21:13 +09:00
2026-09-18 17:04:46 +09:00
2026-09-09 17:12:30 +09:00
2026-09-18 09:07:49 +09:00
2026-09-18 02:15:05 +09:00
2026-09-21 07:50:13 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-13 17:22:17 +09:00
2026-09-09 17:15:57 +09:00
2026-09-17 19:42:32 +09:00
2026-09-18 16:48:56 +09:00
2026-09-17 19:42:32 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-17 19:42:32 +09:00
2026-09-14 21:29:04 +09:00
2026-09-17 19:42:32 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-18 09:07:49 +09:00
2026-09-13 23:33:10 +09:00
2026-09-14 23:13:48 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:15:57 +09:00
2026-09-09 17:12:30 +09:00
2026-09-21 21:24:20 +09:00
2026-09-21 23:50:42 +09:00
2026-09-21 21:20:36 +09:00
2026-09-21 20:57:43 +09:00
2026-09-21 09:31:45 +09:00
2026-09-21 19:58:04 +09:00
2026-09-13 09:23:38 +09:00
2026-09-09 17:12:30 +09:00
2026-09-19 01:36:21 +09:00
2026-09-17 16:29:20 +09:00
2026-09-15 22:00:17 +09:00
2026-09-21 21:35:50 +09:00
2026-09-20 20:59:27 +09:00
2026-09-16 11:57:21 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-12 18:18:57 +09:00
2026-09-09 17:12:30 +09:00
2026-09-17 19:42:32 +09:00
2026-09-17 19:42:32 +09:00
2026-09-17 19:42:32 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-13 22:41:47 +09:00
2026-09-19 12:39:29 +09:00
2026-09-19 12:39:29 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-14 21:11:44 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:15:57 +09:00
2026-09-17 19:42:32 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-09 17:12:30 +09:00
2026-09-14 14:18:01 +09:00
2026-09-17 16:46:58 +09:00
2026-09-18 13:49:01 +09:00
2026-09-17 16:53:22 +09:00
2026-09-19 03:30:42 +09:00
2026-09-18 20:01:27 +09:00
2026-09-17 17:28:29 +09:00
2026-09-14 09:14:56 +09:00
2026-09-19 01:36:21 +09:00
2026-09-19 01:36:21 +09:00
2026-09-17 13:51:28 +09:00
2026-09-17 22:35:19 +09:00
2026-09-15 19:14:02 +09:00
2026-09-19 01:36:21 +09:00
2026-09-20 22:15:08 +09:00