Changelog
Co nowego.
Każde ulepszenie platformy, jak to wysyła.
· kamo-internal
P1 frontend — kolejka charge-off + harmonogram audytu
- losApi: chargeOffQueue / potwierdź ChargeOff / audytByLoan - Strona kolejki do recenzji D120; użytkownik org Przegląd każdej pożyczki, dodaje powód, kliknięcia Potwierdź POST /api/los/charge-off Potwierdź. Urządzenia powierzchniowe backend LoanChargeOffService. - Nowy składnik "LoanAuditTimeline">: czyta : i renderuje pełny strumień PożyczekAuditWydarzenia (typ lekektora, rodzaj, ilość, znacznika czasu). Zaprojektowany, aby podłączyć się do strony szczegółów pożyczki org-side.
· kamolos
P1 partia — webhooks naprzód, crons, handel w pikach
Ruch pieniężny (rdzeniowy P1): - LoanPaymentPostingService: MarkSucceedAndPost / markNie usztywniony / MarkReturnedAndReverse / WypłataCiężeńczenie / markDrawWypłacone. Zamówienie przydziału zamknięte: opłaty - odsetki - kapitał. Stan auto-zagrożenia DELINQUENT - ACTIVE - PAID_OFF na podstawie wynikającego z tego bilansu. - StripeWebhookSena nie jest już log-only: payment_intent.succeeded / pay_failed / charge.refunded (ACH return) / dispute.created+closed / Wypłata.paid+ zawiodła całą czelność zaliczać kieliszkiem za pośrednictwem PostingService. - NachaReturnCode + RetryScheduler: NACHA zgodna z routingiem kodów R — R01/R09 powtórnie biegu do 2 euro / 5 dni, R07/R10/R29 cofnięcie mandatu, Wyczerpany retries flip LoanPaymentMethod - REQUIRES_REVERIFY. Materializacja handlowa-pionowa: - Teraz tworzy zaręczyny (PERSONAL_LOANS, COMMITTED), Zobowiązanie (AKTYWNE, z wyceną + terminami JSON Zgabyki), Zamówienie (Urządzone, subtotal-principal) i wątywanie ich identyfikatorów Powrót do Loan.commitmentUid / engagementUid / kodowyOrderUid in Ta sama transakcja. Cron jobs (prawdziwa logika, a nie stubs): - CoolingOffAdvanceJob: zawiera PENDING DISBURSEMENT_OUT zapłatę za Każda pożyczka PENDING_DISBURSEMENT, której upłynął odejście. - InteresAccrualJob Praca: codzienny prosty naliczanie interesu na zasadzie Za pożyczki ACTIVE + DELINQUENT. - StatementGenerationJob: oświadczenie ratalne na zaczek, LOC za cykl Oświadczenie z przybliżeniem ADB + roczna ocena opłaty + auto-płatność Planowanie. - AutodebitRunJob: zwalnia automatyczne debety PENDING + DISBURSEMENT_OUT wypłaty + NACHA retries przez StripeConnectService z kluczami idempotency. - PojednanieJobstwo: nocne wznowienie opłat/kwotowania/bilansu z tytułu Ksiąg: rejestrowanie korekty drydu + skontrolowane. - ReminderDispatchJob: wyciąga powiadomienia SCHEDULED po ich planowaniuFor i dostarcza za pośrednictwem NotificationFortecService. Powiadomienia: - prawdziwy HTTP POST do EmailService (/api/e-mail/transakcyjny/wysłanie) oraz VOIPService (/api/voip/sms/send, /api/voip/voice/send), templateKey - "pożyczka.'kind_lowercase'". Walidacja: - PożyczkaProductProdukcjaKalidacja: egzekwuje APR - limit państwowy (zarodzubiony), Niedozdatne kontrole, min/max-princientalne zdrowie psychiczne. Zaszyty w głąb LoanProductService.create + update. Naładowanie: - PożyczchargeOffService.queue() zawiera listę kredytów D120; .confirm() odwraca status Do CHARGED_OFF i pisze zdarzenie audytu CHARGE_OFF_RECORDED. - LoanChargeOffController ujawnia ;) Przeglądanie audytu: - LoanAuditEventController ujawnia ;)
· kamo-internal
hartowanie P0 — formularze, rozwiązanie sesji, metody płatności
Formularze (poniżka): - I /-productUidte strony edycji - Nowa pożyczkaProdukt: podstawy / ceny / limity / warunki / zgodność Sekcje, pola typu-strzeże (instalacja vs LOC), weksel Szablon UID, dozwolone kody - - - Produkt wybór (tylko aktywne produkty z tego rynku), kredytobiorca-członek, Kondek generalny, termin opcjonalny, państwo pożyczkobiorcy, "oszczędzasz projekt" vs "wysłanie" - /settings/features/lending: org-side Stripe Connect strona onboarding (we stanowiskach - przekierowania do Stripe) Utwardzanie Pożyczkobiorcy: - Nowe użycieCurrentSession() hook resolves memberId/orgId z /api/user-info (ścieżka kanoniczna) — zastępuje fałszywego KEMBER/KORG Odpisy cookie w My Loans, Offer Detail, Detail, Loan Detail, PipelineLoanOffersTab, PipelineActiveLoansTab - Nowy PożyczkobiornikPaymentMetodsCard: pożyczkobiorca może połączyć bank ACH (Stripe payment_metod id + mandate) lub karta, patrz połączone metody, ustaw domyślne, cofnięcie; osadzone na stronie /loans/[loanId] - losApi: + startStripeConnectOnboarding Ustawienia nav (2 z 3 miejsc na regułę pamięci): - SettingsStatusWindow dodaje "Produkty zagraniczne" w obszarze Commerce + wejście na trasę Za esium ) - (sidebar.tsx nie ma wpisów POS — potwierdzony no-op)
· kamolos
Utwardnienie P0 — Stripe Connect punkt końcowy + PDF spłaszczenie
- Fix EsignKlient import: EsignGenericEnvelopeRepository / EsignSignatureRepository Żyj w .esign.repos, nie .esign root - Nowy StripeConnectController POST Utworzy org Konto na końcu + zwroty adresu URL onboardingu (delegaci do Istniejące StripeConnectService) - MediaServiceClient.fetchBlob: wyciąga bajty przechowywanego blobu Przepływy pracy spłaszczone/re-render - Nowy PdfFlattenService: dołącza podpis E-SIGN Act-cont Strona certyfikująca do ujawnienia źródła PDF dla każdego przechwyconego Podpis (nazwa wpisana w italic; signer/IP/UA/SHA-256 + koperta UID nagrał na stronie). Przechowuje nową spłaszczoną plamę za pośrednictwem MediaService I zwraca blob id + SHA-256. - EsignClient.submitSignature teraz spłaszcza się po oznaczeniu SIGNED i Głodniki + podpisaneDocumentSha256. Spłaszczenie dzienników awarii, ale nie cofa samego podpisu.
· kamo-internal
/api/los/? Trasa proxy - KamoLOS przez k8s DNS
Mirrors the /api/billing/[...path]] BillingService proxy: - Sesja rozwiązana przez Redis; X-Org-Id + X-Member-Id przewinięte - /api/los/webhooks/' skip session auth (Stripe signature-verified at KamoLOS); Nagłówek Stripe-Signature jest przekazywana - Zachowane przepustownik trybu bogotowe - 502 zawijanie się na awariach górnych
· kamo-internal
Dodaj PERSONAL_LOANS commerce typu front-end
- zaangażowanieTypeLabele: wyciągnij związek zaręczynowyType union + słownictwo - MarketCardGrid: PERSONAL_LOANS kolor (?14b8a6) + Landmark icon + licznik - Strona internetowa rynku: nowe zakładki (Produkty kład sobie / Oferty / Aktywne pożyczki / Regulamin państwa) ogrodzone w handlu Typ : "PERSONALNE_LOANS" - losApi.ts: pełna powierzchnia DTO + cienkie opakowanie wrapperage /api/los/' w przypadku produktów, ofert, pożyczek, płatności, losowań, wypłat Metody, automatyczne płace, zasady państwowe, składanie podpisów ESign - Nowe produkty rynkoweTab / MarketLoanOffersTab / MarketActiveLoansTab / MarketLoanStateRulesTab Komponenty - PipelineView: VERTICAL_ICONS entry dla personal_loans - PipelineVerticalSection: PERSONAL_LOANS w hasSubTabs + blok render Trasy (intenty) + Aktywna pożyczka (zobowiązania) podtastrzak - Nowy PipelineLoanOffersTab / PipelineActiveLoansTab - Pożyczkobiorca (Człowiek) /pojedyncza: indeks, /loans/offers/[offerId] Z przepływem akceptyj i podpisu (typowy podpis – ESign) accept-offer), /loans/[loanId] z saldem, wyciągami, płatnością Historia, Pay Now, draws-for-LOC - ustawienia/page.tsx: commerce nav dodaje wpis "Loan Products"
· kamolos
Początkowa inicjalnia pożytków personalnych + serwis
Nowy Spring Boot 3.1.5 / Java 21 microservice wzorowany na BillingService. Domena personal-loan end-to-end: - PożyczkaProdukt / Pożyczka / Pożyczka CRUD z warstwą REST + DTO - LoanLifecycleService materializuje Pożyczkę + commerce Zaangażowanie/Komitowanie W ofercie akceptacja (jeden txn) - LoanPayment + LoanDraw + LoanPayment Metalod + Pożycz PożyczPożyczRecurringPaymentPlan usługi + kontrolerzy - Matematyka: AmortizationEngine (Reg Z Dodatek J), IntersetAgeza (ACT_365 / ACT_360 + ADB), PaymentAllocator (fees-interest-principal) - StripeConnectService (Na pokładzie nakładów na rachunku ACH, ACH debet) + StripeWebhookSerent (idempotent via LoanStripeWebhookWydarzenie) + punkt końcowy naczepy dla sieci Web-Sterobs ? - TilaRendererService renders Reg Z Schumer (instalacja) / Ujawnienie open-end (LOC) przez PDFBox do MinIO - StateRuleSelfHealService boot-loads loan_state_rules.json (50-stanów Rejestr + czapka MLA + ochłodzenie) – pogodzenie wzoru z praw - EsignClient + EsignSignController uzupełnia brakujące w kontaktach z członkami Ścieżka składania podpisów (zapisy EsignGenericEnvelope + EsignSignature w bieliźnie współdzielonej lib) - NotificationDispatchService z dedumentowym harmonogramem - Cron jobs: OfferExpiration, StatementGeneration, DelinquencySweep - k8s manifesty (configmap / deployment / service), Dockerfile, Przepływ pracy Forgejo CI (podwójny klastrowy K1M1 + K2M1) wszystkie wyrównane z Konwencja BillingService
· kamo-shared-library
Dodaj PERSONAL_LOANS commerce typ handlu + pakiet podmiotu
- CommerceType.PERSONAL_LOANS + równoległy ZaangażowanieType + słownictwo - Wpisy BuiltinVendorCategories dla sprzedawców pożyczek osobistych - 15 podmiotów personal_loans (LoanProduct, LoanStateRule, LoanOOferta, PożyczkaDecyzja, Pożyczka, LoanDraw, LoanPayment, LoanPaymentMethod, LoanRecurringPayment Plan, LoanFatement, LoanFee, Pożyczka Ujawnianie, LoanAuditWydarzenia, LoanStripeWebhookWydarzenia, Pozyskiwanie pożyczek) + 15 repozytor. - 22 personal_loans enums (status, poziom, rodzaj, źródło, kanał itp.) - esign EsignGenericEnvelope + EsignSignature + repos dla niepełnosprawnych kredytów hipotetowych Tworzenie koperty i przechwytywanie podpisów z udziałem członków - KamoLOS - KamoMLOS komentuje tylko refs aktualizowany w całej Organizacji / CommerceMarketService / CommerceService Zarządzanie schematami pozostaje w KamoInitializerService; KamoLOS używa dddl-auto: żaden.
· kamo-internal
Przesyłanie foto-albumu używa tego samego rurociągu WS, co karta Uploads
Wyciąga dokopałki doc-managera (hashing ? dedup check? register-or-upload ? WebSocket-driven conversion) do haka wielokrotnego użytkuImagingUploads. Hak jest właścicielem maszyny stanu zgodnie z plikiem, postępem XHR i subskrypcją WebSocket na konwersję na żywo, z której korzysta karta Uploads. Okno dialogowe fotobaktażowe przepisane, aby skonsumować hak: - kolejka plików automatycznie i przetwarzaj pojedynek. - Każdy plik w locie pokazuje swoją aktualną etykietę sceniczną (Hashing ? Checking ? Przesłanie - Converting ? Complete) z LinearProgress, ikoną sprawdzania / spinnera i przyciskiem Retry po awarii. - Okno teraz wyświetla rzeczywisty komunikat o błędzie serwera (np. "Nie udało się przesłać do MinIO") zamiast połknąć go, a Save jest blokowane, podczas gdy przesyłanie jest nadal w locie. - Pomyślnie przesłane pliki automatycznie dołączają do albumu jako pozycje.
· kamolos
Hide isActive-false programy od kredytobiorców w czasie rzeczywistym
ProgramKatalog teraz filtruje programy z isActive-false przed Przywracają je do kreatora pożyczkowego. Flaga jest obliczana po stronie serwera jako (base.isActive AND override.isActive), więc gdy pożyczkodawca przełącza program Wyłączone w zakładce Ustawienia programów hipotecznych, odpowiednia karta zatrzymuje się Pojawianie się w wyborze persona/programu – ograniczony przez istniejące lata 60. Strop czasu czasu.
· SecurityService
Oferta programu Backfill dla istniejących rynków kredytów hipotecznych na start
DataLoader teraz dzwoni : ;) Po zasypie AppMortgage-engage. Zamiata każdą istniejącą MORTGAGE CommerceMarket i zapewnia, że jego oferty programowe są rezerwowane. Okładki Rynki, które powstały przed stworzeniem kikus po stronie Marsketu, wylądowały - W szczególności te, które użytkownik dodał za pośrednictwem Markets & Fields przed tym - rozmieszczaj. Idempotent: w pełni rozpięty system rejestruje już "wszystkie rynki Zaopatrzone" i skacze.
· kamo-shared-library
Oferta programów hipotecznych Bootstrap na rynku tworzy + backfill boot
Gdy użytkownik tworzy CommerceMarket z commerceType-MORTGAGE — za pośrednictwem Zakładka ustawień Rynków i Obszarów – program wymaga rynku Oferowanie pod nim W przypadku powierzchni handlowej w dół, aby wskazać intencje. Poprzednio tylko to Stało się leniwie na pierwszym lichym tworzeniu AppMortgage, więc nowo dodany kredyt hipoteczny Rynki stały się puste, a administratorzy po stronie KamoLOS nie widzieli żadnego efektu po dodaniu jednego. - gdy typ ? ?MORTGAGE, zadzwoń Rynek) po zakaszeniu. Zapakowany W próbie / łapaniu, więc awaria planowania programu nie blokuje tworzenia rynku (KamoLOS czyta programy z rejestru Programu, a nie Oferowania). - - zamiatanie Każdy istniejący rynek MORTGAGE i zapewnia, że jego oferty są świadczone. Używany przez SecurityService DataLoader na startach, aby objąć rynki utworzone wcześniej Ten haczyk wylądował. Idempotent - buty w stanie stacjonarnym są bez op.
· kamo-internal
Zduplikuj segregatory, aby użytkownicy mogli forkować bez wpływu na oryginał
Dodaje akcję "Duplicate" dostępną z menu kontekstowego listy spopisztu oraz z nowego przycisku w nagłówku edytora. Duplikat zaczyna się od metadanych segregatora źródłowego + elementy + modyfikatory, należące do obecnego użytkownika bez udziału, i jest automatycznie wybierany, tak aby użytkownik natychmiast wylądował w nowej gałęzi. Przewody w górę: - Trasa proxy - duplikatBinder() w binderApi.ts i useBinderStore - "Duplicate" pozycja menu w BinderListPanel (działa na widocznym spoiwie – posiada, współdzielony lub szablon) - Duplikcate icon button + spinner w nagłówku BinderEditor
· DocsService
Dodać POST : )
Kopie głęboko, które piszczy, który żądający może zobaczyć (posiadacza, udostępniona lub szablon) w świeżym segregatorie należącym do żądającego. Kopiuje każdy przedmiot (DOC, SEPARATOR, GENERATED) z zamówieniem, typem, configJson i modyfikatorem per-instance w nienaruszonym stanie; kopiuje modyfikatory całego spoiwa; pozostawia dokumenty leżące u podstaw Img same dokumenty (oba wiążący odnoszący te same dokumenty). Kopia zaczyna się bez udziałów i isTemplate-false.
· kamo-internal
Programy hipoteczne przełączają + zaangażowanie MORTGAGE deep-link
- MortgageProgramsPanel wysyła teraz prawdziwy przełącznik na każdej karcie programu z Optymistyczna aktualizacja + cofnięcie się na awarię. Przełączanie połączeń programowych PUT - i odzwierciedla Efektywny aktywny stanowy oblifowany serwerem od podstawy + nadkopywek. - Jest aktywny) owija nowy punkt końcowy. - /commerce/angażowanie/[id] strona: link ZASTOSOWANIETy teraz trasy do /applications/-linkId (strona URL Szczegóły), a nie brakujące Zaangażowanie MORTGAGE automatycznie wprowadzać w /applications/-linkId na ładowanie, więc użytkownicy lądują w adresie URL Zamiast ogólnego poglądu na zaangażowanie.
· SecurityService
PUT /programy/kod/aktywny + deprecyzuj stare punkty końcowe POS
- HiptgageProgramController zyskuje PUT Z ciałem "is"Active": bool", ogrodzony na LOS_TAKE_APPLICATION. Delegaci do - który wprawi w rzędzie OrgProgramOverride. - getMortgageAppByd, createMortgageApp, updateMortgageApp, updateMortgageAppStatus wszystkie oznaczone -Deprecated with javadoc wskazujący dzwonienia na adres URLA-fidelity /api/security/mortgage-apps Punkty końcowe. Dziedziczne ścieżki POS pozostają funkcjonalne dla back-compat.
· kamo-shared-library
Per-org enable/disable + deprecjacja starszej ścieżki hipotecznej tylko w handlu
- wstawia w wiersz OrgProgramOverride Z recordState.isActive-desired; listForOrg now i jest to program bazowy Aktywna flaga z nadrzędna, więc niepełnosprawne nadpisywa niesie podwójne Oznacza to, że „ten org wyraźnie wyłączył ten program”. - OrgProgramOverrideRepository doszły do findAllByOrganizationId i - dla uperwień + listy ForOrg ścieżki. - / findMortgageAppByD / / updateMortgageApp / AktualizacjaMortgageAppStatus są czerpane z góry. Działają tylko na handel Intentory otagowały LOAN_APPLICATION i NIE tworzą ani nie czytają URLA AppMortgage Rekordy — przechowywane dla back-compat with . Ale nowy kod musi używać AppMortgageService + /api/security/mortgage-apps.
· kamolos
Scrubbable day - nocny motyw z słońcem-moon SkyToggle
- Ciągłe dyski położenia sceny [0,1] w poszczególnych stronach CSS on :root przez liniową interpolację RGB między ciepłym papierem i Kotwice nocne aurora w lib/scene/palettes.ts - Domyślnie do godziny lokalnego dnia podczas pierwszej wizyty; ręczne nadpisywanie jest Gniazdo w pliku cookie, z przyciskiem taksówki zegara, aby ponownie włączyć automatyczne obserwowanie - SSR ScenePainter piecze rozwiązaną paletę przed pierwszą farbą, dzięki czemu Nie ma FOUC podczas powracających wizyt; tryb automatyczny pierwszej wizyty jest łatwe Od dnia do godziny lokalnego t ponad 1,4 s - SkyToggle: pointer-draggable thumb, którego glyph z promieniami słonecznymi obraca się w Czas rzeczywisty z t i morfami między promieniami słonecznymi i półksiężycem - PageGlow + StarField ambient warstwy otoczenia: bursztynowe powietrze w lewym piętrze Dzień, chłodna księżycowa-poświata w prawo w nocy, 80 zasiane gwiazdy zanikają w Minione zmierzch i błyskanie przez klatkę klucza o zmniejszonej w ruchu - przełączniki motywu MUI na granicy zmierzchu t-0,5; kolor nadwozia CssBase Czyta się od CSS vars, więc interpolacja pozostaje ciągła - Upuszcza twardo zablokowaną ciemną klasę + schemat kolorów; naprawia dwa Długostały -surface-base (brakujący przedrostek kolorów) gradientowe niepewności W JourneyCrest i CeremonyClient
· kamolos
Zaangażowanie/zaangażowanie/zaangażowanie UID
AppMortgageDTO posiada teraz identyfikatory cyklu życia handlowego, które są Zaplecza SecurityService zaludnia każdego wniosku o kredyt hipoteczny. KamoLOS Nie używa ich jeszcze aktywnie, ale wpisując je w przyszłości. Ada-niski o wybieganie z kredytobiorców ("zaangażowany wniosek") może Odnosić się bezpośrednio do warstwy handlowej bez przejścia przez model URLA.
· kamo-internal
Pokaż kontekst handlowy + zakładka ustawień programów
- /aplikacje bohatera teraz czyta "Handel > Mortgages Mieszkaniowe - URL 2021" Tak więc pracownicy postrzegają kredyt hipoteczny jako jeden pion moduł handlowy, a nie Niezabytny rurociąg. - Nowa karta Programy hipoteczne w ustawieniach handlowych — katalog tylko do odczytu Programy kredytowe (CONV/FHA/VA/...) z aktywną wersją stanu i zasad. Ustawienia nav aktualizowane we wszystkich trzech lokalizacjach (subpicjów, tras, etykieta For). - AppMortgageDTO/SummaryDTO + nowy programDTO/LoanProgramCot Rodzaje lustra Zmiany w ramach wspólnych lib (engagementUid / intentUid / zobowiązanieUid). - hipoteczneAppsApi.listPrograms() trafia w istniejący /program punkt końcowy.
· SecurityService
Enforce LOS prawa + / handel/zaangażowania punkt końcowy
- MortgageAppController: każdy punkt końcowy teraz bramy na RoleRightType. Czytania Wymaganie LOS_VIEW_PIPELINE; tworzenie nowej aplikacji wymaga LOS_TAKE_APPLICATION; edytuje akceptują dowolną rolę pism LOS (take / process / underwrite / close / suspend); usuwanie wymaga LOS_SUSPEND_OR_WITHDRAW. Konto serwisowe KamoLOS już posiada pełny prawy zestaw LOS, więc Podróż kredytobiorców nie jest naruszona; użytkownicy personelu są ogłuszeni na ich rolę. - CommerceEngagementController: nowy GET (lista z filtrami typu/status/date) i GET .../angażami/-uid (szczegóły), Otwojony na ACCESS_COMMERCE. Jest to pionowo-agnostyczny odpowiednik dla Punkt końcowy aplikacji hipotecznych - ten sam format, czy czytasz Kredyt hipoteczny, zlecenie detaliczne lub rezerwacja na wynajem.
· kamo-shared-library
Wire URLA kredyt hipoteczny w zaręczaniu/Zaangażowanie/Zaangażowanie
Kredyt hipoteczny jest jedną pionową systemu handlowego - obok handlu detalicznego, wynajmu, Obsługa, subskrypcja i zaopatrzenie. To przewodzi kredyt hipoteczny URLA-fidelity Stosuje się do cyklu życia handlu domenowo-agnostycznego, więc powierzchnie krzyżowe (pisy na pulpity rurowe, analityka, portal klienta) patrz hipotekę jak każdy inny Zaręczyny. - Zastosowanie: nowe engagement_id / intent_id / zobowiązanie_id FKs (niedopuszczalne dla Sprzemyślne rzędy). - - bootstraps the org's MORTGAGE CommerceMarket + jedna Oferta na LoanProgramCode przy pierwszym utworzeniu aplikacji; Obejmuje Zaangażowanie + Intencję do każdego AppMortgage; lustra LoanFile.status Na Intent.stanus i Engagement.stanus; zmaterializuje się zaangażowanie w FUNDED z migawką warunków pożyczki. Idempotent end-to-end. - AppMortgageService: createBlank/createFromLead przywiązanie do zaangażowania; setSelectedProgramCode odświeża ofertę Intent. - LoanPipelineService. lustra przejściowe po każdym przejściu; handel Awarie lustrzane nie blokują progresji URLA (log + kontynuuj). - AppMortgageDTO / AppMortgageSummaryDTO eksponuje zaangażowanieUid / intentUid / ZobowiązanieUid dla frontendu.
· kamo-internal
Dodaj kartę Organizatora z segregatorami, separatorami, wygenerowanymi dokami
Dodaje Organizatora do kierownika dokumentu: - Nowa zakładka "Organizer" (pozycja 4) z listą segregatora + widok podziału na redakcję; istniejące karty przesuń w prawo - akcja "Dodaj do Organizatora" na każdym wierszu dokumentu otwiera segregator (istniejące segregatory lub tworzenie nowych) - Binder editor: elementy przeciągające do ponownego zamówienia (HTML5 DnD), dodaj separator strony (kolor + etykieta przez ModernColorPicker), dodaj Generated Doc (Strona, Spis treści, Photo Album, Word Count) - Album fotograficzny obsługuje przesyłanie-new-photos (również dodaje menedżera doktowianego) i przeglądanie istniejące - Panel modyfikatorów o szerokości binderów ponownie wykorzystujący kształt modyfikatora esygnowania (numery strony, etykieta, znak wodny) - Modyfikator per-dokuszowej nadpisuje się za pomocą okna dialogowego na per-item - Tryb podglądu renderuje połączony plik PDF w ramce - Pobierz przycisk wywołuje /api/docs/binders/Edźg!/oddajnie Nowy sklep Zustand useBinderStore, REST client app/utils/binderApi.ts i Next.js trasy proxy w /api/docs/binders/- odzwierciedlają istniejący wzór proxy obrazowania.
· DocsService
Dodaj zaplecza Organizatora — CRUD, render, generowane docs
Nowa powierzchnia REST pod /api/docs/binders dla Organizatora - BinderController: CRUD, dodatek/upudate/usuń/umoń, udostępnij, render - BinderService: org-scoped kontrole dostępu, widoczność właściciela/udostępnia/szabła, zarządzanie pozycją przedmiotu - BinderRenderer: połączenie dwupasmowe (ograniczone ToC/WordCount), stosuje per-nieco i modyfikatory wiążące za pośrednictwem współdzielonego PdfBuildUtils - Wygenerowany rejestr dole z rendererami dla strony okładki, tabela treści, Word Count, Photo Album (używa MinIO do bajtów graficznych) Ponowne wykorzystanie - dla dokumentów zmodyfikowanych esygniami i - do kontroli dostępu.
· kamo-shared-library
Dodaj podmioty Binder/BinderItem/BinderShare i repozytoria
Dodaje warstwę trwałości dla nowej funkcji doc-manager Organizer: - Binder (Long Id, właściciel, org-scoped, isTemplate, modekier-wide modifierJson) - BinderShare (UUID, członek odbiorcy, rola CZYTAJ/WRITE) - Repozytoria JPA Spring Data z zapytaniami org-scoped i "widoczną dla członków" związek (własność + współdzielona + szablon) Schemat jest odbierany automatycznie przez KamoInitializerService za pośrednictwem Hibernate's ddl-auto.
· kamolos
Wsuń baner testowy, pasuje do widoku, dodaj zgodę pliku cookie
- TestModeBanner publikuje swoją wysokość do --kamolos-banner-h i Globals.css omija go z min-h-ekranu, więc widok na dom nie Dłużej przelewa się do portu widokowego za piksele banera. - Baner zyskuje przesuwny trzeźwy połysk + impuls cieniowy, więc Czyta się jako aktywne ostrzeżenie, odzwierciedlając pasek podglądu marketingowego. - Nowy CookieConsentBanner (Akceptuj wszystko / Zarządzaj za pomocą analityki Toggle), reskined z wersji marketingowej, aby użyć ciemności Powierzchnia zorzy polarnej + na najemca --org-primary / --org-gradiient.
· kamolos
Surface SAFE Act NMLS IDs dla pożyczkodawcy + przydzielone LO
Dodaje LoContactCard z awatarem, pulsem obecności, zweryfikowanym linkiem NMLS, i Wysłać/e-mail/wiadomości w górnej lewej części bohatera i zastosować powierzchnie, tak Licencjonowany inicjator pożyczkodawcy (nazwa + NMLS ID) jest zawsze jednym z nich. Odblokuj — wymaganą przez ustawę SAFE nr 1503 i Reg Z 1026,36 g (g). Pożyczkodawca NMLS jest promowany na pigułkę powierniczą "Licensed" - NMLS - i useAssignedLO zwraca teraz fałszywe demo LO do momentu wypożyczenia LO Ziem. LoGuideChip powraca tylko do głosu, ponieważ LO ma własną powierzchnię.
· kamolos
Auto-ładowanie pożyczkodawcy demonstracyjne, gdy żaden prawdziwy najemca nie rozwiąże
Powód "nadal nie jest napiętnowany" - nie istniał prawdziwy najemca org dla Testowana nazwa hosta, więc SSR pobrał zerowy i każdy Powierzchnia odskoczni pożyczkodawcy spadła do bankructw Kamo. W tym w, potyczce, w pot wt. w potytach, w tym w tym, że w tym w tym w, potyczce o. w tym w, potyczce o System brandingowy działał, po prostu nie miał nic do nazwania. Teraz wysyła kompletnego pożyczkodawcę demo, który automatycznie ładuje się jako upadek, gdy Prawdziwy pobranie nic nie zwraca i są dozwolone - domyślnie). Produkcja z za pomocą Niepełnosprawne wciąż spadają, aby nagie domyślne Kamo, więc nie Wysłanie prawdziwego pożyczkobiorcy do "Apex Mortgage". - lib/org/demoOrg.ts: "Apex Mortgage" — bordowy (nr 8B1538) i Złoto (D4A24C) wtórne, celowo dalekie od zorzę polarną, tak Efekt markowy jest niewątpliwy. Pełna liczba ludności: slogan ("Trzy genera pokoleń doprowadzenia cię do domu."), NMLS nr 123456, telefon wsparcia + e-mail, rok ustanowiony 1989, oba znaki EHO + EHL, liniowe-135 Kierunek gradientu. Nowy aktywatBasePath: '/demo-lender' na org Typ mówi ThemeLogo, aby załadować /demo-lender/logo-full.svg przed Próbowanie MinIO lub globalnego upadku. - + logo.svg: real Apex Mortgage Znak słowny i znak górszczysty w bordowym - złotym gradient. Nie To tylko znak słowny, prawdziwy lockup. - lib/org/fetchOrganization.ts: zwraca DEMO_ORG, gdy jest upstream Nieosiągalny lub nie jest zarejestrowany lub nie jest zarejestrowany i pozwalają na to. Realhost / Rezolucja dla najemców wygrywa, gdy jest obecna. - komponenty/theme/ThemeLogo.tsx: konsultacje useOrg().assetBasePath i Umieść ten prefiks na przód łańcucha kandydatów. Pożyczkodawca Demo's Ziemki z logo; rzeczywiste aktywa MinIO dla najemców nadal rozwiązują się po raz pierwszy, gdy Populated. - aplikacja/layout.tsx: ?link rel-"preload"> śledzi to samo zamówienie priorytetowe, Tak więc Preload SSR celuje w logo pożyczkodawcy demo, gdy tryb demo jest Aktywny. - kiedy org.id - 'demo-apex', Baner woła "Pokazując pożyczkodawcę demo (bez najemcy org Skonfigurowane dla tego hosta", więc testerzy wiedzą, którą markę są Widzanie jest w puszkach. Zbuduj 32/32, 140 testów przejdzie. Przeładuj aplikację pożyczkobiorcy, a powinieneś Teraz zobacz logo Apex Mortgage + nazwę w nagłówku, burgundu i Złoto w całym CTA i wstążki, "Witam w Apex Mortgage". Bohater lądowania, NMLS 123456 + EHO + EHL w stopce, "Call Apex Kredyt hipoteczny (800) 555-2739" w arkuszu pomocy.
· kamolos
Uczyń pożyczkodawcę główną marką, a nie akcentem
Przeformułowuje aplikację zmierzoną pożyczkobiorcą z "produkt Kamo z akcentami pożyczkodawcy" "Projekantnika Lendera, Kamo jako silnik." Każda powierzchnia teraz prowadzi z Tobra tego pożyczkodawcy. - LenderLockup - pożyczkodawca kanoniczny Znak marki używany wszędzie. Wagi sm - md - lg xl - bohater. Pary Logo (lub okrzyk słowny w podstawowym kolorze pożyczkodawcy) z Nazwa pożyczkodawcy; opcjonalny slogan poniżej. Używany przez każdą powierzchnię, która Musi czuć się "Jestem na stronie mojego pożyczkodawcy". - BorrowerHeader — nagłówek rośnie do h-14/h-16, logo + nazwa pożyczkodawcy Zawsze widoczny (rozmiar-md" siłaWordmark), drop-shadow przyciemniany w Pożyczkodawca jest głównym. Poprzedni mały znak narożnika 24px zniknął. Nowy Przycisk telefonu do połączenia znajduje się obok pomocy pożyczkodawcy Pierwszorzędna granica + poświata; na telefonie komórkowym zapada się do przycisku ikony. Nat w, powt (tj. w zd wt. w tym, w tym, w tym, w tym, w tym, w tym, w tym, w, w pot w Wstążka akcentująca to 4px (wyszło 2px) i nadal przesuwa gradient pożyczkodawcy. - Bohater strony lądowania — wyśrodkowany, zdominowany przez lokatę pożyczkodawcy u bohatera Skala wewnątrz szklanej karty z mocnym -org-pierwotnym blaskiem. Powyżej W fałdzie czytamy: „Witamy w „LenderName” (najniższonego pożyczkodawcy Nazwa jest nagłówkiem), z hasłem pożyczkodawcy jako podtytułem. Pewna kolorowa pigułka mówi "Lender" - Pożyczka na pokład" zamiast Ogółem "Kamoville". Przycisk CTA jest większy i ma silne -org-pierwotny poświata. - LenderFooter — pełny wiersz atrybucji: nazwa pożyczkodawcy + NMLS Konsument Link dostępu + telefon + e-mail + strona internetowa + znak EHO/EHL. Linia praw autorskich Jest to brzmiało "2023-2026" LenderName. Wszelkie prawa zastrzeżone." z małym Kredyt "Onboarding by Kamo". Widoczne na powierzchniach bohaterów. - HeroBrandIntro — splash mieszka 3,4 (było 2,4 s), pokazy podczas pierwszej wizyty I każdy 30-minutowy powrót bezczynności (był raz na sesji). Karta Logo rośnie Do rozmiaru "bohater" wewnątrz mocniejszej szklanej karty z cięższą -org-pierwotny poświata. "Witamy w "LenderName" jest nagłówkiem; Hasło sloganu pożyczkodawcy to podtytuł. - generateMetadata — szablon tytułu Next.js jest teraz "%s" -LenderName Z niewykonaniem jest tylko nazwa pożyczkodawcy. Każda strona dziecka czyta pożyczkodawca-pierwsza w zakładce przeglądarki i karty OG. stronaName, tytuł, i Opis całego przepływu z rejestru org. Zbuduj 32/32, 140 testów. Jeśli twój lokator ma przesadzony slogan / nmlsId / phoneSupport / e-mailSupport /rokEst / colorPri / colorSec / logo asset, strona Teraz wygląda jednoznacznie jak produkt pożyczkodawcy. Z niczym Populated on z wdziękiem degraduje do "Kamo" domyślnych.
· InitializerService
Migracja dla marki pożyczkobiorców + kolumny ujawniania informacji
Dodaje siedem znieważających kolumn organizacji kamo-wspólnej biblioteki Podmiot deklaruje obecnie (TAGLINE / NMLS_ID / PHONE_SUPPORT / EMAIL_SUPPORT / EQUAL_HOUSING_DISCLOSURE / ON_PRIMARY_TEXT / GRADIENT_DIRECTION) Aplikacja pożyczkobiorca kamo-los może odebrać kredytodawcę bez schematu Błędy w istniejących rzędach orggs. Zamówienie(35) — działa po LogoFullExtMigrationRunner (30) i przed LeadCompanyColumnRunner (40). Idempotent przez ADD COLUMN IFAJ NIE WYKONAJNE; Bezpieczny do ponownego ujęcia. Zgodnie z polityką projektu ten plik nie jest tutaj wykonywany — KamoInitializerService Zaczyna się od użytkownika.

Twój wszechświat czeka.
Rozpocznij bezpłatnie w kilka minut.Dodaj produkty, kiedy tylko będziesz gotowy — bez migracji, bez nowych logowań.
Bezpłatne na zawsze — nie wymaga karty kredytowej