1210.3 KB · 수정 2026-10-26 17:40
목차

pfs 아카이브 — OMC · 패치 누적

✅ 26.10.26 · pfs-handoff-cap-1026b · handoff 캡 이관 (홈파베르 외곽 스티커 · SLS 로고 경위 원문)

✅ 26.10.26 · pfs-handoff-cap-1026 · handoff 캡 이관 (26.10.25 미배포분 묶음 운영배포 원문)

✅ 26.10.23 · pfs-handoff-cap-1023 · handoff 캡 이관 (20,063자 > 20,000 — 26.10.22 대전 도마 수입분 네스팅 원문)

✅ 26.10.22 · pfs-handoff-cap-1022 · handoff 캡 이관 (26.10.20~21 완료 2절)

[코디] 🆕 26.10.21(수) ✅ 운영 데이터 — [페페] 「생산현황 자재입고 모두 입고 완료 · 상원보드 어제 추가한 자재만 날짜 올려줘」 → 생산현황 미입고 보드 33행 중 30행 status «완료»(PATCH /api/orderpaper/<no>/status · GS 대전 도마*변동 5행 대기→완료 #8785·8793~8796 · 소요 한남2차 25행 진행→완료 #8769~8777·9839~9851·10223·10427·10429) · 유지 = 상원보드 2차(#9 아일랜드 누락분) #10444~10446 N239(SC) 18T PB 4·15T PB 4·6T MDF 2 → 미입고 보드에 10-26-2026 1줄만 남음(/api/orderpaper/board-wait 확인) · 코드 변경·배포 0 · 도구 C:\dev\_work\recv-1021\{q.py,apply.py} · ⏳[페페] 「날짜 올려」가 10.26 이 아닌 다른 날짜면 지정

[코디] 🆕 26.10.20(화) ✅ 네스팅 여유자재 패턴 분석(몸통/도어 · 운영 37건 읽기만) — 구간 정액·도어 18T 몰기·장척 몰기 · 상세 session-2026-10-20-nesting-spare-pattern.md · 다음 = [페페] 원하면 기본여유 자동제안 규칙화

✅ 26.10.20 · pfs-handoff-cap-1020c · handoff 캡 이관 (26.10.16~19 완료 5절)

[코디] 26.10.19(월) ✅ NAS 12:07 KST — 소요 한남 2차 #803 한샘 양식 V9(유리 sub 분리 칸 · 보이는 규격 DWG 실측 · 갑지 주방/수납 위치도) → \\192.168.0.101\공유폴더\2026현장\견적\10월\한샘\소요 한남 2차\한샘 소요 한남 2차 MH 가구제작 견적서(26.10.13) V9.xlsx(sha256 3955aa8e…) · 69,180,000(PFS 69,197,000 −17,000 만원 절사) · ⏳페페 규격 판단 4행·점 위치 → session-2026-10-19-hannam2-hansem-v9.md · ✅V10 12:56 = 37475 욕실서랍 길이 칸 2590·금액 수동 입력(rules.manual_amount · 총액 불변 · sha256 667051e8…) · ✅V11 13:51 = 위치도 갑지 → 99A 내역서-주·-수 탭 총합 다음 쪽(셀 diff 0 · sha256 5fec4f49…)

[코디] 🆕 26.10.19(월) ✅ 운영 11:39 KST — 소요 한남 2차 아일랜드 벤치 몸통 발주 누락분 = PNCAD 작업본 #61(장 5 · 21행 70매 · N239(SC) · 261015 도면) + 아일랜드 전용 네스팅 #34(원장 7 = 18T 3·15T 3·4.5T 1 · 엣지 0.6T×22 116m→120M · 피스마개 960) — 원인 = 발주서 #7 출처 #31(PNCAD 53·54)에 #27 수동 행(아일랜드 66) 미포함 · #7·#31·#53·#54 무변경 · NAS …\한샘 소요 한남 2차\코디 아일랜드 몸통 26.10.19\ · 작업폴더 C:\dev\_work\sohan2-island-body-1019\ · 🆕#31 추가 누락 판정 = 주방 EXEDRA2 측판 704×2590×2·천판 704×2030·K05 밴드 1 · 신발장 D 코너기둥 2·D2L 밴드 1 · 15T 폭60 보강밴드목 #31 전무(나머지 10매) · 세탁실 5 = SE-021L 문틀재로 대체 · [페페] 26.10.19 ①=dev-e5 통합 엑셀에 「아일랜드 누락분(네스팅 #34)」 별도 행(보드만 · 엣지·피스마개 제외) ✅11:57 KST \\192.168.0.101\공유폴더\2026현장\원부자재발주서\10월\통합발주(동기화제외)\한샘 소요 한남 2차 원부자재발주서(통합).xlsx 상원보드 탭 20~22행(칼라 표기 「N239(가죽)」 · 탭 주황) ②=폐기 «마감재·무늬목 등으로 다 정리된 사항 · 필요없음»(기록만 보관) · ⏳가정 5건(벤치 세로판 354×398.5 · 뒷판 보조목 1310.4 · 벤치 서랍폭 604.4 · 서랍바닥 15T · 밴드 개수)

[코디] 🆕 26.10.19(월) ✅ 운영 11:40 KST — 소요 한남 2차 라고데코 원단 별도 부자재 발주서 = PFS #11(확정 · 청솔산업 · 입고 26.10.22 · COD_01 2yd+Harvard-09 4yd · 폭1220) + #8 에서 그 2행 제거(120→118) · 🆕추가 12:00 KST 청솔산업 가공 발주서 = PFS #12(draft · 입고처 포인·입고일 26.10.29 추천값 · 쿠션 시트1350×440×30T+등받이1310×467×30T 1세트 · 서랍바닥 레자 9개) + #11 COD_01 비고 두께 30 으로(수량 불변) · ⏳[페페] #8 이지웨이 No.83 벤치 쿠션(제작)과 청솔 쿠션 중복 정리 · 🆕추가 오후 PFS 동기화(26.10.19) ✅ #11 입고일 10.21·비고 확정치수(수량 페페 UI 수정 4야드/4야드 유지) · #8 No.83 벤치 쿠션 행 제거(118→117) · #12 draft 10.28 불변(삭제 여부 ⏳[페페]) · 상세 = session-2026-10-19-lagodeco-fabric-order.md · ⏳[페페] 출력·발송

[코디] 🆕 26.10.19(월) ✅ 운영 10:19 KST — PFS-MAT#1(GS 안산 성포+원주 단구) H2041B-L1 피앤데코 직접발주분 자재관리 복원 + 이선영 사원 카톡 보고

[코디] 🆕 26.10.16(금) ✅ 운영 17:27 KST — 소요 한남 2차 #803 견적 = 261015 엄지발송 최종 도면 사이즈 반영 (⏳질문 5)

✅ 26.10.20 · pfs-handoff-cap-1020 · pfs handoff 캡 이관 (22,566자 > 20,000 — 26.10.20 네스팅 사용컬러 소재·폴딩 · 26.10.12~14 완료 5절 원문)

[코디] 🆕 26.10.20(화) ✅ 운영 09:26 KST — 네스팅 「사용 컬러」 패널 = 컬러별 소재 수정(poin_colors 영구 저장) + 사이드 폴딩

[코디] 🆕 26.10.14(수) — GS 대전 도마변동 원부자재발주서 «발주 진행»(field 2175 · PFS-MAT#5) — ✅PFS 운영 #5 판 25→27(amend: 70-115 피스마개스티커 10 장 수동행 add + PBNB6T 칼라샘플 비고 비움 / lines/remove: 자동행 5600 EA 소프트삭제, 대조 0) · ✅엑셀(NAS …\10월\한샘 GS 대전 도마 변동 원부자재발주서.xlsx) 케데코 G13(10/16) 값 제거 + 오엠씨 13행 «케데코 70-113 PP시트 60M → 오엠씨 입고» 추가(zip XML 치환 · 백업 · NAS 재읽기 md5 · 다른 탭 변경 0) · ✅출력 6건(미니PC → 사무실 복합기 SINDOH D450 PCL, 1×1쪽, 23:30 KST) ⚠오엠씨 13행은 출력 뒤(23:40) 추가돼 오엠씨 종이는 옛 판 · ⏳카톡 일괄 발송 = 예약 \Cody\Orderpaper-Daejeon-1014-0700(winledger W191 · 06:50 기동 → 07:00 정각 · job C:\dev\_work\daejeon-order-send-1014\kakao\job_1014.json · 방: 피앤알 남태욱 상무 / 피앤데코 서민경 주임 / 선재 박남선 대표 / 조운 IMT 여직원 / 케데코 휴대폰 / 포인-오엠씨, 입고처·입고일 언급 없음) 결과 확인 대기*(run.log C:\dev\poin-agent\data\orderpaper\run.log + 텔레그램 → 예약작업 삭제·release). ⏳[페페] 출력 6장 육안(스풀로 확인 불가)·오엠씨 재출력 여부. 절차 전체 = 스킬 C:\Users\delix\.claude\skills\orderpaper-dispatch\SKILL.md(26.10.14 신설) · 스크립트 = C:\dev\_work\daejeon-order-send-1014\.

[코디] 🆕 26.10.13(화) — GS 안산 성포 MH 도어발주서 도면 대조 → ✅[페페] 「추천대로 진행」 NAS 원본 「포인」 반영(9행 수정 + OT84 하부코너ep 1행 추가 · 비고 U 열 21 · parse 355→356 · sha1 4da7bb98… · 백업 「…발주서_백업_20261013.xlsm」) · ⏳[페페] 주황 11 은 값 그대로 «확인요» (원문: session-2026-10-13-ansan-seongpo-door-review.md 「반영(26.10.13)」)

[코디] 🆕 26.10.13(화) — 소요한남 nesting 행 동기 v2 — ✅운영 반영 23:46 KST(master a24f100b → deploy-live 0eb85afa) · rows GET/POST · rev/mt/exc/by · 마지막 서버 반영 우선 · 웹 칸 단위 병합 · 연동 job 삭제=제외 · 제외 행(exc='1') 발주 계산 제외(calc._parts·mat_view·calc_adapter) · 「재계산 필요」 띠·recalc=1 · API 실행기 B1(20261012-230757-381277 약 $22)+B2(20261012-232205-ed38cf 약 $7.8) · 반박검증 차단1·권장3 반영 · 테스트 서버 27항목 · 운영 실측 쓰기 0 · 사이트맵 반영 · pytest 101 · A1 정수화 운영 #28 upd 40/40 · ⏳[페페] #28 웹 재계산·저장 · 상세 = projects/acad-tread/handoff.md 맨 위

✅ 26.10.12(월) GS 대전 변동 몸통 발주서 초안(NAS 새 파일) · 몸통 네스팅 #20 타입·위치 빈칸 87행→0(운영 deploy-live 3f885650) · 발주서정리 업체 카드 배지 「G」·AL·유리 항목 복원(운영 7ed55ede·100353b7) — ⏳[페페] 몸통 발주서 8건(위치·업체 배정·케데코 품명·피스마개 단위·엣지 올림·4.5T 예비 칼라·B28 타입·미확정분 추가발주) · 주방84A 위치=벽 단위/파우더장 표기 · PNCAD a4d5c1b push(타 미푸시 3커밋 섞임) · #20 저장 요약 45 vs 계산 47 · 유리 업체 미입력 AL발주서 2건(#7495·#3282) 업체 입력 (원문: archive.md 「✅ 26.10.15 · pfs-handoff-cap-1015 · pfs handoff 캡 이관」)

✅ 26.10.12(월) r3 — 한샘 소요 한남 2차(field 2184 · 99A) 261008 새 도면 반영(운영 POST 몸통 #27·도어 #28 · 표기 DWG NAS 「코디 소요량 26.10.12」) + r2(26.10.11~12 구도면 #25·#24) — ⏳[페페] 「키큰장,하부장 전체 제외 발주완료」 뜻(추천=소요량 유지) · 세탁실 새 LPM 코드(5매 보류) · 가전 10/12 확정본 · 보강밴드목 가정 · 폐기 대상 정리 · #23 삭제 여부 · 문짝 높이 6곳 · 결 방향 · 포켓 프레임EP 2 소속 · 도구 개선 3 · 상세 = projects/pfs/session-2026-10-12-hannam2-takeoff-r3.md · session-2026-10-11-hannam2-takeoff.md (원문: archive.md 「✅ 26.10.15 · pfs-handoff-cap-1015 · pfs handoff 캡 이관」)

✅ 26.10.19 · pfs-handoff-cap-1019 · pfs handoff 캡 이관 (20,977자 > 20,000 — 26.10.19 GY01DMT 2차 발주 원문)

[코디] 🆕 26.10.19(월) ✅ 운영 11:23 KST — 소요 한남 2차 GY01DMT 2차 발주 = PFS #8(#4 추가 차수 1 · 5줄 · 확정) + NAS 새 엑셀 · #28 stale 라 현재 행 2700 재산정(8장→5장) · 업체 오엠씨/조운IMT/선재기업 추정(페페 확인) · 상세 = session-2026-10-19-hannam2-gy01dmt-order.md

✅ 26.10.16 · pfs-handoff-cap-1016c · pfs handoff 캡 이관 (20,114자 > 20,000 — 26.10.16 #803 한샘 설명서·V8 · 추가금액 86줄 연동 원문)

✅ 26.10.16 · pfs-handoff-cap-1016b · pfs handoff 캡 이관 (22,247자 > 20,000 — 26.10.16 대우 울산 문수로 · 26.10.15 #7 몸통 엣지 · 26.10.15 QA 3건 원문)

[코디] 🆕 26.10.16(금) ✅ 운영 11:00 KST — 대우 울산 문수로 84B 102-502(field 2206 · 아이비젼) PO 사이즈 반영 — [페페] 「PO 참조 사이즈 반영 · 운영배포」+결정(56만 · 깊이 570 · 쿡탑 504+348 분리 · 재단 안 함 · 걸레받이 2440 여유1 · 279 숨김) · PO = 카톡 「아이비젼-포인」 10.15 18:18 C:\dev\_work\daewoo-ulsan-munjuro\대우건설) 울산 문수로 …_250715,21,1114.xlsx · scene 56 몸통 PUT(storeScene(false) · 12→13장 · 몸통 PO 13/13 · 도어 50매 불변) · scene 51 숨김 · nesting job 32 신규(56+걸레받이 152×2440×18T 3 · 원장 11→13 · job 29 그대로) · 자재발주·부자재 10 수정 0(영향=발주량 안쪽) · 코드 배포 없음 · 스냅샷 C:\dev\_work\daewoo-ulsan-munjuro\before_1016\·after_1016\ · ✅후속 11:17 KST([페페] 걸레받이=도어 포함 · 나머지 추천대로): 도어 재단품 G20~22 → G30 152×2440×18T ×3(여유1) 교체 PATCH(50매 유지) · job 32 걸레받이 제거(원장 12) · NAS 새 「…도어규격표 (PO반영 261016).xlsx」 → door_order_file 285(49행) · 279·280 .xlsx.old → remove_yn=1 · 칼라 id 887 등록 · job 29 소프트삭제 · ⚠첫 조사의 «도어에 걸레받이 없음»은 오판(재단품 3매 있었음) · ⏳[페페] L4-2 후라이팬장 지판 380×569 실물확인 · 285 field_no 비어 있음(280 도 동일) 현장 2206 연결 여부

[코디] 26.10.15(목) ✅ 운영 — 소요 한남2차 자재 발주서 #7 몸통 두께별 엣지 누락 수정 — [페페] 「두께별 엣지 안 들어감 · 네스팅엔 있음 · 운영배포」 · 원인 = calc.py 몸통 엣지가 18·15T만 셈 → 전 두께(3·4.5·6T 제외)·컬러×폭 · + _held_orphans 재가져오기가 [복구] 피스마개 SE-021L 지우던 버그 · master 1d53a97c → deploy-live e91089ac(4파일) · test_calc 80/80 · test_mat_orderpaper 271/271 · #7 rev15→16 재가져오기 1회: 새 엣지 4행(N239 9T 70m · N445 30T 30m · 23T 40m · 9T 20m) · 기존 24행 diff 0 · 출처 = 네스팅 #31(PNCAD 53·54) · 네스팅 쪽 정상 · 스냅샷 C:\dev\_work\sohan2-matop7-edge-1015\ · ⏳[페페] 새 4행 업체(추천 선재기업) · 30T·23T 엣지 0.6T 맞는지(1T?)

[코디] 26.10.15(목) ✅ 운영 10:26 KST — pfs 검증보고 QA 3건 — [페페] 「운영배포」 · ① 견적 v2 추가금액 표 table-layout:fixed·품명/규격 무지정(남는 폭 균등 306/306 @1680)·비고 130→170·머리/본문 13px(qe-table 11.5px 덮어쓰기 해소) ② pncad 다중 배치 선택 시 「선택 아티클」·존·서랍·라운드·접합 패널 가림+안내문(selMultiN) ③ pncad 아티클 편집 빈 공간 「서랍 넣기」(레일 언더레일·볼레일·텐덤 · 자체 droplist · 분할·다른 fill 있으면 숨김 · 넣으면 기존 서랍폼) · web-designer 처방 → API 런 L2 20261015-101414-a4eaea · master bec0ccd6·bbdf3cf6(이번 커밋만 push · 로컬 patch63 5aed0c01 미push 유지) → deploy-live 17fd8736·efef93ac(운영 app.html renderZone 충돌 = master 포커스복원 코드 미반영 상태라 selMultiN 1줄만) · 운영 읽기확인 #803 폭·13px·pageerror 0·쓰기 0 · ⏳[페페] pncad 다중선택↔단일 전환·서랍 넣기 직후 3D 갱신 육안

✅ 26.10.15 · pfs-handoff-cap-1015 · pfs handoff 캡 이관 (26.10.12 이전 절 원문 — TREAD R3 · 대전 변동 도어재/몸통 발주서·네스팅 #20·발주서정리 · 소요 한남 r3 · 몰테니·한샘 변환 · 대전 변동 네스팅 준비)

[코디] 🆕 26.10.12(월) — 소요한남 도어 TREAD 확인 연동 R3 — ✅운영 반영 19:21 KST(master c48adc1e → deploy-live 878e2150) · 신규 POST /api/nesting/<job>/rows-ok(PC별 Bearer 토큰 · env PFS_TREAD_TOKENS 해시 · 전체 PUT 시 ok_src=tread 행 ok 보존) · 실측 401/401/401/404/200 · 사이트맵 반영 · env 백업 /home/ubuntu/env/pfs-live.env.bak-tread-20261012 · 웹 #28 에서 tread 행 ok 를 바꿔도 서버가 tread 값 유지(정본=도면). 상세·육안·사무실PC 설치 = projects/acad-tread/handoff.md 맨 위 · devplan sohan-door-mleader-tread.html

[코디] 🆕 26.10.12(월) — GS 대전 변동 도어재(#22 15:02 저장 · 55장) 발주서 통합 — ✅NAS 새 파일 \\192.168.0.101\공유폴더\2026현장\원부자재발주서\10월\통합발주(동기화제외)\(몸통·도어)한샘 GS 대전 도마변동 원부자재발주서.xlsx(md5 f824a848… · 15:55 KST · 몸통 원본 무변경) · 업체 = [페페] 지정(IV075MT 시트 조운IMT/오버레이 오엠씨/엣지 선재기업/샘플 진영LDM · PBNB6T 조운IMT/피앤알/선재기업 · 70-113 케데코/오엠씨 · 70-115 케데코/피앤알 몸통과 같이 · 유사PP(IV075MT) 오엠씨 자체) · 🆕[페페] 입고처 이름·주소 = 양식 하단이 아니라 마지막 품목 바로 아래 행 · 검사 PASS 167 · 산출 C:\dev\_work\gs-daejeon-byeondong\order_door_1012\ · ⏳[페페] 7건(70-115 도어 PP시트 20M 별도행 vs 합산 · 여유 +10 vs 10.6 수동 올림 · 미발주 엣지·샘플·피스마개 · 오엠씨 안내행 · #22 유사PP 경면 자동표기 · 입고일)

[코디] 🆕 26.10.12(월) — GS 대전 변동 몸통 원부자재발주서 초안(네스팅 #20 · 칼라 「미확정」 4행 10매 제외 → 원장 47→45장) — ✅NAS 새 파일 \\192.168.0.101\공유폴더\2026현장\원부자재발주서\10월\통합발주(동기화제외)\(몸통)한샘 GS 대전 도마변동 원부자재발주서.xlsx(md5 a172467e… · 12:31 KST) · 운영 쓰기 0 · 셀검사 71/71 · 탭 = 피앤데코(HS0868GP 18T 25·15T 6·4.5T 예비 1) · 피앤알(70-115 4.5T 13) · 케데코(PP시트 80M·엣지 770M·피스마개 4960EA) · 산출 C:\dev\_work\gs-daejeon-byeondong\order_1012\ · 🔑월 폴더에 두면 동기화 현장매칭이 「대전」 2130(85점)에 붙는다(2175 「도마*변동」 0점 — 파일명에 * 불가) → 하위폴더 · ⏳[페페] 8건(위치·업체 배정·케데코 품명·피스마개 단위·엣지 올림·4.5T 예비 칼라·B28 타입·미확정분 추가발주)

[코디] 🆕 26.10.12(월) — GS 대전 변동 몸통 네스팅 #20 타입·위치 빈칸 87행 → 0(합쳐진 다타입 행 분리 122→161행 · 399매·엔진 47장 불변) + 근본원인 3곳 수정(PNCAD nest_rows 에 타입·위치 없음 · 서버 합산이 타입 무시 · 네스팅 가져오기 미기입) — ✅운영 deploy-live 3f885650(master 3c71152e) · PNCAD a4d5c1b 로컬만(⏳push = 타 미푸시 3커밋 섞임) · 운영 PUT #20 1회 11:24 · 작업본 #41~44 각 1회 11:35 KST · 칼라 869 불변 · 되돌리기 C:\dev\_work\gs-daejeon-byeondong\fix_1012\before\ · ⚠페페 11:03 저장 탭 새로고침 필요(재저장 시 덮임) · ⏳[페페] 주방84A 위치=벽 단위 1개 / 파우더장 표기(몸통 「침실1 드레스룸 파우더장」 vs 도어 「침실1 파우더장」) · 기존 타현장 작업본은 재저장 전 위치 빈칸 · #20 저장 요약 45 vs 계산 47(11:03 편집분)

[코디] 🆕 26.10.12(월) — 발주서정리 /field/orderpaper 업체 카드 배지 「G」(페페 QA 09:13) = 자재코드 유리(G)·AL(A)이 OP_MATS 에 빠져(26.9.23 42cf6796 누락) 코드 그대로 찍히고 본문 AL·유리 항목이 통째로 안 보이던 것 → OP_MATS A·G(황동·분홍, 자재관리·입고일정과 동일) · 모르는 코드 「미분류 X」 · AL·유리 블록 수동분류 토글 제거 · 빈 발주처 카드 「(발주처 미입력)」 + 그 카드 cid 가 첫 업체 v0 와 충돌해 남의 항목 79행이 뜨던 것 — ✅운영 deploy-live 7ed55ede 09:27 · 100353b7 09:31 KST(master 9b2addf9·40c6f80e, 1파일 C:\dev\pfs\web\templates\basic\field\field_orderpaper.html) · 운영 실측 카드1~4 = 유로글라스[부자재·유리] · 이지웨이[AL] · 일광금속[부자재·AL] · (발주처 미입력)[유리], 본문 AL·유리 섹션 표시 · 사이트맵 미반영 4→1(orderpaper=same) · ⏳[페페] 「상원보드」 아님 = 유리 업체 미입력 AL발주서 2건(#7495 아이파크 107-2802 = AL발주서 #8 glass:[] · #3282 학동매장 주방) 업체 입력 필요 · 배지 10.5px 데스크톱 13px 하한 기존 위반(미변경)

[코디] 🆕 26.10.12(월) r3 — 한샘 소요 한남 2차(field 2184 · 99A) 261008 새 도면 반영(구도면 대비 바뀐 곳만) — ✅운영 POST(작업본 #49·#50 · 몸통 네스팅 #27 · 도어 네스팅 #28) · ✅표기 DWG NAS 코디 소요량 26.10.12\ · ⏳devplan §0 절 적용 대기(훅) · ✅카드 갱신

[코디] 🆕 26.10.8(목) 19:19 — 몰테니 홍보부스 임시견적 #802 → 한샘 양식 ✅NAS \\192.168.0.101\공유폴더\2026현장\견적\10월\한샘\몰테니 홍보부스\한샘 몰테니 홍보부스 가구제작 견적서(26.10.08).xlsx(sha256 8997736f…) · verify ALL OK 79 · 도면 안 함(지시) · 도구 옵션 2개 추가(rules 🆕) · ⏳[페페] 단가군(벽판넬→키큰 FIX PANEL)·길이 10000·담당 김경록 부장 확인

[코디] 🆕 26.10.8(목) — 한샘 양식 변환 = 정본 페이지 · 성포 769 · 한국유리부지 #800(V1·V2 위치도) ✅NAS 새 파일 → 🆕재사용 도구 C:\dev\tools\hansem-convert\hc.py(playbook §8 · 스킬 hansem-convert · 회귀 3건 바이트 동일) · ⏳[페페] 7건(Q1~Q4 · 수납 단가군 · 규격↔길이 6줄 · 🔴NAS 한국유리부지 V1 없음·V2 16:32 재저장 · 성포 10.2판 없음 확인) — 원문 = projects/pfs/session-2026-10-08-hansem-convert-tool.md 부록 · 사례 = session-2026-10-08-{gs-ansan-seongpo-hansem-v2,hankukglass-hansem}.md

[코디] 🆕 26.10.6(화) — GS 대전 변동(도마변동 · field 2175) 몸통·도어 네스팅 준비 완료 — 몸통 PNCAD #41~44 → 네스팅 #20(부재 396매 · 원장 엔진 47장 · 길로틴 45) · 도어 해치 DWG → 네스팅 #22(부재 250매 · 엔진 34장 · 길로틴 33) · 운영 쓰기 = POST 신규만(PUT 0) · 칼라 자동등록 POST 차단(마스터 858 그대로)

✅ 26.10.14 · pfs-handoff-cap-1014 · pfs handoff 캡 이관 (20,460자 > 20,000 — 26.10.14 #803 한샘 V1·V2 절 · 26.10.13 목록 성능·자재 발주서 품명 이력 ✅ 절 원문)

[코디] 26.10.14(수) V2 — [페페] 수정 반영: PFS #803 운영 수정 1회(sub 58줄 마진 15.5→35 · 다각형 부가비 ×1.15 = 14,848,685(FLOAT 읽기 14,848,700) · 운반 500,000 · 시공 8,000,000 · 총액 33,860,900 → 45,334,700) → 한샘 V2 NAS 새 파일(…\견적\10월\한샘\소요 한남 2차\…(26.10.13) V2.xlsx · sha256 c77cd827…) · 다각형 = 주방 갑지 「기타·자재비」 별도 · 갑지 주방 21,338,700 · 수납 15,990,000 · 생산비+시공비 45,328,700 · verify 353 ALL OK · 회귀 바이트 동일 · 카톡 사본 C:\dev\_work\sohan2-hansem-261014\send\sohan2_hansem_V2.xlsx · ⏳카톡 발송 = 총괄 · 상세 = session-2026-10-14-sohan2-hansem-803.md 「2차」

[코디] 26.10.14(수) — 한샘 소요 한남 2차 #803 → 한샘 양식 엑셀 V1 NAS 새 파일(…\2026현장\견적\10월\한샘\소요 한남 2차\한샘 소요 한남 2차 MH 가구제작 견적서(26.10.13) V1.xlsx · sha256 0dcea4d9…) — 추가금액·부가비 행 합산(fold) · 마감 종류만 · 갑지 33,860,000(PFS 33,860,900 −900 절사 · 🔴지시문 23,585,000 은 옛 값 — 10.13 18:01 다각형 부가비 12,911,900 교체 미기록) · verify 353 ALL OK · 회귀 바이트 동일 · ⏳[페페] 내일 확인 → 수정은 sites\sohan2-803.json 고치고 run → nas-put --put(V2 자동) · 확인요 6 = session-2026-10-14-sohan2-hansem-803.md 「다음」

[코디] ✅ 26.10.13(화) — 목록 로딩 성능 운영 반영 22:37 KST(master f23a70dc·82acf3cc → deploy-live 8bbdc3b4 · 7파일) + 인덱스 patch63 운영 22:41(field_type·estimate_detail · 커밋 b7767098 push 안 함) · 발주서 목록 2.3s→0.11s · 현장 6.6s→0.33s · 견적 10.4s→0.19s · 업무패널 콜드 7s→0.45s · ⏳[페페] 탭 새로고침 육안 · estimate(field_no) 인덱스(견적 무필터 0.7s) 보류 · worktree C:\dev\pfs_wt_molist·C:\dev\pfs_wt_perf 삭제 승인 대기 · EC2 /tmp/pfsperf/ 임시파일

✅ 26.10.13 자재 발주서 자동 행 품명·규격 직접수정 + 이력 복원 — 운영 42ea2ea1 (patch61 mat_orderpaper_item_hist) · ⏳[페페] 탭 새로고침 · 업체 추천 실적 기준 확인 (원문: archive.md 「✅ 26.10.13 · pfs-handoff-cap-1013」)

✅ 26.10.13 · pfs-handoff-cap-1013b · pfs handoff 캡 이관 2차 (26.10.10 dwg-takeoff 파이프라인 구축 절 · 26.9.28~29 월마감 명세서/롯데 화성 향남/에넥스 절 원문)

[코디] 🆕 26.10.10(토) — dwg-takeoff 자재소요량 파이프라인 공용 CLI 구축 + 주방84A 비교 실험 채점 + README 보강 — ✅로컬(tools e6022f1·8c1db80 · push 안 함 · 운영 쓰기 0) · ✅devplan C:\dev\devplan\dwg-takeoff.html

[코디] 🆕 26.9.28~29 — 월마감 현장별 거래명세서 38158edc · 네스팅 #8 YEN70-SG 복구 5fd14421 · 롯데 화성 향남 한샘 엑셀 · 에넥스 9월 마감(close_no 21) — 완료, ⏳ 아래만 남음 (원문: archive.md 「…cap-1006b」)

✅ 26.10.13 · pfs-handoff-cap-1013 · pfs handoff 캡 이관 (26.10.13 자재 발주서 완료 절 5개 · 26.10.12 네스팅 자재 자동 등록 절 원문)

[코디] 🆕 26.10.13(화) — 자재 발주서 자동 행 품명·규격 직접수정 + 이력 복원 — ✅운영 반영 14:45 KST(master 129ee378·4cda2f3e → deploy-live 선별 포워드 1a6b8f23·42ea2ea1 · 7파일 blob 일치 · EC2 HEAD 42ea2ea1 · uwsgi 14:45:43 KST · health 200) · [페페] QA 14:09 「31행 엣지 HS0868GP — 뒤판 70-115 PP 유사 시트 활용 엣지 발주 · 품명·규격 직접 수정 · 기존 품명 이력·복원」 · 새 테이블 mat_orderpaper_item_hist(patch61 CREATE 만 · 테스트 → 운영 SSM 선생성 · 적용기 C:\dev\pfs\scripts\_mat_orderpaper_patch61_apply.py) · 이력 = 변경 후 값(첫 수정 때 원래 계산값 calc 1줄 먼저 · source calc/user/restore · is_applied 0 = 재가져오기 후보) · POST /api/mat-orderpaper/<no>/lines/name-restore(hist_no 복원 | to_calc 되돌리기 · 초안만) · 재가져오기·대응 연결 = 사람 지정 값 유지 · line_key 불변 · 정정(amend) 규격도 이력 · 대응 불명 행은 연결 전 수정 금지 · 화면 = 입력칸 상시(평소 투명 테두리) · 칩 「수정됨 · 이력 N」 → 인라인 이력 표 · 검증 = 자체검사 116/116 · 테스트 서버 실주소 Playwright 18/18(C:\dev\_work\mat-name-edit-1013\ui_check.py · 스크린샷 …\shots\) · 반박검증(vff-analyst) 차단 0 · 권장 2 중 1 반영 · 운영 읽기 확인 쓰기 0 · 사이트맵 미반영 1 = 카톡관리(타 세션) · ⏳[페페] 열린 탭 새로고침 · 고친 품명이 확정되면 업체 추천 실적도 고친 품명 기준(그대로 둠 — 바꾸려면 말해 달라) · 되돌린 뒤엔 칩이 사라져 이력 표를 못 연다(설계대로) · 테스트 DB 문서 #36·네스팅 #82 = 코디 테스트용(남김) · devplan pfs-mat-orderpaper.html

[코디] 🆕 26.10.12(월) — 네스팅 자재(원장) 실시간 자동 등록(직접 고친 행 ✎ 고정 · 지운 자동 행 억제 opts.matSuppressed · 옛 저장본 = 전부 사용자 행) + 「⚙ 자재 전체 다시 등록」 confirm + 검색칸 Enter = 전체 단어(data-drop-enter="best", 네스팅만) — 포인·월드 협력사 — ✅운영 deploy-live 037ea14f 08:34 KST(master 23ce1f1a 선별 포워드 3파일) · 서버·DB 0 · 검사 C:\dev\pfs\scripts\_nesting_automat_check.py 89/89 · ✅master push 23ce1f1a · 사이트맵 커밋 보류(tools/sitemap 타세션 미커밋 섞임)

[코디] 🆕 26.10.12(월) — GS 대전 변동 도면 261006→261007 칼라 대조(읽기 전용) — 변경 있음: 몸통 HS0868LS(F)→HS0868GP 49곳 전부 · 바디 엣지/등판 PP 「케데코 70-115」 코드 삭제→「바디 유사」(79→2건) · 84A옵션 홈바 AL IK-A43→A44 · 팬트리 도어 후면 70-113 · 홈바 하부장 칸 신설(IV075MT/70-113/HS0868GP) · 84A옵션 상판·벽 US102 퀘스트 · 손잡이 사양표 IK-A44↔전면유사 정정 · 59A 현관 은경→브론즈 · 결과 C:\dev\_work\gs-daejeon-byeondong\dwgdiff_1012\report_261006_261007.txt · ✅[페페] 결정: GP=경면코드·261007 이 협의 확정본 · 70-115(4.5T·PP시트·엣지·스티커)는 넘버가 빠져도 그대로 유지 · 손잡이 칼라 변경 확인됨 · 몸통은 엑셀 초안 기준(직접 수정분 있음·재생성 안 함) · 다음 = 페페가 도어부재 추가·수정·검토(네스팅) 후 도어 초안 지시 예정

✅ 26.10.10 · pfs-handoff-cap-1010b · pfs handoff 캡 이관 (dwg-takeoff 완료 세부 11~35줄 원문)

✅ 26.10.10 · pfs-handoff-cap-1010 · pfs handoff 캡 이관 (26.10.9 완료 절 7개 · 26.10.6 업무패널 통화 · 26.9.23 Jev 절 원문)

[코디] 🆕 26.10.9(금) 14:16 — 스티커 도어 탭 「한샘 학동매장 도어발주서.xlsm」 검색 안 됨 = 정시 동기화가 테스트만 돌았다 — ✅수정·운영 반영(master d99e6383 + 사이트맵 d0251bf3 · 사이드카라 deploy-live 불필요) + ✅상주 워커 자동 동기화(6f68cc05)

[코디] 🆕 26.10.9(금) — PNCAD 깊이 분할(D·앞뒤 칸막이) + 공간 정면 방향 앞|뒤(뒤 도어·서랍·날개판 뒤 끝) — ✅운영(본체 a900e009 = dev-97 배포에 포함 · 라벨 후속 3216c8a9) · pncad def8b33·359636e

[코디] 🆕 26.10.9(금) — PNCAD 접합 설정 1단계 엔진(코너 4모드·뒤판 덧댐 D유지·내부 T·endTrims) — ✅운영 deploy-live 45cb7164(master d1abef48 ← pncad 889e0fe, schema.js 1파일) · 설정 UI 전이라 운영 영향 0 · 회귀 9,349건 동일

[코디] 🆕 26.10.9(금) — PNCAD 배치 이동 음수 허용·±10000 — ✅운영 deploy-live 4c936793(master d86aebe7, app.html 1파일)

[코디] 🆕 26.10.9(금) 09:10 — PNCAD 배치 깊이 y 입력 + Ctrl+드래그 깊이 이동 — ✅운영 deploy-live 61752735(master f966074d, app.html 1파일)

[코디] 🆕 26.10.9(금) — PNCAD 현장목록 경량 API·선로딩 + 휠드래그=커서중심 회전(Shift+휠=이동, 메인·아티클 편집기) + QA헬퍼 패널 열릴 때 모달 밀림 — ✅운영 deploy-live 537adc36 08:49 KST(master c7a41623 4파일)

[코디] 🆕 26.10.6(화) — 업무패널 통화 = 새 통화만(컷오프 20:21:34 KST) + 미종결 통화 3,014건 일괄 완료 — ✅운영 bfce51f7(master 5e2b27f4·사이트맵 1e59c6d0) (원문: archive.md 「✅ 26.10.6 · pfs-worklog-panel-newcall」)

[코디] 🆕 26.9.23 — 발주서 dedupe 경계만 Jev · intake-check 명세서 대조 Jev 섀도 — 완료 (원문: archive.md 「✅ 26.9.29 · pfs-handoff-cap-0929」)

✅Jev 반영 켬(tools a0d35ef, 끄기 = JEV_APPLY=False/--no-jev). ⏳코디 = 첫 Jev 반영분 verdict 대조. 상세 = projects/pfs/session-2026-09-23-orderpaper-jev.md.

✅ 26.10.9 · pfs-handoff-cap-1009a · pfs handoff 캡 이관 (26.10.7~8 완료 포인터 절 · 26.9.22~23 완료 절 · GS 대전 변동 갱신 불릿 원문)

(A) 26.10.7~8 완료 절 헤더 14개 (본문 원문은 각 「…cap-1008/1008c」)

[코디] 🆕 26.10.8(목) 밤 — 네스팅 부재 입력표 기본 빈 행 3→20 — ✅운영 deploy-live f9c8247d (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008c」)

[코디] 🆕 26.10.8(목) — 월드산업 협력사 네스팅 /partner/nesting + /api 허용목록 게이트 — ✅운영 deploy-live f69b484a · patch60 · 계정 world01 (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008c」)

[코디] 🆕 26.10.8(목) — 업무패널 카드 호버 전문 확장 — ✅운영 deploy-live 317fc239 (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008c」)

[코디] 🆕 26.10.8(목) — 견적 v2 「타입별 가구 항목」 카드 헤더 스크롤 고정 — ✅운영 deploy-live 5e048737 12:0x KST(master 547852e9 3파일 · 사이트맵 9211bd07 미반영 3→1) · DB·서버 0 (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008」)

[코디] 🆕 26.10.8(목) — 견적 v2 추가금액(sub) 「자당포함」 플래그 — ✅운영 4ddbfc6c · patch59 · ⏳한샘 변환 흡수 규칙(rules 🆕 26.10.8) (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008c」)

[코디] 🆕 26.10.8(목) — 생산현황 미입고 보드 자재 표기 12px·간격 절약 · 「접힌 현장 N곳」 배지 삭제 — ✅운영 deploy-live 471ca2b7 10:35 KST(master 9a802495·49e5e9fe·8b56b4f8 · 사이트맵 cf1c96aa) (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008」)

[코디] 🆕 26.10.8(목) — 견적서 v2(/estimate/regist-v2·modify-v2/<no>) 상단 헤더(제목·취소/저장) 스크롤 고정 — ✅운영 deploy-live b909b394(master 4022990e · 사이트맵 master 9eb741b3) · CSS 1파일 web\static\css\estimate_regist_v2.css (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008」)

[코디] 🆕 26.10.7(수) — 견적 v2 현장 없이 저장 = 자동 임시견적 — ✅운영 c8bbf96e (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008c」)

[코디] 🆕 26.10.7(수) — 견적 v2 현장 없는 견적 업체담당자 검색 — ✅운영 b4acda18 (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008c」)

[코디] 🆕 26.10.8(목) — 미입고 보드 하위 칼라마다 비고 — ✅운영 cd650cfe (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008c」)

[코디] 🆕 26.10.7(수) — 미입고 보드 현장별 비고 수정 + 메모 모달 공유 — ✅운영 b560b9c0 (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008c」)

[코디] 🆕 26.10.7(수) — 원주·안산 개별 원부자재발주서 → 자재관리 정리 — ✅운영 #1 r37 (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008c」)

[코디] 🆕 26.10.7(수) — 미입고 보드 자재 현장별 펼침/접기 — ✅운영 4a3c12ad+c5ab413e (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008c」)

[코디] 🆕 26.10.7(수) — 견적 v2 QA 묶음 5건 ✅운영 deploy-live 6a11ee17(master 0da95f22·78f2ad9c) — 운영 80/80 · DDL 0 (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008」)

(B) 26.9.22~23 완료 절 헤더 7개

배차 계산서 사진 1~4차 — 운영 d18e5ad 완료 (상세: archive.md 「✅ 26.9.23 · pfs-dispatch-photo」 · 범위 밖 3건·제안 2건 포함)

발주서 중복 전역 정리 + 자재관리 6개월 — 운영 a392b6c 완료 (상세: archive.md 「✅ 26.9.23 · pfs-orderpaper-dedupe」)

날짜 고침 패널 + NAS 엑셀 되쓰기 — 운영 c2f3242 완료 (상세: archive.md 「✅ 26.9.23 · pfs-orderpaper-date-fix」)

자재관리 동기화 20시간 먹통 수리 — 운영 93d7ce1 완료 (상세: archive.md 「✅ 26.9.23 · pfs-orderpaper-sync」)

월마감 월 변경 시 거래처 유지 — 운영 완료 (상세: archive.md 「✅ 26.9.23 · pfs-monthly-close」)

[코디] 26.9.22 — 네스팅 「서랍 자동계산기」(도어전용 탭) — 운영 a9c5d22+5faf806 완료 (상세: projects/pfs/archive.md · session-2026-09-22-nesting-drawer-calc.md)

[코디] 🆕 26.9.22 — QA 보고 1건 반영 — 완료 (상세: archive.md 「✅ 26.9.22(화) KST · pfs-door-order-import · [코디] QA 보고 1건 반영 (운영 4982b14)」)

(C) 26.10.6 GS 대전 변동 절 — 갱신 불릿 원문 (⏳ 잔여 불릿 2개·상세 포인터는 NOW 유지)

[페페] 성포·단구 기반 · 몸통 PNCAD 먼저 · 노란 사각형 내부만 · 주방 84A(Style Up A벽만) + 수납 3타입(59A·84A·84B). 결정 = 몸통칼라 HS0868GP · 수납 18T/주방 15T/홈바 상부장 18T · 휠라 전면+리턴 한 제품 · 거울도어 15T MDF+3T(제외) · 도어 해치 포함 · 엔진+길로틴 병기 · 타입당 1세트. - 🆕19:3x KST [페페]「추천으로 진행해」반영: 등판 −60(홈바 하부장·붙박이장) · 84B 오픈장 측판 2장 몸통→도어 #22(ID 251·252). 몸통 #20 394매·엔진 47·길로틴 44 / 도어 #22 252매·엔진 34·길로틴 33 · 칼라 자동등록 차단(858). PUT 6회(작업본 4+#20+#22) · NAS _r2 4개. - 🆕19:5x KST 2차 [페페]「추천대로 진행」: 파우더장 등판 818→788 ✅(#42·#43·#44, 19:52 작업본·19:53 #20) · 몸통 #20 394매·엔진 47·길로틴 44 그대로(4.5T 23.82㎡) · 도어 #22 무변경 · 합 646매·엔진 81·길로틴 77. 오픈장 나머지 판 = 사양서에 등판 줄 없어 안 함. - 🆕20:1x KST 3차 [페페]「오픈장 전체 도어로 · 등판 두께=측판 18T」: 도면 주석 없음 확인 · #44 #5 나머지 5장 트리밍 0 · #22 ID 253~257 추가(천·지판 18T · 등판 18T 273×2203 · 각목 15T ×2). 몸통 #20 389매·47장·길로틴 44 / 도어 #22 257매·35장·길로틴 34 / 합 원장 82 · NAS _r3 4파일. PUT 3회(총 13). - 🆕[코디] 26.10.8(목) [페페]「몸통 푼 치수 도면 표기」 → NAS 최신 도면 = 261006 건립도면 그대로(10/6 사본과 md5 같음) · 사본 \\192.168.0.101\공유폴더\2026현장\진행중\10월\한샘 GS 도마변동 MH\01.[한샘]_261006_GS건설 대전변동_주방,일반_건립도면_PNCAD몸통치수.dwg(ACAD2013 · 레이어 CODY_PNCAD몸통 1,559개 · 장 23 · 부재 줄 172) · 도면↔PNCAD 장폭 불일치 0(단 12 · 합만 일치 2 = 84A 파우더장 600×2) · 높이 참고 1(홈바 상부장 718 vs 720 DOOR) · ⚠26.10.8 PNCAD 엔진 변경으로 이동선반 8장이 앱에서 −3(네스팅 #20 은 저장 당시 값) · 운영 쓰기 0 · 작업폴더 C:\dev\_work\gs-daejeon-annot-1008\. - 🆕[코디] 26.10.8 23:4x KST 추가 [페페]「언더·볼레일 서랍바닥 = 등판 자재 · 텐덤 = 15T」 → 레일 판정 27매 전부 언더레일(PNCAD·도면 BLUM·사양서 Quadro V6) · 텐덤 0 → 데이터 변경 0(PUT 0) · 작업본 단 서랍바닥 70-115 는 데이터로 불가(colorNoOf 코드 제안) · NAS 새 파일 …_PNCAD몸통치수_r3.dwg(레일 표기 · 홈 주석 정정).

✅ 26.10.8 · pfs-handoff-cap-1008c · pfs handoff 캡 이관 (완료 절 원문 · 26.10.7~8 배포 절)

[코디] 🆕 26.10.8(목) 밤 — 네스팅 부재 입력표 기본 빈 행 3→20 (우리 + 월드 협력사) — ✅운영 deploy-live f9c8247d 26.10.8 밤(master 0d2a3641 3파일 선별 포워드 · 운영 실측 /production/nesting·/partner/nesting 도어 입력표 20행·콘솔에러 0 · 사이트맵 재빌드 미반영 1 = 카톡관리 타 세션)

[코디] 🆕 26.10.8(목) — 월드산업 협력사 네스팅 https://pfs.poin.co.kr/partner/nesting + /api 계정유형별 허용목록 게이트(fail-closed) — ✅운영 deploy-live f69b484a 18:24 KST(master 6f20be40·0e175294 · 사이트맵 636b0090 미반영 3→1) · 운영 DDL patch60(ext_nesting_job) · 메뉴 partner_nesting · 202 company_type '2' · 담당자 장동수 대리(member 441) · 계정 world01(user 16 · 비번은 문서 기재 금지)

[코디] 🆕 26.10.8(목) — 업무패널(/field/worklog-panel) 카드 호버 전문 확장(.peek)·title 툴팁 삭제 — ✅운영 deploy-live 317fc239(master cc8f070f · 사이트맵 e089f1b8 미반영 1 = 카톡관리 타 세션) · 1파일 C:\dev\pfs\web\templates\basic\field\worklog_panel.html · 테스트·운영 실측 peek 0·title 0·호버 높이 불변·클릭펼침/편집 정상·콘솔에러 0 [페페 지시 「호버 전문 확장·툴팁 삭제, 운영배포」]

[코디] 🆕 26.10.8(목) — 견적 v2 추가금액(sub) 「자당포함」 플래그 — ✅운영 deploy-live 4ddbfc6c 11:45 KST(master 0bd5724b·36cd6622 · 사이트맵 b1ccd932) · DDL patch59 테스트→운영 INSTANT

[페페] 「추가금액 체크버튼 — 한샘 양식 때 숨김 · 자당 행 금액에 포함 · 별도항목에서 일괄적용」 + 「추천대로 + DDL 승인 · 운영배포」. - DB estimate_detail_sub.in_base_yn CHAR(1) NOT NULL DEFAULT '0' — 테스트 271행·운영 1,044행 영향 0(금액합 불변) · PFS 금액·출력 불변(표시 플래그만). - 저장 = 키 누락(구버전 탭·스크립트 PUT)이면 같은 sub_no 기존값 유지 · sub_no 재사용(rules 🆕) · 화면 = 줄 칩 · 별도항목 3상태 일괄+되돌리기 · 사용처 배지. - 검증 = 테스트 실주소 49/49 · 운영 읽기 6/6(797, 저장 0) · 스샷 C:\dev\_bench\pfs-inbase-flag\ · 테스트 검증 견적 #827(보관)·#828 남김. - ⏳한샘 변환 코드에 흡수 규칙 반영(rules 🆕 26.10.8 [페페] · 다음 한샘 변환 때). 상세 = projects/pfs/session-2026-10-08-estimate-sub-inbase.md.

[코디] 🆕 26.10.8(목) — GS 안산 성포 MH(field 2180) 견적 검토 + 도면 사본에 견적 표기 — ✅NAS 새 파일 1 · 견적 데이터 수정 0 (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008」)

[코디] 🆕 26.10.7(수) — 견적 v2 현장 선택 없이 저장 = 자동 임시견적 — ✅운영 deploy-live c8bbf96e(master 69b1ad0f · 사이트맵 9015adb8) 23:46 KST 재기동 (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008」)

[코디] 🆕 26.10.7(수) — 견적 v2 「현장 없는 견적」도 업체담당자 검색 활성 → 발주처 등록 — ✅운영 deploy-live b4acda18(master e169000e · 사이트맵 387ddc35) 23:1x KST (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008」)

[코디] 🆕 26.10.8(목) — 생산현황 출력 미입고 보드 하위 칼라(자재행)마다 비고 — ✅운영 deploy-live cd650cfe 09:41 KST(master 4bdc1ec4+e272300a · 사이트맵 c0a513f7) (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008」)

[코디] 🆕 26.10.7(수) — 생산현황 출력 미입고 보드 = 현장별 비고 직접 수정 + 생산 메모 모달 공유 · 접힘 두 화면 동기화 — ✅운영 deploy-live b560b9c0(master 60be1a48 · 사이트맵 2947cbfd) 18:03 KST (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008」)

[코디] 🆕 26.10.7(수) — 원주·안산 개별 원부자재발주서 → 자재관리 정리 ✅운영 #1 r35→r37 · 추가 6 · 조운 수량 4·샘플 삭제 4 · B안 경고 master 82660853 · 자재관리 69→71 (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008」)

[코디] 🆕 26.10.7(수) — 생산현황 출력 미입고 보드 자재 = 현장별 그룹 펼침/접기 · 접은 그대로 인쇄 — ✅운영 deploy-live 4a3c12ad+c5ab413e(master 2125ff29 · 사이트맵 81f0eab8) (원문: archive.md 「✅ 26.10.8 · pfs-handoff-cap-1008」)

✅ 26.10.8 · pfs-handoff-cap-1008b · pfs handoff 캡 이관 (원주 단구·안산 성포 발주 통합 절 원문)

[코디] 🆕 26.10.6(화) — GS 원주 단구·안산 성포 도어재+몸통재 발주 통합 1·2단계 완료 — ✅운영 #1 r35 · NAS 파일 3 + JPG 15 · master 85f1ea17(파서 MAT)·e89a0870(「장」) · deploy-live 7dd6da19 · 사이트맵 6fe3b796

[페페] 「도어재+몸통재 통합 · 도어=엑셀 최종본 기준 · 몸통 우라판=70-115 유사 PP · 피스마개스티커·엣지=케데코 · 구버전 정리 · 현장별 파일·JPG · DB 반영 · 운영배포」 + Q1~Q3=A. 1단계(Q4·Q5 무관분)만 끝냄. 작업폴더·백업·스크립트 C:\dev\_work\mat-integrate-1006\(progress.log). - ① 백업 = 운영 #1 r33 GET · 자재관리 SELECT(2169·2180·251 260행 + 미연결 93 + 관련 5파일 200행) · NAS 5파일 사본+md5 → …\backup\. - ② NAS 파서 orderpaper_parse.py 정규식 MAT 추가 · 드라이런 10월 7파일 중 자재발주서_1 만 93→0 · 13:38 라운드 removed 93(미연결 0). 재기동 불필요(예약작업이 매번 새 프로세스). - ③ NAS 이동 3개(자재발주서_1·원주 몸통 10.2·성포 몸통 10.2) → 10월\통합발주(동기화제외)\ md5 3/3 · 14:08 라운드 removed 24(성포 f251 12·원주 12 → 0). - ④ amend 1회(14:10 KST) r33→r34: 제목 「(도어재+몸통재) …」 · 정정 12줄(효산 18T 「PB 경면양면」+비고 E0,246경면 · 4.5T 「MDF 민자양면」 · 샘플 246경면 · 피앤알 보드 7 비고 E0,PVC · GK102-G8 피스마개 「남는시트 사용」 · 선재 H2041B-L1 엣지 비고 「246경면 · 샘플:효산엘피엘」=품명 꼬리) · 추가 21행(피앤데코 HS0868GP 6/9/12T 1·1 · 18T 11/4 · 15T 27/53 · 피앤알 PW합판 4/6 · 70-115 4.5T 12/23 · 케데코 PP시트 80/120M(→피앤알)·엣지 800/1200M·스티커 10/20장 · 효산 피스마개 스티커 10장 성포). 보드=R·시트=T·엣지=E·스티커=S. 코드 = 「장」 단위(자재관리 qty 「10장」). - ⑤ 검증 = 운영 ↔ 도어·몸통 최종 엑셀 164칸 문제 0 · 자재관리 기대 71 = 실제 71(2169 19→29 · 2180 31→42, 전부 대기) · 단위 73/73 · test_pfs_link OK. - ✅2단계(15:10 KST · [페페] Q4=A·Q5=A 「모두 추천 진행」): ①몸통 합산 파일 → 하위폴더(14:33 · 14:38 라운드 2169 nas 16→0) ②#1 r35(피앤알 P9GA4T·PQFA2T 피스마개 비고 「남는시트 사용」 = 페페 파일 H15:J17 병합칸) · 자재관리 사용자 입고일 71/71(길동·조운·피앤데코·케데코 10/7 · 피앤알 10/8 단 몸통 PW합판·70-115 4.5T = 10/7(몸통 탭) · 효산 10/8 · 오엠씨·선재 10/12) · 케데코 6행 비고 「긴급」(note_user) ③build_p2.py 로 NAS 표준양식 3개 = 월 폴더 한샘 GS 원주 단구 원부자재발주서.xlsx(29품목)·한샘 GS 안산 성포 원부자재발주서.xlsx(42) + 하위폴더 (도어·몸통 통합)한샘 GS 원주 단구+GS 안산 성포 원부자재발주서.xlsx(58) · keywords PFS-MAT#1 · 피앤알 탭 시트 안내 병합행(케데코 70-115 100M2롤 포함) · 업체 탭 날짜 Q5 · 케데코 「(긴급)」 · 대조 268칸 문제 0(통합↔페페 최종 2개 · 현장별↔#1 배분) ④15:08 라운드 = 새 2파일 항목 0 · 2169·2180 nas 0 · PFS-MAT#1 71 ⑤JPG 15장(원주 7·안산 8) 10월\발주서JPG(GS 원주 단구·안산 성포)\<업체>_<현장>.jpg. - ✅통합본: 페페가 열어 둬(~$ 14:48) 15:08 교체를 못 했다가, 닫은 뒤 16:55 NAS md5 = 14:41 판(e5b50974) 확인하고 고친 판(3b7539ea, 피앤알 안내행 축소맞춤)으로 교체 · 왕복 일치. ⚠업로드 실수 1건(셸 따옴표로 원부자재발주서\10월$f 파일 생성) → md5 확인 후 제자리로 rename(삭제 0). - 애매점: PP시트 비고 = 「100M2분할 권취 필수(원주+안산 통합 200M)」 · 효산 「피스마개 스티커」 띄어쓰기·비고 E0 = 파일 그대로 · 피앤알 안내행 날짜 = 시트업체 Q5 날짜 10/7(수)(페페 12:08 본은 10/8(목)) · 몸통 피앤알 항목칸 10/6 은 버리고 탭 머리 10/7 · 현장별 파일 안내행 = 「이 현장 nM (통합 N *2롤 · 업체 발송)」 · 행 순서는 DB seq(페페 본은 손으로 재배열).

✅ 26.10.8 · pfs-handoff-cap-1008 · pfs handoff 캡 이관 (26.10.7~8 완료 절 12개 원문)

[코디] 🆕 26.10.8(목) — 견적 v2 「타입별 가구 항목」 카드 헤더 스크롤 고정 — ✅운영 deploy-live 5e048737 12:0x KST(master 547852e9 3파일 · 사이트맵 9211bd07 미반영 3→1) · DB·서버 0

[페페] /estimate/modify-v2/769 「카드 제목~주방/가구 줄을 상단 고정헤더 아래 고정」. web-designer 처방: .card[data-card-key=detail]>.card-header sticky z55 + #detailSticky(타입입력~kf-row) sticky z54, topbar z60 · --ev2-top/--ev2-hd 는 JS ResizeObserver 실측 · 모바일 ≤767 카드헤더만(묶음 static). 검증 pfs/scripts/_est_detail_sticky_check.py [test|prod] [번호] 3뷰포트 전 통과(카드헤더 top=topbar 76/126·묶음 122) · 스샷 C:\dev\_bench\pfs-detail-sticky\. ⚠이월: 데스크톱 고정 높이 ≈243px(1366×768 의 32%) · 고정 밴드 뒤로 Tab 포커스가 숨을 수 있음(scroll-padding 미적용, 범위 밖).

[코디] 🆕 26.10.8(목) — 생산현황 미입고 보드 자재 표기 12px·간격 절약 · 「접힌 현장 N곳」 배지 삭제 — ✅운영 deploy-live 471ca2b7 10:35 KST(master 9a802495·49e5e9fe·8b56b4f8 · 사이트맵 cf1c96aa)

[페페] 「자재 표기부분 공간 — 폰트 11까지 허용 · 줄간격·셀내 간격 최대한 절약 · 『접힌 현장 N곳…』 안내 블록 삭제 · 운영배포」. - 출력물(#oob-grid 스코프만)·모달(#fieldMemoModal) = 셀 padding·lh 축소 · 자재행·자재 비고 화면 12px(인쇄 11px 그대로, lh 1.25 · padding 1px) · 헤더 13px 굵게 유지 · 배지 HTML·CSS·JS 두 화면 삭제(모두 접기/펼치기 버튼 유지). 처방 = web-designer(총괄 상담). - 🔴덤으로 잡은 버그 2: ①폰 폭(≤575px)에서 26.10.8 오전 판 «표 안 tr 만 grid» 가 줄을 첫 칸에 가둬 칼라가 글자 단위로 쪼개졌다(운영 390px 자재행 237px · 17행 전부 여러 줄) → screen 전용으로 표·tbody 블록 + 2줄 격자 ②접기/펼치기 연타 때 fold 요청이 뒤바뀐 순서로 도착해 서버에 «반대»로 저장(테스트 실측 Enter 두 번 → 접힘) → oob_sync.js 접힘 저장 줄 세우기·마지막 응답만 반영. - 운영 실측(읽기 전용 · 접힌 그룹은 화면에서만 펼쳐 잼, C:\Users\delix\AppData\Local\Temp\claude\c--dev\a4affbc3-b0e6-4605-b07c-750ad824df7e\scratchpad\measure.py) 전→후: 화면 표 663→541px(헤더 36.5→30.9 · 자재행 31→25) · 인쇄 435→377px(28.3→24.7 · 19.4→16.8) · PDF 2→2쪽 · 폰 390 자재행 237→57 · 모달 목록 733→529(머리 40→30 · 자재 35→25) · 칼라 여러 줄 0 · 넘침 0 · 콘솔 에러 0. 테스트 = _memo_split_check 36/36×3 · _oob_note_check 56/56(쓰기 검사는 테스트만).

[코디] 🆕 26.10.8(목) — 견적서 v2(/estimate/regist-v2·modify-v2/<no>) 상단 헤더(제목·취소/저장) 스크롤 고정 — ✅운영 deploy-live b909b394(master 4022990e · 사이트맵 master 9eb741b3) · CSS 1파일 web\static\css\estimate_regist_v2.css

[코디] 🆕 26.10.8(목) — 한국유리부지 MH 1차 임시견적 = 운영 견적 v2 #800 · 59,092,000원(VAT 별도) + 도면 사본 견적표기 DWG·견적 엑셀 NAS 새 파일 — 운영 쓰기 = POST 1회(PUT 0·SQL 0) · 코드 변경 0

[페페] 「pfs 1차 임시견적, 한샘 김선정 과장 담당. 추천대로 진행. 도면에 견적 잡은 부분에 코디 표기 치수 · 견적 항목 이름·금액 표(테이블) · 각 파트 근처에 기입 … 운영배포」. 작업폴더 C:\dev\_work\hanguk-glass-1008\(단일출처 plan.py · register.py · annotate.py · verify_dwg.py). - 범위 = 도면 표지 「구분 : FUR. / SYS. 건립 : 84㎡, 103㎡, 111㎡」 → 3타입 일반가구+시스템 각 1세대(시트 48장). 제외 = 103 드레스룸 디자인2안 · INT 욕실도어·INT 도어 · 석재 상판(현장분). - 견적 #800 = 임시견적(div 2) · 현장 미연결 temp_site_name 「한국유리부지」·유형 MH · 업체담당자 399 김선정 과장(한샘 15.5% 자동) · 「한국유리부지 MH 견적서 (1차)」 · 49줄 = 84 15줄 15,041,000 / 103 17줄 21,821,000 / 111 17줄 22,230,000 · 시공비·운반비 0(별도) · 길이견적만(추가금액 0). - 결정(추천안 · furniture-expert 자문) = 신발장·복도장·장식장·수납장 A1 224,000 · 붙박이장 P1 243,700 · 키큰 화장대 P2 · 낮은 화장대·욕실 하부장 B1 124,900 · 욕실 상부장 W1 107,500 · 도어 G1 138,000 · 픽스판넬 = G1 단가 준용(≈180k/㎡ = 선례 직접금액 중앙값) · 시스템 = 직접단가 일광 GLWP 벽판넬형 98,600/자 · GLSYS AL기둥형 43,000/자(포인 판넬·선반 몫, AL·철물·가죽서랍·조명 별도) · 치수 = 도면 DIMENSION 정의점 핸들로 실측, 몸통·선반 기준(벽 간격 제외). - 검증 = 반박검증 에이전트(치수 49/49·금액 원단위 일치 · 기준 정정 4줄 반영 59,196,000→59,092,000) · 등록 후 GET 49줄 ALL MATCH(amount float 절단 ±10) · 엑셀 출력 49줄 합 59,092,000 · DWG 왕복(ODA ACAD2013→DXF) 원본 16,125 엔티티 종류·레이어별 차이 0 · CODY_견적(ACI 30) 1,644개 · 코디 치수 88개 = 견적 49줄 세그먼트 일치 · NAS 왕복 바이트 일치 · 원본 DWG 무변동(16,581,331 B · 26.10.02 13:55). - 산출 = NAS \\192.168.0.101\공유폴더\2026현장\견적\10월\한샘\한국유리부지\261001 한국유리부지 가구도면_코디견적표기.dwg(16,639,996 B · 시트마다 프레임 아래 코디 치수 값 [줄번호] + 견적표 · 표지 오른쪽 타입별 요약표 3 + 합계 박스) · …\한샘 한국유리부지 MH 견적서(1차 임시견적 #800).xlsx(76,317 B). ⏳devplan 페이지 = ruleguard web-designer-required 가 서브에이전트 상담을 못 봐 미생성 → 완성본·카드·pagelinks 문안 C:\dev\_work\hanguk-glass-1008\devplan_draft\(README.txt 3단계 · 상담 처방 반영됨). - ⏳[페페] 확인 7 = ①픽스판넬 G1 준용(103·111 금액의 큰 몫) ②시스템 98,600/43,000(일광이 마감판까지 공급하면 하향) ③시공비·운반비 별도 유지 ④111 욕실 「상부장 ALT 01.」 표기 · 입면 B 하부 박스(미포함) ⑤측면 리턴판넬 기준(103 창고 C′ 352 포함 / 84 신발장A A′ 420 = 몸통 EP 라 미포함) ⑥103 복도 픽스 입면 1470 vs 평면 1490(입면 채택) ⑦PFS /api/estimate/print/pdf/800 = 500 「Object of type 'Response' is not JSON serializable」(엑셀은 정상 · 코드 안 고침).

[코디] 🆕 26.10.8(목) — GS 안산 성포 MH(field 2180) 견적 검토 + 도면 사본에 견적 표기 — ✅NAS 새 파일 1 · 견적 데이터 수정 0

[페페] 「안산 성포 견적서도 검토하고 도면에만 견적 내용 표시해서 사본으로 저장해놔라」(한국유리부지 임시견적과 같은 표기 방식). 작업폴더 C:\dev\_work\seongpo-annot-1008\. - 기준 견적 = 포인 769 「GS 안산 성포 MH 견적서」(견적일 26.9.7 · 최종수정 26.10.2 · 이후 차수 없음 · 26.10.2 스냅샷과 완전 동일) 가구 36,768,000 + 운반 600,000 + 시공 11,000,000 = 48,368,000 · 한샘 6(form 14)·NAS 10월 엑셀 48,360,000(만원 절사 −8,000)은 769 파생. 운영 GET 만(로그인 외 POST·PUT 0, 전후 스냅샷 같음). - 대조 도면 = 최신 …\진행중\10월\한샘 GS 안산 성포동 MH\01.[한샘]_261006_…제작도면(84OA상부장사이즈수정) (1).dwg + 9/30 자재준비용·10/2 제작도면 판 비교. 계산 재현(estimate_regist_v2.js 식) 28줄·추가 50건·총액 오류 0. - 검토 13건(상2·중6·확인3·하2): 🔴상1 99A·104 「아일랜드 후면 유리장」(#15·#21, 3,090,000) = 현행 도면 후면은 레그룸 FIX + 하부 수납(99A 800+400 · 104 2단 서랍장 1,125×2), 유리장 없음 · 🔴상2 84A 장식장 키큰장·홈바 하부장·홈바 상부 유리장(#7~#9, 3,066,000) = 9/4 견적의뢰용 도면에만 있고 9/30 이후 건립 입면엔 없음 · 중 = 하부장 −200(84A·전시부스·OT84A, 2단 서랍장 축소 10/2판) 각 −96,000 · OT84A 상부 285 비움(10/6 수정) −77,000 · 전시부스 냉장고장 기본형1 1,860(견적 1,650) +111,000 · 104 식세기 B벽→아일랜드·상부 2,005→2,055 합 −27,000 · 99A 아일랜드 2,320→2,300 −10,000 · FIX 폭만 바뀜(금액 0) · 확인 = 전시부스 식세기 600 미차감 · 104 아일랜드 FIX EP 0건 · 키큰서랍장 비고 복사 · 하 = OT84A 벽판넬 560↔460 · 769 비고 「길이 견적만」 낡음. 길이만 반영 시 −291,000(참고). - 산출 = NAS 새 파일 \\192.168.0.101\공유폴더\2026현장\진행중\10월\한샘 GS 안산 성포동 MH\01.[한샘]_261006_GS건설 안산 성포동_주방_건립타입 제작도면(84OA상부장사이즈수정) (1)_코디견적표기.dwg(AC1027=ACAD2013 · 13,944,994 B · sha256 c568d5a7…6621 되읽기 일치 · 폴더 기존 9항목 크기·시각 변경 0 · 원본 md5 def4c4bf 그대로). 레이어 CODY_견적(색 30) 1,130개만 추가 = 견적 부위 주황 사각형 37 · 코디 측정 치수줄+태그(줄 번호·이름·행합계·도면 치수·차이) · 시트별 표 13(선+MTEXT: 항목명·규격·코디 측정·수량·단가·금액, 추가 항목 포함) · 전시부스 행 오른쪽 요약표. 원본 엔티티 33,698 서명 차이 0(ODA 왕복 대조). - 검증 = verify_dwg.py ALL OK · nas_put.py PUT ALL OK · snap_cmp.py ALL SAME · PNG C:\dev\_work\seongpo-annot-1008\png_final\(17장, 겹침 육안). 스크립트 = review.py(검산·영향) · annotate.py(표기) · _occupancy.py(충돌 상자) · _render.py. - ⏳[페페] ①#15·#21 후면 구성(유리장→FIX+수납) 재견적 여부 ②#7~#9 홈바·장식장 건립 범위 포함 여부 ③10/2·10/6 제작도면 치수로 769 갱신할지(갱신하면 한샘 6·NAS 엑셀도 다시) ④전시부스 식세기 차감·104 아일랜드 EP. 표 2곳(99A 후면·104 후면)은 시트 프레임 안 빈 곳, 11곳은 시트 위 여백(A3 출력 프레임 밖 — 시트만 출력하면 안 나온다)에 있다.

[코디] 🆕 26.10.7(수) — 견적 v2 현장 선택 없이 저장 = 자동 임시견적 — ✅운영 deploy-live c8bbf96e(master 69b1ad0f · 사이트맵 9015adb8) 23:46 KST 재기동

[페페] 「지시 혼선 — 지금 작업 유지 + 현장선택 없이 담당자만·견적명만 등은 자동으로 임시견적으로 변경 저장 · 운영배포」. 수정 = 서버 C:\dev\pfs\api\pfs\estimate\service\estimate_service.py _normalize_master 에서 field_no 비었거나 0(구 더미)이면 estimate_div='2'(생성·수정·도어발주서 자동등록 공통) + 화면 estimate_regist_v2.js payload 같은 규칙 · 저장 성공 뒤 라디오 임시견적·applySiteInputMode() · 전환됐을 때만 「저장 완료」 알림에 「현장을 선택하지 않아 임시견적으로 저장했습니다.」. 새 견적 기본값 본견적 그대로 · 현장 연결 견적은 보낸 값 그대로 · 기존 데이터 일괄변경 0. - 검증 = 자체검사 87/87 · _normalize_master 직접호출 7케이스 · 테스트 Playwright 14/14(담당자만 #825 · 견적명만 #826 = 저장 막힘 없음·div 2·재진입 유지 · 현장연결 #821 재저장 div 1 그대로) · 테스트 API PUT div=1 무현장 → 2(서버 강제) · 운영 EC2 HEAD c8bbf96·uwsgi 23:46:48 KST·8000 200 · 운영 읽기전용 9/9(쓰기 0). ⚠운영 #799 는 배포 뒤 페페 저장으로 div 2·발주처 「봉적」(temp_member 409)이 됐다 — 일괄변경 아님(무현장 본견적 279→278). ⏳임시견적에서 🔍로 현장을 고르면 div 2 그대로 연결된다(기존 동작 · 본견적 전환은 라디오→현장등록 경로) — 바꿀지 페페 판단. 테스트 QA 견적 #823~826 남김(삭제 안 함).

[코디] 🆕 26.10.7(수) — 견적 v2 「현장 없는 견적」도 업체담당자 검색 활성 → 발주처 등록 — ✅운영 deploy-live b4acda18(master e169000e · 사이트맵 387ddc35) 23:1x KST

[페페] QA /estimate/regist-v2 #f-company-member-name 「임시 견적의 경우에도 업체 담당자를 활성화해 발주처 등록이 된 상태로」. 원인 = 담당자칸이 isTempSiteMode()(견적구분=임시견적 AND 현장 미연결)에만 열림 → 임시견적 라디오를 안 누른 현장 없는 견적(운영 #799 등 본견적·현장없음 279건)은 readonly. 수정 = isMemberEditMode() = !hasField() 를 담당자칸 readonly·힌트·인라인검색·키보드·미확정 저장차단 7곳에 적용(C:\dev\pfs\web\static\js\estimate_regist_v2.js) · 서버 변경 0(현장 미연결이면 견적구분 무관하게 temp_company_member_no 보존·조인) · 현장명 직접입력·유형 드롭리스트는 임시견적만(그대로) · 현장 연결 견적 readonly 그대로. - 검증 = 자체검사 C:\dev\pfs\scripts\_estimate_temp_site_check.py 84/84 · 테스트 Playwright 12/12(신규 본견적 담당자 Enter 확정→발주처 자동→저장→재진입 유지 · 임시견적·현장연결 회귀) · 운영 읽기전용 8/8(#799 활성 · #798 현장연결 readonly · 저장 0) · 사이트맵 페이지 미반영 0. ⏳테스트 DB QA 견적 #823(div2)·#824(div1) 「[코디QA]」 남음(삭제 = 승인 사안). web-designer 1회(위젯 재사용 OK).

[코디] 🆕 26.10.8(목) — 생산현황 출력 미입고 보드 하위 칼라(자재행)마다 비고 — ✅운영 deploy-live cd650cfe 09:41 KST(master 4bdc1ec4+e272300a · 사이트맵 c0a513f7)

[페페] 「하위 칼라들에도 비고란 추가해줘. 운영배포」(26.10.8 채팅). - 출력물·모달 둘 다 자재행 = 칼라 | 자재 비고 | 입고일(colspan 해제 · 34/42/24 유지). 자재 비고 = 현장 비고보다 가볍게(평상시 테두리·배경 없음 · hover/focus 점선+「비고」 · 터치 기기 옅은 점선 상시 · …+title) · 인쇄 = span(빈칸 공란 · 긴 비고 줄바꿈) · 575px 이하 2줄(칼라+입고일 / 비고)·44px·16px. - 저장 = 같은 field_oob.json 에 mnotes {"<field_no>|<정규화 칼라>": text} · POST /api/field/memo/oob/note 에 color · 409 = 칸 단위(같은 현장 다른 칸끼리 충돌 없음 실측) · oob_sync.js data-color 칸(valOf·keyOf·mnote). - 데이터 = 운영 board-wait 16행 정규화 후 현장 내 중복 칼라 0 · 최장 칼라 15자(KAEX7-SR (유사PP)) 화면 1줄. 같은 칼라가 입고일만 달리 두 줄이면 한 비고를 같이 쓴다(같은 자재). - 후속 e272300a = 인쇄 때 접힌 그룹의 자재행이 다시 보이던 것(모바일 2줄 무효화 규칙을 펼친 그룹에만) — 테스트에서 잡아 배포 전 수정. - 검증 = 운영 C:\dev\pfs\scripts\_memo_split_check.py 39/39 · C:\dev\pfs\scripts\_oob_note_check.py 56/56(자재 비고 16항 추가 · 끝나면 원복) · scripts/test_field_oob.py 9/9 · 사이트맵 print/status·field/list same. ⚠운영 검사 중 실사용자 접힘(2189) 확인 — 원복 로직은 «검사 시작 시점» 상태로 되돌리므로 검사 도중 사람이 바꾼 값은 덮을 수 있다(운영 재실행 자제). - ⏳ 어제 결정 대기 ①~⑤ 그대로(접힘 당일 · 알림 · 메모 JSON 비로그인 노출 · 긴 현장명 2줄 · 범위 밖 제안).

[코디] 🆕 26.10.7(수) — 생산현황 출력 미입고 보드 = 현장별 비고 직접 수정 + 생산 메모 모달 공유 · 접힘 두 화면 동기화 — ✅운영 deploy-live b560b9c0(master 60be1a48 · 사이트맵 2947cbfd) 18:03 KST

[페페] QA /field/print/status #oob-grid th:nth-of-type(2)(칼라) 「칼라 자리 → 직접 수정 비고 · 생산현황 메모 수정란에도 입력창 · 자재 접힘/펼침 메모창·출력물 양쪽 비동기 · 운영배포」. - 출력물 = thead 「현장명·칼라 | 비고 | 입고일」 34/42/24 · 그룹 헤더 가운데 = input.oob-note-in(80자 · Enter/blur 저장 · Esc 되돌림 · IME 조합 Enter 무시 · 인쇄 = input 숨김·span 글자) · 저장 칩 · 「접힌 현장 N곳 · 인쇄물에도 접힌 채」 배지+모두 펼치기. 모달(/field/list 생산 메모) = textarea 6줄 + 같은 그룹·비고·접기 섹션 · 미저장 비고는 hide.bs.modal 보류→저장 후 닫기. - 저장 = JSON web/resource/memo/field_oob.json(DDL 0 · .gitignore · static 밖) · API GET /api/field/memo/oob · POST /oob/note {field_no,note,base}(편집 중 다른 화면 수정 = HTTP 409 4090) · POST /oob/fold · 키 = field_no(board-wait 에 추가) · 접힘 = 접은 날만 유효(FOLD_TODAY_ONLY) · 텔레그램 알림 없음 · 동기화 = 공용 C:\dev\pfs\web\static\js\oob_sync.js(BroadcastChannel 0.2s · 다른 PC 폴링 20s/포커스). - 검증 = 운영 C:\dev\pfs\scripts\_memo_split_check.py 39/39 · 신설 C:\dev\pfs\scripts\_oob_note_check.py(두 브라우저 실토글·충돌·Esc·닫기 저장·모바일 390, 끝나면 원복) 운영 39/39 · 테스트 36/36·40/40 · scripts/test_field_oob.py 8/8 · 사이트맵 print/status·field/list same(잔여 미반영 1 = field_worklog 타 세션). web-designer 3회(총괄 1). devplan C:\dev\devplan\pfs.html DONE 1줄. - ⏳[페페] ①접힘 당일만 유효 vs 계속 유지 ②비고 텔레그램 알림 여부 ③🔴기존 생산 메모 https://pfs.poin.co.kr/static/uploads/memo/field_memo.json 비로그인 200(전문 노출, 미수정) ④긴 현장명(아이파크 107-2802)은 34% 칸에서 2줄 ⑤빠른 문구 칩·작성자 표시 = 범위 밖.

[코디] 🆕 26.10.7(수) — 원주·안산 개별 원부자재발주서 → 자재관리 정리 ✅운영 #1 r35→r37 · 추가 6 · 조운 수량 4·샘플 삭제 4 · B안 경고 master 82660853 · 자재관리 69→71

[페페] 「원주·안산 개별 원부자재발주서에 추가된 항목 PFS 자재관리에 올려줘 · 항목 제한 걸려서 동기화 안 되는 것 같다 · 상원보드·피앤데코 추가발주건」 + 「운영배포」(코드 변경이 없어 배포 0). - 원인 = 행 캡 아님. NAS …\10월\한샘 GS 원주 단구 원부자재발주서.xlsx(14:38 KST · md5 a78bd821bc)·…\한샘 GS 안산 성포 원부자재발주서.xlsx(14:38 · a44936f2b0)는 keywords PFS-MAT#1 → orderpaper_parse.parse_file 이 파일째 0블록(설계상 건너뜀) · 16:39 라운드 R1791358754 items 2161 그대로. 표식 무시 파싱 = 추가 6품목 정상 추출(8~11행). - 반영 = C:\dev\_work\mat-add-1007\amend_add_1007.py amend 1회 16:36 KST 수동 행 6(원주 2169): 상원보드 효산 HS867HD 18T PB 경면양면 4매·4.5T MDF 민자양면 2매(R, 10/12) · 효산엘피엘 HS867HD(UK) 칼라샘플 1EA(진영LDM 10/8)·피스마개스티커 10장(10/13) · 유로글라스 EURO-P-100BXM 5T3942207·5T4072204 각 1EA(봉적 10/15, S — 수동 행은 G 불가) + 입고일 PATCH 6. 백업 = …\mat-add-1007\backup\(#1 r35 GET · 자재관리 pfs_mat 69행). - 검증 = 자재관리 PFS-MAT#1 69→75(원주 29→35 · 안산 40) · 새 6행 36칸 + NAS 추가 탭 24칸 문제 0 · 기존 69행 칸 변경 0 · 페페가 16:19 수동삭제한 안산 효산 H2041B-L1 18T·4.5T 2행 = 지운 상태 유지 · 16:39 라운드 후 원주·성포 NAS 살아있는 행 0(이중 0). - 🆕2차 17:43 KST([페페] 답 「엑셀 파일이 현재 정리된 기준 · B안 · 운영배포」, C:\dev\_work\mat-add-1007\reconcile_1007.py · API 만): ①피앤데코 = 페페 재확인(손 안 댐) ②조운IMT 시트 4행 수량·재고 = 현장별 파일값(#6404 원주 PQFA2T 26→50M · #6399 GY123MT 98→120M · #6401 IV075EMT 123→150M · #6403 P9GA4T 21→50M, PATCH /qty(qty_user)+/stock · 소비이력 0) · 칼라샘플 4행 자재관리 삭제(#6411·#6406·#6408·#6410, del_manual 소프트) · 현장 뒤바뀜 0 ③선재 2쪽 = 무시 ④초안 #3 제목 「[확정 금지 · 상원보드 발주로 대체 26.10.7] GS 원주 단구 몸통」(r3 · 품목 무변경 · 삭제 0) ⑤통합본 피앤알 GK102-G8 보드 5줄 비고 = 「E0,PVC · ※ 10.13(화) 입고예정 · 별도 생산」(#1 정정 r36→r37) — 입고일은 자재관리 10/14(사람 값) 그대로 · PW합판·70-115 = 현장별 파일엔 있고 행이 «완료»라 손 안 댐 ⑥B안 = master 82660853(orderpaper_parse mat_check_* + orderpaper_sync MATROWS 회수 → 로그 「[!] PFS 자재 발주서 표식 파일 ↔ 자재관리 차이」 + prod 텔레그램 새 차이만) · 사이트맵 7593e261(추적 밖 · 미반영 6 = 타 세션) · deploy-live 없음(서버가 import 못 하는 로컬 폴더 · 예약작업이 master 작업본 실행 = 85f1ea17 선례). - 검증 2차 = 대조 32칸 문제 0 · 원주·안산 나머지 237행 칸 변경 0 · 자재관리 PFS-MAT#1 75→71(원주 34 · 안산 37) · 운영 읽기 실측 경고 = 현재 0건 / 반영 전 상태 대입 16건(원주 6추가·조운 수량 4·샘플 4·효산 2) · test_mat_check·test_dedupe·test_date_warnings·test_pfs_link OK · 🆕실제 예약 라운드 18:09 KST(R1791364151) = Success · 「표식 파일 2개 중 0개 · 0건」 · 로그에 MATROWS 줄 0 · _matcheck_seen.json = [] · 라운드 후 PFS-MAT#1 원주 34·안산 37 그대로 · 원주·성포 NAS 살아있는 행 0. - ⏳ 통합본(동기화제외) 조운IMT 탭엔 칼라샘플 4개가 남아 있다(현장별 파일·자재관리는 지움) · GK102-G8 날짜 = 통합본 「10.13」 ↔ 자재관리 10/14(보드)·10/12(길동 시트) · 「통합 … 중 이 현장 몫」 옛 비고 4행(조운 시트)은 API 로 비울 수 없어 남음(비고 칸 빈값 = 원본 비고로 돌아감).

[코디] 🆕 26.10.7(수) — 생산현황 출력 미입고 보드 자재 = 현장별 그룹 펼침/접기 · 접은 그대로 인쇄 — ✅운영 deploy-live 4a3c12ad+c5ab413e(master 2125ff29 · 사이트맵 81f0eab8)

[페페] QA /field/print/status #oob-body td.site(GS 안산 성포) 「현장별로 자재 그룹화해서 펼침,접기 · 적용한 형태대로 출력 · 운영배포」. - 파일 = C:\dev\pfs\web\templates\basic\field\field_status_print.html 1개(API 무변경). 그룹 = 현장별 tbody.oob-g, 헤더 행(현장명 13px · N건 · 가장 이른 입고일, 날짜 섞이면 「~」) 클릭/Enter = 토글 · 자재행 = 칼라 colspan2 들여쓰기 · 서브라벨 옆 「모두 접기/펼치기」(no-print) · 기본 모두 펼침 · 상태는 메모리만(localStorage 안 씀) · 접힘 = display:none 이라 인쇄도 그대로 · 인쇄 때 삼각형 숨김 · 헤더 입고일 인쇄 11px(13px 면 6px 넘침). - 처방 = web-designer 2회 + 총괄 상담. 검사 = C:\dev\pfs\scripts\_memo_split_check.py(미추적, 그룹·접힘·인쇄 단언 추가) 운영 38/38 · 테스트 35/35. 운영 실데이터 15행/3현장(성포 6·단구 4·아이파크 5). - ⚠경위: 내가 스테이징해 둔 이 파일이 다른 세션 커밋 37a563be(worklog-panel)에 공유 인덱스로 섞여 push → 그 세션이 319beafb 로 되돌림 → 2125ff29 로 정식 커밋. 운영은 이 파일만 선별 포워드라 worklog_panel 섞임 없음. - ⏳남은 것 = ①펼친 채 인쇄하면 2쪽(종전도 2쪽 · 접으면 줄어듦, 운영 첫 그룹만 접어선 2→2) ②연도표기(12월↔1월) 때 헤더 입고일 「26.10.12(월)~」 인쇄 17px 넘침(자재행도 종전부터 같은 폭) ③실물 프린터·노트20 실기 미확인 ④기존 인쇄 11px(자재행) 하한 예외는 페페 결정 사항으로 그대로 둠.

[코디] 🆕 26.10.7(수) — 견적 v2 QA 묶음 5건 ✅운영 deploy-live 6a11ee17(master 0da95f22·78f2ad9c) — 운영 80/80 · DDL 0

[페페] 09:50 검증보고 #1(새 견적 빈 1줄·+항목추가 왼쪽) #2(추가금액 마진 전역 연동/수동, 기존 견적 고정) + 추가 B1(추가금액 빈 줄+Enter) B2(헤더 twirl 전체 펼침) B3(별도항목 사용처 펼침·이동·삭제) · 「운영배포」. - 저장 = sub 구체값 그대로, 연동 여부는 화면 세션 플래그(운영 sub NULL 69행 때문에 NULL 규약 불가) · 저장 sub 는 고정으로 로드 · 검사 C:\dev\pfs\scripts\_est_submargin_check.py(테스트·운영 ALL PASS, 쓰기 0) · 사이트맵 미반영 1(타 세션). - 🆕2차(11:30~11:43 QA 3건) ✅운영: 헤더 twirl 전역 = 현재 탭 모든 행(개별로 연 sub 0건 행이 안 닫히던 버그) 9894a956 · 항목 0건 타입·K/F 화면 = 빈 1줄(_seed, 새 견적 빈 줄과 통합) 426cdcde · 「단품」 분류(가상 U1 · 치수 300 · 견적서 치수 공백 · 단가 직접) a3738ef0 · 운영 110/110. - 🆕3차 ✅운영 9e9d09b2: 새 견적 추가금액 마진 연동 = 저장 후 재진입 유지(표식 = ui_column_setting est_sublink:<no>, DDL 0 · 표식 없는 기존 견적은 전부 고정) · [페페] 결정 = 단품 INSERT 보류 · 「모두 연동으로」 없음 · 기존 견적 연동 유지 → 미결 0 · 테스트 견적 822(자체검사용) → projects/pfs/session-2026-10-07-estimate-submargin-qa.md

✅ 26.10.6 · pfs-worklog-panel-newcall · 업무패널 통화 = 새 통화만 + 미종결 통화 3,014건 일괄 완료 (운영 bfce51f7)

[코디] 26.10.6(화) 20:10~20:35 KST. [페페] 원문 「업무패널 통화가 안뜨던 항목이 기존 항목을 완료하면 뜬다. 현재 항목들 완료처리하고 앞으로 신규통화만 업무패널에 등록한다. 운영배포」

✅ 26.10.6 · pfs-handoff-roll-1006c · pfs handoff 캡 이관 (26.10.1~6 절 9개)

[코디] 26.10.6 pfs handoff 캡 관리 2차(22,413자 > 20,000자) — 21~57행 절 원문 그대로 이관. handoff 엔 상태·카운터 포인터만.

[코디] 🆕 26.10.6(화) — 자재 발주서 #1 QA: IV075EMT 펫시트 업체 길동상사 → 조운IMT — ✅운영 fb7c9dd6(master 7e236bc6·사이트맵 e94164aa) · push 12:16 KST

[페페 QA] 표 tr.mo-row:nth-of-type(55) 업체칸(길동상사) 「조운IMT로 변경, 관련해서 샘플 발주도 업체 동일 변경 · 운영배포」. 55번째 tr = 줄마다 tr 2개(mo-row+mo-alloc) → seq 순 28번째 줄 = IV075EMT 펫시트(업체별 보기면 55 는 배분 행이라 해당 없음). 페페 NAS 최종본(12:08)도 오엠씨 탭 J14·조운IMT 탭으로 같은 변경 → 범위 확정. - 코드 = amend 에 vendor_confirmed 허용(비울 수 없음 · 확정 문서는 그 품목 자재관리 행 중 status≠대기 있으면 거절 · 수량·여유·현장 잠금 유지). 화면 무변경. - 운영 #1 r32→r33 = 시트 1행 업체만 · 자재관리 #6401(성포 123M) vendor 조운IMT · 새 행 0(50행). 칼라샘플(seq34)·엣지 비고 「샘플:조운IMT」 는 원래 조운IMT → 무변경. 검증 = 단위 72/72 · 테스트DB 27/27 · 운영 되읽기 11/11 · 사이트맵 amend same. 스크립트·백업 C:\dev\_work\mat-door-1006\joun_*. - ⚠NAS 최종본 ↔ DB 남은 차이(파일 무수정 · 다음 몸통 통합 세션 참고): 효산 보드 규격 「LPM 양면」→파일 「경면양면」·「민자양면」(비고 E0,246경면) · 파일에만 H2041B-L1 피스마개 스티커 10장 · 피앤알 보드 비고 파일 「E0,PVC」 · GK102-G8 피스마개 비고 「남는시트 사용」 · 입고일 파일 오엠씨·선재 10/12 · 길동·조운 10/7(DB 헤더 10/8) · 타입 칸 「원주:주방3, 안산:주방5」.

[코디] 🆕 26.10.6(화) — 부자재 발주서 엑셀 「복구 필요」 수정 — ✅운영 a9d8f6e8(master 80fb3e21)

원인 = sub_orderpaper_excel.py wb.views.sheetView[0] 없는 속성 → 시트 1장 다운로드 시 firstSheet 인덱스 초과 = Excel 복구 → for view in wb.views: 로 수정. ⚠템플릿 assets\sub_order_template.xlsx 자체는 firstSheet=1(안 고침) · 옛 파일은 재다운로드. (원문: archive.md 「✅ 26.10.6 · pfs-handoff-cap-1006b」)

[코디] 🆕 26.10.6(화) — 자재 발주서 #1 도어재 통합 발주 마무리(NAS 통합 발주서 + 운영 DB 정정 amend API) — ✅운영 f9a39f8f(master 4ce3c1b2)

POST /api/mat-orderpaper/<no>/amend 신설 · 운영 #1 r30→r32 · NAS …\원부자재발주서\10월\통합발주(동기화제외)\(도어재통합)…xlsx · 로컬 C:\dev\_work\mat-door-1006\out\. 애매점 7건(추천 처리)은 원문 참조. ✅26.10.6 14:10 해소(위 「도어재+몸통재 통합 1단계」: 파서 MAT 85f1ea17 + 파일 이동 → 93행 내림) — 옛 기록: NAS 10월\자재발주서_1_GS 원주 단구 외 1곳 도어_확정.xlsx 를 동기화가 자재관리에 93행 이중 적재 → 파일 하위폴더 이동 + 93행 내림(목록 C:\dev\_work\mat-door-1006\finding_nas_junk_rows.json, 파서 PFS-MAT 인식은 orderpaper-sync 소유 세션 몫). (원문: archive.md 「…cap-1006b」)

[코디] 🆕 26.10.6(화) — 네스팅 저장본 통합 열기 + 복수 현장 — ✅운영 792ea1cc·3b63b940(master 23c38436)

⚠남은 것: devplan pfs-nesting-order-draft.html §1 진행표 ③④⑤ 배지 미갱신(ruleguard web-designer-required 로 막힘) · 통합 시 옵션 = 대표(첫 체크) 값 · 테스트 DB 시드 #42~#45 잔존 · 운영 #17·#18 은 페페 쪽에서 계속 수정 중. (원문: archive.md 「…cap-1006b」)

[코디] D1 자재 발주서 모듈(26.10.5) — ✅운영 반영 26.10.6 01:01 KST 5b1173c9(master f4763a89·b360a9d3) · 품목군별 업체 일괄 지정 ca2c133d

✅26.10.6 파서 MAT 확장 85f1ea17(정확히 PFS-MAT#n 이면 건너뜀) — 옛: orderpaper-sync/orderpaper_parse.py:359 가 MAT 모름 → 확장 전 D1 엑셀을 NAS 월 폴더에 넣으면 이중적재(요청 = CONTRACT.md 「D1 요청 (2차)」 8건). ⏳페페 결정 3건(같은 원장키 덮어쓰기 · 엑셀 표식 · 규칙표 수정권한) · ⏳NAS 업체탭 양식 · 노트20 실기. 포인터 C:\dev\_work\order-draft-1005\D1-plan.md · devplan pfs-mat-orderpaper.html. (원문: archive.md 「…cap-1006b」)

[코디] 🆕 26.10.5(월) — 네스팅 → 원부자재발주서(도어) 초안 파이프라인 + 복수 현장 연결 — 그릴링 Q1~Q10 후 D1 로 진행(위)

🔴10.2 몸통 발주서가 운영 자재관리에 잘못 적재(합산본이 원주 카드에 중복 · 성포 몸통본 field 251 오연결, 파일명 꼬리 (몸통) 파싱 실패) — 정리는 별건 승인. (원문: archive.md 「…cap-1006b」)

[코디] 🆕 26.10.5(월) — GS 원주 단구·안산 성포 마감재 네스팅 수량 합산 + 결방향 세로 통일 → 운영 새 작업 #17(31장)·#18(42장) — 코드 변경 0

⏳[페페] 애매점 5건: ①「타입」=부재표 타입 칸(무시 시 원주 89행·성포 129행) ②길이 교환은 원장폭 초과만(「긴 변=결」이면 성포 41장) ③양단면은 키에 포함 ④#14·#15·#16 삭제/보관 ⑤NAS 산출물 갱신 안 함. 백업·스크립트 C:\dev\_work\gs-finish-nesting\merge-grain-261005\. (원문: archive.md 「…cap-1006b」) - ✅ 26.10.5 저장본 열기 모달 폭 확대 42c8bed1 · 부재 표 헤더 겹침·ID 칸 클릭 확인 표시 6c28441e · [↔] 가로·세로 바꾸기 + 인라인 검색 82ae4394 (원문: archive.md 「…cap-1005b」·「…cap-1005c」)

[코디] 🆕 26.10.4(일) — 네스팅 부재 표 ID 칸·정렬·필터·조건 세트 서버 저장 — 운영 5a3dfceb 완료 (⚠기존 저장본 #1~15 는 ID 없음 · 원문 archive.md 「…cap-1005d」)

[코디] 🆕 26.10.1~2 GS 계열 작업 묶음 — 전부 코드 변경 0(②만 코드) · ⏳[페페] 판단 대기는 원문(archive.md 「…cap-1005d」·「…cap-1006b」)에서 확인

✅ 26.10.6 · root-handoff-roll-1006b · 루트 HANDOFF 이관 (26.9.7~9 ✅ 3절)

[코디] 26.10.6 루트 HANDOFF 캡 관리 — ✅ 26.9.7~9 3절 원문 그대로 이관.

✅ 26.9.9 KST — GS 원주 단구 한샘 견적서 84A(기본) 추가 + 부자재 분리 (운영배포 5d9bd2f+7cb6ea1)

페페 수작업 NAS 파일을 직접 수술(그릴링 4문 결정) — 84A→84A(옵션) 개명 · 84A(기본) 탭 신설 · 탭 순서 재배치 · 숨김행 13개 삭제 · 갑지 #REF! 정리 · 본블록에 섞여 있던 부자재를 제 블록으로 분리. 기존 3탭 총합은 원 단위까지 불변(9,470,280 / 6,167,851.2 / 7,311,951.2)이 「수식·합산 유지」의 증거다. 산출 = NAS …\GS원주단구2BL\1.생산비 거래명세서_GS 원주 단구 MH_26년 09월.xlsx(8월 원본 보존) · PFS 한샘 estimate_no=7(총액 29,109,099, 옛 V1·V2 보관처리) · 갑지 총계 36,000,000.

🔴덤 = 운영 결함 — 양식의 오픈장·키큰FIX·공틀도어 블록엔 단가 LOOKUP 이 한 칸도 없어 금액이 조용히 0 (공틀도어 3탭 1,715,622원 누락). 같은 단가군에서 베끼고 배수 재부착으로 고쳤다. ✅26.9.7 미결이던 api/pfs/hansem/ 운영배포도 이걸로 완료 — 안산 성포 견적 엑셀이 서버총액과 정확히 일치하게 됐다. 검증 = PFS 왕복 30/30 · 운영 엑셀 재계산 차 0원. 🔴정정(같은 날) — NAS 9월 xlsx 는 Excel 이 못 연다(페페 제보 「복구하시겠습니까」). 자체검사 100/100 이 통과했는데도 깨져 있었다 → Excel 본인이 유일한 정본 판정기다(probe 도구 신설). 확정·수정한 결함 2건 = docProps/app.xml 개수·이름 불일치 · 블록명을 B{b} 에 쓴 것(규약은 C{b}). 남은 1건은 fill_main/fill_sub 안으로 좁혀 놓고 인계. PFS 견적 7 과 운영배포는 정상(별개 경로). 상세 = projects/pfs/handoff.md · 함정 5개 = projects/pfs/rules.md 🆕 맨 위.

✅ 26.9.7 KST — PFS 발주서 정리 탭 모바일 전용 레이아웃 (운영배포 12e8efb 완료)

페페 「/field/orderpaper 발주서 정리탭을 이번 업체별 자재관리 탭처럼 모바일 전용 페이지로. 필터가 매우 많으니 모아서 기본 접힘, 인라인 검색만 기본 노출. 동기화 강조는 안 넣어도 된다. 운영 배포」.

산출 = 파일 1개(field_orderpaper.html) · 라우트·템플릿 신설 0 · DB 변경 0. master a9b4914 → 운영 12e8efb(선별 포워드). 🔑「모바일 전용 페이지」 = 별도 라우트가 아니다 — 「업체별 자재관리처럼」이 방식 지정이고 그건 같은 파일 @media 카드형이다 (26.9.4 에 모바일 전용 목업을 이미 폐기했다). 🔴같은 템플릿을 세 라우트가 공유(뒤 둘은 어제 운영배포)라 {% if not omc_view %} 로 CSS 를 통째로 갈랐다 — 운영 HTML 마커 개수로 실증(7 vs 1). 접으면 검색 + ⚙필터(배지) + 적용칩·건수만 남는다. 날짜경고는 안 접는다(필터가 아니다). 검증 = 정적 24/24 · 테스트 34/34 · 오엠씨 회귀 24/24 · 운영 읽기전용 34/34 ALL PASS · 사이트맵 미반영 1(별건). 🔴중간에 한 번 깨뜨렸다 — CSS 주석 안 Jinja 태그가 테스트서버 세 화면을 동시에 500 으로. 정적검사가 잡아 2분 복구, 운영엔 안 나갔다. ⏳페페 = 노트20 실기 육안 1회. 상세 = projects/pfs/handoff.md · 함정 5개 = projects/pfs/rules.md 🆕 맨 위.

✅ 26.9.7 KST — PFS 업체별 자재관리 페이지 + 거래처 계정 감사 로그 — http://100.108.234.45:8799/pfs-company-material-page.html

페페 「omc/material 기준으로 타업체 자재관리 페이지 생성. 사이드메뉴는 아이비젼글로벌처럼 업체명 직링크. 내부 구조는 완전 동일, 필터만 업체 다르게. admin/company-permission 에 옵션 추가해 체크한 업체는 자동 추가」 + 「거래처 아이디는 내가 직접 만든다. 접속·CRUD·타페이지 접속 시도까지 보안 고려해 로그 기록 시스템도」.

산출 = master c49fa17(15파일 +496/−46) → 운영배포 b85b1bd 완료(26.9.7 페페 채팅 승인 「확인 완료 운영배포 진행」). 새 화면 = /field/company/<업체번호>/material — field_orderpaper.html 을 mat_vendor 만 바꿔 재사용(화면 로직 중복 0).

🔑그릴링 5문 페페 결정 = ①둘 다 켜면 업체명이 접이식 그룹(오엠씨 방식) ②시트(T)+입고처 빈값 특례는 오엠씨 전용(타업체에 주면 미기재 시트가 모든 업체 화면에 중복) ③admin 은 생성/삭제 버튼쌍 ④all-items 서버측 업체 필터 건다 ⑤거래처도 편집 가능(오엠씨와 동일).

🔴보안 3중 게이트(②③은 페페 새 지시로 추가) — ①all-items 서버 스코프 ②발주서 쓰기 허용목록 (status·receive-date·note·qty·item-name + 자기 발주처 행만, 나머지 403) ③/field/company/<no>/material 라우트에서 메뉴 권한 직접 확인. 가시성 판정 = orderpaper_service.item_visible_to 단일 출처. 감사 로그 = 기존 audit_log 재사용(스키마 변경 없음), access_page·api_write·api_denied·access_denied·logout.

검증 = 자체검사 54/54(scripts\_company_material_page_check.py — 메뉴 상태기계 4조합 SQL 순서·스코프·게이트·마스킹) · 테스트서버 실측 23/23(scripts\_company_material_page_live.py — 글로벌아이비젼 452 로 생성→그룹화→해제까지, 테스트 DB 원상복구 완료) · 운영 읽기전용 23/23(scripts\_company_material_page_prod_ro.py — 쓰기 0건, 관리화면 블록·material-page GET·/omc/material 회귀·감사로그 옵션) · 사이트맵 재빌드 미반영 29→1(미반영 «화면» 0 · 남은 1은 도구·워크플로 등 화면 밖 파일) · 허브 카드 pfs-company-material 등록(최근 2개소 실측 확인).

🔑배포 반영 판정 = /api/health 가 401 login_required → {"env":"live","ok":true} 로 바뀌는 순간이 새 코드 증거다 (운영은 REVISION 파일을 안 써서 rev 가 빈 값이다 — sha 대조는 못 한다). 선별 포워드 전제도 만족했다 — 15파일 중 14개는 선행 diff 0, web/__init__.py 만 2줄(= 26.9.4 /api/health 신설분)이라 그것까지 같이 반영했다.

🔴새 함정 5개(projects/pfs/rules.md 🆕 반영) — ①URL→menu_key 는 정확매치 실패 시 최장 prefix 로 떨어져 상위 페이지 권한을 탄다 ②PFS h3 제목·breadcrumb 은 전역 CSS 로 항상 숨는다(pfs_layout.css:55) → 업체 표시는 .op-omc-who 배지로 ③템플릿 조건부 마크업을 클래스명 문자열로 검증하면 CSS 정의에 걸려 전부 오탐 ④Jinja |tojson 은 ensure_ascii 라 한글이 \uXXXX(기능은 정상, 검증만 실패) ⑤메뉴 재구성은 부모 먼저·해제는 자식 먼저.

⏳페페 다음 행동(운영배포는 끝났다) = ①거래처 아이디 생성 ②업체 권한화면에서 「자재관리 페이지 생성」 토글 ③그 계정으로 로그인해 업체 배지가 자기 업체인지 육안 확인. ⚠업체명이 발주서의 발주처 문자열과 정확히 같아야 행이 잡힌다. ⚠미적용 처방 1건 = 사이드바 접이식 화살표(.fa arrow)가 렌더 0×0 으로 죽어 있다(리포 전체 .arrow CSS 0건, 기존 「현장 기록」·오엠씨도 동일한 기존 결함) — 고치면 사이드바 전체 시각이 바뀌어 페페 눈 확인이 먼저다.

✅ 26.10.6 · root-handoff-roll-1006 · 루트 HANDOFF 이관 (26.9.23~29 절 10개)

[코디] 26.10.6 루트 HANDOFF 캡 관리(44,905자 > 30,000자) — 끝난 절 원문 그대로 이관. 루트엔 포인터만 남김.

✅ 26.10.6 · pfs-handoff-cap-1006b · handoff 캡 이관 (26.10.6 부자재 엑셀 복구·도어재 통합 발주·네스팅 통합 열기·D1 모듈 · 26.10.5 네스팅 합산·결통일 · 26.10.1~2 GS 계열 · 26.9.28~30 묶음)

[코디] 26.10.6 handoff 캡 관리 2차 — handoff 10~103행 절 원문 그대로 이관(handoff 엔 요약+미결만 남김). 아래는 원문 그대로

[코디] 🆕 26.10.6(화) — 부자재 발주서 엑셀 「복구 필요」·양식 깨짐 수정 — ✅운영 완료 master 80fb3e21(+사이트맵 14a2e3ad) → deploy-live a9d8f6e8(1파일) · 운영 반영 11:29 KST

[페페] 11:14 「발주후 엑셀 다운로드 → 복구 요구, 데이터는 살았는데 셀크기·비율 깨짐. 수정보완·운영배포」(운영 #6 부산·선재기업 1업체). - 원인 = C:\dev\pfs\api\pfs\sub_orderpaper\sub_orderpaper_excel.py 옛 219행 wb.views.sheetView[0] — 없는 속성이라 firstSheet 리셋이 26.9.15 신설 때부터 한 번도 안 돌았다. 템플릿 firstSheet=1 → 시트 1장(업체 1곳 전체 다운로드 · 「이 업체만 출력」 전부) 이면 없는 인덱스 = Excel 복구. 26.9.14 AL발주서에서 이미 잡은 함정(rules.md L181)인데 가드를 잘못 써서 무력. codeName 중복(Sheet3)은 무관(이분 실측). - 고침 = for view in wb.views:(BookView 목록) · 회귀 = _demo() 에 firstSheet·activeTab < 시트 수 검사(옛 코드 = 1업체에서 실패 A/B 확인). - 검증 = Excel COM(Session 1 schtasks /IT·pythonw): 배포 전 운영 #6 Open 실패 → 배포 후 운영 재다운로드 #6·#3·#3「세바」개별 정상 열림, 열너비 6.0/7.0/9.33/8.56/8.67/8.0/7.22…·행높이 60/25/…·인쇄영역 A1:J29·가로 1페이지 = 템플릿과 동일. 사이트맵 그룹 8·페이지 62·미반영 1(= /field/worklog 타 세션), sub-orderpaper same. - ⚠남은 것 = 템플릿 assets\sub_order_template.xlsx 자체도 firstSheet=1(1시트)이라 단독으로 열면 복구 요구(산출물엔 영향 없음, 안 고침) · 이미 받은 옛 파일은 다시 받아야 한다.

[코디] 🆕 26.10.6(화) — 자재 발주서 #1 도어재 통합 발주 마무리: NAS 통합 발주서 + 운영 DB 정정(신규 amend API) — ✅운영 완료 master 4ce3c1b2(+사이트맵 21e1ac8a) → deploy-live f9a39f8f(5파일 blob 일치) · push 11:25 KST · 운영 #1 r30→r32

[페페] 「1차 원주 단구·안산 성포 통합 마무리 · 도어재 발주건 제목 표시 · 통합 발주서 파일 먼저 · GK102-G8=PVC · H2041B-L1=LPM(시트 없이 보드 직접) · PQFA2T=PVC · 피앤알 입고 시트 2분할 권취 필수 · 보드 비고 E0 만 · 엣지 샘플:업체 · 피앤알 칼라 피스마개스티커 1세트 · DB 동일 반영 · 운영배포」 - ✅파일(11:18 KST) = NAS \\192.168.0.101\공유폴더\2026현장\원부자재발주서\10월\통합발주(동기화제외)\(도어재통합)한샘 GS 원주 단구+GS 안산 성포 원부자재발주서.xlsx(새 하위폴더·새 파일·왕복 md5 일치) · 로컬 C:\dev\_work\mat-door-1006\out\ · 작성기 orderpaper-sync\nesting_draft.build 재사용(row_note·qty_text·memo 만 프로세스 안에서 교체) · 탭 = 오엠씨·피앤알·효산엘피엘·길동상사·조운IMT·선재기업 · 키워드 PFS-MAT#1. 규칙 단일 출처 C:\dev\_work\mat-door-1006\door_rules.py(파일·DB 같은 계획). - ✅코드 = POST /api/mat-orderpaper/<no>/amend(초안·확정 · 제목·비고·규격·입고처 + 수동 행 추가 · 수량·여유·업체·현장 칸이 오면 거절 · 확정 = sync_multi 로 자재관리 같은 행 갱신 · 판이력 reason 「정정」) · qty_text 「세트」 · D1 엑셀 비고 = note 만(calc_note → 맨 끝 「계산 근거」 열, web-designer 처방 10pt #475569). 화면 무변경. - ✅운영: LPM 시트 소프트삭제 1(자재관리 −1) → 정정 45칸(보드 24 비고 E0 · H2041B-L1 보드 규격 「LPM」 2 · 시트 GK102-G8/PQFA2T 펫→PVC · 피앤알 컬러 시트 3행 입고처 오엠씨→피앤알 + 비고 2분할 · 엣지 7 「샘플:<칼라샘플 업체>」 · 제목 「(도어재) GS 원주 단구+안산 성포 통합 발주」) + 피스마개스티커 3행(1세트·피앤알·포인 입고) → 자재관리 48→50행(전부 대기). 백업 C:\dev\_work\mat-door-1006\backup_*.json. - ✅검증: 단위 72/72 · 테스트DB 정정 28/28 · 소프트삭제 회귀 32/32 · test_pfs_link OK · 운영 되읽기 23/23(DB=계획 52줄 전 칸 · 자재관리 · D1 엑셀↔DB) · NAS 파일↔DB 재생성 셀 차이 0(인쇄 밖 메모 판번호 1칸) · 사이트맵 amend same(잔여 미반영 1 타 세션). - ⚠애매점(추천으로 정함): ①「피앤알 입고 시트」 = 보드 업체가 피앤알인 컬러(GK102-G8·P9GA4T·PQFA2T) 시트 → 입고처를 피앤알로 바꿈 ②샘플 발송처 = 그 컬러 칼라샘플 줄 확정 업체(IV075EMT 만 시트 길동상사 ≠ 샘플 조운IMT) ③GK102-G8 피스마개 현장 = 보드 배분 큰 원주(11 vs 10) ④LPM 보드 규격에 「LPM」 삽입(18T PB LPM 양면 · 4.5T MDF LPM 양면 — 4.5T LPM 가능 여부는 10.2 미결) ⑤오엠씨 탭엔 비고 칸이 없어 오엠씨 보드 E0 는 DB 에만 ⑥자재관리 시트·엣지 비고 앞 「통합 N 중 이 현장 몫」은 기존 D1 규칙대로 남음 ⑦칼라샘플 H2041B-L1(효산) 유지. - 🔴발견(미처리·승인 필요): NAS 10월\자재발주서_1_GS 원주 단구 외 1곳 도어_확정.xlsx(11:02 저장, D1 목록형 엑셀)를 동기화가 11:09 KST 에 읽어 자재관리 93행 이중 적재(가구업체 「자재발주서_1_GS」 · 현장 미연결 · 전부 대기) — 목록 C:\dev\_work\mat-door-1006\finding_nas_junk_rows.json. 정리 = 그 파일을 하위폴더로 이동 + 93행 내림(파서 PFS-MAT 인식은 orderpaper-sync 소유 세션 몫).

[코디] 🆕 26.10.6(화) — 네스팅 저장본 통합 열기 + 복수 현장(c7b31265) 운영 반영 — ✅운영 완료 master 23c38436 → deploy-live 792ea1cc(c7b31265 네스팅 4파일)·3b63b940(통합 열기) · push 09:21 KST · 운영 쓰기 0

[페페] 「네스팅에서 2개 현장 통합열기가 가능하게 해줘. 저장본 열기 할때 체크해서 필요한 네스팅 다중 선택 가능하게. 운영배포」(채팅 직접 = deploy-live 승인) - ✅화면(web-designer 처방): 열기 모달 1칸 「선택」 체크(칸 전체 히트 · 행 단일 열기로 안 번짐) · 체크 순서 = 순번 1·2 · 첫 체크 = 대표(☆ 변경) · 하단 칩 + 부재·원장 합 미리보기 + [선택 해제] + 통합 열기 (n) · 검색해도 선택 유지 · 막힘 = 출처 다름/현장 없음/4개 초과(사유 표시). 결과 = 새 작업(curJob.no=null · URL ?job= 제거 · 「통합본 #17+#18 — 저장 안 함(새 작업)」) → 저장 = POST 만 · fields = 실제 행 fno 현장 · opts.mergedFrom = 선택 전부. 원자성 = 전부 GET·재검증 뒤에만 표 변경(하나라도 실패 = 표 무변경 + 오류). 진행 중 ldBusy 로 열기·합치기·삭제 잠금. - 재사용(중복 구현 0): loadJob → applyLoadJob, mergeJob → applyMergeJob(검사 throw), newJob → resetJob 으로 쪼개 공용. 변경 = C:\dev\pfs\web\nesting\nesting.html · 신규 C:\dev\pfs\migrations\patch57_nesting_job_field.sql. - ✅DDL: 운영 RDS nesting_job_field 이미 있었다(SHOW CREATE TABLE = _FIELD_DDL 과 동일 · PK(job_no,field_no) · idx_field · 0행) → CREATE 실행 안 함(조회만, SSM). deploy-live 제외 = orderpaper-sync/{nesting_draft.py,material_vendor_override.json} · common/material_order/test_calc.py. blob 6파일 master 동일. - ✅검증 C:\dev\pfs\scripts\_nesting_multi_open_check.py(gitignore) 로컬 33/33(운영 #17·#18 GET 사본 · 실패 주입·연타·막힘) · 테스트 38/38(시드 #42·#43 → 통합 저장 #44·#45 되읽기 fields 2곳·384행·658 · 원본 무변경) · 운영 35/35(https://pfs.poin.co.kr/production/nesting 200 · 목록·단건 200 · #17+#18 = 155+229 = 384행 · 수량 269+389 = 658 · 배지 A155/B229 · 원장 93 · 쓰기 0). 회귀 = product_calc 로컬 137/137·운영 146/146 · multifield_api 운영 4/4 · drawer 65/65 · multifield 42/42 · loadmodal 16/16 · import_keep 53/53 · rename_warn 32/32 · rid_sort 30/30 · qa5 99/106(기준선). - ✅사이트맵 재빌드(페이지 62 · /production/nesting·/api/nesting/* 전부 same · 미반영 1 = /field/worklog kakao-board 무관) · pfs 커밋 cbe18780. devplan C:\dev\devplan\pfs-nesting-order-draft.html §5 + 허브 카드 갱신. - ⚠남은 것: ①devplan 같은 페이지 §1 진행표 ③④⑤ 배지(대기→완료/진행)는 ruleguard web-designer-required 가 서브에이전트 세션의 상담 기록을 못 봐서 막힘 — 총괄이 고치거나 보류 ②통합 시 커프·여백·결무시 옵션 = 대표(첫 체크) 저장본 값(합치기와 같은 정책 · 발주완료 체크는 대표 것만) ③테스트 DB 에 검사 시드 #42~#45 남김(_QA통합열기*) ④운영 #17·#18 은 09:09·08:58 KST 에 페페 쪽에서 계속 수정 중(행 155·229).

[코디] D1 자재 발주서 모듈(26.10.5) — ✅운영 반영 26.10.6(화) 01:01 KST deploy-live 5b1173c9 (master f4763a89·b360a9d3 push)

[코디] 🆕 26.10.5(월) — 네스팅 → 원부자재발주서(도어 마감재) 초안 파이프라인 + 네스팅 복수 현장 연결 — ⏳그릴링 대기(착수 전)

[페페] 「가구전문가 참조 · 원주+안산 통합 발주서 + 현장별 개별 발주서 · 네스팅 복수 현장 연결 · 몸통재 때 누락분 추가 · 기본 = 도어부재 네스팅 2현장 · 운영배포」 - 사실(opus-max 상담): #17 원주·#18 성포 공유 컬러 0 → 이번 통합 = 합 73장. 31·42 = 검토 해치 포함 상한(확정분만 원주 26). 성포 「9T쫄대」 10개가 18T 로 저장(두께 오류 의심). 리포 자산 = C:\dev\pfs\orderpaper-sync\{nesting_order,tread_to_draft,orderpaper_build}.py(전부 현장 1개 전제). nesting_job 현장 칸 1개. - 🔴발견: 10.2 몸통 발주서가 운영 자재관리에 잘못 적재 — 합산본이 원주(2169) 카드에 중복, 성포 몸통본이 field 251 로 붙음(파일명 꼬리 (몸통) → orderpaper_parse.py L92~93 현장 파싱 실패). 정리는 별건 승인. - 그릴링 Q1~Q7(1차)·Q8~Q10(2차) 페페에게 제출. 배정 = L4 worker-opus-xhigh(Q3=DB 초안이면 L5). 장부 줄은 결정 후 추가.

[코디] 🆕 26.10.5(월) — GS 원주 단구·안산 성포 마감재 네스팅 같은 항목 수량 합산 + 결방향 세로 통일 → 운영 새 작업 #17(31장)·#18(42장) 20:55 KST — 코드 변경 0

[페페] 「안산 성포, 원주 단구 네스팅 자료에서 같은 컬러, 두께, 타입, 가로, 치수, 품명이 같은 항목들 수량을 합쳐줘. 결방향은 결무시 가능 칼라라도 세로 기준으로 통일 … 가로,세로 값을 교환 … 자재 가로,세로 길이 제한에 의한 교체. 운영배포」 - 규칙(순서 = 결 → 길이 교환 → 합산): 전 행 결방향 세로 · 원래 가로결 행 w↔h(두 작업 0행) · 세로 고정 뒤 가로 > 원장폭 1220 이면 w↔h(= 화면 orient() 강제 스왑과 같은 결과) · 합산 키 = 두께·MDF/PB·컬러·경면·품명·양단면·타입(부재표 「타입」 칸)·가로·세로·결 · 위치·비고·ID 는 키 아님(대표 = 첫 행 · ID = 첫 행 ID · 성포는 비고에 「병합 ID a·b·c」 · 원본 위치·비고 전부 빈칸). - 원주 #14(180행·수량 210) → #17 https://pfs.poin.co.kr/production/nesting?job=17 126행·210 · 결 바꾼 행 155 · 합산 그룹 38 · 길이 교환 2(84A옵션 KAEX7-SR FIX 1290×55·1270×270) · 31장 → 31장. - 성포 #16(219행·253) → #18 ?job=18 170행·253 · 결 바꾼 행 210 · 합산 그룹 37 · 길이 교환 1(104 GY123MT EP 1255×400) · 41장 → 42장 = 결 고정 몫(합산만 41 · 결만 42 · GK102-G8 5→6 · IV075EMT 단면 19→20 · GY123MT 단면 13→12). 원본의 결무시 회전 배치 32매(원주 29매)가 0 이 됨. - 저장 = 선례 _nestsave_18t.py 틀(빈 화면에 변환 부재 → 자재 자동등록 = 원본 자재와 같음 → 네스팅 → 새 작업 doSave) · route 가드 = POST /api/nesting/job 사이트별 1회만 · 칼라 POST 0(857 그대로) · PUT·DELETE 0 · #14·#15·#16 무변경. - 검증: 수량·면적 보존(58.9592㎡ · 86.3028㎡) · 되읽기 14필드 행별 차이 0 · 결 전부 세로 · 원장 초과 0(w≤1220·h≤2440) · ?job=17·18 열기/재실행 31·42 · 기존 #1~16 modify_date 불변 · 독립 반박검증(sonnet, 규칙 재구현 + 화면 엔진 Node 재현) 결함 0(원본 31/41장 재현 일치 · 저장본 31/42장 · 교환 3행 정확히 일치 · job 14·16 전 필드 불변). - 백업·스크립트 C:\dev\_work\gs-finish-nesting\merge-grain-261005\(원본 backup_job14.json·backup_job16.json · 변환 diff diff_tables.md · _transform.py · _nestsave_merge.py · 장수 분해 variants_*.json). - ⏳[페페] 애매점: ①「타입」 = 부재표 타입 칸(84A기본·84A옵션·84C / 84A·전시부스·99A·104·OT84A)으로 봤다 — 타입 무시하고 합치면 원주 89행·성포 129행 ②길이 교환은 원장폭 초과만 — 변환 뒤 가로>세로(결이 짧은 변) 원주 19행·성포 38행 남음(걸레받이·서랍앞판·FIX 등). 「긴 변 = 결」(w>h 전부 교환)이 의도면 원주 31장·성포 41장(−1)(반박검증 엔진 재현값, 원래 세로였던 원주 서랍앞판 6행까지 바뀜) ③양단면(양면/단면)은 키에 넣었다(엔진이 원장을 따로 잡음) — 빼면 원주 1쌍·성포 2쌍 더 합쳐짐(125·168행) ④#14·#15·#16 삭제/보관 ⑤NAS 산출물 갱신 안 함. - ✅ 26.10.5 저장본 열기 모달 가로 폭 확대(운영 42c8bed1) · 부재 표 헤더 겹침 수정 + ID 칸 클릭 = 도면 확인 표시(운영 6c28441e) — ⚠확인 표시는 [💾 저장]해야 남음 (원문: archive.md 「✅ 26.10.5 · pfs-handoff-cap-1005b」) - ✅ 26.10.5 부재 표 [↔] 가로·세로 바꾸기 + 인라인 검색창 — 운영 82ae4394 완료 (⚠#18 은 운영서 계속 바뀜 · 원문: archive.md 「✅ 26.10.5 · pfs-handoff-cap-1005c」)

[코디] 🆕 26.10.4(일) — 네스팅 부재 표 ID 칸 + 헤더 클릭 정렬 + 기본 ID순 + 다중/고급 필터 + 조건 세트 서버 저장(nesting_filter_set) + 정렬 모달 — 운영 완료 5a3dfceb (⚠기존 저장본 #1~15 는 ID 없음 · 조건 세트 삭제 하드 · 원문 archive.md 「…cap-1005d」)

[코디] 🆕 26.10.2(금) — GS 안산 성포 MH 포인 769 최신화 → PFS 한샘 견적 6 갱신(form 14) + NAS 새 파일 — 코드 변경 0 · 운영배포 없음

⏳[페페] 6건(session-2026-10-02-gs-ansan-seongpo-hansem.md 참조) · ⚠devplan hansem-estimate.html 절 17 미삽입(문안 C:\dev\_work\gs-ansan-seongpo-1002\devplan_s17.txt) · 원문 archive.md 「…cap-1005d」

[코디] 🆕 26.10.2(금) — GS 원주 단구·안산 성포 몸통 원부자재발주서 3종(개별 2 + 합산 1) — 로컬+NAS 10월 폴더 업로드(12:18)

⏳[페페] 확인 9건(성포 출처 작업본 vs #12 · 15T H2041B-L1 · 4.5T LPM · PQFA2T 대응품번 · HS0868GP 경면 · 엣지 · 피스마개 단위 · 합산 이중여유 · 합산본 이중 적재) · 🔑함정 momtong_order.write_tab 17건 초과 소실 · 원문 archive.md 「…cap-1005d」

[코디] 🆕 26.10.2(금) — GS 원주·성포 마감재 해치·네스팅 → 운영 nesting_job #14(원주 31장)·#15(성포 46장)·#16(성포 18T 41장) + NAS 업로드 완료

⏳[페페] #15(15T 판) 삭제/보관 · 남은 결정 6건 Q5~Q10(기본값으로 저장됨) · 상세 session-2026-10-02-gs-finish-nesting.md 「후속」 · devplan gs-finish-nesting.html · 원문 archive.md 「…cap-1005d」

[코디] 🆕 26.10.2(금) — 네스팅 도어 부재에 PNCAD 작업본 섞임 방지(출처 다르면 새 탭) — 운영 320e17a6 완료

⏳[페페] ①#8 호반 대구 칠성 도어+PNCAD 혼합 저장본 분리 여부 ②GS 마감재·도어는 #12·#13 에 넣지 말고 새 저장본 ③#12·#13 은 재저장 이전 값 ④devplan pfs.html DONE AX 줄 미삽입(문안 C:\dev\pfs\_restore\nesting_gs_2026-10-02\devplan_done_AX.txt) ⑤web-designer 제안 미반영 · 원문 archive.md 「…cap-1005d」

[코디] 🆕 26.10.2(금) — GS 대전 도마변동 2차(수입주방) 포인 787 → 한샘 견적 10(form 9) + NAS — 코드 변경 0

⏳[페페] ①−4,000 절사 ②787 이름 「(국산)…(2차)」 vs 「수입주방」 정정 ③걸레받이 0원 «무상» 3줄 ④부속→FIX PANEL 매핑 · 원문 archive.md 「…cap-1005d」

[코디] 🆕 26.10.1(목) — GS 대전 도마변동(field 2175) 포인 785 → 한샘 견적 9 + NAS (26.10.2 후속 3건 완료·NAS 저장) — 코드 변경 0

⏳[페페] ⛔NAS 교체 보류(손수정본 있음) · 🔴운영 form 3·4 출력에 「임서현」 도장+GS 안산 도면 실림(재발행 판단) · 통합·v2·1차 ⏳ 전부 archive.md 「✅ 26.10.2 · pfs-handoff-cap-1002c」 · 원문 archive.md 「…cap-1005d」

[코디] 🆕 26.9.30(수) — GS 안산 성포(field 2180) 도면 → 현장별 자재 초안 운영 등록(spec_no 6 · 186칸)

⏳[페페] 검수 24건 · 미등록 칼라 4종 · [진행중·미결3] 견적 초안 769/한샘 6 → session-2026-09-30-gs-ansan-matspec.md · devplan pfs-gs-ansan-matspec.html · 원문 archive.md 「…cap-1005d」

[코디] 🆕 26.9.30(수) — 학동매장 도어발주서 초안(포인탭) NAS 게시 — ⏳[페페] 확인요 8건 + 같은 폴더에 사람이 쓰는 한샘 학동매장 도어발주서.xlsm(08:06~) 과 정본 선택 → session-2026-09-30-hakdong-door-draft.md

[코디] 🆕 26.9.29(화) — 월마감 현장별 거래명세서 신설 — 운영 38158edc 완료

⏳QC1 SSH 22 불통(HM3 미러 SKIP · projects/hm3/rules.md 「업그레이드가 SSH를 죽였다」) · ⏳사람 눈 = 실물 A4 출력 1장 + 얼마에요 원본 대조 · 원문 archive.md 「…cap-1005d」

[코디] 🆕 26.9.29 — 네스팅 저장본 #8(호반 대구 칠성) YEN70-SG 도어 소실 복구 + 가져오기 덮어쓰기 수정 — 운영 5fd14421 완료 (원문: archive.md 「✅ 26.9.29 · pfs-handoff-cap-0929」)

⏳PITR 인스턴스 pfs-pitr-nest8-0929 삭제 승인 대기(stopped) · ⏳운영 동기화 시 stock(재고량) 칸이 자리 기준 UPDATE 로 어긋남 · ⏳EM738 18T 1매·엣지 제외(PNCAD 오류 확인 중) · 상세 projects\pfs\session-2026-09-29-chilseong-wonbujae-order.md 「3차」.

[코디] 🆕 26.9.28 — 롯데 화성 향남 MH 본건(779)+추가1(780) 한샘 양식 엑셀 — 6차까지 완료 (원문: archive.md 「✅ 26.10.2 · pfs-handoff-cap-1002b」)

최종 = 한샘 협의 90,000,000(VAT 별도) · NAS …\09월\한샘\롯데 화성 향남\ · 🔴779 PUT 이 하위내역 69줄을 지움(복구함, rules 🆕) · ⏳[페페] 한샘 견적 8(780 만 540,239) 처리 판단 · ⏳ACC룸(6,702,000)이 본건 90,000,000 에 포함 = 이중청구 위험 → ①본건에서 뺀 새 본건(추천) ②추가건 재작성 ③그대로.

[코디] 🆕 26.9.28 — 에넥스 9월 월마감(close_no 21) 완료 — 현재 23,694,000(26.9.30) (원문: archive.md 「✅ 26.10.2 · pfs-handoff-cap-1002b」)

운영배포 5dee8ae6 · ⛔781·782·783 은 페페 직접수정본 — 단가·운임 스크립트 재실행 금지 · 라인 VIP 추가2 = 784 369,000(10월 마감 대상) · ⏳[페페] NEGO 입력 · 782·라인 VIP 단가 확인 · p6~8 을 784 에 더할지 추가3 인지 판단.

✅ 26.10.6 · pfs-handoff-cap-1006a · handoff 캡 이관 3절 (배차목록 출고요청서 행 강조 · 네스팅 제품 계산기 · 자재 발주서 확인표·소프트삭제·게이지)

[코디] 🆕 26.10.6(화) — 자재 발주서: 자재 확인표 탭 · 품목 소프트삭제/복구 · 보드 소요 게이지 — ✅운영 완료 master bb39275e(+사이트맵 0992f901) → deploy-live 7c352be5(체리픽 10파일 blob 일치) · push 10:32 KST · uwsgi 재기동 10:32:33 KST · 운영 쓰기 0

[페페] 「직원이 현장별·타입별·주방/일반·위치별로 자재 넘버·두께 확인하는 탭 / 스티커 등 생산 안 하는 품목 삭제(소프트·연하게·복구) — 시트·보드 공통 / 보드에 네스팅처럼 소요량 게이지 / 운영배포 · 추천대로」 - ✅확인표 = GET /api/mat-orderpaper/<no>/matview(api/pfs/mat_orderpaper/mat_view.py) · 원천 = 출처 저장본 «현재» 부재(덮어쓰기 반영 · alloc 조인 없음 = 수량 중복 0) · 주방/일반 = 명시 표식만(품명 앞머리·위치·타입), 빈 값 「미지정」 · 해시 #n/check · 목록 「자재표」 · 검색·타입 알약·A4 인쇄(body.mo-printing). - ✅소프트삭제 = mat_orderpaper_item.remove_yn(+remove_date·remove_user) · POST /<no>/lines/remove|restore · 합계·검산·경고·엑셀·확정 적재 제외 · 판 rev+1(item_del|item_restore) · 확정 문서 = sync_multi 재적용(삭제=내림·복구=같은 orderpaper 행 되살림·중복 0 · 입고/진행 행·마지막 품목 거절 · 자재관리 수동삭제 행은 안 살아남 → 응답 수) · 재가져오기/연결/추가 차수 = 삭제 상태 승계. - ✅게이지 = 소요(Σ bom 장수×자재소요%, 초안 생성 때 trace 저장 · 예전 초안은 현재 summary 로 보강, 장수 다르면 「정보 없음」) ÷ 화면 최종 · <95 초록/95~100 빠듯/>100 부족 · 미리보기 전 「계산 중」 · 추가 차수 = 「1차에서 확인」. - ✅DDL patch58(C:\dev\pfs\migrations\patch58_mat_orderpaper_item_remove.sql) = 테스트 → 운영 순(SSM, INSTANT, lock_wait_timeout 10) · 운영 49행 영향 0(SHOW CREATE 확인). - ✅검증: 단위 69/69 · 테스트DB 통합 32/32 · 로컬 화면 54/54 · 테스트 서버 8001 화면 54/54 · 운영 읽기 19/19(화면 200·새 JS·탭·14칸·게이지·확인표 카드 2·GET 7종 200·쓰기 0·콘솔 0). 사이트맵 새 API 3종 same(잔여 미반영 = kakao-board). 검사기 = C:\Users\delix\AppData\Local\Temp\claude\c--dev\4eca4ca7-dd2e-43a5-a06f-ed7a361e4184\scratchpad\{it_remove,ui_1006,live_pw_1006}.py. - ⚠애매점(추천으로 정함): 도어 저장본은 위치 칸이 비어 주방/일반·위치 「미지정」 · 확인표 = 지금 저장본 기준(바뀌면 배너) · 삭제 보드 자재는 확인표에서도 연하게(빼지 않음) · 게이지 임계 95% 제안값 · 저장 중 [삭제] 경합 → 저장 끝날 때까지 줄 세움(실측 버그 수정). 제안(미구현) = 삭제 사유 칩 · 목표 채움률 일괄 여유.

[코디] 🆕 26.10.6(화) — 배차목록 출고요청서 미리보기(#dcPrintModal) 「주소」「연락처」 행 연노랑 #fff9c4 — ✅운영 완료 master 50af14b4 → deploy-live c4d2a339(dispatch_list.html 1파일·blob 일치) · push 10:3x KST · 운영(pfs.poin.co.kr) computed bg 화면·print 모두 rgb(255,249,196) 실측 · 택배의뢰서 영향 0 · 사이트맵 재빌드 미반영 1(worklog kakao-board, 내 건 아님) · menu_dump 커밋 214bff6b(로컬)

[코디] 🆕 26.10.6(화) — 네스팅 「🧱 제품 계산기」(오픈장·휠라 등 다중 부재 제품) — ✅운영 반영 완료 master 671dd485 → deploy-live 980b4e43 (cherry-pick · push 완료 · 운영 DB 쓰기 0 · 기록 02:34 KST)

[페페] 「poincad 자산을 활용해서 네스팅에 오픈장, 휠라 등 다중 항목 제품을 외곽치수 입력, 항목별 직접 입력으로 추가할수 있게 해줘. 서랍 계산기의 심화 버전이다. 운영배포. 질문사항은 추천대로 진행한다.」 → 그릴링 Q1~Q10 전부 추천안 채택. - ✅산식 3종(오픈장 · 휠라/SR/EP/목찬넬 ㄱ자·T자 · 냉장고 휠라 ㄷ자) + poincad 샘플 116그룹 불러오기 + 빈 제품 직접 구성. 편집 표에서 칸 수정 = 수동 고정(주황·↺ 복귀). 변경 = C:\dev\pfs\web\nesting\nesting.html(+813) · poin_sample_controller.py(GET /api/poin/sample-tree 신설, SELECT 2개). - ✅검사 C:\dev\pfs\scripts\_nesting_product_calc_check.py(gitignore) 로컬 137/137 · 테스트 146/146 · 운영 146/146(EC2→MSSQL 116그룹 · 쓰기 0 · 콘솔 에러 0). 회귀 = 서랍 계산기 운영 73/73 · qa5 99/106 · grid-modal 87/96(기준선 동일) · import_keep 53/53. 검사기가 잡은 버그 3(pcType id 충돌 · display:flex 가 hidden 무력화 · blur→change 재렌더로 ↺/제외 클릭 소실) 수정. - ✅사이트맵 재빌드(C:\dev\devplan\pfs-sitemap.html 페이지 62 · /production/nesting same · 미반영 1 = /field/worklog kakao-board 무관) · pfs 커밋 614bfe64 · devplan pfs-nesting-product-calc.html · 상세 = projects/pfs/session-2026-10-06-nesting-product-calc.md. - ⏳[페페] 결정 ①1280px 에서 툴바 2줄 접힘(1320px+ 는 1줄 · 이번 범위 밖) ②18T MDF 행 분홍 경고(기존 「15T↑+MDF 경고」 vs 결정 「MDF 18T 기본」 충돌 — 경고 규칙을 손볼지) ③뒤판 18T 통뒤판 인셋 가정(화면에 「확인 필요」 문구 — 실무값 확인). - 보고만: 서랍 계산기 천지판 W−2T vs poincad 실사용 W−37 = 1mm 차이(Q10, 미해결). ~~운영 nesting.html 은 master 복수 현장(c7b31265) 미반영 유지~~ → ✅26.10.6 09:22 KST 운영 반영(deploy-live 792ea1cc, 위 절). poincad 에는 산식이 없어 산식 = 현장 실사용(poin_item) 역산 최빈값.

✅ 26.10.5 · pfs-handoff-cap-1005d · handoff 캡 이관 8절 (26.10.2 성포 한샘 6 · 몸통 발주서 · 마감재 네스팅 · PNCAD 섞임 방지 · 대전 한샘 9·10 · 26.9.30 성포 자재 · 26.9.29 월마감 명세서) + 낡은 「최종 갱신」 3줄

[코디] 26.10.5 handoff 캡 관리 4차 — [코디 총괄] 지시로 ⏳ 보유 절도 원문 이관(handoff 엔 제목 1줄 + ⏳ 요지 1줄 + 포인터 남김). 아래는 원문 그대로.

[코디] 🆕 26.10.2(금) — GS 안산 성포 MH(field 2180) 포인 769 최신화분 → PFS 한샘 견적 6 갱신(form 14 비활성 신설) + NAS 새 파일 — 코드 변경 0 · 운영배포 없음 · ⏳[페페] 6건 → session-2026-10-02-gs-ansan-seongpo-hansem.md

[페페] 「PFS 안산 성포 견적서 최신화 했다. 한샘 양식으로 재제작 해서 나스 폴더 저장해줘.」 - 769(읽기만, 수정일 26.10.2) 26.9.7 판 대비 = 전시부스(84A) 4줄 추가(5,879,000, 하위 4건) · 운반비 0→600,000 · 시공비 0→11,000,000 · 기존 24줄·하위 46건 그대로 → 총 48,368,000(상세 36,768,000). - 한샘 6 = form 3→14(form 4 → 5평형 전시부스(84A)·84A·99A·104·OT84A 주방전용 · 도면·「임서현」 도장·S6 06.16 제거 · 탭마다 블록 제목 = 포인 품명(블록 = 항목 1개) · 운반비·시공비 박음) · delete-insert POST 78칸(항목 28 + 하위 50 세트칸) · 서버총액 36,769,369 · 담당 「김선정 과장」 · 견적일 2026-09-07 유지. - 엑셀 = 주방 36,760,000(−8,000 만원 절사) + 운반비 600,000 = 생산비 37,360,000 + 시공비 11,000,000 = 48,360,000 · verify 운영 306 ALL OK · sfcheck·_xlcheck 0 · 운영 다운로드 = 로컬 파트 차이 0 · PDF 육안 OK. - NAS 새 폴더·파일 \\192.168.0.101\공유폴더\2026현장\견적\10월\한샘\GS 안산 성포 MH\한샘 GS 안산 성포 MH 가구제작 견적서(26.10.02).xlsx(107,964 B 바이트 일치) · 9월 폴더 파일 그대로. - 운영 쓰기 = form 14 업로드 + 한샘 6 갱신뿐(769·form 1~13·한샘 1·4·7·8·9·10 불변 C:\dev\_bench\gs-ansan-seongpo-1002\snap_before/after.json) · 스크립트 C:\dev\_work\gs-ansan-seongpo-1002\ · ⚠devplan hansem-estimate.html 절 17 미삽입(훅이 서브에이전트 web-designer 상담을 못 봄) → 문안 C:\dev\_work\gs-ansan-seongpo-1002\devplan_s17.txt.

[코디] 🆕 26.10.2(금) — GS 원주 단구·안산 성포 몸통 원부자재발주서 3종 작성(개별 2 + 피앤데코 합산 1) — 로컬만, NAS·운영 쓰기 0 · ⏳[페페] 확인 9건

[페페] 「기존 GS 자재 발주서 확인해 원주 단구·안산 성포 원부자재 발주서 · 도어 빼고 몸통만 · 피앤데코 합산 별도(한번에 생산, 개별은 현장별 금액용)」. - 산출 C:\dev\_work\gs-momtong-order\out\(xlsx 3 · report.md · png\ · alt_job12) · 스크립트 체인 같은 폴더(fetch_jobs→…→verify→make_report) · verify 41/41 PASS. - 원주 = 저장본 #13 그대로 49장. 성포 = #12 가 작업본 33~36 재저장(01:03) 전 값이라 현재 작업본으로 재네스팅 70장 + 페페 여유 14 = 84(#12 기준 대안 = alt_job12). 합산 = 단순 합(합쳐 재네스팅 시 119→113 참고만). - ⏳[페페] ①성포 출처(작업본 vs #12, 작업본이면 운영 #12 재저장 승인) ②15T H2041B-L1 여유+1 ③4.5T 등판 피앤데코 LPM 가능? ④PQFA2T(LX PVC) 피앤데코 대응품번 ⑤HS0868GP 경면 여부 ⑥엣지 폭·컬러(성포 사양 ABS PUR) ⑦피스마개 단위 EA vs 장 ⑧합산 이중여유(3T 시트 40M·엣지) ⑨합산본은 NAS 동기화 폴더 금지(PFS 이중 적재). - ✅12:18 KST [페페] 「NAS 10월 폴더에 모두 저장」 → 3파일(작업본 기준판) 2026현장\원부자재발주서\10월\ 업로드·왕복대조 일치. ⚠합산본도 동기화 폴더에 있음 → PFS orderpaper 파싱 시 현장 「GS 원주 단구+안산 성포 MH」 이중 적재 여부 확인 필요. - 🔑리포 함정(미수정): momtong_order.write_tab 품목 17건 넘으면 24행 캡노트에 써져 조용히 소실 · orderpaper_build._receiver_row 병합 해제 전 서식 복사라 중간 입고처 행 서식 소실.

[코디] 🆕 26.10.2(금) — GS 원주 단구·안산 성포 마감재 해치(1차 전면 + 2차 측면 EP)·네스팅 계산 완료 → 페페 승인으로 운영 nesting_job #14(원주 31장)·#15(성포 46장) 저장 + NAS 새 하위폴더 업로드 완료 — ⏳[페페] 남은 결정 7건(Q4~Q10) → session-2026-10-02-gs-finish-nesting.md 「후속」 절

[페페] 「마감재 네스팅 계산 · 전면 입면 기준 · 도면 복사해 해치 직접 · 1차 전면 도어·EP류 → 2차 측면 EP류」. 사본 DWG 에 ODA→ezdxf→ODA(ACAD2013) 해치 + .treadwork.json · 네스팅 = deploy-live nesting.html 로컬 헤드리스(운영 호출 0). - 원주 229매 56.422㎡ → 엔진 원장 31장(산입만 26 · 길로틴 26) · 성포 261매 82.373㎡ → 46장(산입만 40 · 길로틴 38 · 도어 18T 반대안 41). 두 현장 2차 checks(V8b 포함) FAIL 0. - 산출 C:\dev\_work\gs-finish-nesting\<wonju|seongpo>\out\(…_마감재해치_2차.dwg · _overlay.dwg · _2차.treadwork.json · nest_input_p12.json · png2\ · nest_report.md). 저장 시 자동 등록될 칼라 = 성포 GK102-G8·P9GA4T(common\colors_check.json). - ✅[페페] 26.10.2(금) 「막힘 3개 — 1 저장 승인 · 2 a · 3 추천대로」 실행 = 운영 nesting_job #14 원주(field 2169 · 11:13 KST · https://pfs.poin.co.kr/production/nesting?job=14) · #15 성포(field 2180 · 11:20 KST · ?job=15) 새 작업 POST(기존 #1~13 변경 0) · 칼라 855→857(성포 GK102-G8·P9GA4T, 마감종류·업체 칸은 사람이 채움) · NAS 새 하위폴더 \\192.168.0.101\공유폴더\2026현장\진행중\10월\한샘 GS 원주 단구 MH\마감재네스팅_초안_261002\(29파일) · …\한샘 GS 안산 성포동 MH\마감재네스팅_초안_261002\(42파일) MD5 71/71 일치 · 독립 검증 결함 0(C:\dev\_work\gs-finish-nesting\common\verify_commit.md). 한계 = 저장본에 작업 메모·행 비고 칸 없음. - ✅Q4 해소 26.10.4(일) — [페페] 「안산·원주 도어 기본 18T · 15T 없음 · 모두 18T 로」 → 성포 도어·서랍앞판·FIX 124매 15T→18T(파생 치수 변경 0) · 엔진 46→41장(산입만 40→36 · 길로틴 38→35) · 2차 checks FAIL 0 · 운영 새 작업 #16(https://pfs.poin.co.kr/production/nesting?job=16 · 219행 · 41장 · 새 칼라 0) · NAS \\192.168.0.101\공유폴더\2026현장\진행중\10월\한샘 GS 안산 성포동 MH\마감재네스팅_18T_261004\ 42파일 MD5 42/42 · 원주 마감재 15T 0(변경 없음). ⏳[페페] #15(15T 판) 삭제/보관 결정. - ⏳[페페] 남은 결정 6건 = Q5~Q10(사양충돌 Q5~Q8 · 검토 해치 산입 Q9 · 치수 선택 Q10) — 전부 기본값으로 저장됨. 반대안 선택 시 새 작업 재저장(PUT 금지·별도 승인) · 상세 = devplan gs-finish-nesting.html §2. - ✅devplan 페이지 = C:\dev\devplan\gs-finish-nesting.html 배치·허브 등록 완료(Q1~Q3 「답변 반영」 26.10.2).

[코디] 🆕 26.10.2(금) — 네스팅 「도어 부재에 PNCAD 작업본이 또 섞였다」(GS 원주 단구·안산 성포) → 출처가 다르면 한 표에 안 섞고 새 탭 — 운영 320e17a6(master 1fea0da2) 09:0x KST

[페페] 「도어 네스팅에 pncad 작업본이 또 섞여 들어간거 같다 · 원주 단구·안산 성포 집중 · 도어 부재엔 코디에게 시킨 네스팅 항목이 들어갈 예정 · 두 내용 섞이면 안 됨 · 운영배포」. - 실측(운영 읽기, 백업 C:\dev\pfs\_restore\nesting_gs_2026-10-02\backup_jobs_before-0841.json·backup_alljobs_0850.json) = 두 현장 저장본은 #12 GS 안산 성포 네스팅(field 2180 · source pncad · scenes 36·32·35·34·33 · 178행 · 26.10.2 00:59:46 KST 실브라우저 POST = 페페 저장, 여유자재 5칸 손입력) · #13 GS 원주 단구 몸통 네스팅(field 2169 · pncad 37·38·39 + 팬트리 문틀 2행 · 165행 · 코디 01:11 저장/01:35·01:42 덮어쓰기) 뿐이고 둘 다 순수 PNCAD 몸통(도어·EP·휠라 등 이름 행 0 · 중복 행 0). 도어 행이 PNCAD 에 덮이거나 섞인 저장본 없음 → DB 조치 0(삭제·수정 0). 페페 07:27 KST 미니PC 브라우저로 #13 을 「도어전용」 탭에서 열었다(nginx). - 원인 = 구조: 부재 표는 「도어전용」 탭의 「1. 도어 부재 입력」 하나뿐이고 PNCAD·몸통재 「네스팅 실행」이 그 표에 넣는다 → PNCAD 저장본이 「도어 부재」 제목 아래 뜬다. 게다가 26.9.29 가져오기 모달 기본값 「기존 행 뒤에 추가」가 곧 도어+PNCAD 섞기(9.29 수정은 «소실»은 막았지만 «섞임»을 기본값으로 만들었다). - 수정(C:\dev\pfs\web\nesting\nesting.html 1파일, web-designer 처방) = askImportMode 한 곳: 표 출처(jobCtx.source)≠가져올 출처면 추가·교체 없이 「부재를 섞지 않습니다」 → 새 탭에서 열기/[취소](새 탭 = ?scenes= · 신설 ?imos=) · 같은 출처만 추가/교체/취소 · 표 제목·탭 글자 = 출처(수동 「1. 도어 부재 입력/도어전용」 · PNCAD 「1. 몸통 부재 — PNCAD 작업본/부재 표 (PNCAD)」 · imos) · 몸통재 가져오기가 source 를 안 세팅하던 것 · 초기화·샘플 = 수동 복귀 · 몸통 표에 tread JSON(도어) 차단 · 포커스 가두기 숨긴 버튼 제외. - 검증 = C:\dev\pfs\scripts\_nesting_import_keep_check.py(재작성, 옛판 …\_restore\nesting_gs_2026-10-02\_nesting_import_keep_check.0929.py) 로컬 53/53 · --test 5/5 · --prod 13/13(#12·#13 제목 PNCAD · 178/165행 · 도어 행 0 · 수동 #11 = 도어 제목 · 실화면 도어 표+PNCAD 36 = split · 취소 후 30행 그대로 · #8 불변 · 쓰기 0) · 회귀 qa5 로컬 97/102·운영 114/119, grid_modal 87/96 = HEAD 기준선과 같은 FAIL(옛 결함) · colorpanel 47/47·운영 55/55 · rename 32/32 · finishcode 21/21 · drawer 65/65 · blob 7353f928 master=deploy · 사이트맵 nesting same(미반영 1 = /field/worklog 별건). - ⏳[페페] ①#8 호반 대구 칠성 = 도어(YEN70-SG 2행)+PNCAD(11행) 혼합 저장본(9.29 복구 때 병합) — 도어/몸통 두 저장본으로 나눌지 · ②GS 마감재·도어 네스팅(C:\dev\_work\gs-finish-nesting\)은 #12·#13 에 넣지 말고 새 저장본(수동) 으로 · ③#12·#13 은 오늘 작업본 재저장(18T 선반·양면) 이전 값 — #12 는 단면 그대로(pncad handoff 영향 목록) · ④devplan C:\dev\devplan\pfs.html DONE AX 줄 = ruleguard web-designer-required 가 서브에이전트 상담을 못 봐 미삽입(문안 C:\dev\pfs\_restore\nesting_gs_2026-10-02\devplan_done_AX.txt) · ⑤web-designer 선제 제안(초기화·샘플 확인창 · 저장본 열기 확인 · #jobState 출처 꼬리 · 저장본 목록 출처 필터 · 13px 미만 잔존 5곳)은 미반영.

[코디] 🆕 26.10.2(금) — GS 대전 도마*변동 2차(수입주방) 포인 견적 787 → PFS 한샘 견적 10(form 9) 등록 + NAS 저장 — 코드 변경 0 · 운영배포 없음 (원문: archive.md 「✅ 26.10.2 · pfs-handoff-cap-1002b」)

한샘 10 = form 9(비활성) · 21칸 · 엑셀 2,010,000(787 2,014,000 대비 −4,000 만원 절사) · NAS \\192.168.0.101\공유폴더\2026현장\견적\10월\한샘\GS 대전 변동\(수입)한샘 GS 대전 도마변동 MH 견적서.xlsx · 스크립트 C:\dev\_work\gs-daejeon-doma-1002\ · ⏳[페페] ①−4,000 절사 그대로 ②787 이름 「(국산)…(2차)」 vs 비고 「수입주방」 정정 여부 ③걸레받이 0원 3줄 «무상» 행 ④부속 → FIX PANEL 블록 매핑 확인.

[코디] 🆕 26.10.1(목) — GS 대전 도마*변동(field 2175) 포인 견적 785 → PFS 한샘 견적 9 등록 + NAS 저장 — 코드 변경 0 · 운영배포 없음 (원문: archive.md 「✅ 26.10.2 · pfs-handoff-cap-1002b」)

한샘 9 = form 8(비활성) · 20칸 · 엑셀 11,880,000(785 = 11,886,000 대비 −6,000 만원 절사 · 시공비 3,500,000) · NAS …\10월\한샘\GS 대전 변동\ · 스크립트 C:\dev\_work\gs-daejeon-doma-1001\ · ⏳ = 아래 🆕 26.10.2 줄로 갱신 · ⛔NAS 교체 보류(페페 손수정본 (국산)…xlsx 있음) · 🔴운영 form 3·4 출력(한샘 6·7·8)에 결재칸 「임서현」 도장+GS 안산 도면이 실림(재발행 판단 필요). - [코디] 26.10.2 후속 3건 완료·NAS 저장(11:55 1차 최신 → 한샘 9 form 11 26,970,000 · 12:25 통합본 = 한샘 9 form 12 + 한샘 10 form 13, 28,780,000 · 12:49 v2 «엑셀만» 수입분 그룹) — 원문·⏳[페페] 전부 = archive.md 「✅ 26.10.2 · pfs-handoff-cap-1002c」(통합 ⏳①표기 「수입국내생산분」 vs 「수입국내제작분」 ②담당 ③한샘 10 보관 ④−15,000 절사 · v2 ⏳①정본 ②엔진 «그룹 블록»(코드 변경) · 1차 ⏳①~⑩).

[코디] 🆕 26.9.30(수) — GS 안산 성포(field 2180) 도면(DWG) → 현장별 자재 초안 운영 등록 — spec_no 6 · 5타입 17위치 186칸 · ⏳[페페] 검수 24건·미등록 칼라 4종 → session-2026-09-30-gs-ansan-matspec.md · devplan pfs-gs-ansan-matspec.html

[코디] 🆕 26.9.29(화) — 월마감 현장별 거래명세서 신설 — 운영 38158edc(master c7c1d099) 16:27 KST (원문: archive.md 「✅ 26.9.30 · pfs-handoff-cap-0930」)

월마감 표 각 행 [명세서] → /estimate/monthly-close/<no>/statement/<seq>(A4 1장) · 공급자 common/utils/poin_supplier.py · 업체 사업자 칸 빈 칸만 보충(한샘 1 빈칸 유지) · 운영 98행 ALL PASS · devplan pfs-monthly-close-statement.html. ⏳QC1 SSH 22 불통(26.8.27 Win11 업그레이드 이후, HM3 미러 SKIP · 복구 = projects/hm3/rules.md 「업그레이드가 SSH를 죽였다」) · ⏳사람 눈 = 실물 A4 출력 1장 + 얼마에요 원본 모양 대조.

낡은 「최종 갱신」 3줄 (handoff 맨 아래, 원문)

최종 갱신: 2026-09-16 (KST) — handoff 완료이력 3차 이관(✅ 40절 → archive.md, 113,027자→35,545자). 여기엔 NOW·확정사실·미결만 둔다. 최종 갱신: 2026-09-22 (KST) — handoff 완료이력 4차 이관(✅ 2절 → archive.md, 44,636자→43,894자). 나머지는 전부 ⏳/🔴/판단대기 등 살아있는 후속이 있어 남김(20,000자 캡 미달성). 최종 갱신: 2026-09-22 (KST) — 시드체인 규약대로 5차 이관(페페 26.9.22 지시 — 「미결이라서 남긴다」 폐기). 절 28개를 개별 session-YYYY-MM-DD-*.md 10개 신설(대다수는 기존 문서로 포인터만) + archive.md 헤더 참조로 내리고, 남긴 것은 ⒜ 확정 사실·기본 작업 시스템(불변핵심)과 ⒝ 최근 NOW 3절(26.9.22 월마감모달·Jev·네스팅서랍계산기)뿐이다. 44,028자 → 13,649자.

26.10.4 네스팅 ID칸·정렬·필터 절 원문(handoff 에서 축약)

[코디] 🆕 26.10.4(일) — 네스팅 부재 표 ID 칸 + 헤더 클릭 정렬 + 기본 ID순 + 다중/고급 필터 + 조건 세트 서버 저장(nesting_filter_set) + 정렬 모달 — 운영 완료 950ac78e→22e87c14→012c16cb→d6f10d8a→5a3dfceb (원문: archive.md 「✅ 26.10.5 · pfs-handoff-cap-1005」)

⚠한계 요지: 기존 저장본(#1~15)은 ID 없음 · 필터 중 여러 줄 붙여넣기는 필터 해제 후 표에 붙음 · 조건 세트 삭제 하드(되돌리기 없음). 검사기 C:\dev\pfs\scripts\_nesting_{rid_sort,filter,advfilter,advset_api,advset_ui,advsort}_check.py.

✅ 26.10.5 · pfs-handoff-cap-1005c · handoff 캡 이관 (네스팅 부재 표 [↔] 가로·세로 바꾸기 + 인라인 검색창)

[코디] 26.10.5 handoff 캡 관리 3차 — 「GS 원주·성포 병합」 절의 ✅ 하위 불릿 1개(2줄) 원문 이관. 아래는 원문 그대로.

✅ 26.10.5 · pfs-handoff-cap-1005b · handoff 캡 이관 (네스팅 저장본 열기 모달 폭 · 부재 표 헤더 겹침·ID 확인 표시)

[코디] 26.10.5 handoff 캡 관리 2차 — 「GS 원주·성포 병합」 절의 ✅ 하위 불릿 2개 원문 이관(같은 절의 ⏳ 애매점은 handoff 에 남김). 아래는 원문 그대로.

✅ 26.10.5 · pfs-handoff-cap-1005 · handoff 캡 이관 1절 (네스팅 부재 표 ID 칸·정렬·다중필터·고급필터·조건 세트 서버 저장·정렬 모달)

[코디] 26.10.5 handoff 캡(20,000자) 관리로 원문 이관(미결 ⏳ 없는 절). NOW 에는 요약 1~2줄만 남겼다. 아래는 원문 그대로.

[코디] 🆕 26.10.4(일) — 네스팅 부재 표 ID 칸 + 헤더 클릭 정렬 + 기본 ID순 — 운영 950ac78e(master babad95a) 19:07 KST

[페페] 「타입순으로 항목이 들어와야 하는데 작업순이 달라 한 타입이 한번에 안 보인다. 기록 순서에 항목별 id 가 있으면 컬럼 정렬 + 기본 id순. 운영배포」 - C:\dev\pfs\web\nesting\nesting.html 하나. ID 칸(순번 뒤·읽기 전용 td.ridcell, 키 rid) = tread .treadwork.json InputRows no. 두번째 파일부터 「파일-번호」(2-15) · PNCAD·몸통재·손입력·Enter 새 행 = 빈칸. newCol+pasteSkip 이라 9/11열 붙여넣기 매핑 불변. - 헤더 11칸(ID·타입·위치·두께·컬러·경면·품명·가로·세로·수량·비고) 클릭 정렬 = <tr> 이동(값·바인딩 보존) · 숫자칸 숫자비교 · 빈 값 늘 끝 · 안정 정렬(ID순 위에 타입 = 타입 안 ID순) · ▲▼ 토글 · aria-sort · Enter/Space. 토글 3칸(MDF/PB·양단면·결방향)은 제외. - 기본 ID 오름차순 = tread 가져오기·저장본 불러오기 직후(ID 없으면 손 안 댐). 행 추가·복사·드래그·Alt+Shift·붙여넣기 = 정렬 표시 초기화. rid 는 parts JSON 왕복(스키마 변경 0). - 검증: C:\dev\pfs\scripts\_nesting_rid_sort_check.py 로컬 30/30 · --prod 7/7(운영 ?job=14 열림·쓰기 0·콘솔 0) · job 14 장수 = 저장순·컬러▲▼·타입·가로▼·수량·역순 전부 31장(정렬 무관) · 기존 검사 import_keep 53/53·finishcode 21/21·colorpanel 47/47·drawer 65/65·rename_warn 32/32·grid_modal 87/96(HEAD 도 87/96 — 노후 검사기) · 사이트맵 /production/nesting same(미반영 1 = 무관한 /field/worklog). - ⚠한계: 기존 저장본(#1~15)은 ID 가 없다 → ID순이 필요하면 tread JSON 을 다시 가져와 재저장. tread 가져오기는 여전히 remark 를 안 읽는다(이번 범위 밖). 1280px 에선 표 1163px > 박스 924px 가로 스크롤(전부터 넘침, 1920 은 1178px 로 안 넘침). - 🆕 + 다중 필터 — 운영 22e87c14(master 3af17d91) 20:53 KST · [페페] 「커스텀 가능한 고급 필터 · 다중 필터 · 자재관리 필터처럼 · 운영배포」. 헤더 ▾(13칸, ID 제외) = 엑셀식 팝업(정렬↑↓·값 검색·체크+건수·필터 해제/확인, 칸끼리 AND·칸 안 OR, 후보 = 다른 칸 필터 통과 값). 숨김 = tr.pf-hide 뿐 → 네스팅·저장·자재 자동등록 전수(readGrid 무변경) · 순번 전체 기준 · 상태 메모리만 · 불러오기/가져오기/초기화/샘플 = 해제. 함정 = 붙여넣기 시 필터 먼저 해제 · 범위선택/방향키 = 숨긴 행 건너뜀 · 드래그/Alt+Shift = 필터 중 금지 · 새/복사 행은 다음 [확인]까지 보임. 헤더 좌우 padding 7→2px 로 폭 종전 이하(최소 1161→1148px, 1920 스크롤 0). - 검증: C:\dev\pfs\scripts\_nesting_filter_check.py(gitignore) 로컬 53/53(wonju 2차 232행 타입2+컬러1 → 139행 · 장수 31=31 · 저장 payload 232행 전수 · 함정 4종 · 해제 4경로) · --prod 8/8(job14 180행 → 151 → 55행, 장수 31=31, 쓰기 0·콘솔 0) · rid_sort 30/30·prod 7/7 · import_keep 53/53·finishcode 21/21·colorpanel 47/47·drawer 65/65·rename_warn 32/32 · qa5 96/102·grid_modal 87/96 = HEAD 와 동수(노후 검사기). ⚠한계: 필터 중 여러 줄 붙여넣기는 필터를 푼 뒤 표의 연속 행에 붙는다(숨겨 있던 행을 덮을 수 있음 — 안내 문구로 확인 유도). 「resetPartSort 시 해제」는 행 추가·복사가 그 경로라 적용 안 함(새 행 보이게 두기와 충돌). - 🆕 + 고급 필터 모달(조건 수동 입력) — 운영 012c16cb(master c14319a4) 21:17 KST · [페페] 「다중필터를 수동 입력해서 설정할수 있는 모달형식 필터기능도 필요하다. 처음에 요청한게 이거였어 · 기존 기능 그대로 · 운영배포」. 툴바 [고급 필터] → #advModal 조건 행 [컬럼][연산자][값]✕ · 문자 8종(trim·대소문자 무시) · 숫자칸(두께·가로·세로·수량) = ≠ > ≥ < ≤ 범위 a~b + 비어있음 2 · ID = 문자 연산자만(ridKey 숫자비교 안 씀) · 2줄+ AND/OR · ▾ 와 AND. 숨김 = partFiltOn()||advOn() · pfPass(..)&&advPass 한 길(함정·해제·안내 공유) · 상태 partAdv 메모리만 · 조건 세트 = localStorage nesting.advsets.v1(불러오기=채우기만) · ▾ 필터 가져오기(1칸만, 같음 OR) · [적용] 차단 = 빈 값(빨강)·숫자 아님·범위 꼴/순서·0행. - 검증: C:\dev\pfs\scripts\_nesting_advfilter_check.py(gitignore) 로컬 88/88(연산자 21케이스·AND/OR·▾ AND·차단 7·숨김행 저장 232행 전수·장수 31=31·함정 5·해제 4경로·세트 저장→새로고침→불러오기 무적용·480px 접힘·job14 장수 동일) · --prod 8/8(job14 180→74행, 장수 31=31, 쓰기 0·콘솔 0) · filter 53/53·prod 8/8 · rid_sort 30·import_keep 53·finishcode 21·colorpanel 47·drawer 65·rename_warn 32 회귀 0 · 사이트맵 nesting same. ⚠한계: 조건 세트는 브라우저별(PC 바뀌면 없음) · OR 결과가 전 행이면 「숨긴 0행」 표시 그대로. - 🆕 + 조건 세트 서버 저장(전사 공유) — 운영 d6f10d8a(master bc2e2e5f) 22:07 KST · [페페] 전사 공유·누구나 수정/삭제·같은 이름 덮어쓰기 확인·[서버로 올리기] 1회·운영배포. 새 테이블 nesting_filter_set(set_no PK·name VARCHAR(50) UNIQUE·conds TEXT JSON·user_no/name·modify_user_no/name·reg/modify_date, 운영 SSM 선생성 22:06 KST · 기존 테이블 변경 0) · API GET/POST /api/nesting/filter-set(같은 이름 409 code 4090 + exists → overwrite:true) · DELETE /api/nesting/filter-set/<set_no>(하드, 없으면 404). 화면 = 확인 바 #advCf(덮어쓰기·삭제·올리기 겹침 공용, confirm 0 · Esc = 바만) · 목록 「만든 사람 (고침 X) · 26.10.4(일)」 · 실패 안내+[다시 시도]. ⚠restplus Resource 에서 return jsonify(..), 409 튜플 = 500 → _json_status(). - 검증: C:\dev\pfs\scripts\_nesting_advset_api_check.py 로컬 33/33·test 30/30 · _nesting_advset_ui_check.py 로컬 32/32·test 17/17·prod 11/11(검증 세트 POST 1·DELETE 1, 운영 rows 0 확인 · 콘솔 0) · advfilter 88/88·prod 8/8 · filter 53/53·prod 8/8 · rid_sort 30/30·prod 7/7 · import_keep 53·finishcode 21·colorpanel 47·drawer 65·rename_warn 32 회귀 0 · 사이트맵 nesting same. ⚠한계: 이름 비교 = DB 콜레이션(utf8mb4_0900_ai_ci → 대소문자·악센트 무시 같은 이름) · 삭제 되돌리기 없음(하드). - 🆕 + 모달 재구성 = 정렬 기준(다단계 ▲▼) 기본 · 조건은 하단 접힘 — 운영 5a3dfceb(master 7c724a91) 22:52 KST · [페페] 「고급필터는 특정 단어 검색 포함 여부가 아닌 오름차순,내림차순 조건을 기본으로 · 지금 기능은 별도 그룹으로 하단에 · 운영배포」. 위 = [컬럼(advSortCol·정렬 가능 11칸)][오름▲|내림▼][↑][↓][✕] ≤5 · 중복 거절(목록 회색 「n순위 사용 중」) · sortParts(keys[]) 비교기 체인(헤더 클릭 = 1단계·동작 불변) · [정렬 해제] = 표시 해제 + 기본 ID순 · 열면 지금 정렬로 채움(그대로 [적용] = 재정렬 안 함) · 아래 「추가 조건 (필터)」 0개면 접힘 · [적용] = 정렬→필터(검증 막히면 둘 다 안 함) · 배지 「고급 필터 (정렬 n · 조건 m)」 · 세트 JSON sort:[{k,dir}](스키마 0 · 서버 ≤5·화이트리스트·dir ±1·중복 거절·정렬만 세트 허용·옛 세트 []). 검증 = 새 _nesting_advsort_check.py 46/46·prod 7/7 · advfilter 89/89·prod 8/8 · advset_api test 40/40 · advset_ui 32/32·test 18/18·prod 12/12(검증 세트 POST1·DELETE1 → 0행) · 운영 틀린 sort 400 ×3(쓰기 0) · filter·rid_sort·import_keep·finishcode·colorpanel·drawer·rename_warn 회귀 0 · qa5 95/102 = HEAD 동수 · job14·wonju 장수 31=31 · 사이트맵 nesting same. ⚠한계: advset_api 로컬 모드는 이 PC venv(py3.9 werkzeug)로 Flask 앱 생성 불가 → test 서버로 대체.

✅ 26.10.2 · pfs-handoff-cap-1002c · handoff 캡 이관 1절 (GS 대전 도마변동 1차 후속 3건 — 11:55 최신·12:25 통합본·12:49 v2)

[코디] 26.10.2 handoff 캡(20,000자) 관리로 원문 이관(GS 안산 성포 한샘 6 재제작 절 추가분 상쇄). NOW 에는 요약·⏳ 포인터 1줄만 남겼다. 아래는 원문 그대로. 부모 절 = [코디] 🆕 26.10.1(목) — GS 대전 도마*변동(field 2175) 포인 견적 785 → PFS 한샘 견적 9 등록 + NAS 저장 — 코드 변경 0 · 운영배포 없음 (원문: archive.md 「✅ 26.10.2 · pfs-handoff-cap-1002b」)

✅ 26.10.2 · pfs-handoff-cap-1002b · handoff 캡 이관 4절 (GS 대전 도마변동 2차(한샘 10)·1차(한샘 9) · 롯데 화성 향남 · 에넥스 9월 마감)

[코디] 26.10.2 handoff 캡(20,000자) 관리로 원문 이관(GS 원주·성포 마감재 네스팅 NOW 추가분 상쇄). NOW 에는 상태·미결 포인터 1~2줄씩만 남겼다. 아래는 원문 그대로.

[코디] 🆕 26.10.2(금) — GS 대전 도마변동 2차(수입주방) 포인 견적 787 → PFS 한샘 견적 10(form 9*) 등록 + NAS 저장 — 코드 변경 0 · 운영 DB 등록만(배포 없음)

[페페] 「2차 본건 작성(수입주방분, 국내생산=1차) · 현장매치 1:1 규칙 때문에 2차 견적서로 생성 · 한샘 엑셀 변환 · 나스 10월 한샘 폴더 · 운영배포」. 787(읽기만) = 59A·84A·84B 24줄(가림판·보강판·상부합판·9T쫄대·안정기함·휠라·아일랜드 멍장·벽판넬 · 하위내역 0 · 식세기 걸레받이 3줄 0원 무상) 1,814,000 + 운반비 200,000 + 시공비 0 = 2,014,000. - form 9(비활성) = form 4 를 3평형(슬롯 77·84A·84B → 탭 59A·84A·84B 로 양식에서 미리 개명)·주방전용으로 깎은 787 전용판(84C·내역서-수·도면·「임서현」 도장 삭제 · 운반비 200,000 · 시공비 0 · S6 2026. 10. 02). 스크립트 C:\dev\_work\gs-daejeon-doma-1002\(make_form_suip.py · hansem_suip.py PLAN/FORM/REGISTER/EXCEL · verify_suip.py · nas_put_suip.py). - 한샘 10 「(수입)GS 대전 도마변동 MH 한샘 견적서 (2차)」 · 담당 서예진 사원 · 21칸 · 서버총액 1,815,229 · 블록 = 상부장(안정기함)·하부장(멍장)·하부 FIX(가림판)·키큰 FIX(보강판·상부합판·쫄대·휠라·벽판넬, 선례 한샘 4·8) · 길이 = 주 치수×수량 · 등급 A · 도장 휠라 = 08 무광도장 · 적용률 올림. 걸레받이(0원)는 미적재. - 엑셀(LO 재계산) = 내역서 1,815,229 → 만원 절사 1,810,000(−4,000) + 운반비 200,000 = 2,010,000(포인 2,014,000 대비 −4,000 = 갑지 만원 절사) · 운영 다운로드 = 로컬 빌드와 파트 차이 0 · _xlcheck 결함 0 · 흔적 0. 785·787·한샘 9·form 1~8 불변(스냅샷 C:\dev\_bench\gs-daejeon-doma-1002\). - NAS \\192.168.0.101\공유폴더\2026현장\견적\10월\한샘\GS 대전 변동\(수입)한샘 GS 대전 도마변동 MH 견적서.xlsx(93,986 B, 되읽기 바이트 일치) · 페페본 (국산)…xlsx(102,557 B) 그대로. - ⏳[페페] ①−4,000 절사 그대로(1차 ①과 같은 질문) ②787 이름 「(국산)…(2차)」 vs 비고 「수입주방」 — 정정 여부(포인 견적은 안 고침) ③걸레받이 0원 3줄을 «무상» 행으로 엑셀에 넣을지 ④부속 → FIX PANEL 블록 매핑 확인.

[코디] 🆕 26.10.1(목) — GS 대전 도마변동(field 2175) 포인 견적 785 → PFS 한샘 견적 9* 등록 + NAS 저장 (10월 마감건) — 코드 변경 0 · 운영배포 없음

[페페] 「포인 견적서 한샘 견적서 양식으로 등록 · 나스 저장 · 10월 마감건 · 운영배포」. 785 = 84A 3줄(장식장 상부장 932,000 · 장식장 하부장 1,061,000 · 주방 팬트리도어 599,000, 하위내역 5건 1,114,575 포함) + 시공비 900,000 + 운반비 200,000 = 3,692,000. - 한샘 견적 9(form 5 · 84A 1탭 · 8칸 · 서버총액 2,592,118) — 블록 = 상부장·하부장·공틀도어, 하위내역(유리도어×4·EP·3면EP×3·벽체EP·EP×2)은 같은 블록 세트 칸 · 등급 A + 적용률 올림 역산. - form 5(비활성) = form 4 를 1평형·주방전용으로 깎은 이 견적 전용판(슬롯 3개·GS 안산 도면·결재칸 「임서현」 도장 삭제 · 운반비 200,000 · 시공비 900,000 박음). 생성기 C:\dev\_work\gs-daejeon-doma-1001\make_form5.py · 등록 hansem_reg.py(PLAN/FORM/REGISTER/EXCEL). - 엑셀(LO 재계산) = 본오더 2,592,118 → 만원 절사 2,590,000(−2,000) + 운반비 200,000 = 생산비 2,790,000 · 시공비 900,000 → 3,690,000(포인 3,692,000 대비 −2,000 = 갑지 만원 절사, rules L29). 운영 다운로드 = 로컬 빌드와 파트 차이 0 · _xlcheck 결함 0. - NAS \\192.168.0.101\공유폴더\2026현장\견적\10월\한샘\GS 대전 변동\한샘 GS 대전 도마변동 MH 견적서.xlsx(82,729 B, 되읽기 바이트 일치). 전후 스냅샷 C:\dev\_bench\gs-daejeon-doma-1001\(785 불변 확인). - 🆕15:17 KST [페페] NAS 엑셀 시공비 1,200,000 으로 직접 수정(+담당 S10 「문희라 과장님」→「서예진 사원」) → PFS 반영: 785 마스터 3칸만 DB UPDATE(시공비 1,200,000 · total/margin_total 3,992,000, PUT 안 씀 · 상세 3·하위 5 불변) · 한샘 9 form 5→form 6(AG26 만 1,200,000, 비활성) · 운영 재다운로드 = NAS 페페본과 S10 1칸 외 동일(생산비+시공비 3,990,000). ⏳[페페] 담당 서예진 사원을 한샘 9 manager_name 에도 넣을지(미반영). 스크립트 pfs_update.py·make_form6.py·verify_cons.py. - 🆕15:48 KST [페페] 「일반가구 추가로 포인 견적 최신화 · 시공비 인원 늘어 금액 증가 · 한샘 엑셀 재생성」 → 785(읽기만) = 주방 3 + 일반 5줄(신발장·현관 팬트리도어·파우더장·드레스룸 도어·침실3 붙박이장, 하위 12건) · 운반비 400,000 · 시공비 3,500,000 · 11,886,000 → 한샘 9 = form 7(form 6 + 정본 수납 갑지·84A 내역서-수 이식 make_form7.py) · 20칸 · 담당 서예진 사원 · 앱 경로 POST 갱신(delete-insert, 고아 0) hansem_v2.py → 엑셀 생산비 8,380,000(주방 2,990,000 + 수납 5,390,000) + 시공비 3,500,000 = 11,880,000(−6,000 = 주방 −2,000·수납 −4,000 만원 절사) · NAS 새 파일 …\GS 대전 변동\한샘 GS 대전 도마변동 MH 견적서(일반가구 추가).xlsx(89,505 B, 바이트 일치 · 1차 페페본 92,217 B 그대로). - 🆕16:45 KST [페페] 「수납 명세서에도 자재비·운반비·절사 행(기본양식)」 → form 8(수납 갑지 22~24 기타 + 25 소계 복원, 주방과 대칭, 값 빈칸) · 한샘 9 form_no 7→8(DB 1칸, 상세 20줄 불변) · 운영 엑셀 11,880,000 그대로(_xlcheck 0 · 흔적 0). ⛔NAS 교체 안 함 — 우리 「(일반가구 추가)」 파일과 1차 페페본이 폴더에서 사라지고 페페 손수정본 (국산)한샘 GS 대전 도마변동 MH 견적서.xlsx(102,494 B, 16:42, Excel 열림)만 있다. 그 파일과 우리 form 8 출력 차이 = 수납 기타 값(페페 0 / 우리 빈칸) · 수납 합계 =O21(값 같음) · 20행 절사 위치(페페 L열 / 우리 A:N 병합). - ⏳[페페] ①−2,000 절사 그대로 둘지 ②시공비 거래명세서(2.시공비…) 따로 만들지 ③10월 한샘 월마감(아직 없음)에 담기 ④도어 행 비움(재질 미확인). 🔴덤 발견 = 운영 form 3·4 출력(한샘 견적 6·7·8)에 결재칸 「임서현」 도장 + GS 안산 성포 도면이 그대로 실린다(7·8 은 타 현장 도면) — 재발행 여부 판단 필요.

[코디] 🆕 26.9.28 — 롯데 화성 향남 MH 본건(779)+추가1(780) 한샘 양식 엑셀 — 6차까지 완료 (원문: archive.md 「✅ 26.9.29 · pfs-handoff-cap-0929」)

최종 = 한샘 협의 총 90,000,000(VAT 별도) · 시공비 11,300,000(지엠테크 명세서) · PFS 779/월마감 20 동일 반영 · NAS …\견적\09월\한샘\롯데 화성 향남\ · 코드 변경 0. 🔴779 PUT 이 하위내역 69줄을 지움(복구함, rules 🆕). ⏳[페페] 한샘 견적 8(PFS 한샘 전용 견적, 780 만 540,239) 처리 판단 대기. - [코디] 26.9.30 ACC룸 추가건 엑셀 = 6,540,000(VAT 별도) · NAS …\09월\한샘\롯데 화성 향남\한샘 롯데 화성 향남 MH 견적서(추가_ACC룸).xlsx · PFS·기존 파일 불변. ⏳[페페] 본건 파일(90,000,000)에 ACC룸(6,702,000)이 아직 포함 = 이중청구 위험 → ①본건에서 ACC룸 뺀 새 본건(추천) ②추가건 6,702,000 기준 재작성 ③그대로. (상세 원문: archive.md 「✅ 26.10.1 · pfs-handoff-cap-1001」)

[코디] 🆕 26.9.28 — 에넥스 9월 월마감(close_no 21) 완료 — 현재 23,694,000(26.9.30) (원문: archive.md 「✅ 26.9.29 · pfs-handoff-cap-0929」)

✅ 26.10.2 · pfs-handoff-cap-1002 · handoff 캡 이관 2절 (견적서 목록 보류 요약 · worklog Jev 폴백 측정 결론)

[코디] 26.10.2 handoff 캡(20,000자) 관리로 원문 이관(GS 대전 도마변동 2차 수입주방 절 추가분 상쇄). NOW 에는 상태·미결 포인터 1줄씩만 남겼다. 아래는 원문 그대로.

[코디] ⏸ 26.9.28 — 견적서 목록(/estimate/list-v2) 개선 — 보류([페페] 「나중에 하자, 시드 기록만. 추후 다시 물어볼게」)

[페페] 지시 = 견적서 목록 우측 버튼 정리 + 금액 세분화 폴딩. ✅결정 = 주방·일반 수량 컬럼 숨김. (지시 원문 archive.md 「✅ 26.10.1 · pfs-handoff-cap-1001」) - ⏳그릴링 1차 미답(코디 추천 = 전부 A): Q1 버튼 = N차·수정·출력만 노출 + 「더보기 ▾」(+추가건·추가건 엑셀·재작성·삭제[빨강 맨 아래]) / B 아이콘 / C 2줄 · Q2 펼침 = 모든 본건 행 / B 추가건 있는 행만 · Q3 금액칸 = 「견적금액」(본건) 유지 + 「총합(본건+추가)」 칸 추가 / B 의미 변경 / C 그대로. - 2차 예정 질문 · 코드 사실(estimate_list_v2.html L556~580 · monthly_close_service.get_estimates 재사용) · 착수 시 web-designer 상담+코덱스 상의+devplan 신설 — 원문 archive.md 「✅ 26.10.1 · pfs-handoff-cap-1001」

[코디] 🆕 26.9.22 — worklog 추정현장 자동연결에 Jev 판정모델 폴백 — 26.9.23 오프라인 측정 완료 → 구현 보류(코드 0줄) · ⏳[페페] 선택

🔴[코디] 26.9.23 측정 결론(D1) = 안 켠다. Jev 실호출 723회 · 입력 575,667토큰(≈$0.024) · 429/401 0. 운영 DB 읽기전용 재현 = 묶음 1,097 · 보류 686. (Jev 측정 상세·설계 당시 원문·Jev 얼리액세스 체크리스트 = archive.md 「✅ 26.10.1 · pfs-handoff-cap-1001」 · session-2026-09-23-worklog-jev-measure.md · devplan pfs-worklog-jev-autolink.html)

✅ 26.10.1 · pfs-handoff-cap-1001 · handoff 캡 이관 (롯데 ACC룸 · 에넥스 784 · 견적서 목록 보류 상세 · worklog Jev 설계 원문 · ✅ 2건 · 완료 소항목 34줄)

[코디] 26.10.1 handoff 캡(20,000자) 관리로 원문 이관(GS 대전 도마변동 절 추가분 상쇄). NOW 에는 요약·⏳미결 줄만 남겼다. 아래는 원문 그대로.

[이관 원문] 롯데 화성 향남 ACC룸 추가건 엑셀(26.9.30)

[이관 원문] 에넥스 9월 월마감(21) 상세 2건(781~783 · 라인 VIP 추가2 784)

[이관 원문] 견적서 목록 개선 보류 — 지시 원문·결정

[페페] 지시 원문 = 「오른쪽 버튼 메뉴가 너무 많아 한 폭에 다 안 보인다 · 항목별 폴딩/펼침으로 금액 세분화 — 본건, 추가건별, 각각 시공비, 분할 금액, 합산 금액을 단계별로 체계화 · 운영배포」. - ✅결정 1건 = 주방·일반 수량 컬럼 숨김([페페] 「중요하지 않다, 숨김해도 된다」).

[이관 원문] 견적서 목록 개선 보류 — 2차 질문·코드 사실

[이관 원문] worklog 추정현장 Jev 폴백 — 측정 상세·설계 원문

설계 임계 0.90 에서 보류분 자동연결 0건(변형 5종·모델 2종 8회 전부) — 정답 p 0.45~0.93 / 오답 p 0.43~0.85 가 겹쳐 오연결 없는 임계가 없다. 패널 칩 0.60 정밀도 16/29(55%). 대표 오답 = 「의정부 현장」 강동식 통화 → GS 의정부(2023) 0.85. 「해당없음」 p≥0.90 정밀도 94.6%(263/278). 「정답 라벨이 DB에 있다」도 틀렸다(site_name 보존 쌍 14쌍/19건). 판단 ① 은 이미 해소(26.9.22 A안 _PANEL_MIN_SCORE=80·커버 0.6 운영 반영 확인). ⏳[페페] 선택 = ①보류(추천) ②「해당없음」 p≥0.95 묶음을 숨김 검토 목록으로(새 기능·그릴링) ③설계대로 꺼진 채 구현(비추천). 상세 = session-2026-09-23-worklog-jev-measure.md · devplan §12 · 증거 C:\dev\_work\jev\worklog-measure\. 아래는 설계 당시 원문.

[페페] 「Jev 를 내 자산에 클로드와 융합」 → 그릴링 Q1 = A(worklog 우선) · Q2 = A(보류 679 전체). 🔴실측이 전제를 뒤집었다 — 운영 dry = 묶음 1,087 / 자동연결 0 / 후보없음 408 / 보류 679(주석의 「81%」는 틀렸다, 실제 100% 미연결). 그래서 오히려 안전하다 = Jev 가 망칠 기존 동작이 없다. 범위를 weak(6%) → 보류 679 전체로 넓힌 이유도 이것. ✅한국어 스모크 3/3(키 없이 playground) · ✅키·엔드포인트 실측 확정(공식 api.typesafe.ai, model 필수 · 게이트웨이는 401) · ✅실호출 = choice 0.950 / conf 0.94 / 470토큰. 🔑해당없음 옵션이 오연결 방어의 전부(코덱스 지목 최대 사고를 그게 잡는다). 설계 = _jev_choice(HTTP) · _jev_verdicts(저장) · _ai_rank(순위 바꾸는 유일 함수 — 모달 후보와 패널 칩 0번이 항상 같아야 한다는 기존 모순금지 조항). 폴백 철칙 = 키 없음·오류·예외 전부 「오늘과 완전히 동일」 + 10분 브레이커 → 키를 빼는 것이 킬스위치. ⚠자동연결 UPDATE 가 site_name 을 덮어써 오연결 시 원본이 사라진다 → 감사로그 detail 에 원 site_name·worklog_nos 필수(유일한 복원 경로). 🔑정답 라벨이 이미 DB 에 있다 — 패널 단건 클릭은 site_name 을 보존하므로 그 쌍이 사람이 만든 정답 = 임계 측정 재료. ⏳[코디 체크] 26.9.23 Jev = 얼리액세스(26.9.15~) 단계 — [페페] 「코디가 요청한 결제 API 인가 뭐가 있었는데 얼리액세스라 그런 것 같다」. 결제는 공식 콘솔 https://console.typesafe.ai/ 크레딧 선불뿐이고 결제 화면 미확인(로그인 필요). Jev 작업 재개 시 먼저 확인: ①콘솔에 크레딧·결제 메뉴가 열렸는지(페페 화면 캡처) ②GET https://api.typesafe.ai/v1/models 로 키 살아있음·잔여 크레딧 ③안 열렸으면 hello@typesafe.ai 문의 또는 무료/프로모 크레딧 한도 안에서만 임계 측정. ⛔비공식 jev-agent.com·jev-ai.pro·jevtypesafeai.com·jevplayground.com 결제 금지. 운영 반영은 유료 크레딧 확보가 전제. 함정 2건 = rules.md 🆕 맨 위 · devplan C:\dev\devplan\pfs-worklog-jev-autolink.html · 증거 = C:\dev\_work\jev\

[이관 원문] 진행중 ✅ 2건(/field/regist 자동완성 · 네스팅 partWrap 폭)

[이관 원문] 완료 소항목 34줄(제목만)

부자재 발주서 QA 2차: 현장검색 안 잡힘 — 운영 b084520 완료 (상세: projects/pfs/archive.md)

네스팅 QA 2건: 컬러패널 인라인수정·두께상충경고 — 운영 a09f365 완료 (상세: projects/pfs/archive.md)

네스팅 드롭리스트 「셀 우측 동일라인」 펼침 — 운영 8873334 완료 (상세: projects/pfs/archive.md)

생산현황 출력 메모칸 세로2분할+미입고보드 — 운영 d535760 완료 (상세: projects/pfs/archive.md)

네스팅4차: 부재표 우측 「사용컬러」 패널 — 운영 9d3c601 완료 (상세: projects/pfs/archive.md)

배차 요율감시 수리(Actions→미니PC 이전) — 완료, 운영배포 없음 (상세: projects/pfs/archive.md)

네스팅3차: 드롭토글·행드래그·컬럼폭+비고칸 — 운영 975ccad 완료 (상세: projects/pfs/archive.md)

네스팅2차: 상단고정·컬러구분색·datalist폐기 — 운영 60b1eb4 완료 (상세: projects/pfs/archive.md)

네스팅 QA 5건(버튼줄·제목·칼라DB·Enter점프·계산기) — 운영 de24c6f 완료 (상세: projects/pfs/archive.md)

에넥스 발주서 변환복구(.xlsx전환+사이드카워치독) — 운영 5f2c383 완료 (상세: projects/pfs/archive.md)

GS 원주 단구 한샘견적서 84A(기본) 추가+부자재분리 — 운영 5d9bd2f+7cb6ea1 완료 (상세: projects/pfs/archive.md)

발주서 정리 탭 모바일 전용 레이아웃 — 운영 12e8efb 완료 (상세: projects/pfs/archive.md)

포인↔한샘 매칭표 비교축 재정리(추가금액 분리) — 완료 (상세: projects/pfs/archive.md)

생산현황 출력 미확정헤더제거·아이비젼축약·여백50% — 운영 198744d 완료 (상세: projects/pfs/archive.md)

업체 필터 「봉적」 버튼 추가 — 운영 3cdd6e6 완료 (상세: projects/pfs/archive.md)

넥서스→한샘 자동전환+신영광주 추가2·3 — 운영 dfd1435 완료 (상세: projects/pfs/archive.md)

파레트용지 한샘로고 NEXUS 제거 — 운영 2fb811f 완료 (상세: projects/pfs/archive.md)

생산현황 상차일미확정 프레임+자동완성차단 — 운영 53c4391 완료 (상세: projects/pfs/archive.md)

/admin/user 검색칸 크롬 자동완성 재발차단 — 운영 98c4841 완료 (상세: projects/pfs/archive.md)

시트·보드 모바일 줄밀림 수정 — 운영 cfbb5db 완료 (상세: projects/pfs/archive.md)

오엠씨 3페이지 모바일 표 A안 — 운영 624b63c 완료 (상세: projects/pfs/archive.md)

오엠씨 모바일목업 폐기+메뉴 업체별그룹 — 운영 dcad1d9 완료 (상세: projects/pfs/archive.md)

아이비젼글로벌 현장유형=AS 재전환 — 운영DB 반영 완료 (상세: projects/pfs/archive.md)

현장목록 유형관리 모달+상차일 KO — 운영 2507c20 완료 (상세: projects/pfs/archive.md)

QA 3건(검색자동완성·모바일사이드바·월마감폭) — 운영 690bb89 완료 (상세: projects/pfs/archive.md)

「생산자동화시스템」→PFS 전면교체 — 운영 ddd9135 완료 (상세: projects/pfs/archive.md)

사이드바 로고=PFS(텍스트) — 운영 12338c8 완료 (상세: projects/pfs/archive.md)

모바일 햄버거 항상 3줄 — 운영 0434506 완료 (상세: projects/pfs/archive.md)

상세모달=코디 정리본(kb_digest) — 운영 30cf5af 완료 (상세: projects/pfs/archive.md)

업체 전용 현장목록 모바일 3차 — 운영 6e7c8f9 완료 (상세: projects/pfs/archive.md)

업체 전용 현장목록 2차 — 운영 168f21d 완료 (상세: projects/pfs/archive.md)

업체 전용 현장목록 QA 6건 — 운영배포 완료 (상세: projects/pfs/archive.md)

발주서정리 원자재→부자재 오분류 수정 — 운영배포 완료 (상세: projects/pfs/archive.md)

AWS 비용절감 Phase A·B — RDS-test→Docker 이전 + RI 구매 (26.8.6~8.7) — 완료 (상세: projects/pfs/archive.md)

✅ 26.9.30 · pfs-handoff-cap-0930b · handoff 캡 이관 2절 (AL발주서 차수 탭 + 미결 포인터 7줄 · GS 안산 성포 한샘양식 A~G)

[코디] 26.9.30 handoff 캡(20,000자) 관리로 원문 이관(GS 안산 성포 현장별 자재 절 추가분 상쇄). 포인터 줄의 상태·카운터는 원문 그대로 — mem_find.py --text 미결 --project pfs 로 회수. GS 안산 성포 포인터는 handoff 「26.9.30 — GS 안산 성포 … 현장별 자재 초안」 절로 옮겼다.

[코덱스] 🆕 26.9.21 — AL발주서 차수 탭·행선택 복사/이동 — 완료 (상세: archive.md 「✅ 26.9.21(월) KST · pfs-al-orderpaper-round · [코덱스] AL발주서 차수 탭·행선택 복사/이동 (운영 c02bd4f)」)

GS 안산 성포 한샘양식 재작성 A~G — 운영등록 estimate_no=6 완료 (상세: projects/pfs/archive.md)

(당시 미배포였던 api/pfs/hansem/ 는 26.9.9 세션에서 운영배포 완료 — 아래 GS 원주 단구 절 참조)

✅ 26.9.30 · pfs-handoff-cap-0930 · handoff 캡 이관 1절 (월마감 현장별 거래명세서)

26.9.30 handoff 캡(20,000자) 관리로 원문 이관. 미결(⏳)은 handoff 요약에 남김.

[코디] 🆕 26.9.29(화) — 월마감 현장별 거래명세서 신설 — 운영 38158edc(master c7c1d099) 16:27 KST

[페페] 운영 월마감 검증보고 「현장별로 거래 명세서 양식 … 포인 사업자 등록 정보를 넣어서. 봉적은 제품출고 되면 해당 현장 거래명세서를 요청한다」 · 그릴링 Q1~Q3=A · 채팅 「운영배포」. - 월마감 표 각 행 [명세서] → 새 탭 /estimate/monthly-close/<no>/statement/<seq>(A4 1장, 브라우저 인쇄, 일자 기본 = 현장 출고일, 표기 「2026년 9월 29일」). API /api/monthly-close/<no>/statement/<seq>. 줄 = 현장명·본건·추가N(추가분)·시공비(한샘형)·금액 조정(수기 합계)·NEGO, 세액 줄마다 10% 절사. 공급자 = common/utils/poin_supplier.py(견적서 공용, 출력 회귀 0). 규칙 = rules.md 🆕 26.9.29. - 업체관리 사업자 칸 «빈 칸만» 보충(얼마에요 ERP 미러 (localdb)\HM3, 26.8.27 기준): 봉적 445 = 128-81-18132 김형천 파주 봉암길 244 · 에넥스 4 = 220-81-31765 박진규,송성수 · 넵스 5 = 893-81-03728 김호균 · 아이비젼글로벌 452 = 695-02-01209 + 주소. 한샘 1 = 빈칸 유지([페페] 결정 — 한샘넥서스 114-81-68690 ↔ 한샘 법인 불명확). 백업 C:\dev\_bench\monthly-close-statement\company_before.json. - 검증 = 자체검사 테스트 72행 · 운영 98행 ALL PASS(NEGO 39·시공비 42·금액 조정 8) · 마감 21 대우 용인 2,105,000 / 210,500 / 2,315,500 일치 · 견적서 출력 전후 동일(테스트 3·운영 4건, data JSON + 엑셀 시트 XML) · Playwright(테스트 13·14, 운영 21) PDF 1쪽·13px·저장 전 막기·행 순서 경고·JS 오류 0. 사이트맵 60→61쪽, 미반영 1(/field/worklog, 남의 건). devplan pfs-monthly-close-statement.html. - ⏳QC1 SSH 22 불통 — 26.8.27 Win11 업그레이드 이후(HM3 미러 동기화 C:\dev\hm3\sync.log SKIP 지속, 마지막 OK 26.8.27 17:53 KST). poinimos01 경유도 22 닫힘·445 열림, poin912 SMB 로는 C:\Users\main\Desktop\매출마감\ ACCESS_DENIED → ERP 원본 대조·거래명세서 PDF 사본 못 받음. 복구 = projects/hm3/rules.md 「업그레이드가 SSH를 죽였다」(main 자격 필요). - ⏳사람 눈: 실물 A4 출력 1장(도장·머리글/바닥글) · 얼마에요 원본 출력본과 모양 대조.

✅ 26.9.29 · pfs-handoff-cap-0929 · handoff 캡 이관 4절 (네스팅 #8 복구 · 롯데 화성 향남 6차 · 에넥스 9월 마감 · 발주서 dedupe Jev)

26.9.29 handoff 캡(20,000자) 관리로 원문 이관. 미결(⏳)은 handoff 요약에 남김.

[코디] 🆕 26.9.29 — 네스팅 저장본 #8(호반 대구 칠성) YEN70-SG 도어 소실 복구 + 가져오기 덮어쓰기 수정 — 운영 5fd14421(master e784497b)

[페페] QA 15:09 「yen70-sg 칼라 넘버로 작성한 내용이 사라지고 pncad 작업본 내용이 테이블을 덮었다. 복구·운영배포」. 원인 = 화면 경로(코디 스크립트 아님): nginx 로그 08:31:09 PUT #8(도어) → 08:31:17 PNCAD 실행이 부재 표를 확인 없이 통째 교체 → 08:31:23 저장 기본값 「덮어쓰기」로 #8 소실(nesting_job 이력 없음). 복구 = RDS PITR 별도 인스턴스 pfs-pitr-nest8-0929(08:31:15 KST)에서 원본 읽어 병합(도어 2행 + PNCAD 11행 = 13행, 15:33 KST) · 백업/스크립트 C:\dev\pfs\_restore\nesting_job8_2026-09-29\(--rollback 가능). 수정 = 입력 있으면 추가(기본)/교체/취소 모달 · 교체·초기화 뒤 저장 기본값 「새 작업」+경고 · 0건이면 표 유지. 검사 C:\dev\pfs\scripts\_nesting_import_keep_check.py 로컬 39/39 · --prod 12/12. ⏳PITR 인스턴스 삭제 승인 대기(stopped) · ✅칠성 원부자재 발주서 도어 누락 해결 → 16:22 KST 3차(페페 답변 반영: 오엠씨 YEN70-SG/유사PP 18T MDF 1 · 길동상사 펫시트 20m→오엠씨 + A4샘플→선재기업(주소 진영LDM) · 도어엣지 100m · EM738 피앤알 양면 15T 3·3T 1 + 한솔 PP시트 40m · EM738 18T 1매·엣지 제외(PNCAD 오류 확인 중) · 스티커 4). 사본 NAS 09월\_백업\…_v1백업/_v2백업.xlsx. ⏳운영 동기화 시 stock(재고량) 칸이 자리 기준 UPDATE 로 어긋남 · 상세 projects\pfs\session-2026-09-29-chilseong-wonbujae-order.md 「3차」.

[코디] 🆕 26.9.28 — 롯데 화성 향남 MH 본건(779)+추가1(780) 한샘 양식 엑셀 1개 — 3차 완료·NAS 교체 (1·2차 원문·3차 상세: archive.md 「✅ 26.9.28 · pfs-hansem-hwaseong-combined」)

NAS \\192.168.0.101\공유폴더\2026현장\견적\09월\한샘\롯데 화성 향남\한샘 롯데 화성 향남 MH 견적서(본건+추가1).xlsx = 주 5평형·수 4평형 실명 탭 · 하위내역 세트 노출 · 780 수납 174,000 분리 · 운반비 900,000(배차 7건 비율) → 생산비 76,831,000 · 시공비 19,000,000 · 총 95,831,000(1원 일치, LO 재계산). 빌드 = C:\dev\_work\hansem-hwaseong-combined\build_v3.py. 규칙 = projects/hansem-estimate/rules.md 🆕 26.9.28 5줄. 🆕4차(26.9.28) [페페] 「본건은 넥서스 제출본(\\192.168.0.101\공유폴더\2026현장\견적\08월\넥서스\롯데 화성 향남\넥서스 롯데 화성 향남 MH 견적서 (2차) 견적서.xlsx, 95,180,000) 기준 · ACC룸+84A(개선) 한 탭 · 큰제목 행 구분 · 금액 합산」 → 본건 가구 75,580,000(PFS 779 대비 +189,000, 120·84A(개선) 주방 11항목 금액 다름 — 하위내역은 PFS 값, 차액은 본체 칸) · 주방 4평형(84A(개선) 탭 = 「■ 개선세대」 4~52행 + 「■ ACC룸」 큰제목 53행 + 54~102행 블록 한 벌, 총합 O103) → 생산비 77,020,000 · 총 96,020,000(1원 일치, LO 재계산) · NAS 교체(이전본 _before_v4.xlsx). 빌드 = build_v4.py(+lo_prep_v4.py). ⚠PFS 779 는 제출본과 11항목 금액이 다르다(수정 안 함). 🆕5차 [페페] 「+189,000 조정해 원래 총액 95,831,000 으로 · 본건 세부 수정 가능 · 추가건 유지」 → 본건 금액 = PFS 779 항목값(75,391,000 · 구성·규격·ACC 통합 탭은 제출본) · 갑지 주/수 = 84B 6,372,000/7,429,000 · 84C 8,033,000/9,652,000 · 120 9,210,000/12,106,000 · 84A(개선)+ACC 13,029,000/9,560,000 → 생산비 76,831,000 · 총 95,831,000(LO 재계산 일치) · NAS 교체(이전본 _before_v5.xlsx). 🆕6차 [페페] 「한샘 협의 총 90,000,000(VAT 별도) · 시공비 = 지엠테크 시공비 거래명세서 총액 · 나머지는 본건 가구 · PFS 한샘 견적·월마감 동일 반영」 — ①이전본 NAS …\롯데 화성 향남\한샘 롯데 화성 향남 MH 견적서(본건+추가1)_포인 견적 최종비용.xlsx 백업 ②시공비 = \\192.168.0.101\공유폴더\2026현장\견적\09월\한샘\시공 지엠테크\시공비 거래명세서 롯데건설 화성향남 MH.xlsx 합계 11,300,000 ③본건 가구 = 78,700,000 − 추가 540,000 − 운반비 900,000 = 77,260,000(779 항목 비례 ×1.0248, 1,000원) → 엑셀 생산비 78,700,000 · 총 90,000,000 NAS 교체(build_v6.py, 이전본 _before_v6.xlsx) ④PFS 견적 779 = 상세 56줄 금액(원가 유지·마진에 차액) · 시공비 11,300,000 · 운임 600,000 → total 89,160,000(+780 840,000 = 90,000,000) ⑤월마감 20 롯데 = 본건 77,860,000 + 추가 840,000 + 시공비 11,300,000 = 90,000,000 · 확정 90,000,000(다른 5행 불변). 🔴779 PUT 이 하위내역 69줄을 지웠다 → 즉시 복구(rules 🆕). 코드 변경 0 → 운영배포 없음. ⏳[페페] 한샘 견적 8(PFS 한샘 전용 견적, 780 만 540,239) 처리 — 판단 대기.

[코디] 🆕 26.9.28 — 에넥스 9월 월마감(close_no 21) = 30,258,000 완료 · 대우 용인 추가1 781 · 금호 구미 추가1 782 (1~11차 원문: archive.md 「✅ 26.9.28 · pfs-enex-close-2026-09」)

[코디] 🆕 26.9.23 — 발주서 dedupe 경계만 Jev · intake-check 명세서 대조 Jev 섀도 (분배 D2)

[페페] 「진행 … api 실제 사용해봐라」. ①dedupe R1 경계(날짜 다른 부분집합·규칙이 살린 같은 탭 같은 발주처 블록)만 Jev noul — NAS 정리 전 재구성 37블록 측정에서 별도 발주 7블록(피앤알 7.9·효산 9.16 포함) p 0.06~0.16, 중복 0.82~0.98, 애매 1건 0.53 → 살리고 확인 목록+텔레그램. Jev 는 규칙보다 더 빼지 않는다. 동기화 PC 작업본에 즉시 적용 — 현재 NAS 결과 규칙만일 때와 동일(18블록/40항목·확인 0). pfs bd9c790. ②intake-check 규칙 애매 품목에 Jev choice(+해당없음) — 과거 명세서 23장 재판독 × 운영 행 재생 = 규칙 12 + Jev 28(28/28 정답). 운영 PATCH 라 섀도(원장 jev_shadow·텔레그램만). tools 33e4209. ✅[페페] 「반영 켜라」 → 켬(tools a0d35ef · 다음 16:30 실행부터 · 원장 applied[].jev_p 로 구분 · 끄기 = JEV_APPLY=False/--no-jev). ⏳코디 = 첫 Jev 반영분 verdict 대조. 상세 = projects/pfs/session-2026-09-23-orderpaper-jev.md · devplan pfs-orderpaper-jev.html.

✅ 26.9.28 · pfs-enex-close-2026-09 · 에넥스 9월 월마감(21) + 대우 용인 781 · 금호 구미 782 (1~11차)

26.9.28 handoff NOW 에서 원문 이관(캡 관리). 미결은 handoff 요약에 남김.

[코디] 🆕 26.9.28 — 에넥스 9월 월마감(close_no 21) + 대우 용인 AS 추가1 = 견적 781 (운영 데이터 · 코드 변경 0)

[페페] 「에넥스 9월 월마감 작성. 본건은 마감했고 추가건 파일 새로 견적서 작성. 추가건 1차로 본건 하위에 등록하고 월마감까지」 → 결정 = 자료 \\192.168.0.101\공유폴더\2026현장\진행중\8월\AS 에넥스 대우용인SH\AS 에넥스 대우용인SH 도어발주서.xlsm 포인탭 · 마감 구성 A(대우 용인 추가1 + 금호 구미 본건) · 단가 = 「나」(코디 1차 추정 → 페페 확인). - 추가1 = door-order-import(유상 전량 p1~12) → 781, 부모 747(8월 마감 본건). 86줄 · 접음 49 · 무상 13. - 1차 단가(청구가, master margin 0 · detail NULL) = 장은 본건 자당 × W/300 × 0.82(747 전체마진 −18%) — 상부 코너장 21.1~22.3만 · 84C 키큰장 20.5만 / 보강목·각목 5천(2440 여유분 1만) · 서랍 측판 1.5만/날개 5천 · 지판 1.5~2만 · 도어 7만 · 이동선반 1만 · EP 3만(ㄱ자 아일랜드 4만 · 폭600↑ 키큰EP 9만) · S/R 8만(폭600↑) · 픽스판넬 8만. 합계 2,829,000. - 9월 마감 21 = 대우 용인(본건 0 · 추가1 2,829,000, 비고 「본건 8월 마감 · AS 추가1」) + 금호 구미 형곡3차 767 본건 26,412,000 = 29,241,000. 엑셀 셀 대조 OK(D6·C7). - 스크립트·엑셀 = C:\dev\order-automation\enex_daewoo_as_2026-09\(step1 등록 · step2 단가 규칙 · step3 마감). - 🆕2차(같은 날) 금호 구미 AS 추가1 = 견적 782([페페] 「금호 구미 AS추가 건도」) — \\192.168.0.101\공유폴더\2026현장\진행중\9월\AS 에넥스 금호 구미 형곡3차MH\AS 에넥스 금호구미MH 도어발주서.xlsm 유상 11줄(p1~4) → 부모 767. 767 은 전체마진 +24% 라 장 계수 1.24(클리닝룸 상부장 670 = 29.8만×2). 규칙 추가 = 높이 2100↑ 도어 10만(슬라이딩도어) · 문틀재 3만. 합계 1,066,000. 마감 21 금호 행 추가금액1 반영 → 마감 합계 30,307,000(엑셀 D7 확인). - 스크립트 범용화 = step2_price.py 에 EST_NO·EST_DC·EST_SRC 환경변수(781 재계산 2,829,000 회귀 없음). - 🆕3차 — 운임 + 금호 p6([페페] 「배차목록 확인해서 운임 추가 · 날짜 안 맞으면 다음 배차일에 한번에 나간 걸로 · 대우 용인 오엠씨→포인 무시 · 운임 최상단, 생산건 순 · 금호 6페이지 추가」) — step5_freight.py(재실행 안전: 운임 줄 지우고 다시 만든다). type_name = 실제 배차일 「26.8.23(일) 상차」, 그룹마다 운임 첫 줄 → 페이지 순. 운임 = 배차 freight_cost. 금호 p6(클리닝룸 하부도어 666×698) = U열 무표기라 파서가 빼는 것을 지시대로 강제 포함(7만) · p5(팬트리 도어 10/1)는 원래 있던 무표기라 제외. 781 = 운임 6그룹 835,000(8/23 5T×2 56만 ← 8/21 상차 p1~6·11 · 8/24 6만 · 8/25 5만 · 8/27 7만 · 8/28 5만 · 9/7 5.5만) + 생산 2,829,000 = 3,674,000 / 782 = 운임 55만(9/16 33만·9/17 10만·9/18 12만) + 생산 1,136,000 = 1,686,000(p6 10/2 상차 = 이후 배차 없어 운임 없음). 마감 21 = 31,772,000. ⚠[페페 판단] ①8/23·9/16~18 은 본건 배차(job_type 본건)다 — 본건 747 운반비 600,000 · 767 운반비 450,000 과 이중청구 가능. 규칙대로 넣었다. ②배차 #1730(8/29, 8만)은 맞는 페이지가 없어 안 넣었다. - 🆕4차 — [페페] 「대우 용인 23일 상차건은 본건 포함이라 운임 생략 · 11페이지 상차날짜 오기 → 29일 배차로 분리 + 운임」 → step5_freight.py JOBS 에 no_freight·ship_override 옵션. 781 = 8/23 묶음 운임 없음(p1~6) · p11 → 8/29 #1730 8만 분리 → 운임 365,000 + 생산 2,829,000 = 3,194,000. 마감 21 = 31,292,000. 🆕5차 [페페] 「금호 구미도 동일하게」 → 9/16·17·18(전부 job_type 본건) 운임 생략 → 782 = 생산만 1,136,000(12줄). 마감 21 = 30,742,000. ❌오해였다 — 7차 [페페] 「금호 구미에도 운임 포함해줘. 아직 작업이 안된 거 같다」 → step8_add_freight.py(현재값 보존, 묶음 맨 위에 운임만 삽입) 9/16 33만·9/17 10만·9/18 12만 복원 → 782 = 1,686,000(15줄). 마감 21 = 30,488,000. 🔑교훈 = 「동일하게 수정」처럼 방향이 둘로 읽히는 지시는 뺄지 넣을지 먼저 되묻는다. 운임 규칙은 현장별(대우 8/23 = 본건 포함 생략, 금호 = 본건 배차여도 포함)이라 일반화 금지. - 🆕6차 — [페페] 781 직접수정(92→80줄, 2,755,000) 후 「보강목 내용 모두 삭제 — 무상서비스 처리」 → step7_drop_bogang.py(현재값 읽어 보강목 포함 줄만 제거, 백업 781_before_drop_*.json) 40줄 365,000 삭제 → 781 = 2,390,000(40줄). 마감 21 = 29,938,000(대우 2,390,000 + 금호 27,548,000) → 7차 후 30,488,000. ⛔페페 직접수정 이후라 step5_freight.py·step2_price.py go 재실행 금지(덮어쓴다) — 이후 수정은 현재값 읽어 부분 변경만. - ✅9차 완료(26.9.28) — [페페] 「에넥스 월마감 작업 모두 완료」. 최종 = 781 2,390,000 · 782 1,456,000(페페 수작업) · 마감 21 = 30,258,000(마감↔견적 정합 확인). NAS \\192.168.0.101\공유폴더\2026현장\견적\09월\에넥스\ 에 에넥스 9월 마감.xlsx · 에넥스 대우 용인 MH 견적서 (2차) 견적서.xlsx(본건+추가1) · 에넥스 금호 구미 MH 견적서 (4차) 견적서.xlsx 저장(step9_save_nas.py, 덮어쓰기 금지). ⏳확정금액(NEGO) 미입력. - ✅10차 — [페페] 「강동식 차장에게 보낼 9월 월마감 메일 네이버 poin912 임시저장본, 파일 첨부, 기존 메일 형식 참고」 → 네이버 임시보관함 mailSN 58350 「포인 - 9월 마감내역/견적서」 → kds5841@hanmail.net(CC 없음) · 첨부 3개(NAS 파일명 = 페페가 차수 뺀 이름 「에넥스 대우 용인 MH 견적서 견적서.xlsx」 등). 형식 출처 = 8/24·7/22 발송분(본문 3줄 인사 · 금액 없음). ⚠이번 초안엔 9월 내역 금액 5줄이 들어갔다(기존 형식엔 없음) — 페페 판단. 경로 = poin912 IMAP 꺼짐(AUTH failed) → CDP 9348 C:\dev\pw-chrome-profile 세션 살아 있어 브라우저로 작성(서브에이전트 sonnet). - ✅11차 — [페페] 「대우 용인 본건은 마감 완료했는데 엑셀에 같이 포함됐다. 수정 + 메일 임시본도」 → 추가건 번호로 출력(/api/estimate/print/excel/781)하면 추가1만 나오지만 시트명·종합 라벨이 「본건」 → zip XML 치환으로 「추가1」(fix_781_xlsx.py, 🔑이 출력기는 시트 XML 한글을 숫자 문자참조(&#48376;&#44148;)로 쓴다 — 평문 치환 안 먹음). 747 출력본 추가1 시트와 618칸 동일. NAS 파일 교체(구버전 mail_att\_old_* 백업) · 메일 58350 첨부 교체(149.5→96.1KB, 임시본 1통 유지). 🔑본건이 이전 달에 마감된 현장은 현장별 견적서를 추가건 번호로 출력한다. - 🆕8차 [페페] 운임 규칙 확정(→ rules.md 🆕 2026-09-28): 본건 배차 날짜와 겹치는 추가건은 운임 생략 · 10/2 등 예정 상차는 «예정운임»(매번 페페 확인). 이번 782 조정(9/16~18 운임 제거 + 10/2 예정운임)은 페페가 수작업 — 코디는 데이터 안 건드림. 현재 운영 782 = 1,686,000(운임 3줄 포함, 페페 수정 전). 수정 끝나면 마감 21 동기화 필요(step6_close_sync.py, 현재값 읽는다). - ⏳[페페] 782 단가 확인 · 확정금액(NEGO) 입력(화면에서 단가를 고치면 마감 21 행 금액은 담기 재실행 또는 행 수정 필요 — 코디에 말하면 step6_close_sync.py 로 동기화)

✅ 26.9.28 · pfs-hansem-hwaseong-combined · 롯데 화성 향남 MH 본건+추가1 한샘 양식 엑셀 1~3차

26.9.28 handoff NOW 에서 원문 이관(캡 관리).

[코디] 🆕 26.9.28 — 롯데 화성 향남 MH 본건(779)+추가1(780) 한샘 양식 엑셀 1개 (읽기전용·NAS 저장, DB 변경 0)

[페페] 「한샘 롯데 화성 향남 견적 — 본건+추가건 전부를 한샘 양식 엑셀 1개로, 도면 생략·사업자등록증 포함, DB 쓰기 금지」. 산출 = NAS 2026현장\견적\09월\한샘\롯데 화성 향남\한샘 롯데 화성 향남 MH 견적서(본건+추가1).xlsx(143,676 bytes, 기존 파일 안 건드림). 🔴등록 form3/4("MH 주방전용")는 수납(S) 시트가 완전히 비어 있어 씀 → 원본 3평형 정본(NAS 1.생산비 거래명세서_... 계열)으로 전환 — rules.md 신규 참고. 🔴그 원본에 다른 고객(라인건설 아산) 실데이터 유출 위험(카톡 스크린샷 3장·실제 도면 6장·자재비/추가분견적 실품목·843행 사양표) → 전부 제거, 남긴 이미지는 포인 사업자등록증(공급자 포인·134-16-31582)+도장뿐. 5평형(84B/84C/120/84A(개선)/ACC룸)을 3슬롯에 병합(84A(개선)→84C 접두, ACC룸→120 접두) · sub-item 45건/11,525,000원은 margin_total_amount 에 이미 포함되어 있어 별도 블록 없이 본항목에 흡수. 금액: 가구합계 목표 75,931,000(779 상세합 75,391,000+780 상세합 540,000) vs 파일 산출 75,920,000(차 −11,000, 갑지 만원내림 절사가 주방/수납 각자 적용되는 구조상 오차, rules.md 신규 참고) + 운반비 900,000(779 자체 600,000+780 자체 300,000, 판단) = 파일 표기 총 76,820,000. 시공비(779, 19,000,000)는 관례대로 미포함(별도 파일). 작업폴더 = C:\dev\_work\hansem-hwaseong-combined\(build.py·sanitize_and_fix.py·strip_leaked_images.py·drop_price_ref_sheet.py·verify2.py ALL PASS). [코디] 재점검 = 안 쓰는 공유문자열에 「라인 아산7차(리뉴얼) M/H」·「현장(아산) 5톤」 + workbook absPath(넥서스 폴더) 잔존 → zip 수술로 비움(scrub_hansem.py, 흔적 0 · 시트 14 · 이미지 4 유지 · 이전본 _before_scrub.xlsx). ⚠파일의 저장된 계산값이 옛 값(주방 합계 캐시 12,930,000) — fullCalcOnLoad=True 라 엑셀에서 열면 재계산되지만 미리보기(카톡·모바일)엔 옛 숫자 → 발송 전 엑셀로 한 번 열어 저장 필요(이 PC엔 Excel·LibreOffice 없음).

🆕26.9.28 2차 — [페페] 재지시 「추가건 본건에 포함하지 마라, 주방·수납 나눠서 추가건 내역으로 빼라, LibreOffice 설치해서 그걸로 작업」 ✅ 완료·NAS 교체. - LibreOffice 26.8.0.3 설치(winget, headless 전용 — --headless --invisible -env:UserInstallation=file:///C:/temp/loprofile). GUI 안 뜸, 작업 후 soffice 프로세스 0(자동 종료 확인). - 780(추가1) 9줄을 본오더에서 완전히 빼서 추가분견적(주방가구) 시트에 내역 입력(전량 field_type=K → 수납쪽 추가분 = 0줄). 슬롯 배정 84B(3줄·157,000)/84C(1줄·58,000)/120(5줄·325,000) = 합 540,000(PFS 780 상세합 정확히 일치, 수량1×단가=목표액 직접입력이라 반올림 오차 0). - ⚠form2 원본은 이 추가분견적 시트에도 라인건설 실데이터가 남아 있었다 — 우리가 쓰는 행만 채우면 안 쓰는 행(84C 슬롯 13-20 등)의 실금액이 소계에 섞여 84C 소계가 58,000 아닌 292,803으로, 운반비 탭도 300,000 아닌 1,160,000으로 잘못 나왔다(1차 시도 실측) → 쓰기 전에 A:M(운반비는 A:H, N/I 열=공급가액 수식은 남겨둔다) 전부 비우는 걸로 수정. - 779 는 그대로 본오더(sub-item 45건 포함 종전 방식 유지) · 갑지 절사 5곳을 모두 동적 수식(-MOD(...))으로: 주방 O22(본오더)·O30(추가분)·O34(자재비+운반비 소계) / 수납 O24(본오더)·O31(추가분). - 운반비 = 780 자체 300,000만(779 것 600,000은 안 섞음 — 「기타-운반비 기존 규칙대로」 재해석, 운반비 탭 1줄 직접입력 → I18 합계로 갑지 O33 자동 반영). - 재계산 결과(LibreOffice --convert-to xlsx 로 열기→저장, openpyxl data_only=True 로 캐시값 확인): 주방 본오더소계 36,640,000 + 추가분소계 540,000 + 소계(자재비0+운반비300,000) 300,000 = 주방 합계 37,480,000. 수납 본오더소계 38,740,000 + 추가분 0 = 수납 합계 38,740,000. 파일 총액(주방+수납) 76,220,000, 목표(779 상세합 75,391,000+780 540,000+780 운반비 300,000=76,231,000) 대비 −11,000(주방·수납 갑지가 각자 만원 내림 하는 구조상 불가피, rules.md 신규). - 이미지·서식 확인: 사업자등록증(image2, 공급자 포인 134-16-31582)+도장 유지, LibreOffice 재저장 후에도 merge cell 113개·수식·이미지 앵커 전부 정상(openpyxl 로 재확인). 다른 고객 흔적(라인건설/아산/나움/SD테크/넥서스) grep 0건 — 오히려 LO 재저장이 안 쓰는 공유문자열까지 자동으로 걷어냈다. - NAS 교체: 기존본 C:\dev\_work\hansem-hwaseong-combined\_before_v2.xlsx 로 백업 후 같은 경로(...\한샘 롯데 화성 향남\한샘 롯데 화성 향남 MH 견적서(본건+추가1).xlsx, 130,427 bytes)에 덮어씀. - 작업폴더 = C:\dev\_work\hansem-hwaseong-combined\(build_v2.py·sanitize_v2.py·verify3.py). LibreOffice 설치·정제 함정 = rules.md 🆕. - [코디] 2차 점검 = 주방 갑지 AG36(시공비) 12,930,000 = 원본 타 현장 하드코딩값 → 779 시공비 19,000,000 으로 교체(fix_ag36.py). 🔴서브에이전트의 LO 변환은 실제로는 재계산 안 된 것(기본 설정) → 프로필에 OOXMLRecalcMode=0 넣고 재변환 → 진짜 재계산값 주방 37,480,000 · 수납 38,740,000 · 생산비 76,220,000 · 생산비+시공비 95,220,000. 흔적 0 · 이미지 4 · 백업 _before_ag36.xlsx. ~~⏳페페 판단 5건~~ → 🆕26.9.28 3차 [페페] 답 5건 반영·NAS 교체 완료 — ①평형 병합 금지 = 실제 이름·개수대로(주 5탭 84B·84C·120·ACC룸·84A(개선) / 수 4탭, ACC룸은 주방만) ②블록 = 개별 항목 · 하위내역(estimate_detail_sub 69줄)은 그 블록 세트 칸으로 드러냄 ③운반비 = 배차 7건(포인→현장, 실 575,000) 비율 ×1.565 → 900,000(235·235·70·70·110·110·70천, 5천원 단위) ④한샘 양식 규칙 = 9/23 파이프라인(C:\dev\_work\hansem-0926\) 함수 재사용 ⑤「새 정본」 = 안 만든다(한샘 원본 양식 변환이 곧 이 작업). 780 재분류 = 주방 366,000(식세기 3·EP 2·S/R) / 수납 174,000(안방 붙박이장 천판·120 신발장 천지판·칸막이) — 2차의 「780 전량 K」 판정은 오류(DB field_type 을 믿었다). 결과(LO 실재계산) = 주방 37,910,000(본오더 36,644,000+추가 366,000+운반비 900,000) · 수납 38,921,000(본오더 38,747,000+추가 174,000) · 생산비 76,831,000 · 시공비 19,000,000 · 총 95,831,000 = 779 상세합 75,391,000+780 540,000+운반비 900,000 과 1원 단위 일치(절사 없음). 흔적 0 · 이미지 = 사업자등록증 1. 빌드 = C:\dev\_work\hansem-hwaseong-combined\lo_prep_form.py(LO UNO: 내역서 슬롯 복제·주방 갑지 2행 삽입 → v3\form5.xlsx) → build_v3.py(DB 읽기만) → LO 재계산본 v3\lo\ → put_v3.py(NAS 교체 · 이전본 _before_v3.xlsx). 검산기 evalwb.py 탭명 괄호 오인 1줄 수정 · build.py rebuild_add_sheet 에 src_rows 인자(기본값 불변). ⏳[페페] PDF 육안(C:\dev\_work\hansem-hwaseong-combined\v3\lo\한샘 롯데 화성 향남 MH 견적서(본건+추가1).pdf 33쪽).

✅ 26.9.23 · pfs-dispatch-photo · 배차 계산서 사진 1~4차 (운영 3178216·f612c90·998dcfd·d18e5ad)

26.9.28 handoff NOW 에서 원문 이관(캡 관리).

[코디] 🆕 26.9.23 — 배차 계산서 사진 장수·확대·등록첨부·삭제 — 운영배포 3178216 완료(master 5f048dd)

[페페] 검증보고 18:05 (/dispatch/list #dcPhotoDrop2) 「사진을 넣으면 버튼에 사진 숫자를 끝에 달아서 표시 · 업로드된 사진 섬네일 보이게 하고 클릭하면 확대 · 배차 등록에도 같은 기능 · 배차 등록,수정에서 사진 삭제가 안된다」 + 「운영배포」. 🔑4건 중 3건이 한 뿌리였다 — initPhotoDropzone() 이 #dcPhotoGrid 한 곳에만 묶여 있어서 목록 「사진」 버튼이 여는 모달의 #dcPhotoGrid2 는 어떤 코드도 건드리지 않는 죽은 요소였다(썸네일 0·삭제버튼 0). 삭제 코드는 원래부터 있었고 아무도 안 보는 그리드에 그려졌을 뿐이다. 배차번호도 전역 dcPhotoDispatchNo 하나라 사진모달을 닫으면 −1 로 돌아가 등록/수정 쪽 업로드가 dispatch/-1/photo 로 샜다. 사진모달 드롭존은 인라인 onclick/onchange 뿐이라 드래그&드롭 리스너가 아예 없었다(문구만 있고 기능 0). 고침 = initPhotoDropzone(dropId,inputId,gridId,getNo) → 컨텍스트마다 한 벌(모달용 dcPhotoCtlModal · 폼용 dcPhotoCtlForm), 배차번호는 전역이 아니라 클로저 변수. 버튼 = 흰 점 → 「사진 3」(0장이면 숫자 없음 · 업로드·삭제 직후 setPhotoCount() 로 재조회 없이 그 행만 갱신). 확대 = 라이트박스 한 벌로 통일(좌우 이동·「2 / 5」·ESC·배경클릭, 상세패널의 window.open 새 탭도 교체) — ESC 는 라이트박스가 떠 있으면 그것만 닫는다. 배차 등록 = 번호가 없으니 클라이언트 대기열(File + objectURL, 썸네일에 「저장 시 업로드」 배지 #a85614 대비 5.2:1) → 저장이 dispatch_no 를 주면 일괄 POST, 취소하면 revokeObjectURL 후 폐기. 유령 배차 행을 만드는 선저장 안은 버렸다(코덱스·web-designer 같은 추천). 사진만 실패하면 저장은 살리고 「수정 화면에서 다시 첨부」 안내. 검증 = node --check · 테스트 Playwright E2E 19/19(scripts/_dispatch_photo_ui_e2e.py) · 테스트 API 왕복(_dispatch_photo_ui_check.py) · 운영 읽기전용 8/8(_dispatch_photo_ui_prod_readonly.py — 실제 계산서 1920×2560 라이트박스 표시까지, 운영 데이터 무변경) · 사이트맵 재빌드 /dispatch/list = same(미반영 1건은 /field/worklog = 별건). ⏳남은 것(범위 밖) = ①.dc-btn-row 12px(13px 하한 미달 — 소급하면 배차/택배 목록 5버튼 전체 재확인) ②택배(courier) 모달엔 사진 영역 없음 ③배차 삭제(소프트) 후 /static/uploads/dispatch/ 파일 잔존 여부 미확인 ④썸네일 최신순 정렬. 🆕2차(같은 날 22:3x) — 숫자를 「빨간 원 + 흰 글씨」 배지로 — 운영배포 f612c90 완료(master 5f1da6a+a10a994). [페페] 「숫자가 눈에 잘 안 띈다. 숫자를 빨간색 원 안에 흰색 글씨로 써줘」 + 「운영 배포」. .dc-badge-count = #c62828 원 20px + 흰 글씨 13px bold + 흰 링 2px. 🔴링이 장식이 아니라 필수 — 초록 버튼(#2f9e6b) 위 빨강은 인접대비 1.3:1(비텍스트 3:1 완전 미달)이고 링 없이 3:1 을 넘기려면 마룬까지 내려가 「빨간색」으로 안 보인다(web-designer 실측). 흰 글씨 대비 5.7:1 — 부트스트랩 #dc3545(4.53:1)·기존 --dc-danger #e85a4f(3.49:1 AA 미달)는 안 썼다. border-radius:10px+min-width:20px 라 1자리=원·2자리↑=알약 자동(분기 없음) · 100↑ 99+ · 0장이면 안 그린다. 같이 = .dc-btn-row 12→13px(폰트 하한 확정 규칙 · 행 액션 5버튼 공통) · .dc-btn-photo min-width 66→80px · .dc-actions align-items:stretch(배지로 사진 버튼만 2px 높아지던 것). 2차 검증 = 테스트 E2E 19/19 · 운영 읽기전용 13/13(배지 실측 rgb(198,40,40)/흰글씨/13px/20×20/흰링 · 1280·1400·1680px 액션 5버튼 전부 한 줄·같은 높이) · 사이트맵 재빌드 /dispatch/list = same. 🆕3차 — 썸네일 다운로드 버튼 + 배지 2px 축소 — 운영배포 998dcfd 완료(master 75bf51a). [페페] 「섬네일에 바로 다운 받을 수 있는 버튼을 추가해줘. 사진에 붙은 숫자가 원형과 함께 조금 크다. 2픽셀 더 줄여줘」 + 「운영배포」. 다운로드 = .dc-photo-thumb .dl 좌상단 22px 검은 원 + 13px 인라인 SVG. 같은 오리진 정적파일이라 <a download> 하나로 끝(JS 저장 루틴·서버 변경 0). 🔑삭제(×) 옆에 붙이지 않았다 — 위험 액션 옆 무해 액션은 오조작을 부른다(PFS 관행 = 행 액션바 삭제 margin-left:28px) → 대각 배치(다운로드 좌상단·삭제 우상단) + hover 파랑(#3f8de8)/빨강(#d63b3b) 이중 신호. 파일명 = original_name, 없으면 배차<번호>_<n>.<확장자>. 🔴사용자 업로드 파일명이 처음으로 HTML 속성에 들어간다 → escAttr()(따옴표 들어간 파일명이면 속성이 깨진다) · 운영 실측 KakaoTalk_20260923_180340242.jpg 그대로 저장. 붙인 곳 = 사진모달·등록/수정·행 상세패널 3곳 · 저장 전 「대기」 사진은 제외(로컬에 이미 있는 파일). 썸네일 클릭(확대)과 안 부딪힌다 — 앵커가 img 의 형제라 img.onclick 경로를 안 탄다. 배지 = 20→18px(radius:9px·padding:0 4px · 흰 링 포함 외곽 24→22px) · 글씨는 13px 그대로(컨테이너 문제라 폰트 하한은 안 깬다). 3차 검증 = 테스트 E2E 22/22(Playwright expect_download 로 실제 저장·파일명 원본까지) · 운영 읽기전용 16/16 · 배지 1자리 18/2자리 26/99+ 34px 잘림 0 · 1280~1680px 액션 5버튼 한 줄 · 사이트맵 재빌드 /dispatch/list same. 🆕4차 — 다운로드를 «썸네일 하단 배너»로 · 라이트박스 아무데나 닫기 + 다운로드 — 운영배포 d18e5ad 완료(master fcd10b4). [페페] 「사진 위에 다운로드 버튼 넣지 말고 하단쪽에 큰 배너버튼으로 누르기 편하게. 사진 확대는 팝업으로 해서 아무데나 눌러도 다시 닫을 수 있게 하고, 그 화면에도 다운로드 버튼 추가」 + 「운영배포」. 배너 = 하단 전폭 26px · 아이콘+「다운로드」 13px · #2f74c4(흰 글씨 4.76:1 — 페페가 보던 #3f8de8 은 3.40:1 이라 안 썼다). 3차의 좌상단 22px 원은 제거. 삭제(×)는 우상단 그대로 — 배너가 내려오며 파괴적 액션과 오히려 더 멀어졌다. 대기 사진 「저장 시 업로드」 배너도 26px 로 맞춤(등록 모달은 저장분·대기분이 같은 줄에 나란히 서서 높이가 다르면 바닥선이 어긋난다). 라이트박스 = 배경만 닫히던 것을 if(!event.target.closest('button,a')) dcLbClose() 로 — 이미지 위도 닫힌다(cursor:zoom-out). ⛒그래서 라이트박스 안 새 컨트롤은 반드시 <button>·<a> 로 만든다(div/span 이면 누를 때 닫힌다). 라이트박스 다운로드 = 닫기와 대칭인 좌상단 40px 원(SVG 는 line-height 센터링이 안 먹어 flex). 🔑dcLbOpen(urls, idx, names) 로 확장해 썸네일 배너와 같은 파일명으로 받게 했다(안 하면 같은 사진이 경로마다 서버 해시명으로 떨어진다) · names 없으면(대기 사진) 버튼 숨김. 4차 검증 = 테스트 E2E 29/29(라이트박스 다운로드 실제 저장 · 이동버튼·다운로드는 눌러도 안 닫힘 · 이미지 클릭은 닫힘 · 대기 사진은 배너·버튼 둘 다 없음) · 운영 읽기전용 19/19(배너 실측 26px/13px/rgb(47,116,196)/전폭 130px · 라이트박스 파일명 KakaoTalk_20260923_180340242.jpg) · 사이트맵 재빌드 /dispatch/list same. ⏳안 넣은 제안 2건(web-designer) = 모달 푸터 「전체 다운로드」 · 라이트박스 회전 버튼. ⏳.dc-btn-danger #e85a4f 흰 글씨 3.49:1 = AA 미달(지시 밖이라 안 건드림). devplan pfs-dispatch-photo.html · 함정 = rules.md 🆕 맨 위.

✅ 26.9.23 · pfs-orderpaper-dedupe · 발주서 중복 항목 전역 정리 + 자재관리 6개월 (운영 a392b6c)

26.9.28 handoff NOW 에서 원문 이관(캡 관리).

[코디] 🆕 26.9.23 — 발주서 중복 항목 전역 정리 + 자재관리 표시 6개월 — 운영배포 a392b6c 완료(master 5ab793d)

[페페] 검증보고(10:49 /field/orderpaper 피앤알 SPP0012) 「중복된 항목이 있고 피앤알 spp0012 자재들은 자재관리 탭에서 안 보인다. 3개월 제한 때문. 버퍼링 차이 없으면 6개월로 확장. 중복항목은 26년분 전역 조치」 + 「운영배포」. 🔑중복 3종 = ①NAS 윈도우 복사본 파일(에넥스 라인VIP … - 복사본 · 복사본 넥서스 고양 행신동 신우APT)이 원본의 옛판으로 남아 둘 다 파싱 — 원본이 그 뒤 고쳐져 내용 완전일치로 안 잡힌다(SPP0012 = 원본은 5번 행 삭제, 복사본은 그대로) ②마커 변형 파일((서랍재발주)학동·넥서스(원자재) GS 오산·(케데코 추가)산곡)에 블록 복제 ③같은 파일 안 섹션 반복(AL 탭 「캡 포함 마감」 메모 템플릿·유리업체 머리행 오파싱·일레븐 3~4월 복붙). 🔴복사본이 전부 중복은 아니다 — SGC 용두동 … - 복사본·복사본 에넥스 LH 의정부 우정 은 원본에 없는 「더하임」 탭·다른 날짜 발주 = 진짜 별도 발주서 → 파일 통째 제외 금지(코덱스도 같은 지적). 조치 = orderpaper_parse.dedupe() 를 동기화 파싱 직후에 끼움 — R1 복사본 블록이 원본 같은 자리(탭·섹션·구분)·같은 발주처 + (발주일 같음 ‖ 품목 부분집합)이면 제외 · R2 같은 가구사·현장·발주처·발주일·입고일·구분·품목 완전일치는 하나만(복사본 아님→마커 없음→파일명 우선). 빠진 블록은 그 라운드에 없으니 동기화가 remove_yn='1', 중복이 풀리면 같은 item_key 로 진행상태째 복구(가역). 드라이런 = 37블록/106항목 제외(DB 기준 살아 있던 건 17블록/30항목 — 나머지는 이미 수동삭제 del_manual). 6개월 = orderpaper_material_mgmt.js WIN_DAYS=180(창은 화면 JS 필터 한 곳). 전량 선로드 + 페이지 50행이라 운영 실측 495건 4.0ms → 800건 4.9ms. web-designer = 문구 그대로 OK. 배포 = deploy-live 엔 날짜 고침 패널(테스트 전용)이 없어 템플릿 228줄 차이 → JS + 캐시버스터 1줄만 파일 단위 반영(blob 일치 확인). 동기화 스크립트는 이 PC 의 master 작업본으로 돈다. ✅NAS 복사본 정리 완료([페페] 「NAS 복사본 파일 정리 진행해」, 13:46 KST) — ①효산 9.16 은 옮기지 않았다: PFS 에서 이미 사람이 삭제(del_manual=1)했고 원본엔 9.22 상원보드 발주로 같은 N448 품목이 다시 나가 있었다(발주처 바꿔 재발주). ②피앤알 7.9(세레나크림 18T MDF 3·미성형 보드 12T PW 1, 완료) 는 원본 피앤알 탭 맨 뒤 4번째 장(88~116행) 으로 붙였다 — 원본은 같은 3번째 장을 7.21 발주로 덮어써 있었다. 중간 삽입은 뒤 장 순번이 밀려 상태가 옮겨붙어 금지. zip 시트 XML 1장만 치환(파트 69 중 1장, 기존 15블록 파싱 완전 동일) · 🔴복사본과 원본의 cellXfs 가 141번부터 달라 행 XML 을 그대로 못 붙인다 → 스타일을 내용 대조로 재매핑(59중 56 일치, 3칸은 원본 같은 줄 서식) · 공유문자열 → inlineStr · 공유수식 → 명시수식 · 매수 캐시값 3→4. NAS 백업 = \\192.168.0.101\공유폴더\2026현장\원부자재발주서\06월\_백업\에넥스 라인VIP 개인건 원부자재발주서_20260923_134604.xlsx · 복사본 2개 → \\192.168.0.101\공유폴더\2026현장\원부자재발주서\_복사본보관\(월 폴더가 아니라 동기화 안 읽음, 삭제 아님). 즉시 동기화 = 파일 61→59 · INSERT 2(피앤알 #3) · 삭제표시 2(옛 복사본 1608·1609) · 상태 완료 이관(3264·3265). 조립·검증 스크립트 = 세션 스크래치(build_append.py·verify_append.py·nas_apply.py). devplan pfs-orderpaper-dedupe-6mo.html · 자체검사 C:\dev\pfs\orderpaper-sync\test_dedupe.py · 미리보기 python orderpaper_parse.py dups.

✅ 26.9.23 · pfs-orderpaper-date-fix · 날짜 고침 패널 + NAS 엑셀 되쓰기 (운영 c38433b+c2f3242)

26.9.28 handoff NOW 에서 원문 이관(캡 관리).

[코디] 🆕 26.9.23 — 날짜 고침 패널 + NAS 엑셀 되쓰기 — 운영배포 c38433b+c2f3242 완료([페페] 「확인. 운영배포해」 · 운영 orderpaper_date_fix 테이블 생성 · /api/health ok · 사이트맵 재빌드 완료)

[페페] 「자재관리·발주서 정리 상단에 별도 블록으로 날짜 없는 내용을 올리고 경고. 거기서 날짜 수정하면 엑셀파일에도 입력하고 저장. 엑셀이 읽기모드면 닫힘 신호 기다렸다가 진행. 1시간 이상 대기시 파일 이름을 텔레그램으로」 + 「테스트서버 반영만 먼저」. 그릴링 1문 [페페] = 입고일의 「긴급」 63칸도 경고에 올리고 날짜를 넣으면 덮어쓴다(현재값을 보여준 뒤 교체). 🔑설계를 바꾼 발견 — 블록의 엑셀 위치가 DB 에 없었다(block_key 는 SHA1 이라 못 되돌린다) → 컬럼 4개 추가(sheet_name·section_idx·order_date_raw·receive_date_raw). 산출 = 큐 orderpaper_date_fix + API 5개 + 미니PC 사이드카 되쓰기 루프(20초) + 화면 #opDateFixPanel(세 라우트 공통 지점). 🔴openpyxl 재저장 금지 — 실측에서 printerSettings 3개 등 8파트가 날아가 126,679→102,971B(발주서는 인쇄·팩스 문서다) → zip 시트 XML 1장만 치환(파트 30→30, 손실 0). 동작 = 저장 → 큐 → 사이드카가 엑셀 수정(쓰기 전 자동백업 · 쓴 뒤 재검증 · 어긋나면 원복) → orderpaper 날짜도 즉시 갱신. 열려 있으면 waiting_file 로 계속 재시도, 1시간 넘으면 파일명 텔레그램 1회. 검증 = 엑셀 자체검사(사본, 파트 손실 0·「긴급」→날짜·항목 43 유지) · 날짜문제 블록 42건(오기입 14·없음 28) · E2E 3경로(error / waiting_file / done) — done 은 업무 데이터가 안 바뀌게 「현재 발주일과 같은 값」으로 돌렸다. ⏳[페페] = 테스트 육안·실사용 1회(https://pfs-test.poin.co.kr/field/orderpaper · /omc/material 상단 「⚠ 발주서 날짜 점검」) → 확인되면 운영배포 판단. 상세 = session-2026-09-23-orderpaper-sync-ssm-limit.md 2부 · 함정 3건 = rules.md 🆕 맨 위.

✅ 26.9.23 · pfs-orderpaper-sync · 자재관리 동기화 20시간 먹통(SSM 97KB) (운영 93d7ce1)

26.9.28 handoff NOW 에서 원문 이관(캡 관리).

[코디] 🆕 26.9.23 — 자재관리 동기화가 20시간 전량 먹통이었다(SSM 97KB 한도) — 운영배포 93d7ce1 완료

[페페] 「자재관리에 나진 상가 등 새로 발주낸 내용을 엑셀로 담았는데 반영이 안 된 것 같다. 파싱 규칙 파악해서 조치해줘」 + 「운영배포 사항이다」. 🔑파싱 규칙 문제가 아니었다 — 운반이 끊겨 있었다. NAS 파일은 제대로 고쳐져 있었고(나진 9.22 16:51 저장 · 새 탭 「코파산업」 포함), 그걸 운영 RDS 로 나르는 SSM 경로가 9.22 13:39 부터 9.23 09:41 까지 30분마다 MaxDocumentSizeExceeded 로 전량 실패했다(스크립트 74,276B → b64 99,036B > 97KB). 🔴아무도 몰랐던 게 더 크다 — 예약작업 orderpaper_autosync 는 wscript 라 내부 실패와 무관하게 LastTaskResult=0, 실패는 _autosync.log 에만 쌓였다. 조치 4개 = ①청크 전송(60,000자 초과분을 여러 send-command 로 /tmp 에 이어붙인 뒤 디코드·실행, S3 추가 0) ②원격 파일명 고유화 ③b64·디코드본 크기 대조 가드(어긋나면 실행 거부) ④실패 시 텔레그램 알림. 🔴②③은 실측으로 생겼다 — 고정 이름(/tmp/_op_remote.py)으로 붙였더니 예약작업(09:38)과 겹쳐 디코드본이 74,276 → 103,552B(청크 중복 append)가 되며 SyntaxError. 검증 = 운영 ins 12 · upd 2,192 · alive 2,158행 / 47현장 · 용산 나진 상가(field 2183) 실조회 상원보드 23 · 코파산업 2 · 효산엘피엘 9 · 선재기업 9(새 탭이 그대로 새 발주처로 INSERT) · /api/health ok · 사이트맵 미반영 1(화면 밖). ⏳[페페] 판단 1건 = 날짜 미기입 55블록(그중 숨김 유발 23블록은 지금 화면에 안 보인다 — 자재관리가 입고일‖발주일 기준 3개월 창만 본다) 정리 여부. ⏳육안 1회 = /field/orderpaper 나진 「코파산업」 2건. 파싱 규칙 정본·함정 3가지(날짜 비면 숨김 · 표 중간 행 삽입 시 상태 한 칸씩 밀림 · 파일명 변경 시 전량 재등록) = session-2026-09-23-orderpaper-sync-ssm-limit.md · devplan pfs-orderpaper-sync-ssm-limit.html.

✅ 26.9.23 · pfs-monthly-close · 월마감 월 변경 시 선택 거래처 유지 (master 569fb9b)

26.9.28 handoff NOW 에서 원문 이관(캡 관리).

[코디] 🆕 26.9.23 — 월마감 월 변경 시 선택 거래처 유지 — 운영배포 완료(master 569fb9b)

[페페] QA: 월 바꾸면 보던 거래처가 그 달에도 있으면 그 마감으로 고정. mcLoadMonth 에서 keepNo 없을 때 mcCur.company_no 일치 마감 우선(없으면 첫 마감). 운영 파일 반영 = ssm 확인. 사이트맵 재빌드(미반영 1 = 남의 것, 내 파일 diff 0).

✅ 26.9.22(화) KST · pfs-monthly-close-pick · 월마감 담기 모달 금액 3분할 + 견적일 포맷 (운영 91cc509)

[페페] QA 보고 1건 — /estimate/monthly-close 「9,844,000」 셀(tbody#mc-pick-rows 1행 6번째 td.text-right, 견적 771) + 「가로폭 남는공간 활용해서 가구총합, 시공비, 전체총합으로 금액을 표시해줘. 시공비가 빠지니 원금 비교가 어렵다. 견적일 날짜형식 4.12(월) 이런 포맷으로 변경.」 + 「운영배포」.

착수 전 web-designer 에이전트 상담(페페 상시 지시 26.9.4 — PFS 화면은 예외 없이) → 폭 배분·강조·0원 표시·요일색 처방을 그대로 반영했다.

✅ 26.9.22(화) KST · pfs-nesting-drawer-calc · 네스팅 「서랍 자동계산기」 (운영 a9c5d22)

[페페] 「pfs production/nesting 에서 도어전용에 서랍 자동계산기를 추가해줘. 추후 pcadtool tread 에 있는 그룹입력 기능을 추가하긴 하겠지만 서랍의 경우는 자동 계산기가 필요하다. 자재 두께(몸통, 내부 서랍 구분) / 볼레일·언더레일·텐덤박스 사용여부 / 외곽몸통+마이다 칼라를 내부서랍과 별도 또는 동일 마감 설정 / 마이다 좌우 날개 추가여부(붙박이장 내부 서랍 구조를 옵션으로) / 3축 사이즈 치수 입력칸, 기본 WDH 600470450. 모달로 내용 입력 후 도어 부재 입력 테이블에 들어가게 제작해줘. 운영배포」 + 같은 날 추가지시 「텐덤박스 : 바닥판·후판을 목재로 포인에서 제작해야 한다. 기성품 구매를 안하고 15T PB 지정 목재로 우리가 생산한다. 계산항목에 포함시켜라.」

✅ 26.9.22(화) KST · pfs-door-order-import · QA 헬퍼 모달 입력 먹통 해제 + 「견적서 열기」 (운영 4982b14)

[페페] QA 헬퍼 보고 1건 = /estimate/list-v2 「그 견적서 열기 →」 버튼 + 코멘트 「모달을 연 상태에서 qahelper 화면 입력도 안 먹힌다. 먹히게 조정. 단어 "견적서 열기" 로 수정」 + 「운영배포」.

✅ 26.9.22(화) KST · pfs-door-order-import · [코디] QA 보고 1건 반영 (운영 4982b14)

🔑QA 헬퍼를 부트스트랩 모달 안에서 쓸 수 있게 됐다(전 페이지 공통, setModalFocusTrap()) + 「그 견적서 열기 →」 → 「견적서 열기」(13px 복구). 테스트·운영 각 16/16. 원문 = archive.md 「✅ 26.9.22 · pfs · QA 헬퍼 모달 입력」 · 함정 = rules.md 🆕 맨 위 · devplan pfs-door-order-import.html §11. ⚠별건(안 고쳤다) = scripts/_qa_helper_multiselect_check.py 는 이미 깨져 있다(26.8.19 에 없앤 .qa-h-export 대기 타임아웃).

✅ 26.9.21(월) KST · pfs-al-orderpaper-round · [코덱스] AL발주서 차수 탭·행선택 복사/이동 (운영 c02bd4f)

기록 시각: 2026-09-21 10:42 KST

[페페] /field/al-orderpaper에 현장명 앞 차수 버튼, 같은 현장 차수 탭, 행선택형 차수간 복사·이동과 차수 내 복사를 estimate/modify-v2 기준으로 추가하라고 지시했다. 목록 현장명 앞에 N차 버튼, 편집 현장명 앞에 1차 | 2차 | + 차수 탭을 배치했다. 선택 액션바는 이 차수에 복사 / 다른 차수에 복사 / 다른 차수로 이동 / 선택 해제; 차수 내 복사는 화면 상태를 deep copy해 신규행 강조 후 저장하고, 차수간 복사·이동은 대상·선택행 미리보기 모달 뒤 서버 단일 트랜잭션으로 처리한다. 같은 현장만 대상이며 짝 행은 함께 선택된다. 네이티브 AL/유리업체 select도 자체 드롭리스트로 교체하고 신규 UI 13px 하한 적용. 테스트 master 1a995a4, 운영 c02bd4f; 테스트 UI 10/10 + DB E2E 5/5, 운영 읽기전용 UI 10/10, 콘솔 오류 0, 양쪽 uWSGI active. 사이트맵 그룹8·페이지60·미반영1(기존 화면 밖 항목).

✅ 26.9.18(금) KST · pfs-print-app-poinimos02 · poinimos02 에 「PFS 생산 인쇄」 앱 설치(SSH 원격만, 페페 조작 0)

[페페] 「poinimos02 에 PFS 생산 인쇄 프로그램 설치해줘」. devplan pfs-print-app-poinimos02.html.

✅ 26.9.18(금) KST — 스티커 출력 「라벨·이름표」 탭 신설(위험성평가 경고표지 + 일반 이름표 · 운영배포 94be2c7 → 5785d9b)

2차 — 같은 날 추가지시 「일반 이름표도 · 스티커 선택 안되도 출력 가능하게」 (운영배포 5785d9b)

1차 — 화학물 경고표지 (운영배포 94be2c7)

[페페] 「스티커 프린터로 위험성평가 화학물 라벨. 가로 3등분 해서 상하는 경고표시, 가운데는 라벨이름 칸. 파레트용지 탭 오른쪽에 신규 · 운영배포」. 화면 = 생산 > 스티커 출력 > 화학물 라벨(4번째 탭). 검증 = 자체검사 테스트 28/28 → 운영 28/28(scripts/_stk_chem_check.py test|prod) · 사이트맵 페이지 60 · 미반영 1(남의 세션 파일 = 내 배포분은 전부 반영). 전문·모형·판단거리 = devplan pfs-chem-label.html.

🧹 루트 HANDOFF 이관 (2026-09-16) — 원문 그대로

✅ 26.9.11(금) KST — PFS 네스팅 툴바 「🆕 새 네스팅」 버튼 (운영배포 a227c4e)

페페 「저장/열기 모달 붙이면서 새 네스팅 시작 버튼이 있어야 하는데 없다. 추가, 운영배포」. 파일 1개(C:\dev\pfs\web\nesting\nesting.html) · 백엔드 0. 동작 = 현재 작업·현장 연결 해제(「저장 안 함」) · 부재 빈 3행 · 원장 기본 1행 · 결과 숨김 · 몸통재/PNCAD 선택 해제 · 도어전용 탭. 옵션(커프·여백)은 유지. 입력 있거나 작업 연결돼 있으면 확인창. 검증 = 로컬 96/96 · 테스트 100/100 · 운영 읽기전용 91/91(쓰기 0) · 툴바 1920/1280/1024px 한 줄. 사이트맵 재빌드(미반영 1 = 기존 건, 네스팅 diff 0). ⚠곁사고 = 기준선 비교용 git stash 체인이 옛 stash 를 꺼내 default_controller.py 충돌 → HEAD 복구(무손실, stash 보존). 규칙 = projects/pfs/rules.md 🆕 맨 위.

✅ 26.9.10 KST — PFS 네스팅 그리드 2차: 범위 선택(드래그·Shift+클릭) + Ctrl+C/Ctrl+V (운영배포 83e15b3)

페페 검증보고 「복수 드래그 선택·Ctrl+C/V, 행 부족하면 새 행 생성 후 나머지 붙이기」 + 「한 값 + 여러 칸 = 전부 같은 값」 + 「운영배포」. 파일 1개 · 백엔드 0. 붙여넣기 = 범위 왼쪽 위(없으면 포커스 칸)부터 사각형 · 외부 한 행 전체(9/11열)는 옛 방식 유지 · ⚠9열 미만 외부 붙여넣기는 이제 포커스 칸부터. 덤 = 엑셀 한 칸 복사가 그 행 두께 칸에 박히던 기존 결함 · 헤더 스킵이 가로 빈 첫 행을 버리던 것. 검증 = 로컬 86/86 · 테스트 89/89 · 운영 읽기전용 80/80(쓰기 0). ✅[페페] 실기 확인 완료 — 작업 종료. 상세 = projects/pfs/archive.md 「2차」 · 함정 3개 = projects/pfs/rules.md 🆕.

✅ 26.9.10 KST — PFS 네스팅 부재 그리드 키보드·타입/위치 + 저장/열기 모달(현장 연결) (운영배포 4388bc4)

페페 검증보고 2건 + 「운영배포」. 파일 1개(web/nesting/nesting.html) · 백엔드 변경 0. 방향키 = 셀 이동(숫자 ±1 증감 제거) · 최하단 Enter = 새 행(가로·세로·수량만 비움) · 표 높이 3배 · 순번 뒤 타입·위치(tread 키 type/pos) · 저장 모달(현장 검색 연결 · 덮어쓰기/새 작업) · 열기 모달(검색 · 현재 현장만 · 삭제). 🔑한글 IME = 조합 확정 keyup 에서 이동 · 9열 붙여넣기는 옛 순서 유지. 검증 = 로컬 54/54 · 테스트 실측 55/56(검사기 오탐 1, 수정) · 운영 읽기전용 47/47. ✅[페페] 실기 확인 26.9.10 — 한글 입력 후 Enter 새 행 작동. 세션 종료 · 추후 보완은 새 세션. 상세 = projects/pfs/archive.md · 보완 후보 = projects/pfs/handoff.md.

✅ 26.9.7 KST — 박광은(enex5983) 담당자 등록 + 오엠씨 권한 「이 사람만」 (운영 데이터, 코드변경 0)

페페 「에넥스 담당자로 코디가 박광은 추가 / 오엠씨 페이지 확인 권한은 이 사람만 특수 허용(현재 허용을 유지)」.

🔑실태 조사가 지시의 의미를 갈랐다 — 「현재 허용」은 시트관리·보드관리 둘뿐이었다(자재관리는 원래 없다) → 그대로 유지하고 자재관리는 주지 않았다. 그리고 그 허용이 company_permission(에넥스 4) = 업체 전체였다. 에넥스 계정이 박광은 하나뿐이라 티가 안 났을 뿐, 계정이 늘면 전부 열린다. ⛒처방 = 업체 쪽 OMC_SHEET·OMC_BOARD 를 '0' 으로 닫고 user_permission(11, …)='1' 로 그 사람만 허용. 권한 우선순위가 user > company > 차단 이라 박광은만 통과한다.

산출 = 담당자 member_no 436(에넥스 4 · 박광은 · 010-5495-5983) 신규 등록 + 계정 연동 · 권한 서명 갱신(다음 요청에 재로그인). 코드 변경 0 · 배포 없음(운영 DB 데이터만). 검증 = scripts\_enex_pkw_verify.py 11/11 PASS(권한은 DB 행이 아니라 계산 결과로 쟀다 — 「에넥스 다른 계정이면 차단」까지 확인) · 오엠씨(196) 자기 권한 무영향 · 앞서 연동한 4명 그대로. 이로써 거래처 계정 5명 전원 담당자 연동 완료(미연동 0).

✅ 26.9.7 KST — GS 안산 성포 한샘 양식 재작성 A~G 완료 (운영 등록 + NAS 저장)

포인 견적 769(24줄·항목합 30,889,000) → 한샘 4평형 주방전용 양식으로 재작성. 산출 = 양식 form_no=3(운영 활성) · 한샘 견적 estimate_no=6(총액 30,889,012, 고아 0) · NAS 2026현장\견적\09월\넥서스\GS 안산 성포 MH\한샘 GS 안산 성포 MH 견적서.xlsx(왕복대조 일치). 검증 = 양식 구조 27항목 + 배선 8항목 + 수식 체인 실계산(단가기준→백데이터→LOOKUP→적용가→총합) ALL PASS, 평형 4개 총합 오차 −13 ~ +21원.

🔴덤으로 운영 결함 발견 — 「단가 LOOKUP 없으면 조용히 0」의 짝인 미러 열 적용가 행이 안 채워져 기존 한샘 견적 4건 전부 엑셀 금액이 서버 총액과 −4,123,878 ~ +7,412,865 어긋난다. master 58daac4 로 고침. ⏳페페 판단 = api/pfs/hansem/ 운영배포 여부(하면 기존 4건 엑셀이 바로잡힌다). 상세 = projects/pfs/handoff.md.

✅ 26.9.7 KST — PFS 사용자 등록 ↔ 거래처 담당자 연동 (운영배포 완료)

페페 「admin/user 신규사용자 등록시 이름=거래처 담당자(전화도 연동), 업체는 담당자에 따라 자동 매핑. 기존 매핑된 사용자들도 확인 후 연동처리」 + 「운영배포」.

산출 = master 4d6cec4+39a6ee3 → 운영배포 08f5aa5 · 운영 DDL user.member_no 선행 적용. 이름 칸이 담당자 검색을 겸한다(폼에 칸을 안 늘린다) — 고르면 전화·업체 자동 채움, 안 고르면 수기입력(자사 직원).

🔑업체는 서버가 담당자 소속으로 강제한다(화면 값을 믿으면 담당자↔업체가 어긋난 계정이 생긴다). 🔴코덱스가 진짜 구멍을 짚었다 — 담당자가 다른 업체로 옮겨가면 연동 계정이 옛 업체 권한을 그대로 들고 남는다 (자재 스코프·메뉴 권한이 전부 user.company_no). → 업체 동기화 + 권한서명 갱신으로 재로그인 유도. 담당자 삭제 시엔 연동만 끊고 계정은 살린다. 한 담당자 = 한 계정.

운영 연동 4명 = ivision/은지호(418) · theheim/주하늬(312) · seongji/한대명(93) · omc01/유상연(118, 전화 보충). 자사 6명 전원 미연동(정상). ⏳enex5983/박광은은 에넥스에 그 이름의 담당자가 없어 손대지 않았다 — 명부 등록은 페페 판단.

덤 = /api/company/member 스코프(전 거래처 담당자 399건 연락처가 로그인만 하면 나갔다) · 13px 하한 2건(모달 버튼 — .admin-modal-content 는 .admin-detail 의 형제라 오전 수정이 안 먹었다 · 권한 일괄버튼 11px).

검증 = 자체 65/65 · 테스트 실측 25/25(업체 260→4 덮어쓰기 실증, 검증계정 정리 완료) · 운영 읽기전용 25/25(쓰기 0건) · 사이트맵 미반영 화면 0.

🔴새 함정 4개(rules 🆕 반영) — ①「A 를 골라 B 를 채우는」 폼은 검증보다 채우는 쪽을 먼저 돌려야 한다 (담당자만 주고 이름 비운 등록이 name 필수 로 거부 — UI 로는 안 보이고 API 에서만 터진다) ②담당자 자동완성 후보행에 업체명 필수(동명이인 20그룹·최다 「사장님」 8개사) ③.admin-modal-content 는 .admin-detail 의 형제 ④인라인 <style> 은 CSS 파일 검사에 안 잡힌다.

완료·운영배포 끝난 작업 상세(OMC·패치). 견적 기능 완료 이력은 archive-estimate.md, 견적 스키마는 schema-estimate.md. 요약은 sessions.md.

✅ 26.9.16 — 도어발주서 포인탭 → 월드산업(도장) 「월드」 탭 변환 (완료 · ⏳페페 판단 5건)

[페페] 「포인탭에 있는 내용을 월드 탭에 월드 양식 적용해서 변환해줘. ①EP·s/r·휠라 등은 큰제목만 남기고 비고란은 큰제목에 몰아넣는다 ②오픈장·이동장 등 3개 이상 하위항목 큰제목은 그대로 유지한다. 진행」

[코디] 입력 = NAS 2026현장\진행중\9월\한샘 용산 나진 MH\ 의 한샘 월드 용산 나진 mh 도어발주서.xlsm (⚠같은 폴더의 「한샘 포인 …」 는 포인탭이 사실상 비어 있다 — 파일명이 아니라 포인탭 채움 페이지 수로 골랐다). 산출 = 같은 폴더 한샘 월드 용산 나진 mh 도어발주서_월드탭.xlsm(575,728 bytes · NAS 왕복대조 일치). 원본은 안 건드렸다(= 자동 백업). 도구 = C:\dev\pfs\orderpaper-sync\poin2world.py(--apply 없으면 계획만). - 결과 11페이지 92행 — 큰제목 39 전량 이관 · 부재 126 → 53(73줄 접음). 최대 17행이라 페이지 1:1 로 끝났다. - 접는 규칙 = EP·S/R·휠라·목찬넬 큰제목은 한 줄로, 하위 비고는 ' / ' 로 이어 큰제목 L 에. 오픈장·이동 은 블록 통째 유지(하부·상부 오픈장 3 + 이동형 오픈장 1). 큰제목에 안 묶인 단독행(도어·키큰도어·문틀재·걸레받이)은 규격째 그대로. - 🔴함정 = 하위행을 「다음 큰제목까지」·「빈 줄까지」로 자르면 뒤에 붙은 단독행 17행이 통째로 사라진다 → 큰제목 종류별 허용 부재집합에서 벗어나는 첫 행에서 끊는다. 「하위 3개 이상」은 기계 기준으로 못 쓴다(키큰EP 하위 4). 상세 = rules.md 🆕 맨 위. - 검증 = 포인탭 전 셀(1512행×32열) 수식 문자열까지 차이 0 · zip 파트 91→91 · VBA 155,648 동일 · 도형 앵커 49·12·6·4 동일 · 프린터설정 동일 · 큰제목 39행 전부 D:K 병합 · 발주일 2026-08-18 하루 밀림 없음. - ⏳[페페] 판단 5건 = ①원본을 덮어쓸지(§2-5 위험작업이라 승인 먼저) ②발주일·납기를 오늘로 바꿀지(지금은 포인탭 값 복사 = 발주 2026-08-18 · 납기 미정) ③칼라를 페이지마다 박을지(포인탭이 1p 에만 KCC YA532, 각 행 구분열엔 YA532 가 다 있다) ④접힌 줄에 두께를 넣을지(9T 2건은 비고에 살아남았다) ⑤「지판없음」 3행을 뺄지. - 세션 = projects/pfs/session-2026-09-16-door-order-world-tab.md · devplan pfs-door-order-world-tab.html.

✅ 26.9.16 — 학동매장 원부자재발주서 「피앤알」 탭 · 인쇄 + 팩스 발송 (완료 · ⏳기기 통신결과만 육안)

[페페] 「원부자재발주서 : 학동매장 / 발주일 오늘 긴급 / 피앤알탭으로 발주서 작성 / 팩스까지 발송, 출력물 인쇄 / 발주서 블록선택해서 선택영역 인쇄로 진행 / 미성형보드 MDF 25T 9자 3매 · 22T 9자 5매 · 18T 10자 2매 / 오엠씨 입고」

[코디] NAS \\192.168.0.101\2026현장\원부자재발주서\09월\한샘 학동매장 원부자재발주서.xlsx — 131,017 bytes / 26.09.16 14:21. 원본 백업 = C:\dev_attic\2026-09-16\한샘 학동매장 원부자재발주서_원본_20260916.xlsx. - 탭 = 「발주서」 복제 → 「피앤알」 rename. C2 만 넣으면 업체시트 INDEX/MATCH 가 단축번호(3)·참조(남태욱상무 010-8775-6864)·전화(032-815-1587)·팩스(032-815-1589) 를 자동으로 채운다. - 규격 표기 = 운영 orderpaper 학동매장 26.6.30 실적 그대로 (25T MDF 4*9(2700) 꼴). 입고일 = 발주일과 같은 9.16(수), 비고 3행 전부 E0, 긴급, 입고처 = 오엠씨(경기 화성시 팔탄면 푸른들판로892-31 / 유상연부장). - 인쇄 = 「선택영역 인쇄」 = 29행 1페이지 블록 = PrintArea $A$1:$J$29, SINDOH D450/CM Series PCL 1부. - 📠팩스 = 코디가 끝까지 보냈다 — SINDOH D450/CM Series FAX 로 PrintOut → 「팩스 전송 팝업」을 win32gui 로 조종(🔴uiautomation 은 이 창을 못 본다) → 송부처 피앤알 / 0328151589 1건 등록 확인 후 「확인」. 팝업 즉시 닫힘 · 오류창 0 · 스풀 0. 컨트롤 ID 표·순서 = rules.md 🆕 맨 위. - 🔴COM 함정 3 = Bash 는 Session 0 라 Excel COM 이 RPC_E_CALL_REJECTED 로 붕괴(→ schtasks /IT + 절대경로 pythonw.exe + 파일로그) · 날짜는 엑셀 시리얼 정수(datetime 은 KST+9 로 하루 밀려 09 .15(화) 로 찍혔다) · NAS UNC 직접 열기 금지. - ⏳남은 것 = 기기 통신결과 육안 1건. 192.168.0.201(KM PageScope 계열 SPA)은 통신이력 XML 이 관례 경로에 없어(전부 404) PC 에서 못 읽는다 → 기기 통신관리보고서가 유일한 확인 경로. - 상세 = projects/pfs/session-2026-09-16-hakdong-pnr-order-fax.md · devplan /pfs-orderpaper-fax.html.


✅ 26.9.15 — 용산 나진 상가 네스팅 → 원부자재 발주서 + 경면코드 자동적용 (운영배포 완료 · ⏳페페 확인 3건)

[페페] 「pfs 용산 나진 상가 도어전용 네스팅 자료 결과 보고 엑셀 발주서 작성. 모드 LPM · 상원보드 생산 / 엣지샘플 효산 제작·입고처 진영LDM / 피스마개 스티커도 효산·입고처 포인 / 엣지 발주서는 선재기업 / 보드 두께별 엣지 수량 50m 올림 / 피스마개는 발주수량 대신 칼라별 보드 수량 / um 경면은 소프트엠보로 / 경면코드가 반영이 다 안됐다 — 컬러에 괄호친 부분 확인해서 경면코드로 적용시켜라 / 운영배포, 원부자재 폴더 9월에 저장」.

[코디] 원본 = 운영 nesting_job job_no=2(field 2183, 부재 127행, 컬러 5종). 119행의 경면칸이 비어 있었다 — 사람이 127번 칠 수 없어서 안 친 것이다. - 규칙 = 컬러명 꼬리 괄호가 곧 경면코드(finishFromColor), FINISH_ALIAS 로 UM=소프트엠보. 빈칸일 때만 채우고 사람 값은 안 덮는다. 자동으로 채운 칸만 점선 밑줄 + 불러오기 때 「N행 자동적용」. - 🔴여유키 승격(promoteFinishSlot)이 진짜 위험지점 — 경면이 그룹키에 들어가면 저장본의 …|민자|양면 여유 키가 고아가 돼 발주 98매가 75매로 조용히 준다(에러 없음). - 🔴붙여넣기는 행추가와 다른 길로 온다 — setupPaste 는 빈 행을 먼저 만들고 값을 나중에 박아서 addPartRow 로는 못 잡는다(web-designer 실측). 채우는 지점 3곳. - 덤 = 드롭리스트 「민자」가 규격을 「경면양면」으로 만들던 잠복버그 · 경면칸 폭 44→86px(부재표)·44→60px(패널) · #parseStat 12→13px(폰트 하한). - 발주서 3탭 = 상원보드(보드 21행/98매) · 선재기업(엣지 12행/950m, 폭=두께+4mm → 15·18T 22mm / 25·30T 34mm, 9·12T·4.5T 제외, 컬러×두께 50m 올림) · 효산엘피엘(칼라샘플 5 → 진영LDM, 피스마개스티커 5 → 포인, 수량 = 칼라별 보드매수). 🔴orderpaper_build 도 24행 캡노트를 안 피하고 있었다 → 슬롯 소비 + 29행 블록 복제. - 검증 = _nesting_finishcode_check 로컬 21/21 · 운영 25/27(기능 전항목 통과 · 쓰기 0건 · 실패 2는 내 마커 개수 기댓값 오기) · _nesting_colorpanel_check 47/47(낡은 단언 3건 갱신) · _droplist_side_check 27/27 · 엑셀 39/39 · 운영 job2 재저장 후 되읽기(자동표시 0행 · BOM 21행 · 발주 98매 · 여유 13건). - 배포 = master d78dd4a → 운영 c7790d0(선별 포워드 4파일 · blob 4/4 일치) · 사이트맵 재빌드 그룹 8 · 페이지 60 · 미반영 1(내 것 아님 — 내 4파일 diff 빈칸). - 산출 = NAS 2026현장\원부자재발주서\09월\한샘 용산 나진 상가 원부자재발주서.xlsx(왕복대조 일치) · devplan pfs-najin-wonbujae-order.html + 허브 카드. - ⏳[페페] 확인 3건 = ①400565 12T MDF 에 손으로 찍힌 「경면」 1행(50×680·2개) — 오타면 지운다(지금 12T 가 경면 1매/민자 7매로 갈렸다) ②발주일 26.9.15 / 입고일 26.9.22(상차 9.27 기준 코디 추정) ③엣지 두께별 12줄 vs 폭별 9줄 · 「칼라샘플」 vs 「엣지샘플」 표기.


✅ 26.9.15 — 부자재 발주서 QA 2차: 현장 검색이 안 잡힌다 (운영배포 완료 · ⏳페페 육안)

[페페] 검증 보고 1건(#fSite) — 「현장검색리스트가 잘 안된다. 예를들어 나진상가 검색을 하려는데 안나옴. 가구업체 데이터는 현장명 검색하면 자동입력되면 된다」 + 「운영배포」.

[코디] 한 증상 밑에 원인이 셋이었다. 하나만 고쳤으면 페페 화면에선 여전히 안 나온다. - ①필터 «전에» 잘랐다 — providers.so_site 의 .slice(0,400). 운영 현장 571건, 「용산 나진 상가」는 568번째 → 뭘 쳐도 안 뜬다. droplist 는 필터 «뒤»에 400 캡 + 「N개 더」를 붙인다. 제거하고 최근순(field_no 역순) 으로. - ②띄어쓰기 — 실제 이름은 「용산 나진 상가」. 공용 droplist.js 검색을 공백 무시 + 낱말 AND 로 (「상가 나진」·「나진 한샘」도 잡힌다). 옛 부분일치 통과분은 전부 그대로 통과 = 목록이 줄어들 회귀 없음. - ③🔴현장을 골라도 아무 일도 안 일어났다 — droplist 가 쏘던 new Event('change') 가 비버블이라 위임(document·tbody) 리스너에 영영 안 닿았다. 네스팅·업무패널은 캡처로 우회해 뒀고 이 화면만 버블 위임이라 field_no·가구업체 연결이 통째로 죽어 있었다. 원천에서 bubbles:true(네이티브와 동일)로 고쳤다. - 가구업체 = 현장 발주처 목록(so_company 신설, 부자재 거래처가 떠 있었다) + 현장 바꾸면 따라간다 (옛 「비어 있을 때만」 = A→B 갈아탈 때 A 업체명이 남았다). 손댄 값은 dirty 로 보존. 서버 LIKE 도 공백 무시. - 검증 = scripts/_sub_orderpaper_site_search_check.py 18항목 테스트·운영 양쪽 ALL PASS (운영은 「용산 나진 상가」 실물 · 한샘 자동입력 · field_no 2183) + 공용 파일을 건드려서 _droplist_side_check.py 27/27 PASS 회귀 확인. - 배포 = master 74d76cd+53d78d9 → 운영 b084520(4파일 선별 포워드 · blob 4/4 일치) · pncad 원천 670df5f+a2309eb · 사이트맵 재빌드(그룹 8 · 페이지 60 · 미반영 2 = 내 것 아님, git diff origin/deploy-live origin/master -- <내 4파일> 이 빈칸). - ⚠남의 검증기 노후 발견(안 고쳤다) — scripts/_nesting_colorpanel_check.py(26.9.14 작성)가 42/47. 실패 5건은 오늘 다른 커밋(경면 컬럼 eaeb693)이 패널에 data-drop 을 넣고 키를 컬러|경면 으로 바꾼 탓이다. 내 변경과 무관(droplist 전용 검사는 27/27). 네스팅 담당 세션이 스크립트를 따라 올려야 한다. - ⏳[페페] 육안 = 현장 칸을 그냥 열면 최근 현장이 위로 온다(옛 순서와 반대). 거슬리면 되돌린다. 네스팅·업무패널 드롭리스트도 같은 공용 파일을 타니 한 번씩 눌러 봐 달라. - devplan = pfs-sub-orderpaper.html 7절 신설 · 허브 카드 갱신 확인.


✅ 26.9.15 — 네스팅 4차: 긴 값은 2줄 · 짧으면 컬럼폭 오토 (운영배포 완료 · ⏳페페 육안)

[페페] 네스팅 검증 보고 1건 — #colorTbl 컬러 헤더를 집어 「도어 부재 입력 테이블도 동일 사항 / 컬럼별 글자가 한글 20자 이상일 때는 2줄 표시 / 그 이하일 때는 컬럼폭을 오토로 해라」 + 「운영배포」.

[코디] 대상 = 「1. 도어 부재 입력」 표 컬러칸 + 우측 「사용 컬러」 패널. 실측 컬러 컬럼이 114px(한글 8.7자)라 마스터 최장 22자가 3분의 1만 보였다. 라벨(span)이 폭·높이를 만들고 input 을 그 위에 투명하게 겹치는 구조로 바꿨다 (함정 3개 = input 줄바꿈 불가 · textarea 로 바꾸면 droplist 사망 · display:none 이면 방향키 이동 사망 → rules.md 🆕).


🆕10:55 7차 — 경면 컬럼 + QA helper 커서(페페 「컬러 우측에 경면 컬럼. 기본 빈칸 = 민자 = 경면X · 발주서 기록시 민자로 표기 · 검색+수동입력」 + 「도어 부재 입력에서도 경면 컬럼이 필요하다. 매핑이 되야해」 + 「qahelper 작동시 커서 변경 없게」). 그릴링 2문 확정 = 값 단위 부재 행 단위 · 발주 표기 BOM 규격에 합성. - 발주 표기 = 18T MDF 양면 → 18T MDF 경면양면, 빈칸이면 18T MDF 민자양면. PFS 에 이미 쌓인 자재 규격 표기(15T PB 경면양면·4.5T MDF 민자양면)와 글자 단위로 같다 → BOM 을 복사해 발주서에 붙이면 손볼 게 없다. - 행 단위라 원장 그룹키 keySide 에 경면이 들어간다 → BOM·사용컬러 패널이 「컬러+경면」으로 갈린다. 배치도 시트 제목·시트번호에도 값 있을 때만 붙였다(안 붙이면 제목이 같은 시트가 두 벌 나온다). - 🔴web-designer 가 잡은 P1 — 발주완료 체크 키에 경면을 안 넣으면 「화이트/경면」 체크가 「화이트/민자」까지 네스팅에서 빼서 «발주 누락»이 된다. 둘은 다른 원장이다 → colorGroupKey(color,finish) 로 통일. - 🔴붙여넣기 매핑 보호 = pasteSkip:1 — setupPaste 는 «배열 순서»로 칸을 맞춘다. 경면이 중간에 끼면 기존 11열 엑셀 붙여넣기가 품명부터 통째로 한 칸 밀린다(비고 칸 newCol 주석과 같은 사고). 경면은 손입력·드롭리스트 전용. - 🔑덤 = 위임 리스너가 color 만 들어 경면을 고쳐도 구분색·패널이 옛 조합 그대로였다(검증이 잡았다). - 패널 = 4컬럼 166/44/40/48(=298px 유지, 「발주완료」→「완료」 축약으로 자리 냄). 패널 폭 300px 은 안 건드렸다 — 키우면 줄바꿈 문턱 1218px 가 밀려 1280px 노트북에서 패널이 아래로 떨어진다. - 옛 저장본 호환(doneColors 컬러명 → 민자 조합 · 여유 키 5토막 → 6토막) · 자재 등록표는 무변경(지시 범위 밖 — 자재 매칭 키는 종전대로 경면 무관 = 같은 소지 원장. 경면별 재고를 따로 잡으려면 자재표에도 칸이 필요하다). - 검증 25항목 ALL PASS · 배포 master eaeb693 → 운영 128a5d8(blob 일치) · uwsgi 11:30:16 KST · health 200. - ⏳[페페] 육안 — 경면 입력·드롭리스트, BOM 규격이 「경면양면/민자양면」으로 나오는지, QA helper 커서.


🆕10:40 6차 — 여유자재·소요량을 저장본에 남긴다(페페 「자재 등록, 네스팅 결과가 네스팅 저장시 같이 저장되게 … 자재 결과 나온 후 여유자재 입력후 그 데이터를 남기기 위해서야」). 🔑파 보니 자재 등록(mats)은 이미 저장되고 있었다 — 진짜로 빠져 있던 건 «사람이 넣은 여유자재»다. 저장본을 열면 지금도 runNest() 가 돌아 결과는 다시 그려지므로 재계산으로 못 되살리는 값만 남기면 된다. 그릴링 1문 → 페페 확정 = 「여유값 + 소요량 숫자」(배치도 스냅샷 제외). - spareByKey(BOM 집계키 keySide → 장수) → opts.spare 저장 → loadJob 복원 → 뒤이어 도는 runNest 가 BOM 을 그릴 때 칸에 그대로 들어간다. summary.bom = 저장 당시 소요량 숫자(렌더된 표에서 긁는다). - ⛒재실행에서는 여유를 안 비운다 — 같은 자재 행이면 따라오고, 비우는 건 새 네스팅·부재 초기화뿐(doneColors 규칙과 동일). - 🔴배치도(sheetsOut.placed)를 안 담은 이유 = 좌표가 통짜라 summary(TEXT 64KB)를 넘길 수 있다. 담으려면 nesting_job 에 LONGTEXT 컬럼 신설 = DB 스키마 변경(§2-5 승인 게이트). parts/mats 는 LONGTEXT, opts/summary 만 TEXT다. - 서버·DB 무변경(opts/summary 는 스키마리스 JSON, 컨트롤러가 _dump 로 통째 왕복) · 옛 저장본은 spare 키가 없어 전부 0. - 검증 22항목 ALL PASS — 저장 payload 생성 → 그 payload 를 저장본으로 되먹여 loadJob 왕복까지(summary 764B). - 배포 = master 65a4a63 → 운영 bb17422(blob 일치) · uwsgi 10:51:34 KST 재기동 · health 200.


🆕10:20 5차 — 행 복사 버튼 [⧉](페페 「도어 부재 입력 테이블에 행별로 바로 아래에 해당 행 복사기능 버튼 추가」). dupPartRow() = rowData() 로 그 행의 지금 값을 떠서 바로 아래에 넣는다(빈 행을 넣는 [+] 와 짝). 🔑배치 = [+][⧉] 를 6px 로 묶고 48px 격리는 파괴적인 [✕] 앞에만 남겼다 — 양쪽에 48 을 주면 액션칸이 104→192px 이 되어 1280px 노트북 가로 넘침이 두 배(web-designer 실측 A안 170 vs B안 128px). 액션칸 min-width 104→152px(부재표만). 기호 ⧉(U+29C9) 두부 아님 픽셀 대조 · 색은 새 토큰 없이 .toggle-cell 파랑 재사용(대비 6.42:1). 자재표 무변경(gridRow 공용이라 cols===PART_COLS 로 걸렀다). 검증 22항목 ALL PASS(값 전량 일치·토글칸·긴 컬러명·순번·구분색·2줄 라벨·간격 6/48px·자재표·[+]·[✕]·콘솔 0). 배포 = master eac90c8 → 운영 56607bc(blob 일치) · uwsgi 10:29:17 KST 재기동 · health 200. ⚠안 한 것 2개(지시 범위 밖, web-designer 선제 제안) = 기존 .addbtn 대비 4.31:1 보정 · 행 복사 단축키(Ctrl+D). ⚠1280px + 긴 컬러명(20자↑)에서 가로 넘침이 기존 33~90px → 71~128px 로 늘어난다 — 이번 버튼이 38px 보탰다. 근원은 26.9.14~15 컬러칸 확장이고, 거슬리면 컬러 max-width:12em 을 줄이는 게 첫 손잡이다.


🔴10:01 회귀 1건 — 「컬러 컬럼이 갑자기 선택이 안된다」(페페 지적, 같은 날 즉시 수정·배포). 원인 = .cellwrap 이 <span> 이라 기본 display 가 inline 인데 패널에만 inline-block 을 줬다. inline 을 컨테이닝 블록으로 삼으면 inset:0 이 라인 조각 기준이 돼 input 이 칸 바깥으로 튕겨 나간다 (실측 라벨 x=321 w=51 / input x=420 w=36) → 눌러도 hit test 가 span.cell-label 에 걸려 아무것도 안 잡힌다. 처방 = .cellwrap{display:block;width:100%} + .cellwrap input{min-width:0}. 배포 = master a55d219 → 운영 3dc33ea(blob 일치) · pfs-live.uwsgi 10:05:50 KST 재기동 · health 200. 🔑검증 구멍도 같이 메웠다 — 23항목이 이걸 통과시킨 이유는 Playwright 가 input 「요소」를 찾아 눌렀기 때문이다. 이제 라벨 좌표를 mouse.click + elementFromPoint hit test(부재표·패널 × 라벨중앙·칸 오른쪽 끝) = 29항목 ALL PASS.


✅ 26.9.15 — 부자재 발주서 신규 /field/sub-orderpaper (운영배포 완료 · ⏳페페 육안)

[페페] 「Pfs에 부자재 발주서 기능 추가. 기존 엑셀 발주서 및 자재관리 페이지 확인해서 추천안으로 구성. 입력시에는 해당 현장 업체를 사용자가 섞어서 입력하고, 추후 정렬로 정리할 수 있다. 발주서는 업체별로 분리 출력 가능하게. 개별 출력 가능하게. 운영배포」.

[코디] 부자재는 상류(작성·출력)가 통째로 비어 있었다 — 지금까지 NAS 원부자재발주서.xlsx 「발주서」 탭을 탭 복제 → 업체명 rename → 수기로 채워 왔다. 그 수기를 대체한다. 하류(orderpaper 발주추적)는 그대로.

✅ 26.9.14 — 네스팅 QA 2건: 컬러 패널 인라인 수정 · 두께↔MDF/PB 상충 경고 — 운영배포 a09f365 완료

[페페] QA helper 2건 + 「운영배포」.

A. 「사용 컬러」 패널에서 컬러명을 고치면 좌측 부재 표의 그 칼라 행을 일괄 치환 - 칸을 상시 <input data-drop="color"> 로(자체 드롭리스트가 칼라 마스터를 띄운다). 연필 아이콘·밑줄 같은 새 시각언어는 안 만들었다 — 부재·자재 그리드 컬러칸과 같은 모양, 발견성은 hover 배경으로. - ⛔자재(원장) 표는 안 건드린다(그릴링 → 페페 확정). 자재 매칭 키 = 두께+MDF/PB+컬러+세로규격이라, 이름을 고치면 「⚙ 자재 자동등록」을 다시 돌리거나 자재표를 손으로 맞춰야 한다(안 하면 네스팅 실행 시 「자재 미등록」 에러 — 조용히 깨지진 않는다). - 병합(이미 있는 컬러명으로 바꿈) = 확인창 1번 + 행수 안내(페페 확정). 취소하면 입력칸도 원래 이름으로 되돌린다. - 발주완료 체크는 «미완료 쪽으로» 보수적 — 체크가 남으면 그 자재가 네스팅에서 통째로 빠져 발주 누락이 된다. 개명 = 해제(기존 규칙과 같다) · 병합 = 양쪽 다 완료일 때만 유지. ⚠web-designer 안(개명 시 유지)을 이 이유로 안 따랐다. - 구분색은 단순 개명일 때만 이관 — 이름만 고쳤는데 표 색이 전부 바뀌면 딴 자재로 보인다. - 부수 수정 = #colorTbl table-layout:fixed + colgroup 48/22/30. auto-layout 이 헤더 「발주완료」에 폭을 뺏겨 긴 컬러명에서 패널 가로스크롤이 이미 나고 있었다(실측 277 vs 238).

B. 두께 ≤12 인데 PB · ≥15 인데 MDF → 그 칸 분홍 - 🔴버튼이 td 를 꽉 채우고 td 는 padding:0 이라 td 배경을 칠해도 안 보인다 → .toggle-cell 에 바른다. - 🔴.toggle-cell.warn 은 :hover 와 특이도가 같다 → 반드시 :hover·td.cellsel 규칙 뒤에 둔다. 앞에 두면 마우스만 올려도 경고가 조용히 사라진다. - 색 #ffb3c1 / 글자 #7a0c2e(6.5:1) + 테두리(흑백·색약에서 배경 톤만으론 안 보인다. 글자가 MDF/PB 두 글자뿐이라 기호는 못 넣는다). - 갱신 훅 3 = applyColorTints() 끝(호출부 7곳 자동) · toggleCell() · 두께 input 위임(종전엔 두께를 고쳐도 아무 재계산도 안 탔다). - 13·14 와 빈칸은 경고 없음(지시 조건 그대로). 범위 = 부재 표만(자재표도 같은 상충이 성립하지만 A 에서 페페가 범위 확장을 거절해 안 붙였다 — 원하면 한 줄).

검증 = 로컬 32/32 · 테스트 38/38 · 운영 39/39 · 쓰기 0건 · 기존 관문 _nesting_qa5_check 운영 115/115 · _droplist_side_check 운영 28/28 · 캡처 육안. 검사기 = C:\dev\pfs\scripts\_nesting_rename_warn_check.py [--test|--prod]. 커밋 = master cf5ac49 → deploy-live a09f365.

⚠사이트맵 숫자가 튀었다 — 내 탓 아니다. 그룹 8 · 페이지 58→59 · 미반영 1→20. 원인 = 다른 세션이 master 에 worktray 커밋 2건(85f358e·9e1e294)을 밀어 worklog_panel.html 등 12파일이 미배포로 잡힌 것. git diff --stat origin/deploy-live origin/master -- web/ api/ 에 내 파일은 하나도 없다 = 내 배포분은 정상 반영. → rules.md 🆕.

⏳페페 = ①패널에서 긴 컬러명이 005C SH… 로 잘린다(48% 폭 · title 로 전체 표시) — 더 넓힐지 ②분홍이 실화면에서 파스텔 8색과 충분히 갈리는지 ③13·14mm 는 경고 없음이 업무상 맞는지 ④병합 확인창 문구 톤. ⚠미조치(범위 밖) = .toggle-cell 12px(13px 하한 위반) — 65px 버튼에 여유 0px 라 폰트만 올리면 글자가 잘린다. PART_COLS 의 kind w:48→58 과 한 세트로 가야 한다(별건).

✅ 26.9.14 — 네스팅 드롭리스트 「셀 우측 동일 라인」 펼침 — 운영배포 8873334 완료

[페페] 네스팅 QA helper 1건(부재 그리드 45행 컬러칸) 「드롭박스를 셀 아래가 아닌 셀 우측 동일라인에서 시작해서 펼쳐지게」 + 「운영배포」.

⏳페페 = ①실사용 체감(컬러 → 품명이 다음 입력칸이라 잠깐 가려진다) ②좁은 뷰포트(≤1100px, 표 가로스크롤 상태)에서 좌측반전 육안 ③안드로이드 실기 필요 여부. ⚠미조치(범위 밖) = web-designer 가 droplist.js 원본 CSS 의 font-size:12px·11px(2곳) = 13px 하한 위반을 지적했다. 네스팅은 자체 CSS 로 13px 를 덮어쓰고 있어 pncad 화면에만 남아 있다. 고칠지 페페 판단. 같이 지적된 「max-height:280px 를 가용공간에 맞춰 축소」도 미착수.

✅ 26.9.14 — 생산현황 출력 메모칸 세로 2분할 — 우측 = 미입고 보드 자동표기 — 운영배포 d535760 완료

[페페] 「생산현황 메모를 세로로 반 나눠라. 좌측은 기존 사용자 입력칸, 우측은 미입고 보드 자재 기준으로 현장명·칼라·입고일」 + 「운영배포」 + 「이 부분은 자동파이프라인 구축해서 매번 자동 갱신한다」. 화면 = C:\dev\pfs\web\templates\basic\field\field_status_print.html(/field/print/status).

⏳페페 = ①실제 인쇄 1장 육안(돋움체 폴백은 프린터 드라이버마다 메트릭이 미세하게 다르다) ②연체(입고일 지난) 항목 강조를 넣을지(web-designer 선제 제안 — 지금은 지난 것과 곧 올 것이 같은 모양이다) ③미입고가 15~20행이 되면 좌측 메모칸이 세로로 늘어나 허전해진다 — 2단 분할 갈지(현재 운영 7행이라 아직 과설계).

✅ 26.9.14 — 네스팅 4차: 부재 표 우측 「사용 컬러」 패널 + 자재발주 완료 제외 — 운영배포 9d3c601 완료

[페페] 「도어 부재입력 테이블 우측 남는 공간에 독립된 스크롤 고정 프레임 + 사용된 컬러 정렬 표 · 자재발주 완료 여부 컬럼 → 네스팅 실행시 완료 항목 제외」 + 「운영배포」. 체크 단위 = 컬러(그릴링 1문 → 페페 확정). 파일 1개(C:\dev\pfs\web\nesting\nesting.html) · 백엔드·DB 0.

⏳페페 = ①1280px 실화면에서 패널·표 육안(계산상 딱 맞다) ②파스텔 스와치가 실제로 갈리는지 ③패널 폭 240px 에서 긴 컬러명(005C SHS1502 무광)이 가로스크롤 되는데 더 넓힐지 ④안드로이드 실기(패널이 표 아래로 내려간 상태).

✅ 26.9.14 — 배차 요율감시 수리 — Actions → 미니PC 이전 + 「성공할 때만 깨지는 관문」 3건 (운영배포 없음)

[페페] 「PFS 요율감시 오류 확인 후 감시 수정바람」. 오경보 1건에서 결함 3층이 나왔다.

검증 = 평시 자체검사 2종 ALL PASS + 요율이 실제 바뀐 상태(2027.1.1 시행 18.0‰/50.2%)를 흉내 낸 사본에서도 ALL PASS (과거 배차 60,260 불변 · 새 주문만 60,250 으로 이동) · 예약작업 실경로 1회 LastTaskResult 0 · 창 안 뜸 · 다음 9/21(월) 09:00 · 운영 선별 포워드 경로 국소검증(파일 1장만·부모 = 원래 deploy-live) · 사이트맵 재빌드(그룹 8 · 페이지 58 · 미반영 1 = 기존 건). 커밋 = master 742e152·6ead39f·ceb2d60·4f06371. 운영 템플릿 변경 0 = 배포 없음. 계획페이지 = http://100.108.234.45:8799/dispatch-rate-watch.html · 함정 2건 = projects/pfs/rules.md 🆕 맨 위.

✅ 26.9.14 — 네스팅 3차: 드롭 토글 · 행 드래그 · 컬럼폭+비고칸 · 행별 [+] — 운영배포 975ccad 완료

[페페] 4건. ①컬러칸 드롭 재클릭=닫힘(토글) ②행 순서 드래그 이동 ③컬럼폭 절약 + 수량 뒤 비고칸 ④행별 [+](그 행 바로 아래 새 행) + [✕] 를 버튼 2개 폭 띄움.

✅한때 미해결이던 --prod ⑦ 「네이티브 select 자체 팝업」 = 검사기 오탐으로 종결(26.9.14). [페페] 운영에서 자재표 「세로규격」 클릭 → 2440/2700/3000 정상 표시 육안 확인. 실사용 결함 아니었다. 🔴원인 = 검사 방식: 운영에선 팝업이 열린 직후 다른 비동기 렌더가 droplist 의 scroll/focus 리스너를 건드려 곧바로 닫는다 → 200~300ms 뒤에 「지금 보이나」로 재면 이미 display:none. ⛒열린 순간을 MutationObserver 로 잡도록 고쳤다 (_nesting_qa5_check.py ⑦). 최종 운영 115/115 PASS · 쓰기 0건. ⚠육안을 부탁할 땐 칸을 정확히 짚어라(26.9.14 한 번 헛짚었다) — 대상은 아래쪽 「2. 자재(원장) 등록」 표의 「세로규격」 (선택칸). 위쪽 「1. 도어 부재 입력」 표의 「세로」는 숫자 입력칸이라 아무것도 안 뜨는 게 정상이다.

⏳페페 = ①자재표 세로규격 팝업 육안(위) ②컬러칸 재클릭 닫힘이 감각에 맞나 ③컬러칸 100px 로도 최장값(005C SHS1502 무광, 필요폭 ≈125px)은 잘린다 — 더 키울지 ④행 드래그는 터치 미지원(raw mouse) — 안드로이드 필요하면 별건. ⚠부수 발견(미조치) = 그리드 input/select 의 computed font 가 Arial 이다(body 는 Segoe UI/맑은고딕). 라벨과 입력값 글꼴이 갈린다 — font-family:inherit 한 줄이면 되나 지시 범위 밖이라 안 건드렸다.

✅ 26.9.14 — 네스팅 2차: 상단 고정 · 컬러 구분색 · 크롬 datalist 폐기 — 운영배포 60b1eb4 완료

[페페] 3건. ③은 1차(아래)에서 내가 만든 것을 도로 걷어내는 지시였다.

⏳페페 = ①8색 파스텔 육안 ②드롭리스트 팝업이 표 우측 끝에서 스크롤바에 안 가리는지 ③고정 2단 세로 공간 ④안드로이드 실기(고정헤더+팝업, 웹 모바일뷰 대체 불가) ⑤삭제한 설명 5문단을 <details> 로 되살릴지. ⚠미결 = droplist.js 를 /static/js/ 로 승격(P2, 지금은 /production/pncad/ 를 빌려 씀) · .muted 12px · .tabbar 390px 가로넘침.

✅ 26.9.14 — 네스팅 QA 5건(버튼줄·제목·칼라DB·Enter 점프·계산기) — 운영배포 de24c6f 완료

[페페] 네스팅 화면 QA helper 보고 5건 + 「운영 배포」. 화면 = /production/nesting 「도어전용」 탭.

⏳페페 = ①컬러칸 자동완성 팝업 실기 1회 — 실제 폭·부분일치(「오크」로 「화이트오크」가 뜨는지). OS 네이티브 렌더라 자동검사로 못 잰다 ②삭제한 설명 5문단을 <details> 접이식으로 되살릴지 판단(지시는 「모두 삭제」라 그대로 지웠다). ⚠알려진 제약 = datalist 팝업이 떠 있어도 ArrowDown 은 다음 행 컬러칸으로 간다(그리드가 화살표를 전역으로 가로챈다) → 컬러 후보는 타이핑 또는 마우스 클릭으로 고른다. ⚠.muted 12px(이 파일 수십 곳)·.tabbar 390px 가로넘침 73px = 기존 미결.

✅ 26.9.14 — 에넥스 발주서 변환 복구(.xlsx 전환 + 사이드카 워치독) — 운영배포 5f2c383 완료

[페페] 「PFS 에넥스 발주서 변환에 문제가 있다. 확인 및 조치해줘. 운영배포」

고장이 둘이었다 — 하나만 고쳤으면 여전히 안 됐다. ①에넥스가 .xls(OLE2) → .xlsx(OOXML) 로 바꿔 보내기 시작 → xlrd 2.x 는 xlsx 를 못 읽어 detect_format 이 조용히 unknown = 「미등록 양식입니다」. ②처리 사이드카(8791)가 26.8.10 20:39 이후 죽어 있었다 → 26.9.14 아침 업로드 3건(08:55·09:44·09:46)이 전부 pending, 화면은 2분 뒤 「시간 초과」. 사이드카만 살렸으면 3건이 error 로 굳었을 것이고, 파서만 고쳤으면 아무도 안 집어갔을 것이다.

⏳페페 = ①/field/orderpaper 에서 금호 구미형곡 3차 부자재 77건(업체 12) 육안 1회 ②업로드 모달 폰트 3곳이 12px 로 13px 하한 위반인데 이번엔 안 건드렸다 — 올리면 margin-top:60px 고정이라 낮은 뷰포트에서 모달 하단이 잘릴 수 있다(미측정). web-designer 미결 「13px 전면 정리」와 한 건으로 묶을지 판단.

✅ 26.9.9 — GS 원주 단구 한샘 견적서 84A(기본) 추가 + 부자재 분리 — 운영배포 5d9bd2f+7cb6ea1 완료

[페페] 「gs 원주 단구 현장 견적서 작업 / pfs 한샘 견적서 등록 / 엑셀파일 나스 원주 단구 폴더에 저장 / 기존 84a가 84a(옵션) 으로 이름 변경 / 84a(기본)이 추가됐다 / 기존 내용은 유지하고 84a(기본)만 신규 추가 / 기존 내용들은 수식 및 합산 유지하면서 숨겨진 행들은 모두 삭제하고 정리 / 메인 탭에 84a(기본) 금액 항목 추가 / 탭 및 명세서 순서는 84A(기본),84A(옵션),84C / 지난번 다른 현장에서 적용했던 추가금액(sub-item) 별도 행 분리 동일 적용 / 운영배포까지」

그릴링 4문 페페 결정 = ①엑셀은 기존 NAS 수작업본 직접 수술(PFS 재생성 아님) ②84C 는 ALT.1·ALT.2 두 탭 유지 ③PFS 는 새 1건 등록 + 옛 V1(3)·V2(2) 보관처리 ④NAS 는 새 파일 「26년 09월」(8월 원본 보존).

🔴덤으로 운영 결함 1건 — 양식(form 3)의 오픈장(25)·키큰 FIX(39)·공틀도어(46) 는 단가 LOOKUP 이 한 칸도 없다 → 적용가 = 빈칸 × 10MM기준 = 0. 운영이 낸 원주 단구 엑셀에서 공틀도어 3탭 1,715,622원이 빠졌다(목록 총액은 정상). ⛒같은 단가군의 다른 블록에서 LOOKUP 을 베끼고 배수를 다시 붙인다(master 5a0c528 → 운영 7cb6ea1). 회귀검사 = C:\dev\_work\gs-wonju-dangu\test_donor_price.py.

✅26.9.7 미결이던 api/pfs/hansem/ 운영배포 완료 — 견적 6(안산 성포) 운영 엑셀이 서버총액 30,889,012 와 정확히 일치 (직전엔 −4,123,878~+7,412,865 어긋나 있었다). 견적 1·4 수식누락 0(회귀 없음).

검증 = 산출 xlsx 100/100 PASS(verify.py) · 구조검사 _xlcheck.py 10시트 결함 0 · PFS 왕복 30/30 · 운영 엑셀 재계산 = 서버총액 차 0원(check_prod_excel.py) · 사이트맵 재빌드 그룹 8·페이지 58·미반영 1(한샘 diff 0). 도구 = C:\dev\_work\gs-wonju-dangu\{spec,build,verify,register,check_prod_excel,test_donor_price}.py.

⏳페페 = ①엑셀 육안 1회(엑셀이 「복원하시겠습니까」를 안 띄우는지 · 84A(기본) 탭 내용) ②한샘 견적에 sub-item 저장 스키마를 넣을지(넣어야 PFS 가 NAS 정본을 그대로 재생산한다. 지금은 부자재가 부모 블록 첫 칸 적용률에 녹아 있어 총액만 맞고 행은 안 보인다, 잔차 −98원).

✅ 26.9.7 — 발주서 정리 탭 모바일 전용 레이아웃 — 운영배포 12e8efb 완료

[페페] 「/field/orderpaper 자재관리 페이지의 발주서 정리탭을 이번 업체별 자재관리 탭처럼 모바일 전용 페이지로. 필터가 매우 많으니 모아서 기본 접힘, 인라인 검색만 기본 노출. 동기화 강조는 안 넣어도 된다. 운영 배포」.

산출 = 파일 1개(web/templates/basic/field/field_orderpaper.html) · 라우트·템플릿 신설 0 · DB 변경 0. master 235e93c→a8d5a74→1bd001d→e0afe90→a9b4914 → 운영 12e8efb(선별 포워드, 템플릿만). devplan pfs-orderpaper-mobile.html + 허브 카드 등록(최근 3개소 확인) · 세션문서 session-2026-09-07-orderpaper-mobile.md.

🔑「모바일 전용 페이지」 = 별도 라우트가 아니다 — 지시의 「업체별 자재관리 탭처럼」이 방식 지정이고 그건 같은 파일 @media (max-width:767px) 카드형 변환이다(26.9.4 에 모바일 전용 목업을 이미 한 번 폐기했다). 🔴최대 리스크 = 같은 템플릿을 세 라우트가 공유(/field/orderpaper · /omc/material · /field/company/<no>/material, 뒤 둘은 어제 운영 배포). #opMainWrap·#opList·.op-site·편집 칩이 전부 겹친다 → {% if not omc_view %} 로 CSS 를 통째로 갈랐다(코덱스 상의 결론도 동일). 운영 HTML 마커 개수로 실증 = /field/orderpaper op-mf-open 7 vs /omc/material 1(JS 뿐).

접었을 때 남는 것 = 인라인 검색 + 「⚙ 필터」 토글(배지=걸린 필터 수) + 적용 칩·건수. 접히는 것 = 분류기준·툴바(자재토글·숨김현장·업로드·동기화)·빠른필터 6·상세필터·초기화. 안 접히는 것 = .op-datewarn(필터가 아니라 데이터 이상 경고). 모바일에서 뺀 것 = 동기화 강조(배너·NEW, 페페 지시) · 블록 일괄조작(자재지정·상태일괄·블록삭제) · 순번(#). ⚠항목 단위 편집(상태·입고일·발주량·비고·품명)은 그대로 된다.

web-designer 실측이 「불편」이 아니라 결함임을 밝혔다 — .op-site-head 에 flex-wrap 이 없어 현장명이 세로로 한 글자씩(w=21 h=203) 쌓였고, 표 실폭 535px 이 가용 328px 에서 overflow:hidden 에 잘려 입고일·상태버튼·삭제× 가 안 보이고 안 눌렸다. 필터·툴바가 세로의 73%(619/844px)를 먹었다.

검증 = 정적 24/24 · 테스트 실측 34/34 · 오엠씨 회귀 24/24 · 운영 읽기전용 34/34 ALL PASS · 사이트맵 재빌드 미반영 1(= 이전부터 있던 /field/worklog 별건, 이 작업 세 화면은 전부 반영). 🔴중간에 한 번 깨뜨렸다 — 첫 push 에 CSS 주석 안 Jinja 태그가 섞여 테스트서버 세 화면이 동시에 500. 정적검사가 잡아 2분 만에 복구, 운영엔 안 나갔다. 함정 5개 = rules.md 🆕 맨 위.

⏳페페 몫 = 노트20 실기 육안 1회(에뮬레이션 통과 ≠ 실기 통과, 26.9.4 에 실기에서만 4건 나온 전례) · 모바일에서 블록 일괄조작이 실제로 필요한지 · 순번(#) 숨김이 종이 발주서 대조 관행과 안 부딪히는지 · 13px 미만 29종 전면 정리(데스크톱 포함) 여부.

✅ 26.9.7 — GS 안산 성포 한샘 양식 재작성 A~G 완료 — 운영 등록 estimate_no=6 · NAS 저장 완료

📄 착수 근거 = projects/pfs/relay-2026-09-07-hansem-form-rebuild.md(페페 확정 규칙 7개 · 양식 구조 실측). 작업 폴더 = C:\dev\_work\gs-ansan-seongpo\

🔴1차 산출은 틀렸다 — sub-item 46건이 통째로 빠졌다(페페가 잡음). 인수인계의 「sub-item 0건」이 오판이었다: /api/estimate/769 는 sub 를 안 준다(/api/estimate/sub/list/<detail_no> 가 따로다). 실제 46건 9,224,150원. v2 가 정본이다 — -추가 블록 16개 · 46칸 전부 반영.

산출물 — ①양식 C:\dev\_work\gs-ansan-seongpo\한샘양식_GS안산성포_4평형_주방전용.xlsx → 운영 form_no=3 활성 ②견적 운영 등록 hansem estimate_no=6(현장 2180 · 평형 4 · 상세 24 · 고아 0 · 총액 30,889,012, 적용률 메모 제거 완료) ③🔵정본(v2, 26.9.7 재빌드) = NAS …\GS 안산 성포 MH\한샘 GS 안산 성포 MH 견적서 v2 (추가금액 반영).xlsx ⛒2차 수정 = 병합 겹침(엑셀 복원 프롬프트) 제거 · 갑지 탭별 합계 참조 복구(총합행 67/60/60/46) · 안 쓰는 블록 삭제(84A 9 · 99A/104 8 · OT84A 6블록) · 숨김 행 0 · 추가 블록 행 순서 단가→수량→비고→적용가(페페 지시, 행이름 단 가). ✅4차 = 블록 구조 포인 항목 1개 = 블록 1개(블록명 = 포인 품명, 단가만 한샘 단가군). master 4aa3ba9. 🔴3차 수정(이중 계상) = 행총액에 추가금액이 이미 포함이라 본항목 = 행총액 − 추가로 바꿨다. 갑지 합계(VAT 별도) = 본오더 소계 30,880,000(= 30,889,139 − 절사 9,139) + 운반비 300,000 = 31,180,000원 ⚠v1(…견적서.xlsx)은 26.9.7 10:54 KST 에 페페가 Excel 로 직접 편집해 놨다 → 덮어쓰지 않고 v2 를 따로 올렸다. 그 편집(절사 행 신설 -9,012 · 운반비 300,000 복원)은 v2 에 반영했다. v1 삭제·교체는 페페 몫.

A~G 처리 = A 슬롯 복제 3→4평형(84C, 내역서 주/수 + 도면 세트) · B 수납·자재비·운반비·추가분견적·가격적용분 내용 전량 삭제 + 숨김(⚠시트 자체 삭제는 못 한다 — 운영 옛 엔진이 수납 탭과 -주/-수 쌍을 양식 필수조건으로 검사해 업로드가 거부된다. 엔진 배포 후엔 삭제 가능) · C 갑지 본오더 4행·추가분 8행 물리 삭제(=+#REF! 동반 제거)· 자재비/운반비/절사/시공비/수납 전부 0·W20·W21 하드코딩 금액 → 수식 · D insert_extra_blocks 구현(이번 견적은 sub-item 0건이라 삽입 결과 없음, 코드·자체검사만) · E 모노크롬 도면 4장 교체(레터박스) · F NAS · G 운영 등록.

🔴작업 중 운영 결함 발견 = 「단가 LOOKUP 없으면 조용히 0」의 짝인 미러 열 적용가 행이 안 채워진다 → 기존 한샘 견적 4건 전부 엑셀이 서버 총액과 −4,123,878 ~ +7,412,865 어긋난다(측정 _prod_impact.py). 고침 = master 58daac4. ⏳운영 미반영 — api/pfs/hansem/ 3파일이 deploy-live 와 벌어져 있다 (hansem_excel.py +445 · hansem_service.py 6 · hansem_estimate_dao.py 11 = 26.9.4 고아 방지 다리도 미배포). 이번 산출물은 배포 없이도 정확하다 — 양식에 정답 셀 레이아웃을 구워 넣었기 때문(rules 🆕 참조).

🔴운영이 v2 와 같은 파일을 내려면 두 가지가 먼저다 — ①api/pfs/hansem/ 배포(옛 inject_ledger 는 하드코딩 BLOCK_ROWS 만 돌아 추가 블록을 못 만들고 오히려 지운다) ②sub-item 저장 자리(hansem 스키마엔 없다). 그 전까지 운영 다운로드에는 -추가 블록이 없다(본항목 24줄만, 금액은 정확). 정본은 NAS v2.

⏳페페 판단 3건 = ①api/pfs/hansem/ 운영배포 여부(하면 기존 견적 4건의 엑셀 금액이 바뀐다 = 바로잡힌다) ②한샘 견적에 sub-item 저장 스키마를 넣을지(넣어야 운영이 v2 를 그대로 재생산한다) ③배포 후 양식에서 수납 계열 시트를 진짜 삭제할지(지금은 숨김) · NAS v1 파일 정리. ⚠미해결 잔재 1건 = sharedStrings.xml 에 라인 아산7차(리뉴얼) M/H·임서현 문자열이 참조 0인 채로 남아 있다 (어느 셀도 안 가리켜 화면·인쇄에는 안 나온다). 지우려면 양식 재업로드 + 견적 재저장이라 값어치 대비 미실행.

🆕 26.9.4 — 포인↔한샘 매칭표 비교축 재정리(추가금액 분리) ✅페이지 반영 · ⏳페페 판단 2건

페페 지시 = 「포인·한샘 양쪽에서 길이로 측정된 단가만 반영하고 추가금액을 양쪽 동일하게 따로 빼서 반영해라」. 대상 = C:\dev\devplan\hansem-poin-price-map.html(http://100.108.234.45:8799/hansem-poin-price-map.html) · 생성기 C:\dev\order-automation\{hansem_price_mapping.py, build_price_map_page.py}. PFS 코드·DB 변경 0(문서 페이지만).

🆕 26.9.4 — 생산현황 출력 미확정 표 헤더 제거 · 아이비젼 축약 · 행 여백 50% ✅운영배포 198744d

페페 지시 3건(= /field/print/status) — ①「상차일 미확정 그룹에서 컬럼헤드를 빼자. AS/추가건과 같은 형태니 컬럼명이 없어도 이해된다」 ②「추가 기본규칙 : 아이비젼글로벌은 아이비젼 으로 축약해서 표기」 ③「각 테이블 행의 높이 여백을 현재의 50%로 줄여 높이 절약」. master 39af394 → deploy-live 체리픽 198744d. 파일 3개(템플릿만).

🆕 26.9.4 — 업체 필터에 「봉적」 버튼 추가(현장목록·견적서목록) ✅운영배포 완료 3cdd6e6

페페 QA 1건(qahelper · /field/list 아이비젼글로벌 버튼) = 「봉적 버튼 추가 / 견적서목록에도 추가바람 / 운영배포」.

🆕 26.9.4 — 넥서스→한샘 자동전환 재검토 + 신영 광주 추가2·추가3 한샘 전용 견적 ✅운영배포 완료 dfd1435

페페 ①「넥서스 표기 파일·현장 한샘 자동전환 됐는지 재검토」 ②「NAS 추가2,3 견적서를 pfs 한샘 견적서로 작성, 금액 최대한 맞춰(완벽 불필요·빠른 작업 우선), 운영배포」. 상세 = session-2026-09-04-hansem-shinyoung-add23.md.

최근 완료(원문 = archive.md 「2026-09-03 이관」) - 26.9.3 업체 전용 현장목록 2차(표 폭·담당자 숨김·상차일 표기·진행버튼 삭제 + 유형 전수 내수) — 운영 168f21d. - 26.9.3 업체 전용 현장목록 QA 6건 — 운영 3990b06. 상세 = 바로 아래 절. - 26.9.3 오엠씨 자재관리 엑셀식 표 전면개편 — 운영 c420f8f. 현장 rowspan 병합·2표(완료 아래·기본 접힘)· 우측 현장목록(숨김 기본접힘)·메인 탭 분류 연동 차단. 상세 = session-2026-09-03-omc-material-mockup.md. - 26.9.3 발주서정리 입고처 컬럼 — 운영 4820787. 프론트 4줄(백엔드는 patch46 부터 이미 있었다). - 26.9.1 거래처 목록 주소 컬럼 — 운영 67ac02c.

🆕 26.9.4 — 파레트용지 한샘 로고 NEXUS 제거(HANSSEM 만) ✅운영배포 완료 2fb811f

페페 QA 1건(qahelper · /production/sticker) = 「한샘의 파레트 용지에서 nexus 문구를 빼라. 추후 롤백할 수 있다. HANSSEM으로만 표기」. master 505bb3e → deploy-live 체리픽 2fb811f.

🆕 26.9.4 — 생산현황 출력 「상차일 미확정」 프레임 + 현장목록·모달 자동완성 차단 ✅운영배포 완료 53c4391

페페 QA 2건(qahelper, /field/modify/2180) = ①「생산현황 페이지 하단(AS그룹 하단)에 새 프레임 — 미확정 현장만 모아서. 양식은 AS 표 동일, AS 는 하단·나머지는 상단, 기본은 상차일 있는 경우 내림차순」 ②「현장 목록·관련 모달들 크롬 자동완성 해제」. master 5d89606 → deploy-live 3파일 선별 포워드 53c4391.

🆕 26.9.4 — /admin/user 검색칸 크롬 자동완성 재발 차단 ✅운영배포 완료 98c4841

페페 QA 1건(qahelper) = 「검색창에 기본적으로 poin01 이 입력돼 전체 목록이 안 보인다(첫 로드는 다 보이는데 작업 중 poin01 만 남는다). 기본 빈칸으로」. master f944e30 → deploy-live 체리픽 98c4841.

🆕 26.9.4 — 시트·보드 모바일 줄 밀림 수정 ✅운영배포 완료 cfbb5db

페페 지적 = 「시트관리 6·7·11·12번 등에서 줄이 밀리고 항목 이름이 우측으로 쏠린다」. 🔑범인 둘, 둘 다 「행마다 grid 가 독립」이라 생긴 것: ①비고를 col1 에 둬서 그 열이 비고 길이만큼 확장 → 비고 있는 행만 품명코드가 밀림 → 비고를 아래 줄 전체 폭으로 내림(보드는 품목 col1~2 와 비고 col2 가 같은 칸을 밟던 겹침도 해소) ②그 뒤에도 남은 x=75/88 두 종류 → 거래처 칩 글자수(포인 2자 vs 에넥스 3자)가 col1 을 좌우 → col1 60px 고정 + 칩 말줄임. 🔑둘 다 운영 데이터에서만 재현됐다(테스트엔 칩이 한 종류뿐). 검사기에 「1줄째 주값 x 종류가 1개인가」 항목을 신설해 회귀를 막는다 — scrollWidth 가로넘침 검사로는 못 잡는 유형이다. 검증 = 운영 206행 전부 x=96 동일(보드 22행 x=30) · 전체 ALL PASS · 노트20 실기 육안(6·7·11번과 8·9·10번 시작점 일치).

🆕 26.9.4 — 오엠씨 3페이지 모바일 표 = A안 2줄 압축 ✅운영배포 완료 624b63c

페페 지시 = 「표가 데스크톱 구조 그대로라 가로 전체를 한 번에 못 본다. 가로폭 줄이고 행을 2줄 이상으로. 각 페이지 목업 먼저 만들어 테일스케일 링크로 올려라」 → 목업 3안 제시 → 페페 A안 확정 + 「목업의 안내 문구는 실제 페이지에 넣지 마라」 → 구현·배포.

🆕 26.9.4 — 오엠씨 모바일 목업 폐기 + 메뉴를 「업체별 페이지」 그룹으로 ✅운영배포 완료 dcad1d9

페페 지시 9건(모바일 사이드메뉴를 아이비젼 기준으로 · 목업 타이틀/설명 삭제 · 엑셀 모바일 숨김 · 빈 버튼 삭제 · 상단 시트/보드 유지+확인서 숨김+자재관리 추가 · 모바일 전반 보완 · 오엠씨를 업체별 그룹으로(가나다) · 그룹명 「업체별 현장」→「업체별 페이지」 · 운영배포). master cefcd39+50d52d6 → deploy-live 체리픽 1b1801b+dcad1d9.

🆕 26.9.4 — 아이비젼글로벌 현장 유형 = AS 재전환 ✅운영 DB 반영 완료 (코드변경 0)

페페 상담 = 「아이비젼 현장은 입주완료 세대 AS라 규모가 작다. AS로 넣으려니 상위 본건이 없어 내수로 바꿨더니 생산현황 출력에서 본건 표로 들어갔다. 유형 선택에 손이 덜 가는 방안」 → 방안 3개 제시(A 그대로 AS·부모 비움 / B 출력 필터를 「AS로 시작」 1줄 완화 후 「AS(단독)」 유형 신설 / C 업체 기본유형 컬럼) → 페페 선택 = A.

🆕 26.9.4 — 현장목록 유형관리 모달(톱니바퀴) + 상차일 KO 표기 ✅운영배포 완료 2507c20

페페 QA 2건(qahelper) = ①「현장 등록」 버튼 왼쪽 끝에 같은 높이 톱니바퀴 옵션 아이콘 → 모달, 일단 유형 CRUD」 ②상차일 컬럼 26.10.21(수). master 62b35ea 체리픽.

🆕 26.9.3 — QA 3건(검색칸 자동완성 · 모바일 사이드바 · 월마감 컬럼폭) ✅운영배포 완료 690bb89

페페 QA 3건 = ①/admin/user 검색칸 「기본은 비워두고 엔터로 검색」 ②모바일 사이드메뉴 펼침에 로고·사용자정보가 안 보임 ③/estimate/monthly-close 현장명 폭 줄이고 비고 폭 늘리기. master a607507 체리픽.

🆕 26.9.4 — 「생산자동화시스템」 → PFS 전면 교체 ✅운영배포 완료 ddd9135

🆕 26.9.3 — 사이드바 로고 텍스트 = PFS ✅운영배포 완료 12338c8

🆕 26.9.3 — 모바일 햄버거 항상 3줄 ✅운영배포 완료 0434506

페페 지시 = 「폴딩버튼을 한번 쓰면 3줄 모양에서 X 모양으로 바뀐다. 항상 3줄이 나오게」.

🆕 26.9.3 — 상세 모달 = 코디 정리본(kb_digest) ✅운영배포 완료 30cf5af

페페 지적 = 「게시글에서 관련 현장 파싱만 해서 게시하니 현장 내용이 섞인 한 덩이 문장에 다른 현장 내용도 들어가버렸다. 전체 내용은 카톡 게시글에 있고, 이 상세 모달내용은 코디가 매번 내용 확인해서 다시 정리해주는 게 좋겠다」.

🆕 26.9.3 — 업체 전용 현장목록 모바일 3차 ✅운영배포 완료 6e7c8f9

페페 모바일 QA 6건 = ①인라인 검색창이 「대기중」 탭을 덮는다 ②Search Filter 공간 최소화(버튼+모달) ③사이드 메뉴를 누르면 겹치는 등 버그 ④상세 버튼 폐기 → 현장명 클릭 ⑤모바일 모달 가로 중앙 ⑥필요시 한 행 2줄로 가로 압축. 운영 6e7c8f9(master 6커밋 9b7933b 3cbfc67 94c030f f9e6bdc d96f051 b1f5a3c 체리픽).

🆕 26.9.3 — 업체 전용 현장목록 2차 (/field/company/452) ✅운영배포 완료 168f21d

페페 QA 2차 = ①표 가로폭 최대한 절약(우측을 비워 요약 게시판 자리 확보 — 게시판 자체는 이번 작업 아님) ②담당자 컬럼 숨김 ③상차일 26.8.29(수) 표기 ④「진행 현장」 버튼 삭제(중복) ⑤현장 전체 유형을 내수로 전수 수정. ⛔/field/list(현장 목록)는 안 건드렸다.

🆕 26.9.3 — 업체 전용 현장목록 QA 6건 (/field/company/452 아이비젼글로벌) ✅운영배포 완료

페페 QA(#status-tabs) = ①/field/list 의 대기중·진행중·완료 탭을 그 자리에 가져오기 ②업체명 필터 금지 ③완료 항목은 표 맨 아래 ④페이지당 20건 ⑤컬럼 주방·일반 제거 ⑥컬럼 상세(카톡 게시글 모달) · 운영 배포.

🆕 26.9.3 — 발주서정리 원자재가 부자재로 떨어진다 (QA 코멘트 1건) ✅운영배포 완료

페페 QA(/field/orderpaper 「18T MDF 경면양면」 셀) = 「원자재 항목이 부자재로 들어가는 경우가 많다. 두께 + PB/MDF + 양면(경면양면·경면민자 등) 구조면 100% 원자재」 → 진단 후 페페 확정 3건대로 반영.

페페 확정(26.9.3) ①안① = 보드 규칙이 사용자지정보다 위(시트 다음) ②면 표기 없는 보드도 포함 (18T MDF 4*8 벌/을·6T MDF 갑/을) ③피스마개 스티커 = 부자재.

(아래는 착수 전 진단 원문 — 판단 근거로 남긴다)

🧹 pfs handoff 완료건 이관 (2026-09-16, 25,000자 캡 정리) — 원문 그대로

NOW (2026-08-06) — AWS 비용절감 Phase A 완료(A1~A5·A7) · ⏳페페 승인 = A6(RDS-test 삭제)

세션 인계용 요약: 테스트 DB를 RDS에서 EC2 안 Docker MySQL 8.4.8로 옮겼다. 앱은 이미 전환 완료·검증 통과. RDS-test 는 아직 살아 있다(롤백 자료). 남은 것 = ①페페 육안 ②A6 삭제 승인 ③Phase B RI 구매.

발단 = 페페 질문 "pfs 테스트 서버를 미니PC로 빼면 어떤가(AWS 비용). 환경이 달라져 관리가 달라지나?"

판정 — 미니PC 이전은 접었다(실익 대비 리스크 과다)

실행 결과 (Phase A · 2026-08-06 완료분)

단계 내용 결과
A1 RDS-test 파라미터 채취 · 서비스명 확정 · MySQL 5.7 정체 규명 완료
A1-b 옛 MySQL 5.7 stop+disable (덤프 보관 후) RAM 177MB 회수(786→609MB)
A2 docker.io 20.10.21 설치 + mysql:8.4.8 컨테이너 127.0.0.1:3307 전용
A3 RDS-test → 컨테이너 이관 87테이블·뷰1·함수2, 데이터 MD5 일치
A4 pfs-test.env 전환 + uwsgi 재시작 앱→컨테이너 접속 확정
A5 러너 + 실브라우저 검증 8 OK / 0 FAIL
A7 swap 2GB · 재부팅 내성 · 일일 백업 cron 완료
A6 RDS-test 최종 스냅샷 + 삭제 완료(2026-08-07) RDS 2대→1대
A8 🆕EBS 백업 신설(DLM 일일 스냅샷 + cron 시각 조정) 완료

✅ A6 완료 (2026-08-07) — RDS-test 삭제 · 그리고 🔴백업 구멍을 하나 메웠다

🆕 A8 — EBS 백업 신설 (페페 질문 "백업·스냅샷 설정됐나?" 에서 발견)

🔴실사 결과 EC2 백업이 아예 없었다 — 원래부터. DLM 0 · AWS Backup 0 · EBS 스냅샷 0 · AMI 0. 지금까지 티가 안 났던 이유 = 중요한 게 전부 RDS 에 있었기 때문. 이번 이전으로 테스트 DB 가 그 무방비 영역에 들어왔고, 🔴일일 논리 백업마저 루트와 같은 볼륨(stat device 동일 실측)이라 볼륨 사고 시 DB와 백업이 동시에 사라지는 구조였다.

⏳ 다음 (인계)

  1. 페페 육안 — pfs-test.poin.co.kr 로그인 → 발주서정리·견적·worklog 가 평소와 같은지.
  2. 내일 확인할 것 = ①DLM 첫 스냅샷이 실제로 생성됐는지(KST 8/8 03:00 이후 describe-snapshots) ②cron 논리 백업 pfs_test_daily_2026-08-08.sql.gz 생성 여부 ③기준 스냅샷 snap-0c40a5eabe84b0ab0 completed ④RDS RI pfs-prod-rds-ri-2026-08 이 active 로 넘어갔는지 ⑤Cost Explorer 에 RI 할인 반영(하루 뒤부터 보인다).
  3. ✅Phase B RI 구매 완료(2026-08-07 · 페페가 CLI 로 실행) — 코디가 offering ID 를 조건별 유일 매치로 특정해서 넘기는 방식을 썼다(옵션 오선택 여지 0). B1 EC2 eccbe392-a683-43e3-b6f0-9ef4d3a9528e = t3.medium · Linux/UNIX · standard · Region 스코프 · No Upfront · 수량 1 · state active · 2026-08-07~2027-08-07 · $0.0314/h. B2 RDS pfs-prod-rds-ri-2026-08 = db.t4g.micro · mysql · Single-AZ · No Upfront · 수량 1 · $0.02/h(구매 직후 payment-pending → active. 선결제 0 이어도 이 상태를 거치며 할인은 StartTime 부터). 매칭 실측 대조 = EC2(t3.medium·Linux/UNIX·tenancy default·온디맨드·running) / RDS(db.t4g.micro·mysql· MultiAZ false·available) 전 항목 일치 → 별도 연결 작업 없이 자동 적용. Region 스코프라 인스턴스가 ap-northeast-2c 여도 무관. ⚠B1 은 t3 패밀리를 벗어나면 무효(1년 내 Graviton 전환 계획 있으면 재검토).
  4. 곁가지(오늘 주제 밖, 사실만) = EC2 가 Ubuntu 18.04 + Python 3.6.9(2023 EOL). 언젠가 교체 필요 — 그때가 인스턴스 재선정 기회. apt 저장소는 아직 살아 있다(EC2 미러 + security 정상 응답).

코드 변경 = pfs 리포에 검증 러너 1개 신규(scripts/_db_migration_smoke_check.py, 미추적 유지 — 커밋 없음). 사이트맵 재빌드 불요(페이지·라우트 변화 0).

2026-08-10 완료 (루트 HANDOFF NOW 에서 이관 — 같은 날 경고선 30,000자 초과분 정리)

2026-08-06~07 완료 (루트 HANDOFF NOW 에서 이관 — 2026-08-10)

카톡관리 「변동 반영 이력」 소프트딜리트 (2026-08-05 완료 · 2026-08-06 HANDOFF NOW 에서 원문 cut 이관)

🆕pfs 카톡관리 소프트딜리트 [코디] 26.8.5 ✅운영배포 완료 — 「변동 반영 이력」 행의 ✖ 가 실제삭제→숨김 이력(deploy-live 0a75e3a ← master c0129d2 3파일 선별 포워드). 안내문 문제가 아니라 구멍이었다 — 이력 행은 로그라 ✔완료·⊘취소를 뺐는데(26.7.28) 그래서 ✖ 말고 내릴 방법이 없는데 그게 실제 삭제였다. 이력 행만 hide/status=삭제로 보내 ↩복원 가능, 다른 행 ✖ 는 그대로(지시 밖). 🔑두 리포가 짝 = PFS VALID_STATUS ↔ 사무실PC 데몬 board_rows.STATUSES, PFS만 늘리면 데몬 ValueError→화면엔 「반영 실패」뿐 → 데몬 먼저+재시작(완료·상승권한 불요) 후 배포. 검증 = 신설 _kakao_board_softdelete_check.py 테스트 28 + 운영 24 ALL PASS(테스트만 --api 실왕복→ack 정리, 운영은 저장 안 누름 — 누르면 고객 단톡방이 실제로 바뀐다). 사이트맵 3→2(/field/worklog 걷힘). ⏳페페 = 운영 육안.

pfs 사이트맵 (2026-08-04 완료 · 2026-08-05 HANDOFF NOW 에서 원문 cut 이관)

🆕pfs 사이트맵 [코디] 26.8.4 ✅신규 — 테스트/운영 화면 테크트리(devplan/pfs-sitemap.html, 기획서 pfs.html 양방향 링크). 🆕2차(같은 날) = 가로형 관계도로 교체(master ad705e3) — PFS 루트에서 오른쪽으로 뻗는 다이어그램, 노드엔 큰 제목만, 상세는 팝업(페이지 클릭=상세 / 그룹 클릭=접기 / ⓘ=요약 / 루트=서버메타). 커넥터는 순수 CSS(li flex+center → top:50%가 노드 중심, JS 좌표계산 0), 기본 = 전부 접힘(펼치면 뿌리가 화면 밖으로 나가 목록이 된다). 공용API·화면밖 미반영도 같은 뿌리에 매달아 한 장. 사이드 메뉴로 두 맵 전환·펼침접기·미반영만·검색. 원천 전부 실측(수기 0) = 두 RDS menu_catalog SSM 덤프 + 두 브랜치 라우트 파싱 → 그룹 8·페이지 49·API 893. 🔑미반영 = 커밋 아닌 화면 뒷단 파일 해시(playbook §2) → 주황 AL발주서·AL설정 관리 2건. 트리 밖 미반영 파일은 별도 절(안 적으면 리포 전체로 오독). 검증 = selftest + full E2E + theme/font FAIL 0 + 실브라우저. 서버 코드 무변경(master 5c2aef2). ⏳페페 = 육안. 함정 4·갱신법 → projects/pfs/session-2026-08-04-sitemap.md

pfs 메모알림 (2026-08-04 완료 · 2026-08-05 HANDOFF NOW 에서 원문 cut 이관)

🆕pfs 메모알림 [코디] 26.8.4 ✅운영배포 완료 — 생산현황 메모가 바뀔 때마다 텔레그램 즉시 발신(deploy-live 44ece4b, master cf6d117+4904f30 선별 포워드 4파일·AL 무유입 확인). 신호는 저장 경로가 모이는 field_memo_service 한 곳에만. 🔑경로 = EC2→api.telegram.org 직결(코디 PC broker는 EC2에서 못 닿는다) · 키는 env/pfs-{live,test}.env 주입(.env.production 심볼릭이 읽음, 백업 .bak-memo-notify) · 끄는 법 = TOKEN 줄 삭제 후 재시작(코드 수정 불요). ⚠알림이 업무를 막지 않는다 — 별도 스레드+예외 삼킴(자체검사가 전송을 강제로 터뜨려 저장 성공 확인). 본문에 [운영]/[테스트] 라벨 필수. 검증 = 자체검사 21항목 + 테스트 실서버 E2E 10항목(비로그인 401 회귀 포함·원복 확인) + 두 서버 send ok: True 실왕복 + 운영 HEAD/uwsgi/401. ⚠운영은 저장 E2E 미실시(실데이터 previous 밀림) → 최종 확인 = 페페가 메모 한 번 고쳐보기. 🆕신규 기본규칙 = pfs 고치면 사이트맵 재빌드까지가 한 작업(CLAUDE.md §4 + pfs rules.md, 이번에 첫 적용 — /field/list 주황 걷힘 확인). → projects/pfs/session-2026-08-04-memo-notify.md

AL발주서 QA 8건 (2026-07-29 테스트 배포 완료 · ⏳운영 미배포)

2026-07-31 HANDOFF NOW에서 원문 cut 이관(운영배포 지시는 여전히 페페 몫 — NOW에 1줄 유지).

master b69d325→f6bcfb2→6f9732c. ①인쇄가 「AL업체 제목 아래 프레임 선만」 찍히던 것 = @media print visibility 토글이 모달 transform·max-height·overflow에 잘린 것 → 인쇄 전용 iframe 문서로 분리(+양식 헤더 colspan n-3→n-4로 우측 빈 컬럼 제거). ②업체 다중등록(그릴링 1문항 → 페페 선택: 헤더 여러 줄 + 그리드 컬럼 선택) — 빈칸=첫 업체로 일괄, 미리보기·엑셀은 업체마다 발주서 1장(블록 통째 배정), 저장=vendors JSON + item al_vendor/glass_vendor(patch44, DAO 멱등 ALTER), 첫 업체는 기존 단일컬럼 유지로 목록·검색·구버전 무손상. ③계산식 색 #333(블랙 80%) + 「폰트 블랙 70%+」를 pfs 기본 지침으로 projects/pfs/rules.md 신설(페페 지시). ④계산셀 굵기 제거. ⑤엑셀 빈블록을 인쇄영역 밖이 아니라 행 삭제(AL 180→20행), 부수로 입고처가 첫 블록에만 채워지던 버그 수정. ⑥datalist → 자체 인라인 드롭리스트(부분일치+Enter 확정). ⑦업체행 CSS grid 정렬 + 담당자·전화·팩스 폭 오토. ⑧그리드 width:max-content(지정폭=하한)로 잘리던 컬럼 확장. 검증=엑셀 자체검사 + 테스트 E2E 18 + UI Playwright 27(콘솔0). ⏳페페 몫 = 운영배포 지시(지시문에 문구 없어 안 함) + 실제 인쇄·엑셀 육안. → projects/pfs/session-2026-07-29-al-orderpaper-qa8.md

OMC 협력 페이지 (2026-05-23~06-08 완료·운영배포·검증)

견적 v2 패치 누적 내역 (~2026-05-23, 운영 반영)

견적 구조 복사 (타입/K/F/항목/sub) — 테스트 배포 완료 (2026-06-09 c2b5db2→Actions 27213107339)

견적 v2 타입SSOT 페이즈A·B + 후속결함 5건 + 펜아이콘 — 운영 배포 완료 (2026-06-10 a523d39→Actions 27246653521 ✓)

handoff 2026-06-10 이관 원문(진행중·미결 절). - master 미반영 4커밋(페이즈B 123aba1·후속fix d200229+51da6cd·펜아이콘 28c7f3f)을 deploy-live에 머지(페이즈A 03b9583은 이미 운영 반영됨). 운영 서버 grep 검증(SSM, /home/ubuntu/pfs): HEAD=a523d39·펜🖊 2·prompt 1·dblclick 0·DAO company_margin_rate 1·buildTargetListHtml 2 전부 통과. - 타입 이름 수정(#1) 최종형: 더블클릭(draggable 충돌로 폐기)→펜(🖊) 아이콘 클릭→window.prompt로 새 이름 입력(인라인 input replaceWith 폐기 — 기존 탭이 input으로 바뀌던 혼란 해소). 탭 UI 전환 없이 이름만 변경·저장은 사용자 몫(markDirty). 미사용 .typetab-rename-input CSS 정리. - 전체마진 자동/수동(#2): 이미 정상 동작 확인(추가작업 없음) — pickSite가 현장 업체 company_margin_rate(estimate_dao.py:716 조인·company.margin_rate 컬럼)를 읽어 applyGlobalMargin(rate, true) 자동 적용. 사용자 수정→수동 배지+NULL규약 재로드 유지. - 후속결함 #3·#4·#9·#10: 코드 운영 반영됨. #3·#4 하위호환 약점 유지: NULL규약 이전 기존 견적은 자동행에도 margin_percent 값이 남아 1회 재저장해야 자동행 NULL 정리·정상화(DB 마이그레이션 없음). - (미결 2 이관) 1번(타입 순서 + SSOT 통합 + 1:1) — 페이즈 A 완료(2026-06-10 03b9583 테스트 배포·채티 재검증 통과): 다음 = 페페 화면 수동 확인 → 이상 없으면 운영(deploy-live + 운영 DB 동일 A 시드) 별도 승인 후 진행(당시 운영 미반영 → 이후 a523d39 머지로 코드 운영 반영). 지시문 C:\dev\pfs\CODI_estimate_type_order_phaseA_integrated.md(실행 완료). 구 지시문 ..._fieldtype_seed.md는 "폐기·실행금지". - (미결 2 이관) 페이즈 B 10건 — 테스트 배포·검증·수동확인 완료 → 후속 결함 5건: 본체(123aba1) 코드 9건 테스트 반영. 페페 화면 확인 결과 정상=#2·5·6·7·8, 결함=#1(이름편집 발화안됨)·#3·#4(자동/수동 마진 오복원)·#9(복사 대상위치 기존행 미표시)·#10(복사 출처 계층경로 미표시). 진단=session-2026-06-10-phaseB-verify-followup.md. 후속 지시문 = C:\dev\pfs\CODI_estimate_phaseB_fix.md(A=#1 draggable이 dblclick 가로챔→이름span draggable=false+mousedown 해제 / B=#3#4 margin_div는 계산방식이라 자동수동 컬럼 없음→자동행 margin_percent=NULL 저장규약·loadEstimate 추측비교 폐기 / C=#9#10 buildTargetListHtml+출처경로 제목 / D=cp-tgt CSS). JS+CSS 2파일·백엔드/DB 무변경. 실행·테스트 검증 후 a523d39로 운영 배포 완료. 본체 재진단 상세 = session-2026-06-10-phaseB-rediagnosis.md, 본체 지시문 = CODI_estimate_phaseB_bundle.md(실행 완료). - (미결 2.5 이관) (참고) 페이즈 A 운영 배포 — 미반영 확정(2026-06-10 실측·이후 a523d39로 코드 반영 해소): deploy-live에 03b9583 없음·운영 field-types 404였음. 잔여 운영 DB 작업(A시드·finish 숨김 E)은 handoff 미결 2 유지.

견적 v2 임시 계산기 행 + 합계 천원올림 보정 — 운영 배포 완료 (2026-06-10 deploy-live 3bb8457→운영 Actions 27253586285 ✓)

handoff 2026-06-10 이관 원문(미결 2.6 상세). - 운영 반영 3커밋: 1차 e26983c=#calcFrame 프레임+계산기 모듈(비저장 임시 계산 행). 2차 dcd060d(테스트 배포 ✓)=컬럼동일화(calcVisibleCols/calcCellForCol로 visibleCols() 기반 동적생성, 하드코딩 12컬럼 폐기, 항목 행과 순서·폭·라벨 일치) + 마감재 멤브레인('13') 고정·컬럼 숨김 + SUB colspan 동적화. 3차 256ed17=calcItemTotal 천원올림 부동소수 보정 — Math.ceil(withMargin/1000)*1000 → Math.ceil(Math.round(withMargin)/1000)*1000(estimate_regist_v2.js:167-174 1곳만). 400000×1.1=440000.00000000006 찌꺼기가 천원올림을 한 칸 더 올려 1,000원 과다(441,000) 청구되던 결함 정정. - 백엔드에 천원올림 없음 확인(합계는 프론트 단독 계산·서버는 저장만 → JS 이 한 줄이 단일 지점). - 검증: node 문법 PASS / 수식 단위검증 4종 — 단가10만×2·마진10 → old 441,000→new 440,000 ✅, 정상 올림 회귀 100,001·마진10→111,000 불변 ✅, SUB 포함 400,000+55,000·마진10→501,000 불변 ✅ / 테스트 Actions 27253348027 성공 / 운영 Actions 27253586285 성공 / 테스트·운영 양 서버 배포 JS에 Math.round 보정 반영 직접 확인. 화면 E2E(저장 라운드트립)는 로그인벽으로 코디 미확인. - 지시문: 2차 = 코디 직접, 3차 = C:\dev\pfs\CODI_estimate_total_rounding_fix.md(실행 완료). 보정 후 기존 견적 재저장 시 합계 1,000원 감소 케이스 가능 — 영향 건수 조회·일괄 정정은 handoff 미결 2.6 잔여로 유지.

견적 마진율 자동/수동 모드 완전 영속 (2026-06-10 운영배포 — handoff 이관 원문)

handoff 2026-06-10 이관. 구현·운영배포 git 관찰: b6314b6 master → 37d997d deploy-live(타 세션 실행). - 경위: 페이즈B후속 4dcfec2가 JS만 고쳐 미해결 → 재진단. - 근본 원인 = estimate_service.py _normalize_detail/_normalize_master의 if v is None: continue가 프런트의 margin_percent: null을 default 0으로 강제 → NULL 규약 무력화(자동행이 수동 0%로 재로드, 구형 휴리스틱 재발동). 추가 2건: ②마스터 전체마진 모드 미영속(저장 시 항상 값 → 재로드 항상 "수동") ③select_estimate에 c.margin_rate 미포함(자동 복원 소스 부재). - DB 실측(SSM): estimate/estimate_detail margin_percent 둘 다 NULL 허용, CONVERT_EMPTY_STRING_TO_NULL(0)=0(UPDATE 경로 무해) → 스키마 변경 불필요. - 처방 = 마스터에도 NULL 규약(NULL=자동·업체 margin_rate 추종, 값=수동) + normalize None 통과(_NULLABLE_KEYS) + GET에 company_margin_rate 동봉 + 라벨 클릭 수동→자동 복귀 토글. 지시문 = C:\dev\pfs\CODI_estimate_margin_mode_persist.md(3파일: service·dao·v2 JS).

완료 이력 — 2026-06-18 이관분 (handoff 진행중에서 cut, 원문 보존)

06-19~07-07 완료 이관 (2026-07-07 handoff 정리 시 편입)

자재관리 탭 성능 시리즈(07-07 6건)·재번호·자재관리 초기 구축·업체관리·입고일정·견적 등. handoff NOW에서 완료 처리해 이관. 07-07 자재관리 구조개선 최종본은 handoff NOW 유지(육안 대기).

완료(2026-07-07) — 자재관리 탭 편집 클릭 버벅임 해결: table-layout:fixed (master 1d79b92→deploy-live 93dc5f5, 테스트+운영 사용자크롬+운영배포, 승인 DEPLOY-20260707-HKVV)

완료(2026-07-07) — 자재관리 탭 느려짐 근본해결: 폼요소 지연 렌더링 ★진짜 원인★ (master 0407f73→deploy-live 7819c63, 테스트+운영 사용자크롬 Playwright+운영배포, 승인 DEPLOY-20260707-36RQ)

완료(2026-07-07) — 자재관리 탭 행삭제 메모리 300MB 스파이크 근본수정 (master 2c18ef2→deploy-live b0bc891, 테스트 Playwright+운영배포, 승인 DEPLOY-20260707-ZN7E)

완료(2026-07-07) — 자재관리 탭 연속 삭제 최적화 (master 8e08404→deploy-live 94c6fb4, 테스트 Playwright+운영배포, 승인 DEPLOY-20260707-E8G8)

완료(2026-07-07) — 자재관리 탭 행삭제 버퍼링 제거(낙관적 UI) (master 988b07c→deploy-live c3e8a37, 테스트 Playwright+운영배포, 승인 DEPLOY-20260707-7FND)

완료(2026-07-07) — 자재관리 탭 발주량 가운데정렬·폭 auto, 품명/규격 폭 auto (master 87edf34→deploy-live a5ce41d, 운영배포, 승인 DEPLOY-20260707-R94Y)

완료(2026-07-07) — orderpaper_no 재번호(1..1500) + 동기화 번호튐 근본수정 (master 4748172, 운영 재번호+백업, 페페 승인 DEPLOY-20260707-RM6T)

완료(2026-07-06) — 자재관리 탭 행삭제(숨김)·품명/규격/단위 편집·발주량 단위분리·15TT→15T·히스토리 아이콘 (master 091da3c→deploy-live 75b8ff0, 테스트 Playwright E2E+운영배포, 승인 DEPLOY-20260706-2ZPM)

완료(2026-07-06) — 자재관리 탭만 숨김 현장·현장 미지정 항목 표시 (master 60e7ef1→deploy-live fc89a66, 테스트 Playwright+운영배포)

완료(2026-07-06) — 자재관리 탭 기본 검색기간 1개월→3개월 (master 4988fa2→deploy-live f14897b, 테스트+운영 Playwright+운영배포)

완료(2026-07-06) — 발주서 동기화 버그(피앤알 TLG0129MU 미노출) 근본수정 + 재동기화 + 삭제항목 복원 (master 9a8ef49, 테스트→운영 재동기화+운영 데이터정정)

완료(2026-07-06) — 견적목록 v2 견적구분 estimate_div 전환 + 입금여부 토글버튼 (master 552d936→deploy-live eceedec, 테스트 Playwright+운영배포)

완료(2026-07-06) — 707 견적서 추가건 등록 + 견적등록 스킬 마진율 auto화

완료(2026-07-03) — 자재관리(mm) 탭 사용량/누적사용량 컬럼 + 사용 이력(patch38) (master 0209fe6·0c53cd0→deploy-live 5de8f7d, 테스트 E2E PASS+운영배포)

완료(2026-07-03) — 현장별자재 신규현장 검색에 field 테이블 현장 병합(구조개선) (master 101a369→deploy-live 8eceecd, 테스트+운영 Playwright PASS+운영배포)

완료(2026-07-03) — orderpaper 현장별자재 신규 현장 모달 인라인 검색 재작성 + 드롭다운 모달 밖 표시 (master a10e889·bbdf705→deploy-live 567c41d·5492117, 테스트 Playwright 검증+운영배포)

완료(2026-07-02) — 현장등록 담당자 3종 검색 모달→인라인 (master 960e9ea→deploy-live 0fc8a1a, 테스트 실브라우저 검증+운영배포)

완료(2026-06-26) — 업체 휴가일정 사이드메뉴+신규 페이지 (master 5f12f82/e309117/3eb2c60→deploy-live 8bb1f56, 테스트+운영 E2E PASS)

완료(2026-06-26) — 견적 현장검색 모달 컬럼 헤더 다중정렬 완성(직전 미완 WIP 마무리) (master 92b8730→deploy-live 3c40489, 테스트 Playwright+운영 배포·검증 PASS)

완료(2026-06-26) — 견적 별도항목 업체별 소계 토글(화면 표시 전용) (master 6719a49→deploy-live d4e8688, 테스트 Playwright+운영 배포·검증 PASS)

완료(2026-06-26) — field/modify 상차일 달력 월 표시 숫자(N월)화 (master a6208e7→deploy-live 82117a1, 운영+테스트 검증 PASS)

완료(2026-06-26) — 현장별자재(material-spec) 대우 용인(field 2109) 운영 등록 (spec_no=2, 읽기검증 PASS·멱등)

완료(2026-06-25) — pfs 검증 5건 운영 배포 (master 0290966→deploy-live 68816cc, 테스트+운영 배포·검증 PASS)

완료(2026-06-25) — field/worklog 전체 펼침/접기 토글 + 기본 2개월 기간제한 + 전체 검색 (master f5c9aa2→deploy-live 1c11aaf, 테스트+운영 배포·API E2E PASS)

완료(2026-06-25) — 견적 엑셀 부분출력 현장블록(A6~F11) 빈칸 수정 + 결재칸 이미지 L39~O41 정렬 (master 9150576→deploy-live 25457db, 테스트+운영 배포·검증 PASS)

완료(2026-06-25) — 견적서 출력 페이지 선택 모달 재설계: 체크박스 폐지·카드 색상 단일 소스 + 그룹/전체 일괄 (master 18ee277→deploy-live e2dc45b, 테스트 Playwright + 운영 검증 PASS)

완료(2026-06-25) — 견적서 출력(print-v2) "페이지 선택→엑셀 반영" 운영 미반영 = 캐시버스터 누락 수정 (master e53a916→deploy-live b6d1ee8, 운영 검증 PASS)

완료(2026-06-25) — 견적 v2 타입 항목 수량 항상 편집 가능 + 단가×수량 합계 미반영 버그 루트픽스 (master bbe3cbb→deploy-live b6d1ee8, 테스트+운영 배포 완료)

완료(2026-06-25) — AS GS오산 도어발주서 추가건5 견적 운영 등록 (페이지 20, 추가건 견적 정리 스킬)

완료(2026-06-24) — 현장유형(field_div) 셀렉트 하드코딩 제거 → common_code(FIELD_DIV) 매핑 (master 039c9ee→deploy-live 3ced907, 테스트·운영 검증 PASS)

완료(2026-06-24) — orderpaper 자재관리 정렬규칙 교체 + 사용자지정 다중정렬 컨트롤러(엑셀 정렬식) + 고정값 영속 (운영배포 deploy-live 739fc86, 테스트·운영 Playwright PASS)

완료(2026-06-24) — orderpaper 재고관리 엑셀 → 운영 재고량 시드 + 동기화 신규항목 발주량 복사

완료(2026-06-24) — orderpaper 동기화(발주서 정리) 복구 (PC 이전 후 사이드카 SSM 단절 근본수정)

완료(2026-06-24) — orderpaper 자재관리탭 마감 3건 + 운영배포 완료 (master 0842082→deploy-live f8c1905, 운영 Playwright 검증 PASS)

완료(2026-06-24) — orderpaper '📦 자재관리' 첫 탭 신설 + 재고량 RDS 영속 (테스트 배포·실작동 검증 PASS, 운영배포 완료↑)

완료(2026-06-22) — worklog 2차: 맥락파악 매핑 + 진행중/대기중(active) 현장 우선 (master c8a8fca→deploy-live 31781ae)

완료(2026-06-22) — 견적 추가건 '출력 포함' 토글 DB 영속 (엑셀/PDF 출력 반영 버그·적대검토) (master 9e6bf67→deploy-live 7a28611)

완료(2026-06-22) — worklog 미연결 묶음 추정현장 자동연결 기능 신설 + 운영 적용 (master 12dfe79→deploy-live c054dd3)

완료(2026-06-22) — AS GS오산 도어발주서 추가건3·4 견적 운영 등록 (추가건 견적 정리 스킬)

완료(2026-06-22) — 견적 v2 현장검색 키워드 엔터 즉시검색 운영배포 (master 10bd2cc→deploy-live 1858742)

완료(2026-06-22) — 입고일정 탭 포커스모드에서 상단 탭바 유지(다른 탭과 동일 내비) 운영배포 (master 21acb70→deploy-live 4bcc11e, ?v=20260622h)

완료(2026-06-22) — 도면 PDF 자동작성 파서 실가동 + 자동 스케줄(사이드카) 가동

완료(2026-06-22) — 현장별 자재 모달 버튼 전면 복구 + 신규현장 드롭다운/가구업체 자동 + 적대검토 후속 2건 — 운영 배포 완료 (master ec178a9→bef032a → deploy-live 26271f2, ?v=20260622c)

최근(2026-06-21) — orderpaper 신규 3번째 탭 '🪵 현장별 자재'(material-spec 이식) 테스트 배포·검증 PASS (master 9421d1c→cf026b3, ?v=20260621b, 운영 미배포)

최근(2026-06-20) — 업체 관리 자재 하위 분류(PRODUCT_CAT) + 마스터 목록 영구편집 + 하드웨어→자재 운영배포 완료 (master 8841d9b(+fix 8828d25)→deploy-live a156d5b(+fix cherry-pick a9c6df8), ?v=20260620d, test+prod 완료)

최근(2026-06-20) — 업체 관리 3b(2탭·칩·자사핀·목록모달) 테스트 배포 — ※위 자재분류 항목으로 대체·운영배포 완료 (master a0c1213)

최근(2026-06-20) — 업체 관리 권한 매트릭스 그룹화 + 그룹/전체 일괄변경 테스트 배포 (master a9bdb52, ?v=20260620a, 운영 미배포)

완료(2026-06-20) — 업체 관리(company-permission) 업체분류·자재 토글 + 리스트관리 모달 목업(3번 채택) → 구현·운영배포 완료(상세=최상단 자재분류 항목). 아래는 목업·DB조사 참고이력.

최근(2026-06-20) — 자재관리 기본 탭 사용자별 저장·복원 운영배포 완료 (master 562cbae→deploy-live 193e8c0, ?v=20260620j)

최근(2026-06-20) — 입고일정 검색 비영속 + QA Helper 전역 관리자(is_super_admin) 전용 운영배포 완료 (master 338a01b→deploy-live bc61e71, ?v=20260620i)

최근(2026-06-20) — 입고일정 검색=현장 드롭다운 + 기본뷰 타임라인 운영배포 완료 (master 1b71ff5→deploy-live 75dcb8f, ?v=20260620h)

최근(2026-06-20) — 입고일정 B 포커스모드 채택 + 날짜 연도제거 + 현장목록버튼 삭제 운영배포 완료 (master 75330e9→deploy-live 5d923c9, ?v=20260620e)

(이전) 입고일정 '와이드 재설계' 목업 6안+조합 — 제시·선택 (위 B안 채택으로 완료)

최근(2026-06-20) — 입고일정 QA 리포트 2건 운영배포 완료 (deploy-live 11bdccd→c899762→f3c3a5a, master da468de→936e709→9c7ae9f, ?v=20260620d)

최근(2026-06-20) — QA Helper 운영 노출 + 토글 위치 조정 운영배포 완료 (6bb1044)

orderpaper 동기화 신규항목 강조 + 후속 4건 + 노트삭제 — 운영배포 완료(a9fe1b5, 2026-06-20)

(이전) orderpaper 동기화 후 신규항목 강조 — 테스트 배포·백엔드 검증 (16534fc) — 위 항목으로 운영배포 통합됨

최근(2026-06-19 밤) — 입고일정 6건 재작업 운영배포 완료 (ef674d8, ?v=20260619j)

⚠️ 최근(2026-06-19 저녁) — 입고일정/발주서정리 3개 batch 복원(되돌림) — 페페 "마지막 작업들이 잘못됐다, 재작업 예정"

최근(2026-06-19) — 입고일정/발주서정리 완료업체 그룹화·타임라인 중복제거 3건 운영배포 완료 (af8c91a, ?v=20260619h)

최근(2026-06-19) — 입고일정/발주서정리 개선 7건 운영배포 완료 (2699e72, ?v=20260619f)

최근(2026-06-19) — 발주서 정리 발주량(qty) 인라인 편집 운영배포 완료 (19e8aa7)

최근(2026-06-19) — orderpaper 입고일정 탭 + 전역 레이아웃 개편 + 비고 기능 운영배포 완료 (bf8cfea)

최근(2026-06-19) — 견적서 엑셀 결재칸 + 페이지선택 보완 (운영배포 완료)

최근(2026-06-18 세션) — 전부 운영배포 완료

최근(2026-06-19 추가) — orderpaper '현장별 입고일정' 실제 탭 (테스트 배포 완료)

최근(2026-06-19 후속 3건 — 테스트 배포 완료, af3f1bd/2ab9c93)

  1. 타임라인 현장컬럼 가로스크롤 항상 고정: 원인=간트 .grow(flex 행)가 .gantt 뷰포트폭으로 제약돼 sticky .glab 컨테이닝블록이 일찍 끝나 ~790px 지나면 풀림. 수정=#opSchedWrap .grow{ width:max-content }(행이 콘텐츠 전체폭) + glab z-index:4(바·마커 위)·우측 그림자. Playwright 실측 scrollLeft 0~2400 offset 1 고정. (orderpaper_schedule.css, ?v=20260619d)
  2. 상단바 제거·사이드 통합(전역, base.html + 신규 css/pfs_layout.css): topbar 제거 → 로고·폴딩토글(sidebartoggler 클래스 유지로 mini 토글 동작)·사용자정보(신동승 차장+비번변경·로그아웃)를 좌측 사이드 상단으로. topbar 70px 오프셋 회수(page-wrapper/left-sidebar padding-top:0). pfs_layout.css는 base.html {% block css %} 밖 head에 링크(자식 템플릿이 못 덮음, ?v=20260619a). mini-sidebar 접힘 시 텍스트 숨김. field/orderpaper·field/list 양쪽 검증.
  3. 사이드 메뉴 간격 절약: (1차) .sidebar-nav a 패딩 축소 → 2차 되돌림: 항목 padding은 테마 기본 복귀, nav-small-cap 그룹 상단여백만 30→12px 축소(목록 압축·하부 공간 확보). (pfs_layout.css §5)

최근(2026-06-19 사이드/레이아웃 4건 2차 — 테스트 배포 bfefa97)

최근(2026-06-19 추가 2건 — 테스트→2026-06-19 운영배포 완료 bf8cfea)


(2026-07-20 이관) 완료·배포 완료 이력 — NOW→archive 정리

아래는 handoff NOW에서 이관한 완료·운영배포 완료 항목(원문 보존). 원 순서 유지.

(신규) 다음 세션 인계 (2026-07-14 갱신)

(이전) 다음 세션 인계 (2026-07-13 갱신)

완료(2026-07-07) — QA 발주처/현장명 오분해 근본수정: 파일명 선행 '추가' 마커 (파서 master d95e4b8, 운영 데이터 17건 정정, 승인 DEPLOY-20260707-4ZU8)

완료(2026-07-07) — 자재관리 탭 구조개선: 50행 페이지네이션 + 검색 디바운스 + 전행 hover 제거 (master cca4132→deploy-live c27b971, 테스트+운영 E2E, 승인 DEPLOY-20260707-GSDP)

2026-07-24 이관 — 루트 HANDOFF NOW 완료건 (원문 그대로)

루트 HANDOFF NOW 이관 (2026-07-27, 캡 20,000자 시행)

루트 HANDOFF.md NOW가 39,399자로 비대해져 매 세션 시드복원 비용이 커짐(적대검증 4자 합의 1순위) → build_brief.py의 CHAR_CAP 게이트를 루트 HANDOFF에도 적용하고 NOW 항목 원문을 여기로 그대로 cut 이관했다(삭제 0). NOW에는 1~2줄 요약 + 이 문서 포인터만 남는다.

루트 handoff 완료이력 이관 (2026-07-27, 페페 지시)

projects/pfs/handoff.md가 25,190자로 비대해져 BRIEF 클립(앞 6,000자) 창을 완료건이 차지하고 있었다 → ✅완료 항목 원문 그대로 cut 이관(삭제 0). handoff에는 NOW·확정사실·미결만 남긴다. 07-20 이관분(06-19~07-06)에 이어지는 2차 정리. 06-19자 "운영 미반영 잔여 없음" 항목은 2026-07-27 patch-id 실측(미반영 20건)으로 무효가 되어 함께 이관했다. - ✅완료·운영 배포 — OMC 보드 품목 편집 모달에 비고 입력칸 (2026-07-24, 코디, 페페 "운영배포"=승인). /omc/board 사이드 품목 ✎ 편집 모달(modalItem)에서 재고 수량 조정 시 비고를 바로 기입. ①web/templates/omc/board.html: itemEditNote 입력칸 추가(placeholder="미입력 시 '재고 조정'으로 기록"), openEditBoardItem()에서 초기화, saveBoardItem()이 adjust-stock 페이로드에 note 전달. ②api/pfs/omc/service/board_service.py adjust_stock(): note 있으면 사용, 없으면 기존 '재고 조정' 유지(하위호환·DB/스키마 무변경 — inout note 컬럼 재사용). master c8e2a1c → deploy-live cherry-pick fd9f2c6. 검증=①dao 스텁 자체테스트 4케이스 PASS(비고 trim 적용/미입력·공백은 '재고 조정'/증감 방향·수량·차이0 무기록) ②SSM으로 운영서버 실파일 확인(live 템플릿 itemEditNote 3곳·서비스 note 폴백 존재·운영 HEAD=fd9f2c6). ⏳다음=페페 육안. - ✅완료·운영 배포 — 배차/택배 목록 주소 가독성 (2026-07-24, 코디, 페페 "운영배포"=승인). web/templates/basic/dispatch/dispatch_list.html 행 렌더러(622·628행)의 출발지·도착지 주소 span을 #8a96a3 11px → #4a5765 13px(파일 기존 토큰 --dc-ink-2 값 재사용). 2줄 변경, 로직 무관. master 6f2d2ae → deploy-live cherry-pick f8aa9e4. 검증=diff·origin/deploy-live 내용 확인(운영 육안은 페페 — 로그인 필요). +후속(같은날, 운영배포) — 목록 가독성 3건(페페 지시): ①주문일 연도 2자리(26-07-24) — fmtDate()는 날짜입력칸(dcOrderDate/cOrderDate)·출력물(출고요청서·택배의뢰서)에서 그대로 쓰이므로 공용 함수는 손대지 않고 목록 행에서만 .slice(2)(공용 변경 시 <input type=date> 값 깨짐). ②차량 컬럼 88px→68px + 셀 nowrap·좌우 padding 8px로 폭 절약. ③인수자 셀에 기존 dc-ellipsis(nowrap+말줄임, 현장명 칸이 쓰던 클래스) 적용 → 항상 1줄, 긴 값은 title 툴팁(실측 인수자 길이 p95=7자, 10자↑는 1464건 중 2건뿐). master a05008f → deploy-live cherry-pick 96a5677. 검증=node로 행 마크업 실제 렌더해 assert(2자리 연도·4자리 잔존 없음·인수자 dc-ellipsis+title·차량 nowrap·fmtDate 원본 유지) ALL PASS. - ✅완료·운영 배포 — 휴가일정 중요업체 체크박스 + 폰트 10% 확대 (2026-07-24, 코디, 페페 "운영배포"=승인). web/templates/default/vacation.html 단일파일. ①표 첫 컴럼에 중요업체 체크박스(기본 전체 체크) 추가 — 해제하면 타임라인에서 제외되고 창 범위(tlWindow)·정렬·막대 배치가 남은 업체 기준으로 재계산(필터를 tlSorted() 한 곳에만 넣어 창·정렬·렌더 전부 자동 반영). 체크 상태는 화면 상태만(VAC_OFF, 해제된 것만 담음) — 서버 저장 없음, 새로고침시 전체 체크(DB·API 무변경). ②vac-* 폰트 일괄 10% 확대(표 14→15.4 / 표헤더·버튼·타임라인 업체명·범위 12→13.2 / 입력칸·검색항목 13→14.3 / 타임라인 타이틀 14→15.4 / 날짜헤더·막대글자 10→11px). master 067d8ef → deploy-live cherry-pick bdcfa99(전체 merge는 미배포 master 82커밋이 딸려가 회피 — 직전 배포들과 동일 패턴). 검증=JS 문법체크 + node 자체테스트(체크해제 시 창 209일→13일로 재계산·재체크 원복 assert PASS) + origin/deploy-live 내용 확인. ⚠️운영 페이지 HTTP 육안검증은 미실시(로그인 필요·이 PC aws CLI 미설치로 SSM 불가) → 다음=페페 육안 확인. +후속(같은날, 운영배포) — 체크 상태 서버 저장(페페 "새로고침시 유지" 지시): company_vacation.important_yn TINYINT(1) NOT NULL DEFAULT 1을 ensure_table()의 멱등 ALTER로 자동 추가(기존 _DDL_NULLABLE과 같은 패턴 — 컬럼 있으면 1060 에러를 try/except가 삼킴, 수동 DDL·마이그레이션 불요·앱 재시작 시 1회 적용). 신규 API PUT /api/vacation/<no>/important(체크만 갱신 — 업체·날짜 빈 미완성 행도 저장되게 기존 update()와 분리). 목록 SELECT에 important_yn 추가, loadList()가 0인 행만 해제 복원(값 없으면 체크 유지 = 하위호환). master c78ad90 → deploy-live cherry-pick f69d066. 검증=①node 자체테스트(복원·창 재계산 13↔209일·PUT 경로/본문 assert PASS) ②테스트서버 실 API E2E(임시행 생성→기본 1 확인→0 저장→재조회 0→1 복구→임시행 삭제, ALL PASS) ③운영 GET 실측: important_yn 컬럼 응답 확인, 기존 11행 전부 1(=전체 체크). 운영은 읽기만 호출(쓰기 없음, ALTER는 get_list→ensure_table가 자동 적용). - ✅완료·운영 배포 — 자재관리 탭에서 보드 3건이 안 보이던 문제 (2026-07-23, 코디, 페페 "운영서버 작업·배포 승인"). 원인 2개. ①용두동 KAEX7-SR: orderpaper 1455~1458(오엠씨 원자재)가 remove_yn=1 del_manual=1=화면 수동삭제 상태(NAS 원본 엑셀엔 실재) → 운영 RDS 복원(가드+before/after). ②의정부 7201-SKE·MND40ED: DB는 활성인데 원본 엑셀 오엠씨 탭 발주/입고 날짜 미기입 → 템플릿 기본값 2026-01-02 파싱 → 자재관리 3개월 창(passBase의 refMs<now-90d) 밖으로 밀려 통째 숨음(파서 버그 아님). 수정=all-items에 regist_date 추가 + badDate()(날짜가 등록일보다 120일 이상 과거면 오기입으로 보고 창 예외). 처음 "등록일 최근이면 통과"안은 정상 과거건까지 260행 노출돼 기각, 실측 분포(오기입 166일↑/정상 81일↓)로 120일 컷=39행. 커밋 master d35976f→31e2278, deploy-live cherry-pick 34cfbbf→28a1f50(전체 merge는 미배포 월마감이 딸려가 회피), ?v=20260723a. 검증=테스트·운영 all-items 실HTTP + 필터 재현(의정부 5행 False→True). 같은 증상 10블록/7현장(GS 오산·GS 인천 산곡6·용두동 씨엔글라스샵·신우APT·금강 부산 에코·한양 이천 대월) 동시 해소. ⏳다음=페페 육안, 근본예방=발주서 엑셀 날짜 기입. +후속(같은날, 운영배포): 동기화 때 날짜 경고 리포트 추가 — date_warnings()(노출 기준일이 파일 월보다 120일↑ 과거=숨김 유발, 날짜칸 빔=미기입 2등급)를 orderpaper_sync.py stdout 끝에 출력(사이드카 페이지·result_text 양쪽) + '지금 동기화' 완료 시 노란 경고박스(#opDateWarn). 자체점검 test_date_warnings.py 6케이스 PASS. 실측 숨김 20블록/미기입 22블록. master bc9e2dc→deploy-live b40ddb6. - ✅완료·운영 배포 — 견적서 엑셀 A6 업체명 가운데정렬 + 넥서스·에넥스 (주)접두 (2026-07-22, 코디, 페페 "운영배포"=승인). estimate_print_service.py: ①_decorate_company_name() 신설 — orderer(=A6 업체명) 값에 넥서스·에넥스 업체면 (주) 접두(이미 (주) 있으면 무접두). ②A6(A{b+6}:C{b+6}) 정렬 s["l"]→s["c"](origin·참조셀 양쪽). master 974ca55→테스트, deploy-live 4352624 cherry-pick→운영(충돌0·전체 merge는 무관파일 충돌로 회피). self-check 4케이스 PASS. ⏰예약 리마인더: 8/1 09:00 텔레그램(schtasks 일회성 reminder-nexus-hansem-20260801→C:\dev\tools\reminders\nexus_hansem_rename_20260801.py→broker /notify-done) = "넥서스→한샘 업체명 변경" 알림. 변경작업 자체는 페페 지시 후 _decorate_company_name()의 넥서스→한샘 반영. - ✅완료·운영 배포 — 업체 필터 버튼식 전환 + 견적서v2 확대 (2026-07-22, 코디, 페페 "운영배포"=승인). ①업체 필터를 드롭다운→버튼 그룹(btn-group, .pfs-company-btn)으로 변경: 기본 전체 표시(선택 없음), 버튼 클릭 시 해당 업체만, 같은 버튼 재클릭 시 해제. ②동일 기능을 견적서 관리 v2(estimate_list_v2.html, 필터 div #search-result-datatable_filter, 데이터 datatableJSON, 신규 applyCompanyFilter()가 clear/add/draw 대체)에도 적용. 두 페이지 모두 company_name 부분일치·클라 필터·서버 무변경. master 3a05acd→테스트, deploy-live 73c9ae9 cherry-pick→운영(충돌0). ※직전 select판(field_list만, 3d1222e/4316fd6)은 이 커밋으로 대체됨. - ✅완료·운영 배포 — AL발주서 + 생산 스티커 출력 (cherry-pick 배포) (2026-07-21, 코디, 페페 "운영 배포" 지시=승인). master가 deploy-live보다 70커밋 앞선 상태에서 얽힘 진단 후 신규파일 위주라 분리 가능한 2기능만 cherry-pick. 운영 DB 선셋업(멱등·추가만, SSM+prod env): AL=al_orderpaper/al_orderpaper_item 테이블+메뉴(menu_no 43, al_orderpaper_seed.py prod) / 스티커=door_order_file·door_order_item·sticker_print_log·door_sync_request 테이블+메뉴(생산>스티커출력 menu_no 45, codi_sticker_schema.py+_v2+_menu_fix prod). 코드: deploy-live에 11커밋(스티커8+AL3 시간순) cherry-pick 충돌0(api/config.py 블루프린트 additive 자동병합), push 6394f8b→48ed33b. 검증: 운영 HEAD=48ed33b·uwsgi active·/field/al-orderpaper·/production/sticker·/api/al-orderpaper/vendors 모두 200. 미배포 잔여(운영 미반영): 자재관리 UI·orderpaper파싱은 OMC 보드/시트관리와 같은 파일 공유(얽힘)라 이번 제외 → 별도 결정 필요. 배차/택배(courier 마이그레이션 필요)·휴가타임라인·현장별 자재사양서(v3 마이그레이션)도 미배포. - ✅완료 — 테스트 field 전량 운영 미러 교체 + 카톡 메세지 반영 (2026-07-21, 코디, 페페 지시). ①테스트 field(1976→2041)·production_status(1975→2041)를 운영 데이터로 전량 미러 교체(운영=SELECT만, 테스트=트랜잭션 쓰기, field_no 운영값 보존). 스키마 가드+백업테이블 field_bak_20260721_prodrepl·production_status_bak_20260721_prodrepl(테스트 RDS, 롤백용 보존). 스크립트 scripts/_field_replace_test.py. ②더하임 주하늬 과장 카톡 메세지 반영(대상 용두동=2129 "SGC 광주 용두동"·LH의정부=2137 "LH 의정부 우정"). 최종형(페페 수정지시): 비고·자재비고(몸통재/마감재입고)에 넣은 것 전량 원복(운영값 미러 복원), 내용은 생산현황 최하단 전역 "생산 메모"(field_memo.json 파일 기반, web/static/uploads/memo/field_memo.json)에만 핵심 기입(오엠씨 입고건 제외). 운영+테스트 파일 모두 반영(페페 "운영서버 반영" 지시=승인, RDS 아닌 서버파일). 운영은 기존 상세노트(출고/LH의정부 엣지·용두동 플랩·하드웨어) 보존 후 append(생산현황 출력은 current만 표시 → merge 필수, previous는 비움). 디스크 재확인 PASS. 스크립트 _field_msg_apply_test.py(1차·폐기됨)→_memo_apply.py(원복+메모)→_memo_fix.py(merge)→_memo_verify.py. 주의: field_memo=단일 전역 메모(현장별 아님), 출력 current만 노출. 생산메모 파일 경로 소유권 chown(dir 소유자)로 앱 재쓰기 보장. - ✅완료·운영 데이터 수정 — 자재관리 품명칸에 규격이 뜨던 버그 (2026-07-20, 코디). 근본=orderpaper.item_name_user에 규격조각('15T/18T MDF')이 저장돼 COALESCE로 원본 item_name(WAU38-SR…)을 덮음(코드버그 아님=레거시 데이터, 서버 쓰기경로 /item-name 1개·정상). 운영 RDS에서 오염 5행 전부 item_name_user=NULL 정리(안전가드+before/after 검증, scripts/_fix_inu.py·_fix_inu2.py SSM): 1543·1544·1545(신우APT, 07-20 1차) + 328·329(다른 현장, 07-20 2차). 전역 item_name_user 오염 0건 달성(정상 사용자편집도 0). 상세=archive. - 견적서 엑셀 기본보기 = 페이지 나누기 미리보기 + 배율 100% — 운영배포 완료(2026-06-19): _set_print_area에 sheet_view.view='pageBreakPreview'·zoomScale=100·zoomScaleSheetLayoutView=100. master 9387fbc→deploy-live cherry-pick 3724fae. 운영 견적711 4시트 sheetView 실측 검증. - 운영 미반영 잔여 = 없음(2026-06-19 git cherry·net diff 실측): master↔deploy-live 순수 차이는 migrations/create_dispatch_tables.sql 1개뿐 — 배차(dispatch) 기능이 deploy-live서 한 번 revert(cd7faab) 후 재적용된 흔적의 무해 마이그레이션 기록 파일(배포는 SQL 미실행·운영 DB 테이블 기존재). 런타임 영향 0이라 의도적 미배포. .gitignore(cbe6674→33b1930)는 운영 동기화 완료. 구 핸드오프의 540eb1a 생산메모 미반영 메모는 stale(patch-id상 이미 운영 반영됨).

26.7.30 루트 NOW 캡 정리로 이관 (원문 그대로)

(HANDOFF NOW 이관 2026-07-31)

(HANDOFF NOW 이관 2026-07-31)

26.8.2 루트 NOW 캡 정리로 이관 (원문 그대로)

26.8.5(수) HANDOFF NOW에서 이관 — pfs 카톡관리 「체크=표시, 저장=일괄전송」(26.8.4 완료)

루트 HANDOFF NOW 이관 (2026-08-06, 캡 여유 확보)

견적서 재작성 + 현장 단위 차수 이력 (2026-08-06 완료 · 2026-08-08 HANDOFF NOW 에서 원문 cut 이관)

🆕pfs 견적서 재작성 + 현장 단위 차수 이력 [코디] 26.8.6 ✅운영배포 완료(deploy-live ff48c8b ← master c69c2d8+641ff82 5파일 선별 포워드 · 운영 RDS archive_yn DDL 선행 674행). 도면이 통째로 바뀌어 견적서를 새로 쓸 때 이전 차수는 삭제가 아니라 보관. 🔴지금까진 만들 방법이 아예 없었다 — 현장:견적서 1:1 가드(estimate_regist_v2.js:2142)가 현장 선택을 막았다 → 🔑가드는 한 줄도 안 고치고 estimate_count 에 AND archive_yn='0' 만. 🔑불변식 = 「보관 안 된 것이 곧 지금 쓰는 견적서」(현장당 1건)라 되돌리기는 해제가 아니라 자리 바꾸기(PUT /<no>/select) — 목록 「차수 N」 모달에서 그 현장 전 차수를 한 표로 비교하고 고른다. ⚠추가건은 field_no 가 비어 있어 부모 조인 필요. 🔴덤 = 실패가 성공으로 새어나간다(ajaxSuccessProcess 는 code 2000 만 실패로 보는데 서버 예외는 9999). 운영 708 → 테스트 797 이관(대우 용인 MH·detail 50·sub 53, 행 전량 일치). 검증 = 테스트 러너 2종 32+21항목(둘 다 원상복구까지) + 운영 읽기전용 18항목 ALL PASS (🔑page.route 로 POST/PUT/DELETE 를 아예 차단하고 돌려 오조작 0 증명 · 보관 0·월마감 후보 11 불변·콘솔 0). 사이트맵 미반영 10→2(남은 2 = 기존 AL 백로그). ⏳페페 = 운영 육안(「차수 1」 눌러보기). → projects/pfs/{handoff,rules}.md

대우 용인 오엠씨 탭 1페이지 초기화·재입력 (2026-08-06 완료 · 2026-08-08 HANDOFF NOW 에서 원문 cut 이관)

🆕pfs 대우 용인 오엠씨 탭 1페이지 초기화·재입력 [코디] 26.8.6 ✅운영 완료(코드변경 0·커밋 없음). 페페가 NAS 엑셀 오엠씨 탭 1페이지 행을 지우고 고쳤다 → 그냥 동기화로는 안 되는 이유가 2개였다: ①그 블록 4행이 del_manual='1'(화면 ✕ 삭제)이라 동기화가 remove_yn=IF(del_manual='1','1','0') 로 계속 숨긴다 = 엑셀에 살아 있어도 영원히 안 뜸 ②item_key=sha1(파일|탭|섹션|자재구분|**idx**) 라 중간 행이 빠지면 idx 가 밀려 옛 사용자편집이 다른 자재에 상속(실측 receive_date_user=07-14·재고 39/7 이 엉뚱한 보드에). → 「초기화」 = 그 블록만 물리 DELETE 후 신규 INSERT 로 재수신. block_key=sha1(파일|탭|섹션|자재구분) 이 탭 1페이지 단위 그대로라 다른 탭 무영향. 실행 = _reset_daewoo_omc_prod.py 12행 삭제(before 전량 JSON=롤백, 사용이력 0건 확인 가드) → orderpaper_sync.py prod ins 11. 검증 = 운영 DB 33 ALL PASS + 운영 화면 43 ALL PASS(오엠씨 블록 「11건·발주 8.6·기본입고 8.11」·항목 11행·자재관리 탭 노출·콘솔 0·다른 탭 행수 불변). 사이트맵 그룹8·페이지49·미반영 2(전과 동일, 기존 AL 백로그). ⏳페페 = 운영 육안 + ⚠재고량이 발주량으로 초기화됐으니 수동 기입분 있었으면 재입력. → projects/pfs/{handoff,rules}.md

카톡관리 수정창 자동높이 + 편집 중복 방지 (2026-08-06 완료 · 2026-08-08 HANDOFF NOW 에서 원문 cut 이관)

🆕pfs 카톡관리 수정창 자동높이 + 편집 중복 방지 [코디] 26.8.6 ✅운영배포 완료(deploy-live 11e235e ← master cec85c6+229b61d 4파일 포워드 · poin-agent a5a5e45 · 데몬 재시작 PID 12084). ①수정창 min-height:64px 고정이라 10줄 항목도 3줄만 보였다 → kbGrow()가 scrollHeight로 맞추고 입력마다 재계산, 상한 60vh(운영 실측 76→309→570px). ②「중복 체크 프로세스 있는지 확인」의 답 = 어디에도 없었다 → 3중 게이트 신설(화면 kbDupRow → 서버 add_op → 데몬 board_rows._dup_at). 판정은 셋 다 같은 섹션·첫 줄 동일 — 🔑첫 줄이 행 id 의 근거(sha1(섹션+첫줄+등장순번))라 같은 문구가 둘이면 id 가 등장순번으로만 갈려 앞 행이 사라질 때 뒤 행 id 가 조용히 바뀐다 → 그런 쌍을 애초에 못 만들게 막는 게 근본수정. 🔴덤으로 잡은 유실 = 같은 행에 대기 중 명령이 있으면 두 번째 거부 — 미러가 30~60초 늦게 갱신돼 그 사이 또 고치면 화면은 옛 내용을 보여주고 나중 명령이 앞 명령을 덮어써 방금 쓴 내용이 사라졌다. 검증 = 신설 scripts/_kakao_board_edit_check.py 테스트 26+API 6 · 운영 26 ALL PASS(높이는 픽셀 실측, 운영은 저장 안 누름) + 서비스 자체검사 13→15 + board_rows 자체검사. 사이트맵 3→2. ⏳페페 = 운영 육안. → projects/pfs/{handoff,rules}.md

카톡관리 소프트딜리트(요약 포인터) (2026-08-05 완료 · 2026-08-08 HANDOFF NOW 에서 원문 cut 이관)

pfs 카톡관리 소프트딜리트(「변동 반영 이력」 ✖ = 실제삭제→숨김 이력) [코디] 26.8.5 ✅운영배포 완료(deploy-live 0a75e3a) ⏳페페 육안 → projects/pfs/archive.md

2026-08-12 이관 (루트 HANDOFF NOW 2일 경과분 cut — 26.8.10 완료 3건)

HANDOFF NOW 이관 (2026-08-17)

HANDOFF NOW 이관 2차 (2026-08-17)

🧹 루트 HANDOFF NOW 이관 (2026-08-19 대청소 — pncad 외 전량, 페페 지시)

루트 HANDOFF.md를 pncad 만 남기고 비웠다. 아래는 그때 옮겨온 원문(문구 무변경).

🧹 루트 HANDOFF NOW 이관(2026-08-23 캡 경고 정리)

🧹 루트 HANDOFF NOW 이관(2026-08-28) — 원문 그대로

캡 경고선(30,000자) 초과로 완료 항목을 옮겼다. 절차 = rules/runbook.md.

🧹 pfs handoff 완료건 이관 (2026-09-03, 페페 지시 「완료처리. handoff 이관」) — 원문 그대로

handoff 162,218자 · 74절에서 완료·배포 끝난 절 63개를 원문 그대로 cut. 남긴 것 = 미결/승인대기/미배포 + 문서 구조 절. 헤딩만 한 단계 낮췄고 본문은 무변경.

🆕 26.9.3 — 오엠씨 자재관리 엑셀식 표 전면개편 ✅운영배포 완료

페페 지시 = 「/omc/material 은 현장별 분류만 · 현장 헤더 없애고 첫 컬럼에 현장명(같은 현장 병합) · 대기·진행 / 완료 두 그룹(완료는 아래) · 우측 현장목록」 → 목업 확인 후 「형태는 완벽하다」 + 확정 3건(완료 표 기본 접힘 · 우측 숨김목록 기본 접힘 · 숨김 기능은 변경 없음 · 분류연동은 대안대로).

🆕 26.9.3 — 발주서정리에 입고처 컬럼 (QA 코멘트 1건) ✅운영배포 완료

페페 QA 코멘트(/field/orderpaper 입고일 <th>) = 「입고일 컬럼 옆에 입고처 컬럼 추가. 엑셀 블록에 입고처 항목이 있고 업체이름만 새 컬럼으로. 한 페이지에 입고처가 여럿인 경우가 있고, 해당 항목은 항상 입고처 라인 위쪽 항목들이며 끝은 바로 위 다른 입고처 라인이나 헤더 블록」 → 프론트만 고쳤다.

🆕 26.9.1 — 거래처 목록에 주소 컬럼 (QA 코멘트 1건) ✅운영배포 완료

페페 QA 코멘트(/company/list) = 「전체 테이블 버튼만 빼고 가로폭 절약해서 주소 컬럼 추가. 팩스와 버튼 컬럼 사이, 줄바꿈해서 들어가게. 주소1 + 상세주소」 → 프론트만 고쳤다(API 무변경 — select_company_search_list 가 SELECT a.* 라 address1/address2 가 이미 내려온다).

🆕 NOW (2026-08-27) — 미니PC 원부자재발주서 「거래처 DB 연결」 미갱신 복구 · rdstunnel ⏳페페 1클릭 남음

페페 지시 = 「nas 원부자재발주서를 미니pc에서 편집하는데 거래처 db연결한게 업데이트가 안된다. 이유 확인 및 보완 처리」. 「거래처 DB 연결」의 실체 = 파워쿼리 업체목록(Odbc.Query("dsn=pfs", …pfs.company JOIN company_member…)) → 「업체」 시트 표.

원인 3겹(엑셀은 무죄) — ①미니PC에 MySQL ODBC 드라이버·DSN pfs 부재(OAlerts 21:15 IM002) ②미니PC 공인IP 211.177.244.214(집 회선)가 RDS SG 3306 밖(직접 프로브 12초 타임아웃=DROP) ③파워쿼리 자격증명 저장소에 엉뚱한 계정 imosadmin(OAlerts 22:22 Access denied for 'imosadmin'@'172.31.35.211').

처리 — ①Connector/ODBC 26.7 x64 무인설치 ②SG 무변경으로 EC2 SSM 포트포워딩 상주터널 신설 C:\dev\tools\rdstunnel(엑셀→DSN pfs→127.0.0.1:13306→EC2 172.31.35.211→RDS, 자동시작 PFS-RdsTunnel, SSM 20분 유휴차단 대비 5분 keepalive) ③잘못된 자격증명 백업 후 제거. 검증 = 터널 핸드셰이크 77바이트 · rdstunnel.py test 391행 한글 정상.

✅22:44 페페 자격증명 1회 입력 완료 → 서로 다른 4개 파일(표준양식·08·07·01월) 사본 새로고침 전부 OK → 392행/첫행 한샘(=헤더1+391, DB 실측 일치). NAS 발주서 109개 중 108개가 동일한 dsn=pfs → 자격증명은 「전역 권한」(사용자 프로필 1곳)이라 1회 입력 = 전부 적용, 파일 수정 0건. 상세 = session-2026-08-27-rdstunnel-orderpaper-vendor-query.md.

(이전) 2026-08-26 — 한샘 전용 견적 모듈 신설 ✅운영배포 완료

[페페] 「pfs에 견적서 목록(한샘)을 생성해줘. 견적 양식 및 단가표 데이터 db추가해서 작성할수 있게. 엑셀파일도 올려서 엑셀파일에 넣는 형식으로. 기존 견적서 양식으로 한샘분 제작은 그대로 유지, 별도로 새 양식과 단가표 관리해서 운영. 운영배포.」 → 그릴링 5차(결정 12건) 후 착수.

🆕 실견적 3건 등록 (2026-08-26 후속) ✅

페페 「2개 견적서 한샘 양식으로 작성했어? 목록에 안보인다」 → 그때는 그릇만 있었다(0건). 지금 운영 3건.

no 견적명 서버총액(본오더) 비고
1 라인 아산7차(리뉴얼) M/H 생산비 26년 06월 20,818,331 원본 거래명세서 재현 · field_no 없음(현장 미등록)
2 GS 원주 단구 MH — 한샘양식 V2 (치수기준) 17,370,850 적용률 전 행 1.0 · 옵션 미반영 · field_no 2169
3 GS 원주 단구 MH — 한샘양식 V1 (옵션 배분) 22,193,970 행별 적용률 상향(최대 1.8810) · field_no 2169

(이전) 2026-08-26 — 한샘 단가표 전환 현황파악(보고만) + 한샘 양식 xlsx 외부링크 정리 ✅

[페페] ①「기존 견적(GS 원주 763)을 한샘 신규 양식에 맞춰야 한다. 한샘 단가표가 기존보다 금액이 적다. 추가금액·옵션금액 규칙을 확인해 손실 최소로 옮길 방법을 찾아야 한다. 우선 치수만 반영해 금액차를 본다 — 이번엔 실제 작업 없이 현황 보고만」 ②「양식 파일 수식이 외부 디스크 경로를 참조한다 → 파일 내 단가기준 탭 참조로 고쳐라. 동일폴더에 새폴더 만들어 원본 백업」 ③당장 안 봐도 되는 탭 = 추가분견적·자재비·운반비·가격적용분.

① 현황 (보고만 · 코드/DB 변경 0)

② 양식 xlsx 외부링크 정리 (실작업)

(이전) 2026-08-26 — 에넥스 금호 구미 견적 3차수 작성 + 엑셀 3종 NAS 저장 ✅운영 완료 (코드변경 0)

[페페] estimate/modify-v2/764 본건 작성 후 = 「총 3개 견적서 엑셀 파일 작성. 1차=현재건 24,058,000원 / 2차=전체 마진율 20% 각 항목 조금씩 조정해 1900만원 약간 초과(목표 1900만) / 3차=2차 기준 5% 인상. pfs 에도 차수별로 저장하고 비고에 수정내용 저장. 엑셀은 NAS 2026현장\견적\09월\에넥스\금호 구미 견적 에. 운영배포 작업건이다」 + 추가 2건 = 「3차는 퍼센트 조금 더 올려 2000만원을 조금 넘게, 파일명 퍼센트는 소수점 없이 정수로」 · 「전체 파일 모두 운임은 건드리지 않는다」.

(이전) 2026-08-26 — 견적 v2 행 UI 3건 (치수 블록선택 · 폴딩 아이콘 · 분류 드롭다운) ✅운영배포 완료

[페페] qa_helper(/estimate/modify-v2/764) 3건 = ①「치수칸, 코너칸 클릭시 데이터가 있는 경우 블록으로 잡히게 해줘. 수정시 바로 숫자입력으로 덮어쓸수 있게」 ②「폴딩 아이콘을 전체 1개의 아이콘으로 변경해줘. 현재 아이콘 세모 모양이 정중앙이 아니다. 세모모양과 프레임조합으로 보인다. 디자인적으로 별로임. 허용된 범위안에서 크기를 최대한 키워줘. 클릭하기 편하게. 추가금액 항목이 있는 경우 버튼의 컬럼 배경을 사이안계열로 변경해줘」 ③「글씨 크기 1포인트 키워주고 색상 좀 더 진하게. 드롭리스트 글씨 가로 안잘리게 리스트 프레임 확장. 리스트 스크롤 없이 전체 목록 보이게」 + 「전체 작업내용 모두 운영배포 진행」

🆕 NOW (2026-08-25 · 7차) — 견적 현장검색 모달에 상차일 미확정 노출 + 맨 위 ✅운영배포 완료

[페페] qa_helper(/estimate/regist-v2, #btnFieldSearch) 「견적용 현장 모달에서 리스트에 상차일 미확정분이 나오지 않는다. 상차일 미확정분도 나오게 하고, 순서상 리스트 상단에 배치시켜라. 운영배포」

🆕 NOW (2026-08-25 · 6차) — 거래처 개명: 넥서스 → 한샘 ✅운영배포 완료

[페페] 「pfs 업체명 변경을 한다. "넥서스"를 "한샘"으로 변경하고 관련 지침에서 용어 교체를 같이해서 시스템에 오류가 안생기도록 해라. db수정도 승인한다. 운영 배포」

🆕 NOW (2026-08-25 · 5차) — 현장목록 상차일 미확정을 맨 위로 ✅운영배포 완료

[페페] 「pfs 현장 목록에서 상차일 미확정분이 리스트에서 안 보인다. 정렬순서 규칙때문인데, 미확정분을 목록 상단으로 기본 배정해줘. 운영 배포」

🆕 NOW (2026-08-25 · 4차) — 등록·수정 폼 현장상태 토글 = 진행중 ↔ 대기중 둘만 ✅운영배포 완료

[페페] qa_helper(/field/modify/2157, button[name=field_status]) = 「토글버튼 순서 수정. 진행중 대기중 2가지 순환만 적용한다. 이 버튼에서 완료는 제외한다. 운영배포」

🆕 NOW (2026-08-25 · 3차) — 현장목록 상태 정렬 롤백 + 현장상태 필터 탭 ✅운영배포 완료

[페페] 「현장목록 상태 정렬순 취소한다. 다시 롤백해줘. 대신 테이블 상단 검색결과 텍스트 지우고 그 위치에 현장상태 필터용 탭을 달아줘. 대기중,진행중,완료. 나머지 완료 작업은 그대로 유지. 운영 배포」

🆕 NOW (2026-08-25 · 2차) — 현장목록 QA 5건 ✅운영배포 완료

[페페] 「PFS 현장목록 수정 작업 추가 …①기본 정렬을 미확정/대기중/진행중/완료 순 + 항목별 상차일 내림차순 ②상태 컬럼 내용버튼 토글화(대기중-진행중-완료 순환·바로 DB) ③등록·수정에서 현장명 폭을 줄이고 유형과 상차일 사이에 현장상태 토글(기본 진행중·저장 반영) ④현장담당자 → 업체담당자 → 시공담당자 탭 직행 ⑤페이지당 10 → 20 · 운영배포」

🆕 NOW (2026-08-25) — 상차일 「미확정」 토글 ✅운영배포 완료

[페페] qa_helper(/field/modify/2134, input[name=shipping_date]) = 「상차일 좌측에 미확정 토글버튼을 만들어줘. 상차일 미확정시 토글버튼 활성화후 날짜 미선택시에도 현장 등록, 수정이 가능하게 한다. 날짜를 입력하면 미확정 버튼은 자동 비활성화 시킨다. 반대로 미확정버튼을 활성화하면 상차일을 비운다. field/print/status 에서도 상차일 미확정인 경우 날짜 대신 "미확정"으로 표기. 운영배포」

🆕 NOW (2026-08-24 · 3차) — 월마감 담당자 지정 · 견적서 담당자 예외 · 월마감 금액 견적서 연동 ✅운영배포 완료

[페페] ①월마감 담당자는 업체 「참조」 체크된 사람이 기본이되 넥서스=장동욱 차장 / 에넥스=강동식 차장 / 봉적=김양훈 차장 / 아이비젼글로벌=은지호 대표로 고정. 「하드코딩 아니다」 ②견적서 엑셀 담당자도 참조인원 연계인데 넥서스만 해당 현장 담당자 이름+직책 예외 ③월마감에 견적항목을 담은 뒤 금액이 굳어 견적 수정이 반영 안 된다 → 자동반영. 운영배포.

🆕 NOW (2026-08-24 · 2차) — 시간대 전면 KST 전환 ✅운영배포 완료

[페페] 「PFS 생산현황 메모수정 알람을 보니 시간대를 KST 로 계산 안 하고 있다. PFS 전수 검사해서 시간대는 모두 KST 기준으로 수정하고 운영배포해.」 + 「코디 기본 지침도 KST 로 보고·표기하게 고쳐놔라」

🆕 NOW (2026-08-24) — 생산현황 출력 타입 카운트에서 소프트딜리트 타입 제외 ✅운영배포 완료

[페페] qa_helper(/field/print/status, div.muted 「(3/3)」) = 「타입 카운트를 소프트딜리트한 항목까지 같이 계산하고 있다. 타입이 소프트딜리트(remove_yn) 1이 되면 카운트에서 제외해줘. 운영배포」

🆕 NOW (2026-08-21 · 2차) — 파레트용지 「현장명」·「상세」 글자크기 칸 안 최대치 자동조절 ✅운영배포 완료

[페페] qa_helper(/production/sticker, div.ps-detail) = 「상세내용 메모 글자 크기를 실시간으로 프레임 구역 안에서 최대치로 자동조절해서 보이게 해줘. 줄바꿈 상황도 고려해서 조정. 운영배포」 → 이어서 채팅 = 「현장명 이름도 글자크기 최대 자동조절 되게 해줘. 이것도 운영배포까지 진행」(현장명 = 현장명 입력값).

🆕 NOW (2026-08-21 · 1차) — 생산현황 출력 헤더 날짜: 수동선택 + 기본 자동표기 ✅운영배포 완료

[페페] qa_helper(/field/print/status, #rpt-date) = 「①날짜를 수동으로 바꿀 수 있게. 가능한 캘린더 형식으로 사용자가 날짜선택 되게 한다. ②기본 자동표기 = 당일 0~9시 출력이면 당일 날짜, 당일 9시~24시면 내일 날짜. 운영배포」

🆕 NOW (2026-08-20 · 1차) — 스티커 파레트용지 미리보기 자동배율 ✅운영배포 완료

[페페] qa_helper(/production/sticker) = 「A4용지 미리보기 크기가 너무 작다. 남는 화면을 최대한 채워서 볼수 있게 수정해줘. 운영배포」

🆕 NOW (2026-08-19 · 8차) — AL QA 5건: 설정 인라인검색·자동저장 · 큰손/작은손 갭·짝 묶기 ✅운영배포 완료

[페페] qa_helper 5건(/field/al-profile 4 + /field/al-orderpaper 1, 「아래 모든 작업 처리 후 운영배포한다」): ①업체 인라인 검색 + 「공통」처럼 수동입력도 허가 ②검색칸에 뜨는 null 안 보이게 ③수정·추가는 자동저장 ④그래서 저장 버튼 삭제 ⑤「큰손·작은손 도어의 갭빼기 치수도 적용. 목대 0.5는 버림해서 정수. 짝으로 나오면 갭을 뺀 뒤 실질적으로 같은 목대·유리가 나와야 하는데 각 행이 짝인지 모르니 NO 칼럼에 2행 이상을 연결하는 기능을 달아라」 + 발주서 작성법 5단계(엑셀 원식 ((D-10-VLOOKUP(,6))/2)+VLOOKUP(,7)).

배포 = master 7758a18·e06d62a·3b807a1 → deploy-live 2bbc552(9파일 선별 포워드, --detach 워크트리). 운영 DDL 선행(SSM) = al_orderpaper_item.pair_link CHAR(1) NOT NULL DEFAULT '0' 추가만, 데이터 변경 0. ⏳페페 = 운영 육안 1회(현장 > AL발주서 NO칸 🔗 · AL설정 관리 자동저장).

🆕 NOW (2026-08-19 · 7차) — AL발주서 QA 3건: 유리 입고처 · 전화면 가로폭 · 거래처 담당자 실시간 ✅운영배포 완료

[페페] QA 3건(/field/al-orderpaper, 같은 세션 연속 지시 · 셋 다 "운영 배포"): ①「유리는 AL업체에 넣어줘야 하니 입고처 컬럼이 필요. 마지막에 생성, 기본은 발주서에 연결된 업체, 인라인 검색·Enter 수동입력, 지정 업체는 거래처 주소까지 참고해 엑셀 입고처 업체명·주소칸에 넣는다. 한 유리업체에 입고처 2곳 이상이면 입고처별로 행을 그룹화하고 입고처 행은 그 그룹 바로 아래. 행을 추가하지 말고 기존 블록행 개수 안에서 교체」 ②「기본정보·데이터입력 프레임 가로폭 부족 — 사이드메뉴 뺀 전화면 폭 + 컬럼폭 절약」 ③「대진아트와이어 담당자를 바꿨는데 갱신이 안 들어온다」

배포 = master fffd408·b98e683·b23cf72 → deploy-live 9963dd5·75172d2(파일 5개 선별 포워드, --detach 워크트리). 운영 DDL 선행 적용(SSM) = al_orderpaper_item.receive_place VARCHAR(100) 컬럼 추가만, 데이터 변경 0. ⏳페페 = 운영 육안 1회(현장 > AL발주서 → 새 발주서 → 표 맨 오른쪽 입고처).

🆕 NOW (2026-08-20 · 2차) — 견적목록 추가건 폴딩 발견성 ✅운영배포 완료

[페페] 「estimate/list-v2 에서도 추가건들 폴딩으로 볼수 있게 해줘. 그래야 입금여부 설정을 내가 할 수 있다」 + 「운영배포」

🔑기능은 이미 1차에 들어가 있었다 — 화면에서 찾을 수가 없었을 뿐이다. 실측 = 기본 목록 36행·페이지당 10행인데 추가건 보유 본건 5건이 전부 6~7월 건이라 최신순 1페이지에 ▶ 가 0개(visibleFold=0). 1차 E2E 가 이걸 못 잡은 이유 = 검증이 datatable.page.len(-1) 로 전 페이지를 펼쳐놓고 셌다.

검증 = _mc_pick_check.py 에 발견성·하위행 토글 8항목 추가 → 테스트 59/59 · 운영 53/53 (운영은 쓰기 항목 skip). 회귀 = _deposit_mark_check 운영 12/12. 사이트맵 그룹8·페이지54·미반영 0. 커밋 = master 1f3954a → deploy-live efeab22(1파일 선별 포워드).

⏳페페 = 운영 육안 1회 — 견적서 관리 → 검색필터 「추가건 있는 건만」 체크 → ▶ 추가 N 클릭 → 하위행 입금여부 버튼 클릭.

🆕 NOW (2026-08-20) — 월마감 견적 담기(추가건 매핑) + 견적목록 추가건 폴딩 + 자동수집=미입금 ✅운영배포 완료

[페페] 「월마감 매핑 기능이 필요하다. 항목추가시 견적서 목록 기준 현장명 검색 및 선택. 이때 추가건도 지정 선택이 되어야 하고 같은 본건 현장 기준으로 한 행으로 묶는다. 추가건은 추가1,2번호에 상관없이 선택된 항목을 본건컬럼 뛰어넘고 추가건 첫번째부터 순서대로 들어가게. 필요사항 그릴링. 운영 배포」

그릴링 6배치 · 페페 확정 13건 = 검색범위 = 거래처 한정 + 「전체」 해제 / 기간 없음 최신 50 / 모달 표 + 추가건 하위행 / 묶음키 = 본견적 estimate_no / 중복은 기존 행에 병합 / 추가칸 순서 = 견적번호 오름차순 / 추가건 번호 = add_amounts 확장 [{no,amt}] / 본건 미선택 행의 매핑 = 부모 본견적 번호 / 검증 = 담은 것 합(확정금액은 검증 무관 — 네고 수기값) / 「행 추가」 유지 + 「견적 담기」 신설 / 자동수집 = 미입금만 / 목록 폴딩 = ▶ 하위 요약행 + 추가건 상태 별도 / 소급연결 66행은 범위 밖 / 배포 = 한 세션 전부 · 운영 1회.

🔴착수 전 페페 지시 = 「6월까지 견적서는 모두 마감처리」 — 자동수집 혼선 제거용. is_deposit '0'→'2', 견적일(없으면 등록일) ≤ 2026-06-30, 기존 입금('1') 5건은 제외. 운영 609건 · 테스트 659건 적용, 롤백용 번호목록 백업 = /home/ubuntu/pfs-backup/is_deposit_{prod,test}_*.json. 결과 = 미입금 본견적 608 → 11건.

🔑근본 문제였던 것 = 마감 항목이 견적서와 반쪽만 붙어 있었다 — 운영 78행 중 estimate_no 12행뿐이고 (1~6월 수기행은 현장만) 추가건은 금액 배열이라 번호가 아예 없었다. 그래서 ①검증 배지가 무엇과 대조하는지 불분명 ②추가건 입금여부를 파생할 근거 없음 ③배지가 링크도 아님. → add_amounts 를 [{"no","amt"}] 로 확장한 게 이 기능 전체의 전제. 운영 DDL 0(TEXT 컬럼 그대로, 숫자배열 하위호환).

검증 = 신설 scripts/_mc_pick_check.py 배포전 7 FAIL → 테스트 50/50 → 운영 46/46(운영은 저장 왕복 제외). 회귀 = _deposit_mark_check 테스트 17/17·운영 12/12 · _monthly_close_ui_check 테스트·운영 각 19/19 · 엑셀 생성 테스트·운영 각 4/4(추가금액1..N 컬럼 유지) · 신규 SQL 6/6(운영 직접 실행) · 운영 배포 파일 4개 해시가 테스트와 완전 일치 · 사이트맵 그룹8·페이지54·미반영 0. 커밋 = master c65e484·b9bd8bd → deploy-live 75fd745(7파일 선별 포워드).

⏳페페 = 운영 육안 1회 — 견적>월마감 → 마감 골라 「견적 담기」(현장명 검색·추가건 체크·담기) / 「견적 자동수집」이 미입금 켜진 모달로 열리는지 / 견적서 관리 목록의 ▶ 펼침. ⏳남은 것 = 1~6월 수기행 66건 견적 소급 연결(범위 밖으로 뺀 건, 이제 담기 모달로 한 달씩 가능). → projects/pfs/rules.md 🆕 신규 5줄

🆕 NOW (2026-08-19 · 5차) — 입금여부 「마감」 수동 선택 + QA 도구 버튼 정리 ✅운영배포 완료

[페페] QA(qa_helper, /estimate/modify-v2/730) = 「마감 버튼도 추가해줘. 월마감 초안 정리하면서 마감 표시를 코디가 생성했는데 내가 선택할 수 있는 항목은 없다. 운영배포」 + 같은 세션 추가지시 = 「qahelper 에서 채티용 복사 버튼 이름을 그냥 「복사」로, 텍스트 보기 버튼은 삭제」.

배포 = master 08e0944 → deploy-live 97e596a(4파일 선별 포워드, --detach 워크트리). DDL 0 · DB 변경 0. ✅페페 운영 육안 확인 완료(26.8.19) — 견적 수정화면 마감 선택 확인. 이 건 종결.

🆕 NOW (2026-08-19 · 4차) — 통합현장 탭 재설계 = 코디가 정리한 「통합 게시글」 ✅1차 운영배포 완료(별도 세션 전담 · 페페 지시 26.8.19)

✅1차 끝났다(운영배포까지). 담당 세션이 master a784e25~93a748e · deploy-live f10e839~7d5e2c7 로 반영 완료. 이 건 파일(worklog dao/service/controller · kakao_board dao/service · field_worklog.html)은 2차 작업도 같은 세션이 잡는다 — 같은 워크트리 동시편집이면 서로 덮어쓴다.

[페페 지시 · QA 코멘트 /field/worklog #wl-tab-fusion] "카톡·통화 2가지를 각각 보는 게 아니라 현장 기준으로 통합한다. 단순 그룹분류가 아니라 코디가 내용을 수집·정리해 카톡 게시글처럼 정리한다. 통화내용도 현장 관련이면 출처가 통화임을 표기해 게시글에 통합한다. 최종적으로 카톡 게시글로 모든 정보가 통합되어 거래처와 포인 직원이 한눈에 공유하게 하는 것." → 그릴링 5배치 15문 진행, 아래 전부 페페 확정.

착수 전 확인한 구조(코드 실측)

페페 확정 15건 (그릴링)

  1. 착지점 = 자동 즉시 반영 프로세스로 간다. 단 통화내용은 PFS 에 먼저 뜨고 페페가 확인 후 카톡 게시글 반영 여부를 결정한다. 현장·거래처에 따라 사전 전체승인으로 돌릴 수 있다. 게시 후 오탐은 PFS 화면에서 사용자가 직접 수정해 보완한다.
  2. 작성자에 코디 언급만 빼면 항목 내용 자체엔 큰 위험이 없다(페페 판단).
  3. 정리 문장 생성 주체 = 코디(LLM) 배치.
  4. 게시글에 나가는 통화 항목 = 코디 재작성 1줄 + 출처 태그. 원문·화자 이름은 게시글에 안 나간다. is_private=1 은 원천 제외.
  5. PFS 에서 통화 항목을 클릭하면 그 통화 전문 전사를 보여준다 — 시간·화자별로 정리하고 그 항목의 근거 구문을 형광 강조한다.
  6. 전사 수준 = 기존 1,111건은 평문+구문강조만. 신규 통화부터 화자분리를 한다.
  7. 신규 전사 엔진 = Groq(whisper-large-v3-turbo) 전사 + sherpa-onnx 로컬 화자분리(pyannote-segmentation-3.0 ONNX 6.6MB). 둘 다 무료·무제한. Groq 키는 .secrets/.env 에 이미 있다.
  8. 화자 라벨 = 코디가 맥락으로 판정. 힌트 = 「나」 = 포인 신동승 차장, 상대는 보통 나를 「신차장·신동승 차장·차장님」이라 부른다. ⛔전사·산출물에 「페페」라는 말은 절대 쓰지 않는다.
  9. 전사본 PFS 업로드 = 전량(worklog 항목이 생긴 통화만). 단 1차는 진행중 현장분 먼저 → 보고, 그 뒤 최근 일자 → 과거 일자 순으로 나머지 → 완료 보고.
  10. 승인 UI = 통합현장 탭 안(행별 ✔게시/✖버림/✎수정 + 방별 「사전 전체승인」 스위치).
  11. 초안 생성 주기 = 30분마다(카톡 게시글 주기에 맞춘다). 이에 맞춰 폰 통화수집도 통화 종료 즉시로 당긴다.
  12. 중복 = 코디가 현재 게시글 전문까지 읽고 판단. 이미 있으면 초안에서 빼고, 진행이 바뀐 건은 새 행이 아니라 기존 행 수정 제안으로 낸다(edit 명령은 이미 있다).
  13. 게시글 섹션 = 코디가 그 방의 기존 섹션 목록을 보고 고른다. 맞는 게 없으면 「확인중 · 요청」 신설. 초안에 섹션명을 적어 승인 전에 보인다.
  14. 카톡방 없는 현장 = 초안은 똑같이 만들고 PFS 전용으로 본다(게시 버튼 자리에 「카톡방 없음」).
  15. 즉시수집 구현 = PC 가 주기적으로 adb 트리거(앱 수정·APK 재설치 0). 범위 = 단계 분할, 완료 경계 = 바로 운영배포까지.

✅ 1차 결과 (운영배포 완료)

배포 = pfs master a784e25·ee39821·eb3aa2e·ef38616·4eb6cc3·93a748e → deploy-live f10e839·73d8fbd·4ed5557·7d5e2c7(6파일 선별 포워드, 별도 워크트리 — 다른 세션이 같은 리포를 쓰고 있었다). poin-agent c818a8a · talklog 1a78d82. DDL 선행 없음 — 테이블 2개는 첫 호출에 자가생성.

🔴 잡은 함정 4개 (전부 실측)

  1. _ensure_fusion() 이 자기 자신을 불렀다 — DDL 1회 실행으로 바꾸며 일괄치환이 함수 안쪽 호출까지 먹었다. 증상 = 통합현장 API 500 "maximum recursion depth exceeded". 일괄치환 뒤엔 그 함수 본문을 눈으로 본다.
  2. flask_restplus 라우트 변수는 메서드 인자로 받아야 한다 — def get(self) 로 두면 500 get() got an unexpected keyword argument 'worklog_no'. 테스트엔 통화 항목이 0건이라 운영에서 처음 드러났다.
  3. 🔑근거(excerpt)는 전사문의 인용이 아니라 「요약」이다 — 통째로 찾는 형광은 실측 매치 0%. → 구두점·공백을 뺀 글자열끼리 최장 공통 조각(6자 이상)을 앞에서부터 훑는 방식으로 교체 → 운영 12건 실측 12건 전부 형광 · 근거 글자의 91% 덮음. ⚠중간에 파이썬 측정이 SKIP + "*".join(...) 연산자 우선순위 때문에 「각 글자 0회 이상」 정규식이 돼 92%라는 가짜 합격을 냈다. 매치율을 잴 땐 만들어진 정규식을 한 건 찍어서 눈으로 본다.
  4. 게시 버튼 판단은 카드가 아니라 「행이 겨냥한 방」으로 한다 — 방 연결이 나중에 바뀌면 둘이 어긋나고, 버튼은 실제로 나갈 곳을 따라야 한다.

🔴 지금 이 기능의 실질 병목 — 카톡 게시글 방 3개가 「현장 미연결」

운영 실측 = 게시글 방 5개 중 자재방 2개(아이비젼·오엠씨)는 현장이 없는 게 맞고, 나머지 3개가 현장이 있는데도 미연결이다. → 그 방들의 게시글이 현장 카드에 안 붙어 코디가 정리할 재료가 없다(배치가 8현장을 그냥 건너뛴다). 근본원인 = 동명 현장이 여럿이라 _match_room_field 의 「유일 승자」 게이트에 걸린다. 실측 = 「SGC 광주 용두동」 3건(본건 MH 1 + AS 2 · #2129/#2151/#2164) · 「금강 부산 에코」 2건 · 「대우 용인」 2건. ⏳페페 판단 필요 — 카톡방을 본건에 붙일지 AS 에 붙일지는 업무 판단이다(진행중으로 뜨는 건 AS 쪽 #2164 인데 게시글의 주인은 보통 본건이다). 정해주면 kakao_board.field_no 직접 연결 또는 매칭 규칙에 그 기준을 넣는다.

✅ 1-2차 추가 (같은 날, 페페 지시) — 본건 우선 규칙 + 수동 연결 + 게시 승인

[페페] "카톡방은 기본적으로 본건에 붙이는 것을 규칙으로 한다. 이후에도 규칙 해당이 없어 미연결 되는 것은 현장연결 버튼을 만들어서 내가 직접 연결해주겠다." + "통화 내용 확인 여부에 제외 버튼만 있고 승인 버튼이 없다."

배포 = master 61a149a·9010333 → deploy-live efc046e·f362fe0.

✅ 1-3차 (같은 날) — 완료 현장도 연결된 AS 가 진행중이면 살린다

[페페] "완료 현장도 AS가 발생 및 본건과 연결처리 되어 있으면 지금 처리한 것처럼 방 활성화하기." + 그릴링 확인. 배포 = master 628a15f → deploy-live af128b5.

✅ 3차 (2026-08-21) — 수시(5분)·주기(30분) 수집 상시화 + 통화 143건 회수 + 현장별 반영 완료

2차 ⏳「페페가 폰을 꽂아 줘야 통화가 들어온다」가 해소(무선 adb 접속포트 자동탐색). 통화 143건 적재 → autolink 27건 연결 → 정리본 19행. PFS 제품코드 변경 0 → deploy-live 없음(데이터 반영이 곧 운영 반영). 검증 = 운영 통합현장 탭 렌더·콘솔 0. 원문·미결(무선adb Wi-Fi 종속 / 분류 현장명 품질) → projects/talklog/handoff.md NOW 2026-08-21 · projects/talklog/rules.md 🆕.

✅ 2차 (2026-08-19) — Groq 전사 + 화자분리 · adb 즉시수집 · 30분 배치 완료

커밋 = talklog 7202a6c. PFS 제품코드 변경 0 → 운영배포 없음(1차가 만든 call_transcript.segs API·화면을 그대로 채우는 작업이라 서버 쪽에 고칠 게 없다). 사이트맵 그룹8·페이지54·미반영 2 = 전부 남의 세션 것(AL발주서).

① 착수 전 실측 벤치 (페페 지시 — 실통화 5건 · server/_bench_stt_diar.py)

항목 결과
Groq 전사 속도 5분 통화 1.4초(실시간 210배) · 1분 통화 1.0~1.4초. 변환(ffmpeg) 0.1~0.8초
전사 품질 로컬 medium 대비 문자 유사도 0.83~0.90(글자수도 비슷) · 무료
화자분리 속도 RTF 0.05(1분 통화 0.8초, 전량 로컬·무료)
화자분리 정확도 88.0%(정답 라벨 4통화 98세그먼트 대비, 2라벨 최적대응)

② 만든 것

③ 🔴 이 기능의 진짜 병목을 찾았다 — 통화 수집이 8/12부터 멈춰 있다

④ 검증

⑤ ⏳ 남은 것

🆕 NOW (2026-08-19 · 3차) — 견적 v2 그룹 소계 실시간 갱신 + 출력 담당자칸 직책 ✅운영배포 완료

[페페] QA(qa_helper, /estimate/modify-v2/749) 2건 = ①「310,000원 소계가 실제 금액과 잘 안 맞는다. 검토 후 수정보완. 운영배포. 749 견적 기준」 ②「견적서 엑셀파일에서 담당자 이름만 나오고 직책이 같이 안 나온다. 기존엔 「은지호 팀장」식으로 이름+띄어쓰기+직책이었다. 이것도 수정 후 운영배포」.

배포 = master 4114abf → deploy-live 7aab4ad(estimate_regist_v2.js + estimate_dao.py 2파일 포워드, --detach 워크트리). DB 변경 0 · 749 데이터 무변경(검증 후 재조회로 확인).

🆕 NOW (2026-08-19 · 2차) — 견적 list-v2 입금여부 = 월마감 초안 기준 ✅운영배포 완료

[페페] "pfs 견적서 월마감 초안 기준으로 estimate/list-v2 에 입금/미입금 여부 표시 변경해줘. 운영배포 작업."

배포 = master d2940ee → deploy-live 3ed47d7(estimate_dao.py + estimate_list_v2.html 2파일 포워드, --detach 워크트리). DB 변경 0.

🆕 NOW (2026-08-19) — AL발주서 드롭리스트 근본수정 + 현장명 드롭리스트 신설 ✅운영배포 완료

[페페] QA(qa_helper, /field/al-orderpaper 품명칸) = "드롭리스트가 제대로 작동 안된다. 프레임에 갇혀서 조금만 움직여도 모달이 닫히는 현상이 빈번. 가운데 휠도 제대로 작동 안됨. 보이는 높이도 2배로. 수정 후 운영배포." + 추가 = "현재 페이지 다른 드롭박스들도 동일 문제 — 모두 수정보완" + "현장명 드롭리스트를 견적서 현장검색 리스트 기준으로".

배포 = master de0ba09 → deploy-live ec2c87a(al_orderpaper.js + field_al_orderpaper.html 2파일 포워드). DB 변경 0.

🆕 NOW (2026-08-18 · 3차) — 견적 v2 치수/코너 칸 휠 스크롤 값증감 차단 ✅운영배포 완료

[페페] QA(qa_helper, /estimate/modify-v2/751 치수3 입력) = "모든 치수칸에서 스크롤로 숫자 증감이 되는 버그가 있다. 치수입력칸에서 스크롤 사용은 금지다. 수정보완해. 운영배포."

배포 = master 387ba62 → deploy-live b827551(estimate_regist_v2.js 1파일 포워드 · 순수 7줄 추가). DB 변경 0.

🆕 NOW (2026-08-18 · 2차) — 월마감 UI: 마감월 좌우 화살표 + 컬럼 폭 조정 ✅운영배포 완료

[페페] QA = "마감월 이동이 불편하다. 기존 형태 그대로 유지하면서 좌우 화살표로 넘어갈 수 있게. 현장명 가로폭 절약. 완료/청구일 가로폭 증가. 운영 배포."

배포 = master b60787d → deploy-live a8d8f30(템플릿 1파일 포워드). DB 변경 0.

🆕 NOW (2026-08-18) — 월마감 26년 1~7월 운영 1차 초안 시딩 완료 (상세: session-2026-08-18-monthly-close-prod-seed.md)

07-29에 코드만 운영배포하고 미뤄둔 「마감 데이터 시딩」을 NAS 마감표 기준으로 집행. 마감 16건·78행.

🆕 NOW (2026-08-10 · 5차) — 숨김 현장 관리 모달 = 견적서 현장 검색 표 양식(기간+현장명 검색, 기본 3개월) ✅운영배포 완료

[페페] QA(qa_helper, /field/orderpaper 「🗂 숨김 현장 관리」 버튼) = "숨김 현장 모달을 견적서 현장명 검색 모달과 동일한 형식으로 수정해줘. 모달에 별도 검색창 추가한다. 날짜 기간+현장명 검색 용도. 모달 기본 로드는 3개월 이전 현장까지 띄운다. 운영 배포."

배포 = master eac466b → deploy-live e965a65(2파일 선별 포워드, --detach worktree). DB 변경 0.

🆕 NOW (2026-08-10 · 4차) — 발주서 「입고처」 행 파싱 → 오엠씨 자재관리를 오엠씨 입고 시트로 한정 ✅운영배포 완료

[페페] QA(qa_helper, /omc/material 품명칩 BNS-24E117 PP) = "원부자재발주서 읽는 스킬 보완해줘. 이 품목은 한솔아트에서 피앤알로 입고되는 품목이다. 품목 아래로 병합된 라인이 있고, 입고처 셀과 오른쪽에 업체명셀, 그 오른쪽으로 주소가 있다. 입고처 행 위쪽에 있는 데이터가 발주서 해당 탭 업체에서 입고처 업체로 발송되는 것이다. 따라서 BNS-24E117 PP은 오엠씨로 가는게 아니고 피앤알이 맞고, 오엠씨 자재 관리에는 보이면 안된다. 수정 운영 배포."

배포 = master ba33cfc → deploy-live efa4593(5파일 선별 포워드, --detach worktree). 운영 RDS 는 동기화가 선적용(orderpaper.receiver 멱등 ALTER) — 배포 전에 컬럼이 있어야 DAO 가 SELECT 한다.

🆕 NOW (2026-08-10 · 3차) — 생산현황 레포트 아이비젼글로벌 업체명 2줄 표기 ✅운영배포 완료

[페페] 지시 = "field/print/status 아이비젼글로벌 업체명이 길어서 셀을 넘어선다. 줄바꿈 적용. 아이비젼 후에 글로벌은 다음줄. 이 업체만. 운영배포."

배포 = master 4406fe2 → deploy-live 09c60ff(1파일 선별 포워드, --detach worktree). DB 변경 0.

🆕 NOW (2026-08-10 · 2차) — 견적 재작성에 「내용 복사」 선택 신설 + 차수 버튼 표기·위치·모달 폭 ✅운영배포 완료

페페 지시 = "함정 주의하고 pfs 에 기능으로 추가해라. 본건 견적서 새로 생성시 복사 기능 추가 (사용자 선택예정, 0으로 시작하는 경우도 있음) 운영배포." + QA 3건(/estimate/list-v2) = "차수 1·차수 2 로 표기되는 버튼을 1차·2차로", "버튼을 삭제 왼쪽으로", "차수 이력 모달 가로폭 — 줄이 밀린다".

배포 = master e25e3e7 → deploy-live e659f80(4파일 선별 포워드, --detach worktree). DB 변경 0.

🆕 NOW (2026-08-10) — 대우 용인 MH 견적서 1차(708) → 2차 재작성건(747) 내용 복사 ✅운영 반영 완료

페페 지시 = "pfs 운영서버 에넥스 대우 용인 견적서 본건 1차를 2차 본건 재작성건에 내용 복사해. 운영 작업 승인". 코드 변경 0 — 운영 RDS 데이터 작업만(배포 없음, 사이트맵 무관).

🆕 NOW (2026-08-10) — 생산 스티커 출력 회수 초기화 버튼(총관리자 전용) ✅운영배포 완료

페페 QA(qa_helper, 도어 표의 ✓2회 09 Aug 2026 신동승 셀) = "출력 회수 초기화 버튼을 추가해줘. 관리자만 사용가능. 관리자 아이디만 볼 수 있게 설정. 페이지 이동 버튼 행의 우측 끝에 추가." (1차 지시엔 운영배포 말이 없어 테스트까지만 했고, 같은 날 페페가 채팅에 「운영배포 진행」 직접 입력 → 배포.)

배포 = master b590f3e → deploy-live 84fcb2f(3파일 선별 포워드). 운영 RDS DDL 선행 적용 완료. 🔑같은 파일에 실려 8/7 백로그도 함께 반영됐다 = sticker_controller sync target 한 줄 (운영 화면 「엑셀 동기화」가 테스트 DB 를 갱신하던 것 → FLASK_CONFIGURATION 기준 prod/test 결정). → 사이트맵 미반영 1 → 0.

🆕 NOW (2026-08-10) — 생산 스티커 현장 검색을 견적서 등록과 같은 표 양식으로 ✅운영배포 완료

페페 QA(qa_helper, #stk-field-input) = "견적서 등록의 현장명 검색 리스트 양식을 여기에 적용해줘. 너무 간단하게 나오고 내용이 잘 안 보임. 운영배포"

배포 = master fa34a53+cda67b2+582593a → deploy-live ae9e767(2파일 선별 포워드 · 임시 worktree).

🆕 NOW (2026-08-10 · 3차) — 품명 인라인 편집 전 항목 확대 + 시트 입고일정 병합 주석행 제외 ✅운영배포 완료

페페 = "작동 확인 완료. 모든 항목 자재관리·오엠씨 자재관리에서 품명 수정 가능하게. 피앤알건 : 시트가 포함된 행이 기존 블록양식이 아닌 병합된 행이면 제거한다. 시트 입고 일정에 대한 정보다." 운영배포.

배포 = master d1cb28e → deploy-live b295283(2파일 선별 포워드 · --detach worktree).

검증 = scripts/_omc_material_check.py 테스트·운영 ALL PASS(품명칸 전량 편집 가능·시트 주석행 0) + 신설 scripts/_pnr_sheet_row_probe.py 파서 자체검사(합성 4케이스 + NAS 실파일 대조) ALL PASS. 사이트맵 = 그룹8·페이지50·미반영 0.

⏳페페 = 운영 육안(품명 클릭 편집 · 시트 그룹에서 입고일정 메모 사라졌는지).

🆕 NOW (2026-08-10 · 2차) — 시트(T) 자재분류 신설 + 오엠씨 전면/후면 편집 + 오엠씨 화면 펼침·시트 우선 ✅운영배포 완료

페페 QA 3건 = ①"전면·후면 품명 수정 가능하게. 기존 자재관리페이지와 수정결과 연동. 기존 발주서 정리 탭에서도 전면/후면 분리 — 오엠씨 테이블만" ②"부자재로 분류되던 시트 항목을 별도 시트 항목으로 분리. 필터도 추가. 자재관리 전 페이지 적용. 기존분·추가분 모두. 시트는 규격에 항상 '시트'가 포함" ③"오엠씨 자재관리 현장별 그룹 기본 펼침(완료항목은 그대로 숨김), 현장 카드 상단에 시트 그룹 먼저 — 오엠씨에서 시트 입고 체크용". 운영배포.

배포 = master 945ab51+26d2533 → deploy-live 5222bed(8파일 선별 포워드 · 임시 worktree). DB 변경 0.

검증 = scripts/_omc_material_check.py {test|prod} 확장 — 테스트 ALL PASS + 운영 ALL PASS. 테스트에서만 쓰기 왕복 2건(①전면/후면 저장 → 서버 합친 품명 확인 → 원복 ②혼합 블록에 시트 한정 상태일괄 → 시트 2행만 바뀌고 비시트 3행 무변경 → 전량 원복). 운영은 읽기전용(펼침·스크롤·인페이지 함수만). 사이트맵 = 그룹8·페이지50·미반영 1(/production/sticker, 다른 세션 진행분).

⏳페페 = 운영 육안 — /omc/material(시트 그룹 최상단·전면/후면 편집) · /field/orderpaper(시트 필터·오엠씨 전면/후면). ❓판단 필요 1건 = 규격 9T MDF 시트/재고PP(피앤알, 1행)는 보드인데 규격에 '시트'가 있어 시트로 잡힌다. 아니면 자재관리 탭에서 그 행 규격을 고치면 된다.

🆕 NOW (2026-08-10) — QA 2건: 사이드 메뉴 스크롤 + 오엠씨 전용 자재관리(/omc/material) ✅운영배포 완료

페페 QA(qa_helper) = ①"사이드 메뉴 현재상태에서도 스크롤 되게. 하단 메뉴가 너무 밑에 있어 선택이 어려움. 하단 스크롤 시 시스템관리 이하로는 상단에서 벗어나지 않게 기준선 지정. 운영배포 승인" ②"오엠씨 전용 자재관리 페이지 생성. field/orderpaper 발주서 정리 탭 기준. 없어도 되는 것 = 현장별/업체별 토글· 동기화 사이드카 버튼·삭제/숨김(오엠씨 유저 작동 불가)·원자재 필터 동일 라인 모든 버튼·빠른필터 라인. 품명을 전면/후면 컬럼 분리해 후면 자재 표시(합친 컬러 때 있던 괄호 표기 제거). 운영배포"

배포 = master f956d27+3e80d33 → deploy-live f68f155(5파일 선별 포워드 · 임시 worktree). 운영 RDS에 patch45 선적용(menu_catalog OMC_MATERIAL 1행 + company_permission 오엠씨(196) 1행, 멱등).

① 사이드 메뉴 스크롤 — 🔴원래 스크롤이 아예 안 됐다. 테마가 .left-sidebar와 .scroll-sidebar를 둘 다 height:100%로 잡는데 그 위에 로고+사용자 블록(114px)이 얹혀 있어 스크롤 영역 아래 114px가 화면 밖이고, scrollHeight==clientHeight라 perfect-scrollbar가 스크롤을 안 만든다(휠 실측 scrollTop=0). → pfs_layout.css §10 사이드바 세로 flex(스크롤 영역 = 남은 높이) + pfs.js pfsSidebarPad()가 기준선(시스템 관리)이 상단에 서는 만큼만 스크롤되도록 ul 하단 여백을 넣는다. 🔑여백은 계산이 아니라 실측 보정 — 짧은 콘텐츠는 scrollHeight가 잘리고, ps 레일(절대배치)이 8.5px를 더한다 (1차 구현이 기준선을 8.5px 넘겨 올라간 원인). 2패스 보정 후 오차 0.5px. 상세 = rules.md 🆕.

② 오엠씨 자재관리 — 화면을 새로 만들지 않았다. /omc/material(omc_controller)이 field_orderpaper.html을 omc_view=True로 렌더한다(인라인 JS 1,000줄 복제 0). 템플릿·JS가 그 플래그로 갈라진다 — 탭바·다른 탭 컨테이너/JS 3파일·분류토글·툴바(자재/숨김관리/업로드/동기화)·빠른필터 라인·칩·상세필터/업로드/숨김 모달 제외, op-del-btn·블록삭제·숨김·현장연결/연결변경 제외(발주처가 pfs 현장 매핑을 바꿀 자리가 아니라 지시 목록에 없어도 뺐다), OP_ALL을 적재 직후 발주처='오엠씨'로 필터(카운트·필터 옵션까지 이 집합 기준), OP_MODE='site' 고정, opLoadState/opSaveState 스킵(메인 화면과 같은 localStorage 키라 해제 UI 없이 필터에 갇힌다). 품명 → 전면/후면 2컬럼(opFaceParts, 표 7→8컬럼). 편집(상태·입고일·발주량·비고)은 그대로 둔다. - 🔴괄호가 자재넘버의 일부인 행이 실제로 있다(70-113(PP)·유사PP(WH240EMT)) → 공백 있는 ' (' 만 합친 표기로 본다. rules.md 🆕. - 숨김 현장은 기존과 똑같이 제외한다(운영 오엠씨 130항목 중 99가 숨김 현장 → 화면엔 4현장 31항목). 숨김은 「유지·오엠씨 유저 작동 불가」라는 지시대로 버튼만 없애고 동작은 그대로 뒀다. - 권한 = 오엠씨(196)만 부여. 에넥스(4)는 OMC_SHEET/BOARD 권한이 있지만 이 화면은 전 현장의 오엠씨 발주를 보여줘 제외. 포인(자사)은 명시 row 없으면 기본 허용이라 자동 노출.

검증 = 신설 scripts/_omc_material_check.py {test|prod} [뷰포트높이](미추적, 읽기전용 — 카드·블록 펼침과 스크롤만 건드리고 저장 버튼은 안 누른다, localStorage 원복) — 테스트 ALL PASS(뷰포트 700/800/1080) + 운영 ALL PASS. 전면/후면 규칙 9케이스를 페이지의 opFaceParts로 직접 호출해 검증 + 기존 /field/orderpaper 회귀(탭4·7컬럼·삭제버튼·탭JS 3개) 포함, 콘솔 0. 사이트맵 재빌드 = 그룹8·페이지 50(/omc/material 신규, live 반영 확인)·미반영 1 = /production/sticker(다른 세션 진행분, 본건 무관).

⏳페페 = 운영 육안 — ①사이드바 끝까지 스크롤(시스템 관리가 상단에 서는지) ②/omc/material 화면.

🆕 NOW (2026-08-07) — field/worklog 3탭 「통합현장」(통화+카톡 융합) ✅운영배포 완료

페페 지시 = "s25에서 읽는 내용(통화수집·카톡)과 pfs worklog 카톡방 내용을 융합. 모든 정보를 현장 매칭해 한 장소에서. 기존 탭 유지 + 새 탭. 진행중 현장 기준 + 최근 접수 있는 완료현장(미출고·신규접수 위주). 운영 배포 승인."

배포 = master 844fff8 → deploy-live c6277a9(4파일 선별 포워드 — worklog dao/service/controller + field_worklog.html).

🆕 NOW (2026-08-07) — qa_helper 다중선택(드래그 범위지정 + Ctrl선택) ✅운영배포 완료

페페 지시 = "qahelper 선택기능에 드래그·Ctrl선택 추가. 상황 판단해줘" → 판단 보고 후 "A로 진행. pfs 운영배포".

배포 = master adca587 → deploy-live ff85064(2파일 선별 포워드 = web/static/js/qa_helper.js + web/static/css/qa_helper.css).

A안 = N개를 1항목(묶음) + 코멘트 1개. 표 20칸에 코멘트 20개 쓸 일이 없다는 게 근거. - Ctrl(⌘)+클릭 = 후보 토글 · 후보가 하나라도 있으면 그냥 클릭도 토글(모으는 중엔 클릭=토글이라 후보를 잃지 않는다) - 드래그 = 밴드 범위 · Enter 또는 [🧺 묶음 담기] 로 확정 · Esc = 후보만 비움(검증 모드 유지) - 후보 0에서 단순 클릭 = 종전 그대로 즉시 1항목(기존 동작 무변경) - 항목 스키마는 members:[] 하나만 추가 → renderList·마크다운의 기존 경로를 그대로 쓰고 묶음 블록만 덧붙임

🔑 드래그의 핵심은 이벤트가 아니라 "밴드 안에 뭐가 잡히느냐"였다. 교차 기준이면 표 하나에 조상 컨테이너·tbody·tr·td·안쪽 span 까지 수백 개가 걸린다 → ①완전 포함만 ②후보의 조상은 제외(=최말단만, Set에 조상 표시 O(n·depth) — 전수 비교 O(n²)보다 싸다) ③6px 미만 제외 ④상한 50(초과분은 토스트로 알림). 이벤트는 mousedown/mousemove/mouseup + 5px 임계(미만 = 단일 클릭), mousedown preventDefault(안 하면 페이지 텍스트가 같이 드래그 선택됨), 드래그 종료 직후 따라오는 click 1회 억제(안 하면 시작점 element 가 덤으로 잡힌다), 드래그 중 호버 하이라이트 OFF.

🔴 자체검사가 잡은 실버그 3건(전부 rules.md 🆕 에 함정으로 등록) 1. 밴드가 자기 자신을 후보로 잡는다 — #qa-helper-band 는 자기 rect 안에 완전 포함 + 자식 없음 = 완벽한 "최말단". isInsidePanel 제외 목록에 추가. 2. Enter 가 통째로 먹통 — picker 가 mousedown 을 preventDefault 하니 포커스가 사이드바 이름칸에 남는다. "패널 밖일 때만 Enter" 로 걸었더니 항목을 한 번이라도 담은 뒤엔 영영 안 먹었다 → textarea 만 제외. 3. 덤 = 「텍스트 보기」 다이얼로그가 검증 모드에서 안 닫혔다(기존 버그). 오버레이에 id 가 없어 isInsidePanel 에 안 걸렸고, document capture 의 stopImmediatePropagation 이 target 의 onclick 보다 먼저다 → id="qa-helper-export" 부여.

검증 - 신설 scripts/_qa_helper_multiselect_check.py — 로그인·서버 없이 도는 정적 하네스(임시 http.server + 실제 js/css 그대로) Playwright 37항목 ALL PASS. td 6개 드래그에서 조상 0 · 4px 박스 제외 · 60개 중 상한 50 · 콘솔 0. - 신설 scripts/_qa_helper_live_check.py — 실서버. 테스트 26 + 운영 26 ALL PASS(/field/list, 셀 120개). 운영 드래그 = 후보 50 전부 leaf(A/BUTTON/SPAN/TD/TH), 포함관계 0, 페이지 이동 0, 콘솔 0, localStorage 원상복구. - ⚠운영에서 돌려도 안전한 이유 = qa_helper 는 서버에 아무것도 안 쓰고(localStorage 뿐), 검증 모드가 클릭을 preventDefault 해서 조작이 서버로 안 나간다. - 사이트맵 재빌드 = 그룹8·페이지49·미반영 1(= /production/sticker 생산 스티커, 이번 건과 무관한 별건 백로그). meta 에 test adca587 / live ff85064 반영 확인. - 배포는 임시 worktree 로 했다 — 작업트리에 페페의 미커밋 수정(orderpaper-sync/*)이 있어 git checkout deploy-live 가 그걸 건드린다.

⏳페페 = 운영 육안(🔍 토글 → Ctrl+클릭 몇 개 → Enter → 사이드바에 🧺 배지 / 표 위에 드래그). ⏳안 한 것 = devplan 쪽 assets/qahelper.js 포팅(지시가 pfs 만이라 그대로 뒀다).

🆕 NOW (2026-08-07) — 부자재 발주서 업로드 "안전하지 않은 접속" 운영배포 완료

페페 QA = 「+ 부자재 발주서 업로드」로 파일을 고르면 "안전하지 않은 접속"이라며 진행이 안 됨.

원인 = 브라우저가 HTTPS 페이지에서 사설 IP(HTTP)로 form POST 했다. opUpload() 가 http://192.168.45.2:8791/upload(사무실 PC 사이드카)로 새 탭 form POST → 크롬 혼합콘텐츠 차단. 게다가 그 경로는 이미 두 겹으로 더 막혀 있었다 — 26.7.29 보안조치로 사이드카가 127.0.0.1 바인딩 + 토큰 필수 (브라우저는 토큰을 못 붙인다). 즉 LAN 직결은 되살릴 값이 아니라 없앨 경로였다.

고친 방식 = 이미 있던 서버 업로드 API 를 쓰고, 사이드카는 릴레이로 돌린다(동기화 sync-request 와 같은 모양). 1. 화면 → POST /api/orderpaper/upload(같은 오리진 HTTPS·FormData) → EC2 가 blob 을 orderpaper_upload(pending)에 저장. 🔑이 엔드포인트·테이블은 원래 있었는데 화면이 안 쓰고 있었다(운영 테이블 0행 = 한 번도 안 탄 죽은 경로). 2. 사무실 PC 사이드카(orderpaper_sync_server.py)의 upload_poll_loop 가 20초마다 POST /api/orderpaper/upload/claim → 파싱(orderpaper_upload_parsers) → 적재(orderpaper_upload_load, SSM) → POST /api/orderpaper/upload/finish. 인증 = X-PFS-Agent-Token(door_sync_watch 와 같은 토큰). 3. 화면은 upload_no 로 /api/orderpaper/uploads 를 폴링 — 대기 → 분석·적재 중 → ✅완료(목록 자동 갱신)/❌사유. 4. 사이드카의 LAN 전용 POST /upload 삭제(경로 이중화 방지) · running 10분 초과 건 자동 재점유.

덤으로 잡은 것 3개 - 🔴insert_upload 가 항상 upload_no=0 을 반환(= MySQLUtil.execute + 별도 SELECT LAST_INSERT_ID() 는 커넥션이 달라진다) → execute_id 로 교체. 그대로 뒀으면 업로드가 성공해도 화면이 영원히 "대기"였다. - 🔴nginx client_max_body_size 가 아예 없어 기본 1MB(실측 1.43MB → 413) → nginx.conf http 블록 20m (서버 파일·git 밖, nginx -t 통과 후 reload, 백업 nginx.conf.bak_20260807). 화면도 413 이면 크기 초과라고 안내. - 🔴사이드카 폴링 try 가 env 루프 바깥이라 운영 401(미배포) 하나로 테스트 폴링까지 굶었다 → 안쪽으로. 같이 _sidecar.log 신설(창 없는 상주라 출력이 사라져 진단 불가였다).

파서는 서버에 안 올렸다 — EC2 py3.6 에서 pdfplumber 가 chardet 5.0(앱 requests 2.21 과 충돌)·cryptography 40 (certbot)을 끌고 온다(pip download 실측). xlrd·pdfplumber 는 사무실 PC(Python39)에만 설치.

검증 = ①테스트 릴레이 E2E 12항목(에넥스 양식 .xls 를 xlwt 로 만들어 실파서 통과 · blob 바이트 동일 · 적재·원상복구까지) ②live 사이드카 8항목(상주 프로세스가 집어가는 실경로) ③실브라우저(테스트 = 업로드→ ✅ 2건 적재·콘솔 0 / 운영 = 새 코드 적재 확인, OP_SYNC_URL 소멸) ④운영 스모크 4항목(미등록 양식 .txt 로 경로만 태우고 행 삭제 — 운영 데이터 무변경). 사이트맵 = 그룹8·페이지49·미반영 2(기존 AL 백로그, 증가 없음).

배포 = 테스트 12a9b31 · 운영 bac884b(master 1f497ea+58b6809+12a9b31 7파일 선별 포워드). ⚠사무실 PC 사이드카가 꺼져 있으면 업로드는 "대기"에서 멈춘다(2분 뒤 시간초과 안내).

🆕 후속(같은 날) — 페페 실업로드에서 적재 내용이 깨졌다 → 파서 재작성·재적재 완료

증상 = 대우 용인 에넥스 발주서를 올렸더니 128행이 들어왔는데 절반이 빈 품명, 업체는 전부 '천일'. 원인 = 파서가 양식을 몰랐다. 에넥스 .xls 는 한 시트에 발주 페이지가 반복되는데(수신처=업체 1곳당 1페이지, 실측 407행·11페이지) 옛 파서는 첫 페이지 머리만 읽고 11행~끝을 통째로 한 업체 항목으로 봤다 → 라벨행('품 목/규 격/수량'·'계'·'특이사항'·'발 주 일'…)까지 자재로 적재되고 나머지 10개 업체는 소실.

수정(orderpaper_upload_parsers.parse_enex) — A열 '수 신 처'를 페이지 머리로 블록 분할, 페이지마다 업체·발주일·납기 읽기, 표는 머리+6행부터 '계' 전까지, 표 안 고정 안내문('포인 : …') 제외, 비고 열 오타 8↔9 수정, 납기 문자열('추후통보')은 날짜 비움, 🔑같은 업체 2페이지(쿠스코)는 block_key 가 겹쳐 뒤가 앞을 덮어쓰므로 sheet에 페이지 번호를 넣어 분리.

재적재 = 사용자 편집·사용량 이력 0건 확인 → 원문 128행 JSON 백업(/home/ubuntu/backup/ orderpaper_daewoo_badload_2026-08-07.json) → 삭제 → 업로드행 pending 되돌림 → 사이드카 재처리 (⚠파서는 sys.modules 캐시라 사이드카 재시작 필수) → 11블록·55항목. 검증 = 실파일 파서 체크 12항목 ALL PASS(scripts/_op_enex_parse_check.py) · 운영 DB 55행·업체 10곳 (쿠스코 2블록) · 표본 20행 품명/규격/수량/비고 정상 · 운영 화면 55건·콘솔 0. 배포 = master 674102e · 운영 2d0bbd2(사이드카 파일이라 서버 앱과 무관, 브랜치 동기화용).

🆕 2차 후속 — 품명 상속(페페 지시 "①규격·발주량은 있는데 품명이 없으면 위 품명을 이어받는다 ②품명이 쌍따옴표면 동일"). 원본은 같은 품목이 이어지면 품명칸을 비우거나 "(〃)로 쓰는 수기 관행이라 그대로 넣으면 화면·발주에서 품명 없는 행이 된다(실측 빈칸 10 · 따옴표 3). 상속은 블록(업체) 안에서만. 🔑재적재는 삭제 없이 pending 되돌림만 — item_key 가 그대로라 로더가 같은 행을 UPDATE(55행 유지· 삭제 0·*_user 편집 보존). 검증 = 파서 18항목 ALL PASS · 운영 DB 빈칸 0·따옴표 0·업체 10·블록 11 · 운영 화면 55건·콘솔 0(예: 헤티 2~4행이 이노텍 아티라레일470 을 물려받음). 배포 = master 971fed7 · 운영 bdaff93. ⏳페페 = 화면 육안(업체별 블록·품명 상속).


🆕 (참고) 원 검토 메모 — 미니PC 이전 타당성

🆕 NOW (2026-08-06) — 견적서 재작성 + 현장 단위 차수 이력 ✅운영배포 완료

(테스트 단계 기록) 견적서 재작성(1차 보관 + 2차 메인) + 운영 708 이관

페페 지시 = "한 현장 견적서를 새로 작성해야 하는 경우가 있다(도면 디자인이 아예 바뀜). 기존 1차 작성분은 보관처리, 신규 2차 작성분을 본건 메인으로 앞에." → "테스트서버 작업 진행하고 운영서버의 modify-v2/708 현장 견적서를 옮겨줘. 1차 원본으로 삼고 테스트."

🆕 현장 단위 차수 이력으로 개편 (페페 지시 26.8.6 · master 641ff82 테스트 배포)

페페 지시 = "보관 항목은 현장별 이력관리가 맞다. 지금은 보관 항목 찾기까지 과정이 복잡하고 1차·2차 위치가 안 붙어 있어 비교가 오래 걸린다. 한 현장 기준으로 확인·복구 가능한 구조로 개변. 1차를 복구하면 2차는 삭제가 아니라 보관. 항상 보관 안 된 항목 = 선택된 차수, 나머지는 보관."

보관건 열람·복구 경로 (페페 질문 26.8.6 · 읽기전용 실측 8항목 ALL PASS · 「보관해제」는 위 개편으로 대체됨)

(이전) 계획 확정 기록

페페 지시 = "한 현장 견적서를 새로 작성해야 하는 경우가 있다(도면 디자인이 아예 바뀜). 기존 1차 작성분은 보관처리, 신규 2차 작성분을 본건 메인으로 앞에. 계획 먼저."

🆕 NOW (2026-08-06) — 대우 용인 오엠씨 탭 1페이지 초기화 + 재입력(운영 데이터, 코드변경 0)

페페 지시 = "\\192.168.0.101\공유폴더\2026현장\원부자재발주서\07월\에넥스 대우 용인 푸르지오 MH 원부자재발주서.xlsx 의 오엠씨 탭 1페이지 내용을 바꿨다. 행자체가 사라지거나 수정을 했으니 기존 동기화 내용을 초기화하고 이 탭만 PFS field/orderpaper 에 새로 입력해줘. 운영배포."

🆕 NOW (2026-08-06) — 카톡관리 수정창 자동높이 + 편집 중복 방지 3중 게이트 운영배포 완료

페페 지시(QA 보고 /field/worklog) = "수정 내용이 많은데 수정창 높이가 너무 낮다. 텍스트 내용에 맞춰서 수정창 높이도 늘려줘. 그리고 사용자가 편집하면 내용이 중복되지 않게 코디가 체크하는 프로세스 있는지 확인해서 보완해줘. 운영배포."

🆕 NOW (2026-08-05) — 카톡관리 「변동 반영 이력」 ✖ = 소프트딜리트(숨김 이력) 운영배포 완료

페페 지시 = "카톡게시글 관리에서 변동 반영 이력 항목은 삭제가 소프트딜리트가 아니라 실제삭제라고 안내메시지가 나온다. 소프트딜리트(숨김항목으로 이동)로 수정해줘. 운영배포."

🆕 NOW (2026-08-05) — 견적서 엑셀 양식 파일 채우기 전환 · 운영배포 완료 + 운영 다운로드 E2E

페페 판단 = "①「아래와 같이 견적합니다」 타입명 살린 상태 유지 ②결재칸 현재대로 유지. 이 양식으로 pfs 견적서 생성 파일 교체해라. 운영 배포. 실제 견적건 1개 playwright로 다운받아서 동일 test 파일에 저장까지 테스트. 운영서버에서 다운로드 테스트."

(1차) 견적서 엑셀을 NAS 양식 파일 채우기로 전환 — 배포 전 결과물 제출

페페 지시 = "실제 결과물(07월\넵스\넵스 쌍용 홍은동 MH 견적서.xlsx)·기본 양식(양식 견적서.xlsx) 2파일 확인해서 PFS 견적서 엑셀 양식 수정. 선굵기·셀배경색·상하좌우 여백 등 모든 것이 동일해야 한다. 양식 파일을 새로 만들기보다 기존 파일을 활용해 데이터 입력하는 쪽으로. 결과물은 견적\TEST 폴더에 작업순번."

🆕 NOW (2026-08-05) — 배차목록 인라인 통합 검색창 추가 + 상단 기사칸 삭제 운영배포 완료

페페 지시 = "배차목록에 모든 항목 통합 검색용 인라인 검색창 추가. 출발도착 검색창 좌측으로 약간의 여백두고. 상단 search filter에서 기사 검색창은 삭제. 운영배포."

🆕 NOW (2026-07-30) — 신영 광주 챔피언스시티 MH 견적서 운영등록 완료 (본건 740 · 추가1 741)

페페 지시 = NAS 견적서 xlsx를 운영서버 등록, "본건 견적 생성 후에 추가건:추가1 항목으로", 현장 field_no 1973(=신영 광주/넥서스/MH), 운영배포 승인.

🆕 NOW (2026-07-29) — 미반영 A·B 그룹 운영배포 완료

페페: "미배포건이 있다. A,B 그룹 먼저 운영배포한다." (D005 배차사진 경로 버그는 "배포만, 버그는 P0에서")

🆕 NOW (2026-07-29) — AL설정(엑셀 설정탭) 관리 페이지 CRUD (운영 배포 완료)

NOW (2026-07-28) — 현장 내용 = 카톡관리(1탭) + 통화관리(2탭) (운영 배포 완료)

NOW (2026-07-28) — 생산 메모 모달 통합: 단일 입력창 (운영 배포 완료)

NOW (2026-07-27) — field/worklog 노출기간 2주 제한 (운영 배포 완료)

NOW (2026-07-27) — 미반영 커밋 선별 운영배포(C·D·E) + devplan 배포관리 페이지

🧹 HANDOFF 완료건 이관 (2026-09-07) — 원문 그대로

✅ 26.9.3 — pfs QA 3건(검색칸 자동완성 · 모바일 사이드바 · 월마감 컬럼폭) 운영배포 완료 (690bb89)

①/admin/user 검색칸에 poin01 이 저절로 박히던 것 = 크롬 자동완성(같은 페이지 password input 3개 탓에 로그인 폼으로 읽힘) → type=search+autocomplete=off · 엔터 검색 추가. ②모바일 사이드메뉴를 펼쳐도 로고·「비번변경·로그아웃」이 안 보이던 것 = 모바일은 .mini-sidebar 가 붙은 채로 열린다 → ≤767 에서 접힘 압축 되돌림(전역 CSS 라 데스크톱 접기 회귀 포함). ③월마감 현장명 17%→12% · 비고 20%. 검증 _qa3_check.py 17항목 테스트·운영 ALL PASS · 사이트맵 미반영 1(/field/worklog, 무관). 새 함정 2건 = projects/pfs/rules.md 🆕. 🔜미결 = 그 검색칸은 placeholder 와 달리 아이디로는 검색 안 됨(페페 판단 대기).

✅ 26.9.4 — pfs 「생산자동화시스템」 → PFS 전면 교체 운영배포 완료 (ddd9135)

탭 제목 단일 출처 = common/config/config.py SITE_TITLE(환경별 4개) + 로딩 라벨 3 + 하드코딩 title 3 + 오엠씨 모바일 좌측 로고 4. 운영 탭 제목 = PFS. 테스트·운영 PASS.

✅ 26.9.3 — pfs 사이드바 로고 = PFS 운영배포 완료 (12338c8)

종전엔 logo-text.png 이미지라 문구를 못 바꿨다 → 텍스트(span)로 교체. 접힘 동작 무변화. 🔜남은 「생산자동화시스템」 = 탭 title · 로딩 스피너 라벨 2곳(지시 범위 밖이라 유지, 페페 판단).

✅ 26.9.3 — pfs 모바일 햄버거 항상 3줄 운영배포 완료 (0434506)

테마 custom.js 가 .nav-toggler i 에 ti-close 를 addClass 만 하고 안 지워 한 번 누르면 X 로 굳었다. 테마는 안 건드리고 pfs.js 에서 걷어낸다. 운영 열고닫기 3회 반복 실측 PASS.

✅ 26.9.3 — pfs 상세 모달 = 코디 정리본(kb_digest) 운영배포 완료 (30cf5af)

페페 지적 「한 덩이 문장에 다른 현장 내용이 들어간다」 → 현장명 문자열 매칭 폐기, 카톡 게시글을 코디가 현장별로 다시 쓴다. 예약작업 \Cody\kb-digest(15분·숨김) — 게시글 version 이 그대로면 코디 호출 0. 운영 첫 정리 = 15건 중 9건, 제천 자이 빠짐(지적 해결). ⚠페페 확인 1건 = GS 신반포에 「GS 메이플자이」가 붙었다(신반포4지구 재건축 단지명이라 맞을 수도). 새 함정 3건(코디 정리본 규약 · 헤드리스 프롬프트는 stdin · git add <디렉터리> 금지) = projects/pfs/rules.md.

✅ 26.9.3 — pfs 업체 전용 현장목록 모바일 3차 운영배포 완료 (6e7c8f9)

모바일 QA 6건(검색창·탭 겹침 / Search Filter 버튼+패널 / 사이드메뉴 버그 / 상세버튼 폐기→현장명 클릭 / 모달 가로중앙 / 한 행 2줄) 전부 처리. 사이드바 수정은 전역(pfs_layout.css·pfs.js) — 데스크톱·모바일 3페이지씩 회귀검사 10항목 포함 운영 전부 PASS. 새 함정 3건 = projects/pfs/rules.md 「모바일 레이아웃 함정 3종」(@media 위치 · DataTables float · JS 삽입요소 기본 display).

🧹 HANDOFF 완료건 이관 (2026-09-07) — 원문 그대로

✅ 26.9.3 — pfs 업체 전용 현장목록 2차 운영배포 완료 (168f21d)

표 폭 820px(우측 460px = 요약 게시판 자리, 게시판은 페페 「현재 작업 없음」) · 담당자 컬럼 숨김 · 상차일 26.8.29(수)(공용 포매터 convertDateStringKo 신설 · 규칙 재기록 = projects/pfs/rules.md) · 「진행 현장」 버튼 삭제(상태 탭과 중복) · 운영 DB 13행 field_div AS→내수(15건 전부 내수 · 자식 AS 0 확인 후 집행 · 롤백 C:\dev\pfs\scripts\_ivg_div_rollback.py). ⚠구분 컬럼이 전부 「본건」이 된다(의도).

✅ 26.9.3 — pfs 업체 전용 현장목록 QA 6건 운영배포 완료 (3990b06)

/field/company/452(아이비젼글로벌) = 상태 탭·완료 하단·20건/페이지·주방/일반 제거·상세(카톡 게시글 모달). 🔑상세는 kakao_board 에 업체·현장 정본 링크가 0건이라 현장명 문자열 매칭이고, 거르는 자리는 서버다 (고객 계정 화면이라 방 전량을 브라우저로 내리면 남의 업체 게시글이 샌다). 매칭 0건 = 상세칸 공백(페페 판단). 운영 검증 HTML 8/8 · UI 12/12 PASS. 상세·다음 할 일 = projects/pfs/handoff.md 맨 위 절.

🧹 루트 HANDOFF 이관 (2026-09-07) — 원문 그대로

✅ 26.9.7 KST — GS 안산 성포 MH 주방 견적 초안 (포인 양식 + 한샘 양식, 길이견적만)

페페 「나스에서 gs안산 성포동 도면 확인하고 견적서 초안 만들어줘. 포인, 한샘 양식 두개 다. 길이 견적만 한다」 + 「건립이라는 단어나 도면에 큰 네모 표시된 타입들만 찾아봐」.

🔑견적 범위는 도면이 직접 말한다 — 표제란 구분 : KIT. 건립 : 84㎡A, 99㎡A, 104㎡, OT84㎡A + 모델스페이스의 글자높이 1500 MH건립 라벨 8개 & 시트묶음을 두른 큰 사각형 8개. → 건립 = 4타입 × (Style Up 주방옵션 + 냉장고장-옵션형). 확장기본형·Style Up2/3·냉장고장 기본형1/2 는 제외. 도면 전체 조감 렌더 1장으로 눈에 바로 잡힌다(행렬 = 타입 × 옵션).

산출(전부 C:\dev\_work\gs-ansan-seongpo\) = GS안산성포_포인양식_견적초안_길이견적.xlsx · GS안산성포_한샘양식_견적초안_1_아파트(84A·99A·104).xlsx · …_2_오피스텔(OT84A).xlsx (⚠한샘 양식은 3평형 상한 이라 4평형을 한 파일에 못 담는다) · 생성기 build_estimate.py · 검증기 _verify.py. 27줄 · 포인 30,045,000원 / 한샘 25,115,300원(V.A.T·추가금액·운반·시공 전부 제외 = 「길이 견적만」). PFS 운영 DB 미변경(페페 선택 = 로컬 초안만). 현장 = 2180 「GS 안산 성포」(한샘·MH, 견적 0건).

🔴새 함정 3개(규칙 반영 완료) — ①캐드에서 열린 NAS dwg 는 nasget.py get 이 sharing violation 으로 죽는다 → share_access="rwd". ②DWG 판독은 ODA File Converter→DXF→ezdxf 가 정답(COM·Session1 불필요, 30초). ③한샘 양식의 남는 슬롯은 원래 이름 84A·84B 로 남아 우리 평형명과 겹쳐 보인다 → 판별은 A4 셀 값으로.

⏳페페 판단 3건 = ①아일랜드 후면 유리/FIX 장을 따로 청구하나(포인↔한샘 차액 −4,929,700 의 절반 이상이 여기서 난다) ②한샘 등급 D·적용률 1.0 확정 ③수량 = 타입당 1세대(1,354세대 물량 미반영). 세션문서 = projects/pfs/session-2026-09-07-gs-ansan-seongpo-estimate.md.

✅ 26.9.4 — pfs 생산현황 출력 3건(미확정 표 헤더 제거 · 아이비젼 축약 · 행 여백 50%) 운영배포 198744d

페페 지시 = ①「상차일 미확정 그룹에서 컬럼헤드를 빼자(AS/추가건과 같은 형태니 컬럼명 없어도 이해된다)」 ②「추가 기본규칙 : 아이비젼글로벌은 아이비젼 으로 축약 표기」 ③「각 테이블 행 높이 여백을 현재의 50%로」 ④운영배포. master 39af394 → deploy-live 체리픽 198744d. 템플릿 3파일.

🔑축약이 옛 규칙 하나를 지웠다 — 8.10 의 「이름 순서 유지 + <br> 로 2줄 끊기」는 폭이 모자라서 만든 것이었다. 「아이비젼」이면 업체칸 8% 에 1줄로 들어가고, 부분일치라 운영 아이비젼글로벌 / 테스트 글로벌아이비젼 표기차도 같이 사라진다 → 업체필터 버튼(field_list·estimate_list_v2)도 같은 규칙으로 줄였다(테스트에서만 0건 나오던 함정 해소). 🔑헤더 제거는 <colgroup> 을 남겨 두면 폭이 안 흔들린다(table-layout:fixed) — 실측 AS 표와 픽셀 동일. 여백은 화면 4→2px·인쇄 3→1.5px, 폰트·line-height 는 그대로. 절약 실측 = 같은 페이지에서 되돌려 대조 996→920px(-76px/17행). 검증 = 신설 C:\dev\pfs\scripts\_status_print_check.py [test|prod] 테스트 22/22 · 운영 21/21 ALL PASS(임시 행 주입·제거식). 사이트맵 재빌드 = 그룹8·페이지57·미반영 4→1(남은 1건은 남의 field_worklog.html). 🔜미적용 = line-height 축소(여백만 줄이면 행높이는 8%뿐 · 내리면 -22%) — 페페 판단. 상세 = projects/pfs/handoff.md 맨 위 · 규칙 2줄 = projects/pfs/rules.md 🆕 맨 위.

✅ 26.9.4 — pfs 넥서스→한샘 자동전환 재검토 + 신영 광주 추가2·추가3 「한샘 전용 견적」 작성 운영배포 완료 (dfd1435)

페페 ①「넥서스 표기 파일·현장 한샘 자동전환 됐는지 재검토(아직 한샘 표기가 안 익숙하다)」 ②「NAS …\09월\넥서스\넥서스 신영 광주 챔피언스시티 MH 견적서 추가2,3.xlsx 를 pfs 한샘 견적서로 반영·작성, 금액 최대한 맞추고(완벽 불필요·빠른 작업 우선) 운영배포」. 작업 중 「추가2 탭 추가했다」 지시 반영.

🔑「한샘 견적서」가 두 갈래라 그릴링으로 갈랐다 — 기존 견적계통엔 추가2·추가3 가 이미 있었다(742·754, NAS 엑셀과 셀단위 금액 100% 일치) → 페페 결정 = 한샘 전용 모듈에 새로 작성, 이어서 「한 목록으로 탭만 구분해 통합」 → 운영 한샘견적 4 한 건(평형 슬롯=엑셀 탭 추가2·추가3 2개 · 상세 13줄 · 1,996,017원 / 원본 1,996,000 · +17원). 🔴부수확 = 진짜 버그 — 한샘 양식은 원본이 쓰던 칸 수만큼만 단가 LOOKUP 수식이 있어(예비블록은 C 한 칸뿐) 그 다음 칸 줄의 금액이 엑셀에서 조용히 0 이 됐다(서버 총액은 정상 → 목록으론 안 걸린다). 이번 건 2칸 실제 적중. 현장명 자동전환은 등록·수정으로 들어오는 것만 신설(기존 7건은 이력 보존 = 페페 결정). 총액 오차 = 추가2 -4원 · 추가3 +21원(적용률 소수 4자리 반올림 잔차, 페페 「완벽하지 않아도 괜찮다」 범위). 검증 = 엑셀 3중 교차 · 테스트 선행등록 후 「값칸 ⊆ 단가수식칸」(배포 전 ⚠→후 OK) · 왕복 전 줄 대조 · 현장명 E2E(테스트) PASS · 사이트맵 그룹8·페이지57·미반영 1(남의 분). ⏳페페 = /estimate/hansem/list 4·5 육안 + 엑셀 금액 검산. 상세 = projects/pfs/handoff.md 맨 위 · 새 규칙 4건 = projects/pfs/rules.md 🆕 맨 위 · 세션 = projects/pfs/session-2026-09-04-hansem-shinyoung-add23.md.

✅ 26.9.4 — pfs 파레트용지 한샘 로고 NEXUS 제거(HANSSEM 만) 운영배포 완료 (2fb811f)

페페 QA 1건(qahelper) = 「한샘 파레트 용지에서 nexus 빼라 · 추후 롤백 가능 · HANSSEM 으로만」. 🔑NEXUS 는 코드 문구가 아니라 로고 이미지 자체(company_logo/1.jpg)였다 — 그 파일은 스티커·현장배지도 같이 쓴다. → 파레트 전용 오버라이드 규약 신설(company_logo/pallet/{업체번호}.jpg 있으면 파레트에서만 사용, 없으면 폴백). ⛒롤백 = 그 파일 하나 삭제(코드 롤백 불필요). 이미지는 같은 캔버스에 HANSSEM 만 재중앙 = 인쇄 크기 원본과 동일(160×19.8mm) — 타이트 크롭하면 세로가 +77% 로 커진다(web-designer 실측). 검증 = 신설 C:\dev\pfs\scripts\_pallet_logo_check.py 테스트·운영 ALL PASS(17항목) · 사이트맵 미반영 1 = 남의 분. ⚠남은 것 1 = 생산팀 PC(PfsPrint.exe) 실물 1장 육안(프린터 여백은 화면으로 못 잡는다). 상세 = projects/pfs/handoff.md 맨 위 · 새 규칙 2건 = projects/pfs/rules.md 🆕 맨 위.

✅ 26.9.4 — pfs 생산현황 「상차일 미확정」 프레임 + 현장목록·모달 자동완성 차단 운영배포 완료 (53c4391)

페페 QA 2건(qahelper) = ①생산현황 출력 하단(AS 표 아래)에 미확정 현장만 모은 새 표(AS 표와 같은 6칸 양식, 표 안에서 AS 는 하단·나머지는 상단) ②현장 목록·모달 크롬 자동완성 해제. 🔑미확정 = 상차일 빈칸 하나로 판정 → 그 현장은 메인·AS 표에서 빼서 새 표로 옮겼다(중복 아님 · 「모아서」의 해석). 🔑자동완성은 26.9.4 /admin/user 처방(readonly-until-focus)을 공용 헬퍼 blockChromeAutofill 로 빼서 재사용. 검증 = 신설 C:\dev\pfs\scripts\_tbd_frame_check.py 테스트·운영 ALL PASS(24항목) · 사이트맵 미반영 1 = 남의 분. ⚠남은 것 2개 = ①자동완성 실기 확인(헤드리스 재현 불가 → 페페 크롬) ②이 출력은 진행중만 뽑아 대기 현장의 미확정 건은 새 표에도 안 뜬다(운영 3건 중 1건 = GS 안산 성포 제외) — 넓힐지는 페페 판단. 상세 = projects/pfs/handoff.md 맨 위 · 새 규칙 2건 = projects/pfs/rules.md 🆕 맨 위.

✅ 26.9.4 — pfs /admin/user 검색칸 크롬 자동완성 재발 차단 운영배포 완료 (98c4841)

페페 QA 1건 = 검색칸에 poin01 이 박혀 목록이 그 사람만 남는다(첫 로드는 정상 → 작업 중 발생). 🔑26.9.3 처방(type=search+autocomplete=off)으로는 안 막힌다 — 크롬은 credential 후보 칸에서 autocomplete=off 를 무시하고 search 도 text field 로 친다. 처방 2겹 = ①검색칸 readonly + focus 때 해제 ②password 3칸 autocomplete="new-password"(트리거 제거 — ①만 하면 옆 칸으로 옮겨가 박힌다). 검증 = 신설 C:\dev\pfs\scripts\_qa_autofill_check.py 13항목 테스트·운영 ALL PASS. ⚠자동완성 재현은 헤드리스로 불가 → 페페 크롬에서 실기 1회 확인 필요. 사이트맵 미반영 6 = 전부 남의 미배포분. 상세 = projects/pfs/handoff.md 맨 위 · 새 규칙 1건 = projects/pfs/rules.md 🆕 맨 위.

✅ 26.9.4 — pfs 오엠씨 3페이지 모바일 표 = A안 2줄 압축 운영배포 완료 (624b63c)

페페 지시(목업 먼저 → 확인 후 진행) → 목업 3안 제시 → A안 확정 → 구현·배포. 목업 = http://100.108.234.45:8799/pfs-omc-mobile-mockup.html (허브 카드 등록됨, 안내 문구는 목업에만). 방식 = 마크업·JS 그대로, 행(tr)만 CSS grid 로 2~3줄 재배치 → 데스크톱 무변화·가로 스크롤 0. 🔴함정 3개 = table/tbody 도 block 이어야 함(안 하면 글씨 세로로 찌그러짐) · 구역 머리 table-row 는 폭 못 채움 · rowspan 있는 표에서 nth-child 배치 금지(첫 행만 1칸 밀림) → 클래스 셀렉터로. ⚠폰트 하한 13px·연회색 금지 규칙에 맞춰 보조 글씨 되돌림. 검사기에 A안 구조 6항목 추가 → 테스트·운영 ALL PASS + 노트20 실기 육안. ✅web-designer 검토 반영 완료(운영 3d3dfdf) — A안 로직 자체는 문제 0, 얹혀 온 기존 요소가 문제였다: 터치 타깃(19~21px→28px)·배지 5종 13px·죽은 CSS 정리. 🔴그 과정에서 품명코드가 100→84px 로 깎여 액션을 열 트랙 경쟁에서 빼니 134px·말줄임 0행. 운영에서만 난 span.code 셀 이탈도 수정. ⏳페페 판단 = 색 대비 3건(진행 2.94:1·완료 3.30:1·badge-out 2.53:1, 전부 WCAG 미달 — 브랜드 톤이라 코디가 안 정함). 상세 = projects/pfs/handoff.md 맨 위 · 새 규칙 4건 = projects/pfs/rules.md 🆕.

✅ 26.9.4 — pfs 오엠씨 모바일 목업 폐기 + 메뉴를 「업체별 페이지」 그룹으로 운영배포 완료 (dcad1d9)

페페 지시 9건 전부 처리. 🔑원인 하나 = /omc/sheet·/omc/board 가 모바일 UA 면 와이어프레임 목업을 그대로 서빙했다(목업 타이틀·가짜 사이드바·Excel·태그가 깨진 빈 버튼 전부 그것) → 분기 제거, 실제 페이지로 통일. 🔴부수확 = 전역 .topbar{display:none!important} 가 오엠씨 제목·액션 줄까지 죽여 Excel·확인서·입출고 등록이 데스크톱에서도 안 보이던 것 복구. 모바일 상단 탭(시트·보드·자재관리) 신설, 확인서 공문은 모바일 숨김. 메뉴 DB(test·live) = 「업체별 현장」→「업체별 페이지」, 오엠씨를 그 하위 아이비젼 다음(가나다) 으로. 검증 _omc_mobile_check.py 테스트·운영 ALL PASS · 사이트맵 그룹8·페이지57·미반영1(기존). ✅노트20 실기 육안 완료(임시계정 poin02) — 웹 390px ALL PASS 인데 실기에서 4건 더 나왔다 (보드 넘침·자재 2단 잘림·펼침/접기 어긋남·QA토글이 탭 가림). 원인 태반 = grid 아이템 min-width:auto. 운영 a07226c 반영 후 재촬영 정상. 검사기도 360px·넘침목록·탭침범으로 조임. ⚠poin02 임시비번 정리는 페페 판단. 상세 = projects/pfs/handoff.md 맨 위 · 새 규칙 4건 = projects/pfs/rules.md 🆕.

✅ 26.9.4 — pfs 아이비젼글로벌 현장 유형 = AS 재전환 운영 DB 반영 완료 (코드변경 0)

페페 상담 = 「아이비젼은 입주완료 세대 AS라 규모가 작다. AS로 넣으려니 상위 본건이 없어 내수로 바꿨더니 생산현황 출력에서 본건 표로 갔다」. 방안 3개 제시 → 페페 선택 = A(그대로 AS, 부모 비움). 🔑AS(60)는 상위 본건 없이도 저장된다 — 대가는 내부 현장목록의 「연결」 버튼 + 맨뒤 정렬뿐(업체 전용 목록엔 없다). 집행 scripts/_ivg_div_to_as.py(SSM) 13행 UPDATE · 452 전체 15건 AS · 잔여 0, 검증 _ivg_as_section_check.py prod ALL PASS(본건 표 아이비젼 0 / AS 표 2건 — 이 출력은 진행중만 뽑아 15건 중 2건이 정상). 새 규칙 3건 = projects/pfs/rules.md 🆕. 상세 = projects/pfs/handoff.md 맨 위.

✅ 26.9.4 — pfs 현장목록 유형관리 모달(톱니바퀴) + 상차일 26.10.21(수) 운영배포 완료 (2507c20)

페페 QA 2건 = ①「현장 등록」 왼쪽 톱니바퀴 → 모달에서 유형 CRUD ②상차일 KO 표기. 백엔드 신규 0 — 업체 「목록관리」가 쓰던 PUT /api/admin/common-code/<group> 재사용, 새로 만든 건 사용건수 SQL + 삭제 가드. 삭제는 사용 중·AS 차단(프론트 잠금 + 서버 가드, 코덱스 지적 반영). 톱니는 업체권한관리 권한자만. 부수확 = 유형 필터 하드코딩 탓에 운영의 개인건(70) 이 검색조건에 없던 것을 공통코드 서버렌더로 교체. 검증 _fielddiv_check.py 21항목 테스트·운영 ALL PASS + _fielddiv_guard_test.py 7항목. 사이트맵 미반영 1(카톡관리, 무관). 상세 = projects/pfs/handoff.md 맨 위 · 새 규칙 3건 = projects/pfs/rules.md 🆕. 2차(같은 날) = 톱니 위치를 페이지 좌측 끝으로 옮김(운영 6c85146, 테스트·운영 21항목 ALL PASS).

🧹 pfs handoff 완료건 이관 (2026-09-10, 페페 「여기서 종료 내용 이관. 추후 보완은 새 세션」) — 원문 그대로

✅ 26.9.10 — 네스팅 부재 그리드 키보드·타입/위치 + 저장/열기 모달(현장 연결) — 운영배포 4388bc4 완료

[페페] 26.9.10(목) 15:30 KST 네스팅 검증보고 2건 + 「운영배포」 —

1 「모든 셀 방향키 = 셀 이동, 숫자단위 데이터 변환 없애라 / 최하단 Enter = 새 행(이전 행 복사, 가로·세로·수량 비움) / 표 높이 3배 / 순번 뒤 타입·위치 컬럼」

2 「저장과 불러오기 모달 제작, 현장명 연결 가능하게」

산출 = 파일 1개 web/nesting/nesting.html(+220/−42) · 백엔드·DB 변경 0(nesting_job 에 field_no/field_name 이미 있음). master 3fb62dc → 운영 4388bc4(1파일 선별 포워드, 직전 diff 0). - 타입·위치 키 = tread 입력탭과 같은 type·pos → tread JSON 불러오기가 그대로 채운다. PNCAD·몸통재 경로는 빈칸(원천에 없음). - 숫자칸 type=number → text+inputmode=decimal — 방향키·휠 ±1 증감이 「숫자단위 변환」의 정체였다. - 방향키 = 부재·자재 두 그리드 전부(토글·선택칸 포함) · Enter = 아래 셀 · 부재 최하단 Enter = 새 행(같은 열로 이동) · 토글은 Space. - 🔑한글 IME — 조합 중 키는 keydown 이 keyCode 229 로 온다. 무시만 하면 한글 입력 뒤 Enter 를 두 번 쳐야 한다 → e.code(물리키)로 이동키만 기억했다가 그 키의 keyup 에서 이동(규칙 rules.md 🆕 맨 위). - 🔑붙여넣기 호환 — 앞에 컬럼 2개가 끼면 기존 9열 엑셀 붙여넣기가 2칸 밀린다 → 9열 이하 = 옛 순서(두께부터), 11열 = 타입부터. - 부재 표 높이 min(900px, 100vh−60px) = 3배, 화면이 작으면 화면에 맞춤(web-designer 우려 절충). 자재 표는 그대로. - 저장 모달 = 작업명 + 현장 연결(POST /api/field/search 이름 LIKE — 상차일 키 2개는 빈값이라도 필수, 없으면 서비스 KeyError) + 기존 작업이면 덮어쓰기/새 작업 라디오(툴바 「다른 이름」 버튼 흡수). 열기 모달 = 검색·현재 현장만·행 클릭 열기·🗑 삭제(작업명 확인창, 소프트).

검증 = scripts\_nesting_grid_modal_check.py(gitignore 대상) 로컬 목킹 54/54 · 테스트 실측 55/56 (FAIL 1 = 검사기 오탐, rules.md 🆕) → 고쳐 운영 읽기전용 47/47(쓰기 0건) · 테스트 검증행 2건 소프트삭제 정리 · 사이트맵 재빌드 그룹 8·페이지 58·미반영 1. 상담 = web-designer · GPT 코덱스 · Plan(Fable 5). devplan C:\dev\devplan\pfs-nesting-grid-modal.html + 허브 카드 pfs-nesting-grid-modal(최근 3개소 확인). ⏳페페 = 실기 육안 1회 — 한글 입력 직후 Enter 한 번에 새 행이 나오는지(Playwright 는 실 IME 조합을 못 만든다 — 합성 이벤트로만 검증했다).

✅ 26.9.10 2차 — 네스팅 그리드 범위 선택(드래그·Shift+클릭) + Ctrl+C/Ctrl+V — 운영배포 83e15b3 완료

[페페] 26.9.10(목) 16:39 KST 검증보고 #1(table#partGrid 셀) — 「데이터 복수 드래그 선택, 컨트롤c,컨트롤v 기능되게 해줘. 행이 부족한 상태일때는 새행 생성후 남은 복사행 내용 붙이기.」 + 「운영배포」 + 추가 「복사 항목은 한개인데 여러행셀을 선택했을때는 같은 값을 여러행에 붙이기」.

산출 = 파일 1개 web/nesting/nesting.html(+113/−34) · 백엔드·DB 변경 0. master 690206a → 운영 83e15b3(1파일 선별 포워드, 직전 diff 0, C:\dev\pfs_deploy_wt 워크트리). - 범위 = 드래그·Shift+클릭 사각형 → td.cellsel(칸 2개 이상). 부재·자재 두 그리드. 선택색 #d7e8ff(목록 선택행과 같다) · 토글칸 #a9c7fa. - Ctrl+C = 칠한 칸 TSV(엑셀에 그대로) · 범위 없이 토글/선택칸이면 그 한 칸. - Ctrl+V = 범위 왼쪽 위(없으면 포커스 칸)부터 사각형 · 행 모자라면 새 행 추가 후 나머지 · 한 값 + 여러 칸 = 전부 같은 값(엑셀 한 칸 복사의 끝 줄바꿈도 한 값). - 🔑외부 한 행 전체(9열=두께부터 / 11열=타입부터)는 옛 방식 유지. ⚠9열보다 좁은 외부 붙여넣기는 이제 포커스 칸부터(예전엔 무조건 두께부터 — 가로·세로·수량 3칸을 붙이면 두께·MDF·컬러에 박혔다). - 덤 수정 2건 = ①엑셀 한 칸 복사(값\r\n)가 커서 칸이 아니라 그 행 두께 칸에 박히던 것(한 칸 판정이 \n 포함으로 새던 기존 결함) ②옛 모드 헤더 자동 스킵이 가로 빈 첫 행을 헤더로 오인해 버리던 것. 토글·선택칸은 목록 값만(대소문자·2,440 정규화). - 상담 = web-designer(색·안내 줄 분리) · Plan(Fable 5)(토글 오발·document 게이트·헤더 스킵·정규화 반영, 「첫 클릭 = 칸 전체선택」은 기존 동작 변경이라 보류) · GPT 코덱스(5건, 설계에 이미 있음).

검증 = scripts\_nesting_grid_modal_check.py(gitignore) 에 range_tests 32항목(실 마우스 드래그 + 실 Ctrl+C/Ctrl+V) → 로컬 86/86 · 테스트 89/89(검증행 정리 0건 남음) · 운영 읽기전용 80/80(쓰기 0건, 콘솔 에러 0). 🔴함정 3개 = rules.md 🆕 맨 위(표 리스너는 포커스 빠지면 안 온다 · 드래그 뒤 click 공통조상 · http 테스트서버엔 navigator.clipboard 없음) · playbook §2 배포 절차 정정(deploy-live = 워크트리). ✅[페페] 26.9.10 실기 확인 완료 — 작업 종료(첫 확인에 「변화 없다」 → 곧바로 「결과 확인 완료」로 정정, 코드 추가 수정 없음). 세션 = session-2026-09-10-nesting-grid-range.md.

✅ 26.9.22 · pfs-hansem-add1-hwaseong · 롯데 화성 향남 추가1 → 한샘 양식 변환·등록 + 한샘 엑셀 엔진 결함 3건 (운영 82a5052)

[페페] 「PFS /estimate/modify-v2/780 — 본건 제외하고 이 내용만 한샘 견적서 양식 변환 등록해줘」 + 「이미지 작업은 안해도 된다」 + 「운영배포까지 진행해」. 산출 = 운영 한샘 견적 8(현장 2134 · 탭 84B·84C·120 · 상세 9줄 · 서버총액 540,239 · 갑지 합계 840,000 = 780 총액 정확히 일치). 부모 779(본건)는 한 줄도 안 가져왔다. 품명 접두가 전부 평형이라 평형이 곧 탭이다. 식기세척기 마이다=하부장(K/11) · 천판·칸막이·EP·S/R=키큰 FIX PANEL(K/39) · 등급 A 고정 + 적용률 역산. 🔑적용률은 「올림」이다 — 갑지 절사가 만원 내림이라 합계가 목표를 1원이라도 밑돌면 소계가 10,000원 잘린다(반올림 시 539,951 → 530,000). 🔴덤 = 한샘 엑셀 엔진 결함 3건(운영 전체에 걸려 있었다, 서버 총액은 멀쩡해 목록만 보면 안 걸린다) — ①블록이 밀리면 라벨 미러·10MM기준 수식이 옛 좌표를 물어 남의 길이를 읽거나 0 ②기증 블록의 단가 LOOKUP 을 앞 순번 「비우기」가 먼저 지워 그 블록이 통째로 0 ③빈 평형 슬롯 총합이 =SUM() → 엑셀 복구 경고. 배포 전/후 실측 = 견적 4 전 탭 0 → 정상 · 견적 6 은 서버총액과 원 단위까지 일치. ⚠양식이 두 벌이었다 — 운영 활성 form 3(26.9.7 업로드)에는 절사행·운반비가 없다. 정본판을 비활성 form 4 로 새로 올려 이번 견적만 물렸다(활성판·기존 견적 6·7 은 그대로). ⏳[페페] 판단 5건 = ①수납 3품목(174,000)을 주방 탭에 넣은 것 ②견적 7 이 서버총액보다 +275,723(NAS 정본 대조 필요) ③운반비를 양식에 박아 둘지(모듈 필드 신설?) ④도면 비우기 ⑤기존 견적 1·2·3·4·7 엑셀 금액 변동 → 재발행 여부. 작업폴더 = C:\dev\_work\hansem-hwaseong-add1\(build.py·verify.py·impact.py·upload_form.py) · devplan pfs-hansem-add1-hwaseong.html · 함정 3건 = rules.md 🆕 맨 위.

[페페] 결정: 확정 버튼만 반영 · AL·유리 분류 각각 · 엑셀 표식으로 NAS 중복 차단 · 기존 6건 이관 안 함 · 현장·입고일 필수·발주일 오늘 자동 · 긴급 토글. ⏳[페페] 실화면 확인 1회. ⚠부자재 1번(용산 나진)은 NAS 43행과 중복 의심 → 확정 금지. 상세 = devplan pfs-orderpaper-pfs-link.html, 함정 = rules.md 🆕 맨 위 2줄.

✅ 26.9.22 · pfs-monthly-close-pick · 월마감 담기 모달 금액 3분할 + 견적일 포맷 (운영 91cc509) — NOW 에서 이관

[페페] QA 보고 1건 + 「운영배포」. 금액 1칸 → 가구총합·시공비·전체총합 3칸(「시공비가 빠지니 원금 비교가 어렵다」) · 견적일 2026-04-12 → 4.12(일). 🔑화면만으로는 못 푼다 — construction_amount 는 「담을 값」 이라 시공비 분리 OFF 거래처에선 늘 0 → 표시용 furniture_amount·construction_cost 2필드를 분리 여부와 무관한 실값으로 따로 내렸다(담기 계산식은 한 줄도 안 건드렸다). 파일 2개 · DDL 0. 검증 = 테스트 82/82 · 운영 읽기전용 76/76 · 콘솔 0 · 사이트맵 미반영 1(화면 밖). ⏳[페페] 육안 1회(1240px 모달 · 긴 현장명 · 두 줄 헤더) · ⏳[페페] 판단 2건(「시공비 있는 건만」 필터 · 선택행 합계 실시간 — 지시 범위 밖이라 안 넣었다). 원문 = archive.md 「✅ 26.9.22 · pfs-monthly-close-pick」 · 함정 4건 = rules.md 🆕 맨 위 · devplan pfs-monthly-close-pick.html.

✅ 26.9.22 · pfs-nesting-drawer-calc · 네스팅 「서랍 자동계산기」(도어전용 탭) (운영 a9c5d22+5faf806) — NOW 에서 이관

산출식은 정본 drawerBox() import 재사용(SPEC-DRAWER §3, 복제 금지) · 텐덤은 마이다 폭 −103/−115 · 후판 소65·대142 (imos 실발주 8/8 편차 0) · 확신 낮은 값은 전부 입력칸. 파일 1개(web/nesting/nesting.html), 서버·DDL·사이트맵 변화 0. 🆕2차 = 재단치수 내림 정수(두께만 예외) + 결 부재(서랍측판·전후판·텐덤후판) 가로/세로 뒤집기 + 세로결 — 규칙 2줄은 rules.md 🆕 맨 위. 검증 1차 로컬 61/61·테스트 68/68·운영 69/69 → 2차 로컬 65/65·테스트 72/72·운영 73/73(쓰기 0건). 원문 = archive.md 「✅ 26.9.22 · pfs-nesting-drawer-calc」 · 세션 = session-2026-09-22-nesting-drawer-calc.md · 함정 3건 = rules.md 🆕 맨 위 · devplan pfs-nesting-drawer-calc.html. ⏳[페페] 5건 = 실무값 4개(마이다 상하·좌우 갭 / 단 사이 갭 / 날개폭 / 뒷판을 독립형에만) + 육안 1회(3단 산출 vs 실제 재단치수).

✅ 26.10.16 · pfs-handoff-cap-1016 · 26.10.14 소요한남2차 완료절 이관

[코디] 🆕 26.10.14(수) 8차 ✅ 운영 22:11 KST — 소요 한남 2차 #803 16행 전부 몸통 옵션(PET 2행 포함) — [페페] 「무늬목 마감 금액이 별도로 빠져서 몸통이 맞다 · 펫 등 소재는 직접 보고 전체로 복원 · 운영배포」 · 화면식(자당·마진 몫 × 0.65 + sub 그대로) 계산값으로 PUT /api/estimate/803 1회(part_mode·행 금액만 · 단가·sub 85줄·마진·부가비·운반·시공 불변) · 독립 GET ALL OK · 운영 화면 토글 16행 「몸통」·총합계 = DB · 행 합 29,032,000 → 23,855,000 · 총액 52,380,700 → 47,203,700 · 한샘 V7 NAS(sha256 af8c98c2… · 생산비+시공비 47,198,700) · devplan 단가 페이지 결론·총액 갱신 검산 ALL OK · ⏳[페페] PET 등 소재 행 「전체」 복원(직접) → 복원 후 한샘 V8 · 상세 = session-2026-10-14-sohan2-hansem-803.md 「8차」

[코디] 26.10.14(수) 7차 ✅ 운영 21:18 KST(→ 8차에서 행 몸통 전환 · 단가는 그대로 유효) — 소요 한남 2차 #803 월드 sub 단가 1차 우선 재조정(6차 대체) — [페페] 「라인·일레븐 현장 빼고 · 소요 한남 1차 1순위 · 없는 규격은 타현장(최근 우선) · 최소·평균 후순위 · 물가 고려 최근 위주 · 운영배포」 · 표본 955행 − 라인·일레븐 486행 = 1차 무늬목 24 · 타현장 무늬목·도장 268행(롯데 25.5 · 판교·청담 25.12 · 학동 26.5 …) · 현장 수준 보정 폐지 · 한남 소요 MH 도장 블록(반값)은 손잡이판에만 1:1 · 등급(75줄) 1차 43 · 타현장 29(전부 구단가 — 2026 타현장 무늬목·도장 중 맞는 규격 0) · 후순위 평균 3 · PUT /api/estimate/803 1회(단가 59줄 · 비고 75줄 새 근거 · 마진·조정 10줄 불변) · 독립 GET ALL OK · 원가 10,000,000 → 10,540,000 · 마진 후 13,500,000 → 14,229,000 · 총액 51,651,700 → 52,380,700(5차와 합계만 우연히 같음) · 한샘 V6 NAS(sha256 8a9f26fc… · 생산비+시공비 52,368,700) · devplan 단가 페이지 7차(규칙 순서·등급 배지·뺀 현장·기간 추세·6→7 전후) 검산 ALL OK · ⏳[페페] 구단가 29줄(인상률 미적용) 검토 · 조정 10줄 제안(포켓 200폭 80,000 · 목대 30T 70,000 · 오픈장 선반 25T 40,000 · 천판EP 30T 170,000) · 상세 = session-2026-10-14-sohan2-hansem-803.md 「7차」

[코디] 26.10.14(수) 6차 ✅ 운영 20:10 KST(→ 7차로 대체) — 한샘 소요 한남 2차 #803 추가금액(월드 무늬목 sub 85줄) 2년 단가 재조사 → 46줄 단가 갱신 — [페페] 「단가 조사 좀 더 · 무늬목=도장 1:1 · 최근 2년 월드 견적 · 같은 규격 편차 표시 · 운영배포」 · NAS 월드 견적 엑셀 10파일(2025.4~2026.7 · 항목 1,448 → 중복 빼고 1,086행) · 근거 풀 무늬목 236 + 도장 293 = 529행·11건 · 건별 수준 보정(소요 1차 ×1.07 · 일레븐 MH ×1.19 · 한남 소요 MH ×0.50 = 옛 0.738·「무늬목/도장 2.0」 대체) 후 이웃(긴 변 ±10%) 중앙값 · PUT /api/estimate/803 1회(price 만 · 조정 10줄·마진·행 본체·부가비 불변) · 독립 GET ALL OK · 원가 10,540,000 → 10,000,000 · 마진 후 14,229,000 → 13,500,000 · 총액 52,380,700 → 51,651,700 · 한샘 V5 NAS(sha256 0452123b… · 생산비+시공비 51,638,700) · devplan sohan2-world-price-basis.html 6차(같은 규격 다른 단가 29묶음 · 85줄 실적 범위) 검산 ALL OK · ⏳[페페] 포켓도어 22T 제안(512폭 170,000 · 200폭 60,000) · 25/30T 제안(목대 60,000 · 오픈장 선반 70,000) 확인 · sub 비고는 옛 근거 문구 그대로(단가만 바꿈) · 상세 = session-2026-10-14-sohan2-hansem-803.md 「6차」 · 작업 C:\dev\_work\sohan2-price-2y-1014\

[코디] 🆕 26.10.14(수) ✅ 운영배포 19:54 KST — 견적 v2 「저장된 추가금액 연동 (0/N)」 버튼(저장된 고정 sub → 추가금액 마진 공통칸 일괄 연동 · 인라인 확인 줄 · 「고정으로」 · #qmDelta) — [페페] 「소요한남2차 추가금액 마진 공통 적용 항목에 연동 · 운영배포」 · master 4e5224cb → deploy-live e2621c5f(3파일 선별 · DDL 0) · 테스트 자체검사 ALL PASS(F 24항목) · 운영 #803 읽기 확인 0/85→85/85 · 총액 불변 · 저장 0 · 사이트맵 미반영 3→1(worklog 기존분) · 테스트 견적 829~833 「(삭제 가능)」 · 상세 = session-2026-10-14-est-submargin-linkall.md

[코디] 🆕 26.10.14(수) — 한샘 소요 한남 2차(field 2184 · 99A) 부자재 발주서 초안 = 운영 PFS 부자재 발주서 #8(draft · 11:58:50 KST · 116행 · 미확인 업체 72행) — [페페] 「도면 참고 · 보이는 모든 조명·싱크볼 등 부자재 · 업체 없는 건 미확인 업체」 · 261008 도면(r3 덤프 C:\dev\_work\hannam2-1012\diff\new_prims.pkl) 글·치수·PNG 판독 · 업체 = 도면 글에 이름 있는 것만(봉적 14·이지웨이 10·해람 8·명진 4·유로글라스 3·삼성정밀 2·라고데코 2·헤펠레 1) · 업체 칸 자유입력(VARCHAR) → 「미확인 업체」 문자열 그대로 · 쓰기 = POST 1회뿐(confirm·PUT·DELETE·코드 0) · GET 대조 오류 0 · /excel 시트 9 = 업체 9 · 원장 C:\dev\_work\sohan2-suborder-1014\원장_부자재_소요한남2차_99A_261014.csv(근거 문구 전부) · 세션 session-2026-10-14-sohan2-suborder.md · ⏳[페페] ①참고 행 4(EXEDRA2 「260923 발주완료」·인덕션·음식물처리기·시건장치 = 건설사 지급분) 삭제 여부 ②다인스 제작분 18행 범위 ③수량 확인필요 26 · 규격 확인필요 50(조명 길이·유리도어 높이·SMPS 용량·아일랜드 레일 타입 혼재) ④주방 「키큰장,하부장 전체 제외 발주완료」 범위 ⑤미확인 업체 72행 업체 지정 ⑥비고 ⚠문구는 엑셀 비고에 찍힘 → 발송 전 정리 · 마감재 리스트 xlsx 는 DRM(SCDSA)이라 못 읽음

[코디] 🆕 26.10.14(수) V4 — [페페] 답 반영: PFS #803 운영 PUT 1회 — 네스팅 제외(exc) 행으로 만든 기존 sub 5줄(7장 · 끝판 30T 4 · 목찬넬 2 · 진열칸 E.P(앞) 1 = 1,525,500) 삭제 · 행 비고 × 7개 → * (견적 전체 × 0) · sub 90 → 85 · 총액 53,906,700 → 52,380,700 · 독립 GET ALL OK → 한샘 V4 NAS(…\견적\10월\한샘\소요 한남 2차\…(26.10.13) V4.xlsx · sha256 81536b92… · 갑지 주방 23,228,700 · 수납 21,150,000 · 생산비+시공비 52,378,700) · verify 353 ALL OK · ⏳[페페] 포켓도어 22T·25/30T 추정 단가 직접 조정 → fetch --refresh → run → nas-put --put(V5) · 상세 = session-2026-10-14-sohan2-hansem-803.md 「4차」

[코디] 26.10.14(수) V3 — [페페] 「도어 등 모든 무늬목 네스팅 내용 추가금액에 · 제외 유지 · x → * · 운영배포」: PFS #803 운영 PUT 1회 — 도어 네스팅 #28 제외 아닌 INEK10 중 빠진 53행 59장(도어·포켓도어·서랍앞판·오픈장·목대 30T·벤치)을 위치별 sub 32줄 추가(월드산업 · 마진 35 · 월드 기준 ①12 ②8 ③12 · 매입 6,350,000 · 마진 포함 8,572,500) · sub 58→90 · ×→ 잔존 0 · 부가비·운반·시공 불변 · 총액 45,334,700 → 53,906,700* · 독립 GET ALL OK → 한샘 V3 NAS(…\견적\10월\한샘\소요 한남 2차\…(26.10.13) V3.xlsx · sha256 3ba12e47… · 갑지 주방 23,308,700 · 수납 22,590,000 · 생산비+시공비 53,898,700) · verify 353 ALL OK · ⏳[페페] 🔴기존 sub 7줄이 네스팅 제외(exc) 행(끝판 30T 4·목찬넬 2·진열칸 E.P 1 = 1,525,500) → 뺄지 · 22T 포켓도어 두께 · 200폭 포켓도어 50,000 · 상세 = session-2026-10-14-sohan2-hansem-803.md 「3차 — 무늬목 sub 보강」 · 작업 C:\dev\_work\sohan2-sub-fill-1014\

✅ 26.10.19 · pfs-mat1-h2041b-pndeco · PFS-MAT#1 H2041B-L1 피앤데코 직접발주분 자재관리 복원 + 이선영 사원 카톡 보고 — NOW 에서 이관

✅ 26.10.23 · pfs-handoff-cap-1023 · 26.10.20 소요 한남 2차 시공비 거래명세서(지엠테크 V2) — NOW 에서 이관

✅ 26.10.25 · pfs-handoff-cap-1025 · 26.10.8 kb_digest → cody_ask 전환 — NOW 에서 이관

✅ 26.10.25 · pfs-handoff-cap-1025b · 26.10.23 발주서 엑셀 현장명 유형·발신 로그인 직원 — NOW 에서 이관

✅ 26.10.25 · pfs-handoff-cap-1025c · 26.10.22 DL 포제스 한강 103-203 임시견적 #810 — NOW 에서 이관

✅ 26.10.26 · pfs-handoff-cap-1026 · 단가표 관리(시스템 단가) · GS 대전 도마 수입분 생산 — NOW 에서 이관

✅ 26.10.26 · pfs-handoff-cap-1026b · 계룡 진주 판문 #811 초안→소프트삭제 · 789~798 현장 연결 · 795 선택 — NOW 에서 이관

[코디] 26.10.26 handoff 캡(20,000자) 관리로 원문 이관.

✅ 26.10.26 · pfs-handoff-cap-1026c · handoff 캡 이관(원문)

✅ 26.10.26 · pfs-seongpo-h2041b-edge-1026 · 성포 10월 원부자재발주서 피앤데코 탭에 H2041B-L1 엣지 400M 추가

✅ 26.10.26 · pfs-handoff-cap-1026d · 업체 페이지 거래명세서·견적서 PDF 다운로드 — NOW 에서 이관

✅ 26.10.26 · pfs-handoff-cap-1026e · 에넥스 10월 마감 close 25 정리 + NAS 저장 — NOW 에서 이관

✅ 26.10.26 · pfs-handoff-cap-1026f · 라온 용인 견적 809 총액 34,000,000 — NOW 에서 이관

✅ 26.10.26 · pfs-handoff-cap-1026e · 업체 통합·업체 검색 · 업체 페이지 미리보기 후속 — NOW 에서 이관