Repository navigation
Fix/cargo manifest - #44
Merged
Merged
Conversation
- gen_cargo_manifest v4: 화물 키를 콜사인에서 입항 건(콜사인·입항연도·입항횟수)으로. 난수 시드 = 입항 건 키 해시라 몇 번 돌려도 같은 입항 건엔 같은 화물이고, 이미 적재된 입항 건은 다시 뽑지 않는다. 화물 계열은 대표화물 코드(HS 2자리) → 없으면 선종, 선석 조건은 터미널 취급품목 > 선석 액체 분류. 후보가 비면 '물질 미특정' 1행. - upa_loader: upa_cargo_manifest 적재 키를 bl_no 로(backend alembic 0031), 적재 전 TRUNCATE 교체 제거. - pipeline_scheduler: cargo 도메인(10분, 기동 시 1회) 추가. - samples/upa_cargo_manifest_stg_v3_synthetic.csv 재생성. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 전처리: "수집일 당일 이후 입항분만" 남기던 필터를 없앤다. 이 시스템은 이미 들어온 배를 검증하는데, 필터 때문에 수집기가 안 돈 날의 입항 건이 영영 저장되지 않았고(raw 에는 있고 DB 에는 없는 입항 건 627건), 입항 뒤 들어온 출항 신고도 버려졌다(140건). 적재는 자연키 UPSERT 라 겹쳐 받아도 행이 늘지 않는다. - 수집기: 시작일을 raw 파일명이 아니라 DB portmis_vessel 의 마지막 수집일(-1일) 기준으로. raw 는 회차마다 지우므로 파일명은 이력이 될 수 없었고, DB 를 새로 만들면 옛 파일 때문에 빈 DB 를 채우지 않았다. DB 가 비었으면 BACKFILL_DAYS(30)일 전부터 받는다. - raw_cleanup: 위 변경에 맞춰 설명 수정. 2026-09-26 로컬 재구축 결과: PORT-MIS 30일 1,743건, 3일 넘은 입항 건의 출항 미기록 51% → 3%. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
선박위치 API 의 입항횟수는 PORT-MIS 와 같은 키다(로컬 실측: 둘 다 있는 307척 중 279척 일치). 그런데 위치 API 가 새 항차를 먼저 알려 주는 배가 있고(28척, 대부분 +1), 판정은 그 항차 키로 화물을 찾으므로 PORT-MIS 입항 건만 합성하면 그 배는 '화물 없음'이 됐다. load_position_calls: 위치에만 있는 입항 건을 같은 키로 합성한다. 선종은 같은 콜사인의 최근 PORT-MIS 기록에서 가져오고, cargo_basis 에 '입항건=위치(PORT-MIS 미신고)' 로 남긴다. 나중에 PORT-MIS 신고가 들어와도 키가 같아 고정 규칙에 따라 화물이 바뀌지 않는다. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
온산 스코프만 좌표로 계산해 그 밖 91개 선석 중 83개가 인접 관계 0건이었다. 판정은 인접 관계가 없으면 이웃을 보지 않고 '안전'을 내서, 적합·안전 33척 전부가 이웃을 확인하지 않은 안전이었다(그중 13개 부두는 500m 안에 다른 부두가 있었다). 좌표가 있는 전체 선석을 같은 500m 기준으로 계산하고 파일럿 수동 쌍을 더한다. 120 → 488 엣지(244쌍). 비액체 부두 이웃은 대표 화물이 없어 가짜 화물이 생기지 않는다. 재적재 후 이웃 확인 없는 적합이 33척 → 12척(500m 안에 부두가 없거나 좌표 없음). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 규칙 ⑥: 선종(또는 대표화물코드) ∩ 선석 조건이 비면 선종 후보에서 고른다. 선종은 배가 물리적으로 실을 수 있는 것이고 선석 분류는 거칠다(SK1부두 '가스'만, S-OIL3부두 '유류'만인데 케미칼선이 붙는다). cargo_basis 에 '선석분류 충돌→선종 우선'. - 대표화물코드 38(대응 물질 없음)은 선종 목록으로, HS 29 에 2901 프로필렌·부타디엔 추가 (LPG선의 코드 29 가 후보 0이었다). - LNG(UN1972)는 LNG선만. LPG선·케미칼가스선에 LNG 가 뽑혀 MSDS 없이 판정불가였다. - 화물을 하나도 특정 못 한 입항 건만 고정을 풀어 새 규칙으로 다시 만든다. 실측(9/27 로컬): 최근 30일 입항 건 중 화물 없는 건 0, DGL 검증 통과. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
10항의 "가연성 물질, 환원성 물질"은 글리콜·알코올·올레핀 MSDS 34종에 똑같이 들어 있는 상투 문구인데, 정규식이 이걸 '가연성물질 기피'로 등록해 MSDS 충돌의 97.5%가 이 한 카테고리에서 나왔다(1-도데센↔2-에틸헥산올 배정불가, 연료유↔톨루엔 위험 등). prune_incompatible_noise (적재 끝에 항상 실행, --prune-only 로 단독 실행): ① 자기가 속한 카테고리를 기피하는 관계 삭제(자기모순, 10건) ② '가연성물질' 기피는 기피하는 쪽이 산화제·강산류·과산화물일 때만 남김(36건 삭제). 질산·황산의 기피는 그대로다. 로컬 결과: 회귀 평가셋(backend tests/test_eval_safety_pairs_20260927.py) 5/8 → 8/8, 실시간 판정 등급 변화 0건(영향은 챗봇·수동 질의). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- msds_neo4j_loader: 10항 '피해야 할 물질'(J08)만 읽는다. J02(유해 반응 가능성) 정형 문구에서 기피 카테고리를 뽑던 것을 걷어냈다. 강산화제→강산류 오매칭, 물/금속 오매칭 정규식 수정. 재적재 시 INCOMPATIBLE_WITH 전체를 지우고 다시 만든다. - bulk_compatibility_neo4j_loader: govinfo 2024 XML Appendix I를 행 단위로 대조해 우리 121종에 해당하는 예외를 보완. 금지(b) 8쌍 추가(아크릴로니트릴·메타크릴로 니트릴·트리클로로에틸렌 × 가성류, 이염화에틸렌 × 에틸렌디아민, MTBE × 인산), 안전(a) 33쌍 추가(가성류 × 알코올류 등). 예외 엣지도 재적재 때 지우고 다시 만든다. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
govinfo CFR-2024 46 CFR Part 150 Table 1 을 행 단위로 대조해 CAS·명칭·이성질체 근거가 있는 것만 넣었다(121 → 143종). 안전 예외(Appendix I(a))도 원문 명칭 그대로인 물질만 보탰다. 근거가 없는 8종은 비슷한 이름으로 채우지 않고 MSDS 기준으로 남긴다(주석에 사유). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
연장 300m·2011 준공은 UPA 완료사업(장생포 고사천 호안정비 물양장)과 울산해수청 시설현황 (장생포 소형선부두 300m)이 일치해 옮겼다. 수심·접안능력은 공개 출처에 없어 비워 둔다. 2026-09-27 실측: 판정불가 7척 중 5척이 장생포호안 신고였다. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.