Skip to content

fix(funding): treat products past their application end date as closed - #34

Merged
jhjh0512 merged 2 commits into
mainfrom
fix/funding-application-end-date
Sep 28, 2026
Merged

jhjh0512 merged 2 commits into
mainfrom
fix/funding-application-end-date

Conversation

@jhjh0512

@jhjh0512 jhjh0512 commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

관련: ADR 0006(#33) 6절의 "신청 종료" 강등 규칙. 이 수정은 지금 규칙(AGENTS.md §3의 8번)을 지키게 하는 것이라 ADR 병합과 상관없이 병합할 수 있다. 별도 Issue는 없다.

변경 내용

  • 판정 수정(eligibility.ts): 지금까지 evaluateProduct는 신청기간을 보지 않았다. 그래서 검수를 마치고 OPEN으로 기록한 상품이 신청 종료일 뒤에도 재검수일까지 현재 후보로 남았다. 이는 종료된 상품을 현재 신청 가능으로 표시하지 않는다는 AGENTS.md §3의 8번과 어긋난다.
    • 신청 종료일이 판정 기준일보다 앞서면, 관측 접수 상태가 OPEN이나 UNKNOWN이어도 CLOSED로 판정하고 종료일을 사유에 적는다.
    • 종료일 당일까지는 접수 중으로 본다.
    • 종료일이 없으면(예: 예산 소진 시까지) 지금처럼 관측 접수 상태를 따른다.
    • 판정 순서에서 검수 기한 경과가 먼저 적용되는 것은 그대로다.
    • 대출 가정 적용은 같은 판정으로 현재 후보인지 다시 확인하므로, 종료된 상품은 적용도 거부된다.
  • 문서: docs/domains/funding.md 판정 절에 이 규칙을 적었다.
  • 테스트 추가:
    • 종료일 당일에는 현재 후보이고, 다음 날에는 CLOSED다.
    • 종료일이 없으면 관측 상태를 따른다.
  • fixture 수정: 후보 조회·계획 조건 판정·대출 가정 적용 API 경계 테스트는 서버의 오늘 날짜(todayInKst())로 판정한다. 그런데 fixture 종료일이 2026-12-31이라, 이 수정 뒤에는 2027년부터 7개 테스트가 실패한다. 검수일(nextReviewAt)처럼 FAR_FUTURE로 바꿨다.
  • 지금 ACTIVE 카탈로그에서 결과가 바뀌는 상품은 없다.
    • 서울시 융자 3개: 종료일이 없다.
    • 예비창업패키지: 이미 CLOSED다.
    • 강북창업지원센터: 검수 기한 경과가 먼저 적용된다.

검증

  • 재현: 새 테스트는 수정 전에 실패했다(종료일 다음 날에도 CURRENT_CANDIDATE). 수정 후 통과한다.
  • 시계를 앞당긴 확인: Date를 2027-01-02로 고정해 세 테스트 파일을 돌렸다.
    • fixture 수정 전: 7개 실패
    • fixture 수정 후: 53개 통과, 10개 건너뜀(PostgreSQL 전용)
  • npm --prefix app run verify:fast 통과: 카탈로그 검증, Prettier, ESLint, TypeScript, 테스트, build.
    • Vitest: 235 passed, 32 skipped. 건너뛴 테스트는 PostgreSQL이 필요한 묶음 26개와 data/raw/가 없을 때의 원본 대조 테스트 6개다.
  • 로컬 DB·E2E 확인(PostgreSQL 17 컨테이너):
    • verify:db: 261 passed, 6 skipped(data/raw/가 없을 때의 원본 대조 테스트). PR #35가 들어간 최신 main을 합친 뒤에도 같은 결과였고, verify:fast도 다시 통과했다.
    • Playwright E2E: desktop·mobile 6개 통과(dcb7f38 기준).
    • 이 환경에서는 Playwright용 Chromium을 내려받을 수 없어, 미리 설치된 이전 버전 Chromium을 지정해 E2E를 돌렸다. 그래서 verify 명령 하나로 실행하지 않고 같은 단계를 나눠 실행했다.

위험·후속

  • API 응답 형식과 DB는 바뀌지 않는다. 상태 enum도 기존 CLOSED를 재사용한다.
  • 관측 상태가 UNKNOWN이고 종료일이 지난 상품은, 이제 검수자 미지정·사업자등록 이후 같은 분류보다 먼저 CLOSED가 된다. 종료가 확정된 사실이기 때문이다.
  • 신청 시작일 전에 OPEN으로 기록하는 경우는 기존 적재 검증(OBSERVED_OPEN_BEFORE_PERIOD_START)이 이미 막는다.

🤖 Generated with Claude Code

https://claude.ai/code/session_015LCE4DgT5qdHP8y8V5qtbL


Generated by Claude Code

claude and others added 2 commits September 28, 2026 05:44
evaluateProduct ignored the application period, so a reviewed product
recorded as OPEN stayed a current candidate after its end date until the
next review date, against AGENTS.md section 3 item 8. A product whose end
date is before the as-of date is now CLOSED whatever its observed status;
the end date itself still counts as open, and a missing end date keeps
the observed status.

The candidate, funding-match and loan-assumption API tests judge with
the real KST date, and their fixtures ended on 2026-12-31, so they would
fail from 2027. Their end dates now use FAR_FUTURE like nextReviewAt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015LCE4DgT5qdHP8y8V5qtbL
@jhjh0512
jhjh0512 merged commit d2471d6 into main Sep 28, 2026
1 check passed
@jhjh0512
jhjh0512 deleted the fix/funding-application-end-date branch September 28, 2026 06:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants