fix: resolve I1 date parsing regression and implement strict volume cross-checking gate
This commit is contained in:
@@ -27,44 +27,50 @@ def to_iso(raw):
|
||||
return None
|
||||
raw = raw.strip()
|
||||
|
||||
# 1) YYYY-MM-DD or YYYY.MM.DD
|
||||
m = re.search(r'(\d{4})[. /\\-]?(\d{1,2})[. /\\-]?(\d{1,2})', raw)
|
||||
if m:
|
||||
yr = int(m.group(1))
|
||||
mo = int(m.group(2))
|
||||
day = int(m.group(3))
|
||||
if mo <= 12 and day <= 31:
|
||||
return f"{yr:04d}-{mo:02d}-{day:02d}"
|
||||
|
||||
# 2) "May 2026", "Feb. 2008", "August 2018"
|
||||
m_txt = re.search(r'([A-Za-z]+)\.?\s*(\d{4})', raw)
|
||||
# 1) English month + 19XX/20XX year: "April 2026", "Feb. 2008", "August, 2018"
|
||||
m_txt = re.search(r'([A-Za-z]+)\.?\s*,?\s*((?:19|20)\d{2})', raw)
|
||||
if m_txt:
|
||||
mo_str = m_txt.group(1).lower().rstrip('.')
|
||||
yr_str = m_txt.group(2)
|
||||
if mo_str in MONTH_MAP:
|
||||
return f"{yr_str}-{MONTH_MAP[mo_str]}"
|
||||
|
||||
# 3) "2019년 12월", "9월, 1999"
|
||||
m_kor = re.search(r'(\d{4})년\s*(\d{1,2})월', raw)
|
||||
# 2) Korean "2026년 6월", "9월, 1999"
|
||||
m_kor = re.search(r'((?:19|20)\d{2})년\s*(\d{1,2})월', raw)
|
||||
if m_kor:
|
||||
return f"{int(m_kor.group(1)):04d}-{int(m_kor.group(2)):02d}"
|
||||
yr = int(m_kor.group(1))
|
||||
mo = int(m_kor.group(2))
|
||||
if 1 <= mo <= 12:
|
||||
return f"{yr:04d}-{mo:02d}"
|
||||
|
||||
m_kor2 = re.search(r'(\d{1,2})월.*?,?\s*(\d{4})', raw)
|
||||
m_kor2 = re.search(r'(\d{1,2})월\s*,?\s*((?:19|20)\d{2})', raw)
|
||||
if m_kor2:
|
||||
return f"{int(m_kor2.group(2)):04d}-{int(m_kor2.group(1)):02d}"
|
||||
mo = int(m_kor2.group(1))
|
||||
yr = int(m_kor2.group(2))
|
||||
if 1 <= mo <= 12:
|
||||
return f"{yr:04d}-{mo:02d}"
|
||||
|
||||
# 4) YYYY-MM or YYYY.MM
|
||||
m_ym = re.search(r'(\d{4})[. /\\-]?(\d{1,2})', raw)
|
||||
# 3) ISO date: YYYY-MM-DD, YYYY.MM.DD (where YYYY is 19XX or 20XX)
|
||||
m = re.search(r'((?:19|20)\d{2})[. /\\-]?(\d{1,2})[. /\\-]?(\d{1,2})', raw)
|
||||
if m:
|
||||
yr = int(m.group(1))
|
||||
mo = int(m.group(2))
|
||||
day = int(m.group(3))
|
||||
if 1 <= mo <= 12 and 1 <= day <= 31:
|
||||
return f"{yr:04d}-{mo:02d}-{day:02d}"
|
||||
|
||||
# 4) ISO month: YYYY-MM or YYYY.MM
|
||||
m_ym = re.search(r'((?:19|20)\d{2})[. /\\-]?(\d{1,2})', raw)
|
||||
if m_ym:
|
||||
yr = int(m_ym.group(1))
|
||||
mo = int(m_ym.group(2))
|
||||
if mo <= 12:
|
||||
if 1 <= mo <= 12:
|
||||
return f"{yr:04d}-{mo:02d}"
|
||||
|
||||
# 5) YYYY only
|
||||
m_y = re.search(r'(\d{4})', raw)
|
||||
# 5) 19XX or 20XX year only
|
||||
m_y = re.search(r'((?:19|20)\d{2})', raw)
|
||||
if m_y:
|
||||
return f"{int(m_y.group(1)):04d}"
|
||||
return f"{m_y.group(1)}"
|
||||
|
||||
return raw
|
||||
|
||||
|
||||
Reference in New Issue
Block a user