콘텐츠로 건너뛰기
KAMOUniverse

변경 로그

무슨 일이야?

플랫폼에 대한 모든 개선 사항, 그것이 선적.

  1. · kamo-shared-library

    API SIGNATURE api 키 범위 + EsignGenericEnvelope.origin

    첨가물, 버전 범프 없음: - ApiKeyScope.API SIGNATURE - programmatic e-signature API (비즈니스) 게이트 - EsignGenericEnvelope.origin (EsignUsageOrigin, nullable) - 기록 여부 envelope는 API vs MANUAL을 통해 생성되었으므로 시그니처 미터를 올바르게 완료했습니다. (API는 $ 0.20 과량으로 계산합니다. MANUAL은 절대하지 않습니다.). prod에 추가된 란 idempotent ALTER를 통해.

  2. · kamo-internal

    Send-for-signature action + 문서 편집기의 봉투 상태

    'Send for Signature' 버튼을 템플릿 편집기 헤더에 추가하여 엽니다. 수신자 및 추적 서명 상태에 문서를 보내려면 대화 상자 새로운 ESigService /api/esig/envelopes 엔진. - 프록시 경로 (OTK via generateOTK, 템플릿 프록시 미러): POST/GET /api/esig/envelopes, GET [uid], POST [uid]/void, ****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** - SendForSignatureDialog: 탭(recipient row, 메시지, 만료) + 상태 탭 (각 템플릿 봉투 목록, 상태 칩, void/resend) - 템플릿이 변경되지 않은 동안 버튼 비활성화 - 다음 intl을 통해 i18n ***********

  3. · ESigService

    일반 봉투 create/send 엔진 (sender side)

    OTK-authed /api/esig/envelopes API kamo-internal 드라이브 추가 서명을 위한 문서, 같은 공유 lib entities를 재사용 signing API reads — 첨가제, org-agnostic 교체 대 한 대출- 커플 KamoLOS/EsignClient는 경로를 만듭니다. - 템플릿에서 POST create-and-send : EsignGenericEnvelope (AD HOC)를 구축, 한 EsignEnvelope 신선한 해시 액세스 토큰과 signer 당 재원 Email each the /s/{env}/{recipient}?t={token} 로그인 링크 (best-effort) - 목록 (envelope 대시보드) + 수신 상태와 {uid} 세부 사항 얻기 - POST {uid}/void 및 {uid}/recipients/{rid}/resend (토큰) - Invite + delegate 이메일 공유 EsignEmailClient.sendInvite; signer-route /s/{env}/{recipient}에 수정된 링크

  4. · ESigService

    Sign.sign.pink를 위한 공개 서명 API 엔진

    /api/esig/public/* 서명 API kamo-signer 앱 호출 구현 미리보기-stub에서 작업 백엔드로 실시간 서명을 전환합니다. - 유효성(recipient token -> Signer session), 세션, 동의, stepup/start+verify (이메일 OTP), 제출, 디코더, delegate, 문서 - Redis-backed signer 세션 (X-Signer-Session), 직원 OTK와 구별 - 실제 Img/MinIO 파이프라인을 통해 문서 바이트 (template imgId -> 변환-PDF ImgDat -> MinIO), 결코 와이어 /api/imaging/blobs stub - PDFBox flatten: 오버레이 필드 값 + 디자인의 서명 이미지 좌표, E-SIGN/UETA 감사 인증서 페이지; 서명 PDF 저장 envelope signBlobId의 밑에 MinIO에서 기록된 SHA-256 - EsignSignature 감사 행 + EsignField 가치 지속 - Emits *********** API-origin 미터로 재는 #3/#4에서 따릅니다 - 조직에서 해결되는 브랜드 + OrgDomain for first-paint theming - OTKAuthFilter bypasses /api/esig/public (token-authed, 직원 OTK하지 않음) 첨가물만; 기존하는 /api/esig/templates/* untouched.

  5. · kamo-internal

    조직 탭의 플랫폼 제품 toggle

    Surface the platform-product designation where it 속하는 — 플랫폼 → 회사연혁 org 당 게이트 스위치 추가 (최고 수준의 org에 대한 사용), 제목 효과 설명 확인 대화 상자, '플랫폼 제품' Chip, no-catalog 경고, 낙관적인 업데이트 및 오류 스낵바. 모든 문자열 다음 intl을 통해.

  6. · BillingService

    Platform → Orgs에서 Organization.isPlatformProduct 관리

    PlatformAccountSummary 노출 isPlatformProduct + hasSubscription 시장; 새로운 퓨트 **************** (platform-admin 게이트) 플래그를 설정하고 org의 회원의 제목을 유효화 (their products) 뿌리, 따라서 특징, 변화). 최고 수준의 org는 implicit 뿌리이며 할 수 없습니다. toggled가 있습니다.

  7. · kamo-shared-library

    Explicit Organization.isPlatformProduct는 entitlement 뿌리 신호로

    'SUBSCRIPTION Market'을 명시적으로 대체합니다. admin-set 소유권 플래그. 플랫폼 제품 (예 : sign.pink)은 흰색 라벨입니다. 플랫폼은 작동하며 자체 제목 루트입니다. 고객 org — 자체 SUBSCRIPTION 시장을 실행하여 고객에게 재판매할 수 있습니다. 아니다, 플랫폼에 대한 숙박. EntitlementRootResolver 지금 읽기 flag (독립 최고 수준의 루트 플러스) 및 더 이상 시장에 의존하지 이름 * is platform product 열 추가 (공기 DEFAULT FALSE) - 필요 KamoInitializer는 조직 배포를 선택하기 전에 생성합니다.

  8. · SecurityService

    범위 회원은 제품 루트에 제목, KamoCRM하지

    EntitlementService는 이제 각 회원의 제목 루트를 통해 해결합니다. EntitlementRootResolver (가장 큰 시장 소유 조상 또는 자체) 대신 최고 수준의 org로 걸어. 무료 층 및 제품 액세스 플래그 그 루트에서 파생, 그리고 isKamoCrmSubscription은 구독GrantsRootAccess (plan-org vs root, 빌링 계정 없음). 회원가입 productRootOrgId 그래서 소비자 게이트는 올바른 제품에 대한 액세스. BillingSetupService 소스 새로운 org의 제품에서 시장 + 무료 계획 top-level KamoCRM org의 청구 계정을 유지하면서 루트 — i.e. the 부모는 청구를 소유하고, 아이는 제품/시장을 소유할 수 있습니다. Behaviour는 org가 실제로 자체 시장을 소유 할 때까지 변하지 않습니다 (KamoCRM은 오늘 시장 소유자 만, 그래서 모든 회원은 여전히 그것을 해결).

  9. · kamo-shared-library

    Resolve entitlements by products-root org, 플랫폼 상단 레벨

    EntitlementRootResolver 소개: 가장 가까운 시장 점유율을 차지하는 org (its 제품 루트)의, 플랫폼 상단 레벨로 다시 떨어지. 으로 decouples *who pays*에서 *who pays* (market/plan owner)를받을 자격이있는 제품 (지불 계정) 및 단일 최상위 org에서, 그래서 흰색 라벨 제품 org like sign.pink 그 자체 시장은 자신의 제목 뿌리가된다. *********** 이제는 org의 무료 지형을 소스 제품 루트 (찾지 못함FirstByIsTopLevelTrue), 그리고 계획 해결 billing-account org 보다는 오히려 제품/시장 org. 뒤로 호환 : KamoCRM은 현재 유일한 시장 소유자이므로 기존의 org는 이전처럼 정확히 해결합니다. — 행동은 한 번만 곱합니다. sub-tree는 자체 시장을 소유합니다. 첨가물; 버전 범프 없음.

  10. · kamo-shared-library

    Envelope 수신자, 필드 값, 수신자 상태 entities 추가

    EsignEnvelopeRecipient (+repo)에서 확인, EsignFieldValue (+repo), EsignRecipientStatus 및 ESignerType 업데이트. 첨가물; 버전 범프 없음.

  11. · kamo-shared-library

    EsignUsageRecord를 per-signature 사용법 미터로 재기하십시오

    새로운 append-only use entity (mirrors AiUsageRecord)는 서명에 방출 완료. API-origin 서명은 매월 플랜을 계산합니다. 할당량 + 초과 (sign.pink 사업: 40/mo 포함, 그 후에 $0.20 각); MANUAL 단일 사용자 서명은 기록되지만 청구되지 않습니다. billing period (요이-MM) 월간 집계 지원; report to stripe 는 Stripe 사용 제출 idempotent. 첨가물만; 버전 범프 없음.

  12. · ConversionService

    보존 종횡비, 결코 뻗지 않는 로고

    Favicon PNG/ICO 프레임은 keepAspectRatio(false), 기지개 왜곡된 사각에 비 사각 로고. Center-fit 로고 투명 사각형 캔버스 대신, 예비 종횡비, 그래서 favicons 보기 사각형 소스 이미지를 필요로하지 않고 업로드 된 로고 모양에 대한 올바른.

  13. · KlusterServices

    Pre-seed sign.pink + STATIC DOMAINS에 있는 www.sign.pink

    sign.pink는 새로운 apex 도메인입니다 (소비자 e-signature 상표/백색 상표 카모 테넌트 org). Pre-seed apex + www 그래서 Let's Encrypt cert는 이전에 존재합니다. 첫번째 HTTPS 소통량; *.sign.pink subdomains는 동적인 certs 당 FQDN certs를 얻습니다 처음 히트 때, 같은 메커니즘 *.priceturbo.com.

  14. · kamo-signer-monorepo

    새로운 monorepo + 모바일 최초 e-signature signing 앱

    Turborepo + pnpm 작업 공간 모노레포 하우징 재사용 가능한 e-sign 패키지 kamo-internal plus new, ultra-polished kamo-signer 응용 프로그램에서 추출 - 두 번째 파티 서명 경험 (인터/오스트링 측면은 kamo 내부). 포장: - @kamo/esign-core 유형 + DesignData 와이어 계약, zod 스키마, 런타임 필드 검증, signStore (zustand) - @kamo/esign-ui 대화형 필드 입력 + 읽기 전용 필드 / 주석 렌더링 (kamo-internal FieldControl에서 포크) - @kamo/doc-render 번들 pdf.js 페이지 렌더링기 (각자 호스팅 작업자, CDN 없음), 응답, 회전 정확한 오버레이 - @kamo/theme per-tenant 브랜딩 부츠 스트랩 (getThemePath, ThemeLogo, DynamicMetaLoader는 - @kamo/api-client 브라우저 fetch + 서버 Redis/forwarding helpers - @kamo/config 공유 tsconfig / tailwind preset / eslint 앱 (apps/kamo-signer): - Token-scoped signer auth (SIGNSESH httpOnly session, BFF 경로 핸들러) - 환영 -> 동의 (ESIGN/UETA) -> eIDAS AES step-up OTP -> 서명 안내 -> 완료 -> 완료, 모든 단계 애니메이션 (프레임 모션, 감소 모션 aware), 데스크탑, WCAG-의상 - 서명 캡처 스위트: draw / type (script font) / 업로드 / 채택 - 다중 문서, 디코더, delegate/reassign, 전체 i18n (next-intl, 22 로컬) - 실행 가능한 미리보기 모드 (필수) + /.forgejo + /k8s (HostRegexp 로그인*, 터보-prune Dockerfile)

  15. · kamo-internal

    Full-width Enterprise는 실시간 미리보기를 다시 작성합니다

    LoanProductForm은 단일 좁은 열 (maxWidth : 880) 하드 코딩 한국어. 이제 같은 엔터프라이즈 패턴을 제공합니다. 모델 번호: - 빵 부스러기, 뒤 화살표, 종류 배지가있는 Full-width gradient 헤더 - lg+에 2 열 그리드 (6fr/6fr), 아래 단일 열 - 왼쪽의 양식, 오른쪽에 "제품 미리보기" 모양 측: - 설명 (Installment vs LOC)을 가진 ToggleButtonGroup로 Kind selector, dropdown에 묻지 않음 - 이것은 reshapes 구조상 선택입니다. 양식의 나머지, 그래서 그것은 번영 가치가있다 - 아이콘과 섹션 블록 (기본 · 가격 · 제한 및 약관 · 준수) - 속도 %로 입력, 와이어에 bps로 변환 (더 많은 "3600 = 36%") - next-intl t()를 통해 모든 필드 라벨 - ACT 365 vs ACT 360에 대한 Day-count 툴팁 미리보기 측: - 영웅 카드 : 종류 칩, 제품 코드 칩, 이름, 헤드 라인, 설명 - 4-tile stats 그리드 : 속도, 기원, 늦은 요금, NSF 수수료 - 한계 & 기간 격자 (종류 인식: 설치를 위한 범위 + 빈도, *********** LOC에 대한 - 표본 제안 카드 (설치): 매달 지불, 총 관심사, 총 비용, 주요 범위의 중간 지점에서 샘플 기원 - 수락 칩: 허용된 국가 (캡 24 + 과잉 칩), autopay 필수 + 할인, promissory-note 템플릿 바인딩 - Footer는 이 제품이 제공하는 페이지로 어떻게 흐릅니다. LoanProductForm은 이제 새로운 페이지를 감싸고 있습니다. 페이지 래퍼 pass marketTitle 그래서 빵 부스러기 깨끗하게 해결.

  16. · kamo-internal

    라이브 미리보기를 가진 두 개의 열 레이아웃

    새로운 오프너 페이지는 넓은 화면에 높은 좁은 기둥이었다 — wasted Half 오시는 길 이제 왼쪽 (5fr)과 양식을 사용하여 CSS Grid를 사용합니다. 라이브 "Offer Preview"는 연산자로 업데이트 할 권리 (7fr)에 팬 유형. 작은 화면에 단일 열 (< lg). 모양 측: - 아이콘과 섹션 블록 (제품 · Borrower · 수량 · 사용자 정의 약관) - Borrower 필드 스택 수직 (회원 ID + 상태) 더 컴팩트 지금 발표는 수평 공간은 미리보기에 대한 예약 미리보기 측 (제품이 선택될 때만): - 그라디언트 배경, 종류 칩, 제품 이름 및 영웅 카드 인간 읽기 쉬운 헤드 라인 (" $ 5,000 · 12 개월 설치 · 14.99% APR" / "$25,000 크레딧 라인 · 9.99% 비율") - 4-tile stats grid: 주, 비율, 매달 지불, 기간 (설치) 또는 주요한, 비율, 끌기 기간, 상환 기간 (LOC) - “custom” 칩을 가진 요금 고장 (origination/late/NSF/annual) override는 적용됩니다 - 비용 요약 패널 : 순 분산, 총 관심, 총 비용 - 정렬 일정 보기: 첫 3 + 마지막 3 행 "{N} 더 결제..."절차 행 > 6개월 - 진정한 APR + 빌드를 보완하는 TILA 알림 real schedule + 렌더링 disclosures 에 send 모든 수학은 클라이언트 측 직선 구색 (P × r × (1 + r) ^n / ((1+r)^n - 1)) - 마지막 공개 APR이 아닌 충실한 미리보기. 기타 아직도 진실을 소유.

  17. · kamo-internal

    폴란드어 새로운 오프너 페이지 — 빈 상태, LOC 배지, 사용자 정의 용어

    세 가지 UX 갭은 사전 렌더링 후 페이지가 있었습니다. 1. 빈 국가. 시장은 Loan 제품이 아직없는 경우, 드롭다운 사용 비어있게 렌더링하고 연산자는 무엇을 할 생각이 없었다. 제품 정보 영웅 빈 상태로 대체 (icon, headline, Installment의 뇌관 LOC, 그리고 "Create Loan Product"CTA는 제품/새로운 흐름에 분기합니다. 2. LOC vs Installment는 눈에 띄지 않습니다. — 둘 다 동일하게 나타납니다. 제품 dropdown. 컬러 칩 추가 (LOC = 파란색 + 반복 아이콘, 설치 = 녹색 + 지갑 아이콘) 선택한 값에서 모두 렌더링 각 드롭다운 옵션과 옵션에 대한 제품 설명. 3. "Locked terms" 블록은 혼란스럽게 명명되었습니다. 그것은 변하지 않는 override에 어떤 방법 없이. collapsible "Custom terms" 패널 추가 관심율, 공개 APR, 그리고 가격 (대리 가격, hardship 운동, 프로모션 가격). 설정할 때, lock-terms 카드 시각적으로 타격을 통해 제품 가치는 과급 (예를들면 14.99% → 11.99%) 이렇게 보여줍니다 연산자는 정확히 무슨 일이 발행 될 것 이다. KamoLOS 0e80393에 푸시 된 백엔드 지원; losApi.ts에서 확장 된 유형 createOfferDraft를 통해 오버라이드 필드 흐름.

  18. · kamolos

    비율, APR 및 원고 수수료에 대한 Per-offer override

    LoanOfferCreateRequest는 세 가지 옵션 필드를 얻습니다. aprBpsOverride, 원고FeeAmountOverride. createDraft 적용 설정 및 그렇지 않으면 제품 스냅 샷으로 돌아갑니다. 사용 사례: 관계 가격 (중요한 차용차용 킥백), hardship workouts (waived Origination), One-off 프로모션 혜택. installment 제품을 위해, interestRateBpsOverride는 정상적인 경로에 있습니다 — APR은 요금 + 수수료 + 일정으로 계산됩니다. aprBpsOverride는 노출됩니다. 명시적으로 공개 된 APR은 계산과 다릅니다. 감사 : 모든 초안에 대한 제안 DRAFTED 작성 (제공 SENT/ACCEPTED). Logs 명시된 override 값 vs 제품 기본값 그래서 트레일은 재구성 할 수 있습니다. vs. set per-offer를 상속했습니다.

  19. · kamo-internal

    Expose PERSONAL LOANS in commerce-type & 참여상품

    PERSONAL LOANS를 COMMERCE TYPES 및 EngagementType 목록에 추가하십시오. 새로운 KamoLOS Personal-loans 시장은 시장/새로운 시장에서 만들 수 있습니다. 시장/편집 페이지, QuickActionsBar (with /commerce/personal-loans/new) 노선), 그리고 파이프라인 참여 유형 필터 및 구성에 포함.

  20. · kamo-internal

    T6+T7 프론트 엔드 광택 + org 보고서 + 자동 지불 UI

    정면 광택 (T6): - 새로운 lib/format.ts: Locale-aware Intl 도우미 — formatCurrency / formatDate / formatDateTime / 형식PercentBps. hardcoded를 대체 toLocaleString() + 슬라이스(0,10) 패턴은 codebase에서 흩어져 있습니다. - BorrowerAutoPayCard : 전체 등록 / 일시 중지 / 재시작 / 취소 / 편집 UI 자동 급여 국가 기계를 위해. 표면 양 형태 dropdown (INSTALLMENT SCHEDULED / MIN PAYMENT / 전체 STATEMENT BALANCE / FIXED AMOUNT) + 일 개월 + 지불-method selector. 백엔드가 이미 유선; 이것은 차용자가 셀프 서비스를 위한 마지막 조각입니다. - 충전 할 수 : IRS 1099-C 이유 코드 드롭 다운 (8 공식 IRC §6050P 당 편지 A-H는 자유로운 원본 이유 분야를 대체합니다; 기본 **************** 주의사항 formatCurrency를 통해 렌더링 된 통화. Org 보고서 (T7) : - 새로운 *********** 5-bucket 대시보드 (현재 / 1-29 / 30-59 / 60-89 / 90+) %-of-total + 컬러 코드 상위 경계. 훈련을 통해 링크를 충전 할 수 있습니다. losApi 추가: - agingReport (orgId) + AgingReport 유형 - 멀티 필터 레귤레이터 엔드포인트를 위한 AuditSearch(filters) - LoanChargeOffReasonCode 조합 유형 - checkChargeOff 서명은 reasonCode를 받아들입니다

  21. · kamolos

    Tier 6+7+9+10 — frontend polish, org reports, OpenAPI, JaCoCo

    T6 (frontend polish): - New /lib/format.ts: locale-aware formatCurrency / formatDate / formatDateTime / formatPercentBps via Intl APIs (replaces hardcoded toLocaleString + slice(0,10) patterns). - BorrowerAutoPayCard: enroll / pause / resume / cancel / edit auto-pay with amount-mode dropdown (INSTALLMENT_SCHEDULED / MIN_PAYMENT / FULL_STATEMENT_BALANCE / FIXED_AMOUNT) + day-of-month + payment-method selector. - Charge-off queue: IRS 1099-C reason code dropdown (8 official letters A–H per IRC §6050P) replaces the free-text reason field; default G. Currency formatting via formatCurrency. T7 (org reports): - New LoanReportsController.aging: counts loans into Current / 1-29 / 30-59 / 60-89 / 90+ buckets via paged DELINQUENT scan + countByOrganizationAndStatus for ACTIVE. - **************** 5-bucket dashboard with %-of-total + color-coded bands + drill-through to charge-off queue. T9-T10 (DX + docs): - **************** /v3/api-docs + /swagger-ui.html auto-generated. OpenApiConfig sets title + description + version. - DevSeedLoader @Profile("dev"): boots two sample LoanProducts (12-mo installment + perpetual LOC). Idempotent (skips on existing productCode). - JaCoCo Maven plugin: prepare-agent + report on test phase. Coverage HTML at target/site/jacoco/index.html for CI consumption. losApi additions: - agingReport(orgId) + AgingReport type - auditSearch(filters) for the multi-filter regulator endpoint - confirmChargeOff signature accepts reasonCode 36 tests passing.

  22. · kamolos

    Tier 5 준수 배치

    - OfacSanctionsService: 정확한 매치 후에 Jaro-Winkler fuzzy 경기 @ ≥0.92 패스워드 표면 유사성 점수를 조회합니다. los.ofac.fuzzy-threshold를 통해 구성 가능. - AdverseAction공지사항서비스: ECOA §1002.9 호환 PDF 생성기naming 연방 규칙으로 CFPB. Renders reason-for-decoder + 표준 ECOA 비판 언어. MediaService에 저장됨. -********** regulator를 위한 multi-filter 감사 조회 subpoenas + 유지 청소. 사이트 맵 - LoanChargeOffService.confirm는 reasonCode 매개변수를 받아들입니다 (IRS 1099- · box-6 편지), loan.chargeOffReasonCode에 persisted 및 스레드 yearEndTaxJob의 1099-C PDF 렌더링. 기본 G. - LoanProductValidationService warns when interestRateBps > MLA 3600bps 모자 그래서 수락은 제안 시간 MLA 검열을 위해 깃발 할 수 있습니다. - YearEndTaxJob: produce1099Int 분기 제거 — inert (no) 차입자-신용-환불이 존재합니다. Stub는 반응과 왼쪽 그런 흐름 땅에 한 번 지도. 모든 30 단위 시험 통행.

  23. · kamo-shared-library

    LoanChargeOffReasonCode (IRS 1099-C 상자 6) + 감사 검색

    - IRC §6050P 당 새로운 LoanChargeOffReasonCode enum (A BANKRUPTCY.H OTHER) - Loan.chargeOffReasonCode 열 - *********** 멀티 필터 @ 레귤레이터 subpoenas에 대한 쿼리 (loanId / actorType / actorMemberId / / / 에서 / 로) - 페이지

  24. · kamolos

    Tier 3 보안 + Tier 8 버그 정리 배치

    T3 — 보안: - New RateLimitFilter (Bucket4j): 웹훅을 위한 IP 당 1000/min, 제안을 위한 회의 당 10/min는/decoder/rescind, 60/min 일반 받아들입니다. ProxyHmacFilter의 앞을 등록하여 앞의 버킷을 보였습니다. 암호화 검증 비용. - SecurityConfig는 HSTS + FrameOptions(DENY) + contentTypeOptions를 추가합니다. 스프링 보안 HeaderWriter를 통해. - StripeConfig는 비 살아있는 열쇠를 가진 prod 단면도에 빨리 실패합니다. T8 — 버그 정리: -********** 보기 Loan.productIdSnapshot → LoanProduct.feeNsfFlat 대신 하드 코딩 $25. $25 남아 제품 또는 수수료가 누락될 때 fallback. -********** AdjustmentTarget 필드를 얻는다 (PRINCIPAL / INTEREST / FEES). manualAdjust는 대상 당 파견합니다 항상 주의를 기울이기 보다는 오히려. 감사 metadata 지금 기록 카운터가 터치되었습니다. -********** 가장 최근의 ACTIVE 찾기 *or* PAUSED 계획과 새로운 행을 만들기 대신 재 활성화 그 orphans 일시적인 것. -********** Typed FetchResult 레코드 상태 (OK / NOT FOUND / UNREACHABLE / UNCONFIGURED). fetchBlob (uid) 레거시 바이트 또는 Null 어댑터로 보존.

  25. · kamo-shared-library

    ***************

    ***********에 의해 사용해 기존을 재 활성화하기 위하여 PAUSED 계획 대신 중복 행을 생성하는 것은 일시적인 것.

  26. · kamo-internal

    /api/los 프록시 HMAC-signs ID 헤더

    LOS PROXY HMAC SECRET env var가 설정되면 프록시가 이제 컴파일됩니다. *********** 비밀) 및 보내 X-Proxy-Signature + X-Proxy-Timestamp는 X-Org-Id와 함께 / X-Member-Id 헤더. KamoLOS의 새로운 ProxyHmacFilter는 이것을 검증합니다. (±60s skew, 일정한 비교) 그래서 클라이언트 우회 kamo 내부 더 이상 spoof ID 헤더를 할 수 없습니다. unset secret = local-dev pass-through (백엔에 필터 사용 가능) 너무).

  27. · kamo-internal

    Org-side 대출 세부 페이지 + 조정 / 약속 API

    - losApi : manualAdjust, waiveFee, 약속ToPay - *********** 전체 org-operations 페이지 * 4위 밸런스 카드 (현재, 주, 관심, 다음 발생) * 수동 조정 형태 (CREDIT/DEBIT의 필수 이유) - 호출 /api/los/adjustments/manual * Promise-to-pay 폼 - 전화 *********** * 성명 + 결제표 * 전체 이벤트 로그의 <LoanAuditTimeline> - MarketActiveLoansTab +가 부서진 링크를 해결합니다. PipelineActiveLoansTab은 지적했다.

  28. · kamolos

    Final batch — compliance, packets, adjustments, Grafana, tests

    Compliance: - MlaCheckService — Military Lending Act covered-borrower lookup against DoD MDC single-record query. Returns NotCovered if unconfigured so dev doesn't hard-fail; production MUST configure los.mla.endpoint + api-key OR run manual MLA at the org's KYC step (PII access required). - OfacSanctionsService — Treasury SDN list cached in-memory, refreshed nightly from sdn.csv. Unicode NFD normalization + diacritic stripping. Wired into LoanOfferService.send: SDN hit blocks the send and writes a STATE_RULE_VIOLATION_DETECTED audit row. - LoanLifecycleService cooling-off now reads LoanStateRule.coolingOffDays for the borrower's state (replaces the LocalDateTime.now() placeholder). - Stripe account.updated webhook now syncs charges/payouts/details flags + default_currency + requirements_disabled_reason onto LoanOrgStripeConnect so cron jobs + the org settings UI see live capability state. Disclosure packet: - New DisclosurePacketBuilder bundles TILA box + GLBA privacy notice + ECOA non-discrimination notice + ACH mandate authorization into one PDF via PDFBox PDFMergerUtility + stores in MediaService. Each component is recorded as a LoanDisclosure row keyed to the offer. LoanOfferService.send builds the packet automatically before the ESign envelope is created. Servicing operations: - **************** — fees/principal credit-or-debit with required reason; emits LoanPayment(INTERNAL_ADJUSTMENT or REVERSAL_ADJUSTMENT) + MANUAL_ADJUSTMENT audit - LoanAdjustmentService.waiveFee — flips LoanFee.waivedAt + credits feesPaidToDate + emits FEE_WAIVED audit - **************** — non-financial commitment row used in D60+ workflow tracking, emits PROMISE_TO_PAY_LOGGED audit - LoanAdjustmentController exposes /api/los/adjustments/{manual, fees/{uid}/waive, promise-to-pay} Observability: - **************** — importable dashboard with status gauges, payment outcome rates, R-code returns by code, webhook p50/p90/p99, disbursements/hour, charge-offs/day, JVM heap, HTTP rate Tests (30 total, all green): - 7 AmortizationEngine - 9 InterestAccrualEngine (including the previously-fixed 100x bug) - 5 PaymentAllocator - 4 NachaReturnCode (retry classes + mandate-revoking codes + describe) - 5 OfacSanctionsService (clean match / hit / diacritics / alias / disabled via reflection-injected cache, no network or test container needed)

  29. · kamolos

    P2 일괄 처리 - 관찰성, 테스트, 연말 세금, 실제 줄무늬 ID

    관찰성: - classpath에 micrometer-registry-prometheus - /actuator/prometheus는 관리 구성을 통해 노출 (지역 + k8s 설정) - LoanMetrics 서비스: **************** *************** los charge off total는, los disbursement total, los loan status count{status} 계기, **************** 카드 - LoanPaymentPostingService + LoanChargeOffService로 유선 카운터 수학 + 테스트: - AmortizationEngine (급금 지불, APR Newton-를 덮는 21 단위 시험 Raphson, 월간 예상 진행, 의 main+interest invariant, 나쁜 입력 감시), InterestAccrualEngine (ACT 365/ACT 360 DPR, 1 일 / 30 일 accrual, LOC ADB), PaymentAllocator (fees→interest → 주요 주문, 부분, 상환, null) - **Fixes 100x 이자율 버그 ** **************** — 디바이저는 3,650,000/3,600,000 대신 36500/36000 (annualRate) 분수는 /10000 bps→fraction와 /365 일 둘 다 필요로 합니다, 그래서 accrued 관심은 100 × 너무 높았습니다. 그것을 붙 잡는 추가된 시험. Real Stripe 식별자 (더 많은 placeholder) : - StripeConnectController.onboard는 지금 LoanOrgStripeConnect를 주장합니다. 성공적인 줄무늬 계정 생성; .status 반환 onboarding 국가 - 새로운 StripeIdResolver: connectedAccountIdForOrg() + 게으른 getOrCreateBorrowerCustomerId() (idempotency-keyed Customer.create를 실행합니다. 연결된 계정의 밑에, Loan.stripeCustomer에 persists ₢ 킹 - AutoDebitRunJob.fireAchDebit + .fireDisbursement는 이제 실제 해결 대신 StripeIdResolver를 통해 ID는 "acct placeholder *" Reminder 교육: - ReminderSchedulingJob : 야간 청소는 PAYMENT DUE 3 DAYS를 방출합니다. PAYMENT DUE TODAY, PAYMENT LATE DAY 1/5/15, Offer EXPIRING (24시간) 만료되기 전에, STATEMENT AVAILABLE (세대). Dedup 키워드 이름 * *********** 그래서 재런은 idempotent입니다. 연말 세금: - YearEndTaxJob (cron 06:00 Jan 5) : 1099-C를 부과합니다. + 1099-IN 차용인 관심 > $10. PDFBox 렌더링 된 양식, LoanDisclosure로 기록된 MediaService에 저장 metadata 그래서 reruns 이다 idempotent. - 대출.tax1099 충전 할 수있는 자동 세트는 금액 ≥ $ 600을 확인

  30. · kamo-shared-library

    LoanOrgStripeConnect + 대출 세금 / 액면 필드 + 핫 인덱스

    - 새로운 LoanOrgStripeConnect 엔티티티 (one-per-org)는 stripeConnectedAccountId를 보유합니다. + 내장 기능 연결) + 저장소 - Loan: stripeCustomerId (org의 연결된 계정의 밑에 창조해), lastAccrualDate, tax1099IntEligible, 세금1099CEligible - 뜨거운 합성 색인: * 대출 : (org id, 통계), (borrower member id, 통계), (next payment due at), (기사, delinquency tier) * 대출 금 : (loan id,initiated at), (loan id, 통계), (stripe payment intent id), (statement id) * 대출 상태: (loan id,statement number DESC), (due date,status) * (org id,status), (borrower member id, 통계), (기사,expires at)

당신의 우주는 기다리고 있습니다.

몇 분 안에 무료로 시작하세요. 준비가 되면 언제든지 제품을 추가할 수 있습니다.

영원히 무료 - 신용 카드 필요 없음