Mergi la conținut
KAMOUniverse

Jurnal de schimbări

Ce e nou.

Fiecare îmbunătățire a platformei, pe măsură ce se livrează.

  1. · kamo-shared-library

    Perioade de plată, pauze, prime, conturi de muncă, angajamente, export

    Scade schema salarială și de oră rămasă într-o singură schimbare comun-lib astfel încât întreg domeniul terenuri într-un singur kamoInitializer rula mai degrabă decât o migrare per Faza. Entități: perioade de plată cu coloane de înghețare a versiunii regulii, linii de câștig, pauză norme și încălcări, conturi de muncă și segmente de muncă, politici de angajamente; solduri și registru, cazuri de concediu, loturi de export, evenimente de prezență. Patru motoare pure, 51 de încercări: BreakEvaluator cărți o jumătate de oră neplătită angajatorul nu poate dovedi a fost duty-free. Prime VALORI vor fi mai mult decât un raport. Unu. prima pe categorie pe zi (UPS v. Superior Court): două mese pierdute datorate Unu, o masă pierdută plus o odihnă pierdută îi datorez doi. O derogare de la masa este onorat numai în cazul în care statutul permite unui angajat să nu își dea acordul în afara acestuia. Odihne sunt neatinse, astfel încât tăcerea pe atestare nu este niciodată marcat ca o încălcare. RegularRateCalculator rata. 778.115 medie ponderată, 778.209 ore suplimentare retroactive pe bonusuri nediscreţionare, 778.216/218 şi prima pentru pauză: Timpul drept este deja în total, deci orele suplimentare adaugă 0,5x, nu 1,5x. AccrualEngine plafonat separat de plafon și o deducere care ar încălca podeaua aruncă mai degrabă decât aprobarea tăcut o jumătate de zi liberă. PayPeriodCalendar un decalaj (lucruri care nu aparțin niciunei perioade, nu sunt plătite) sau o suprapunere (plătite de două ori).

  2. · kamo-shared-library

    Model de excepție și detector

    Face ca poarta de blocare să fie reală. Până acum, tabelul de tranziţie a citit un Contează că nimic nu a scris, astfel încât fiecare carte de timp uitat curat și "un pumn lipsă este Niciodată nu a plătit ca zero " a fost un comentariu mai degrabă decât un control. Distincția BLOCKING este întregul punct al taxonomiei: o schimbare deschisă, o Un pumn neperformabil şi o oprire temporară neatestate, pentru că Închiderea lor susţine ceva ce nimeni nu poate sta în spate. O ratare a gheofenţei şi o skew ceas sunt ADVISORY și nu blochează - refuzul de a înregistra sau finaliza timpul care a fost de fapt lucrat este exact încălcarea salariilor acest sistem previne. Detectorul raportează şi nu repară niciodată. Orice mod de a ghici o schimbare secretă este greșit: lăsând-l deschis se acumulează ore absurde, auto-închidere sub rapoarte, un capac Inventează o figură la care nimeni nu a fost martor. Aşa că devine o excepţie. Ipotent prin construcție prin constrângere unică (membru, dată, tip) -- duplicatele ar umfla numărul şi ar face o carte de timp de nefinalizat pentru un motiv Nimeni nu a putut găsi.

  3. · kamo-internal

    Confirmă înainte de a opri o plată recurentă

    Ambele anula acţiuni În primul rând, numirea data coperta ruleaza la și, pentru un grup, cât de mulți oameni păstrează lor locuri până atunci. În mod deliberat, nu dialogul comun de confirmare. Că unul necesită dactilografiere DESTROY, DELETE, REMOVE sau ERASE înainte de a permite butonul său, care este potrivit pentru Ștergeri ireversibile a fost construit pentru. Anularea nu este nici ireversibilă, nici distructive: nu se pierd date, accesul continuă până la sfârșitul perioadei plătite și te poţi abona din nou când doreşti. O mănuşă tip-the-word în faţa oprirea unei plăți este frecarea cu privire la o acțiune un client este fără echivoc dreptul de a lua cu ușurință. Nici un buton nu spune "Cancel." Într-un dialog despre anularea, acest cuvânt înseamnă atât "Abandonaţi acest dialog" şi "cancelaţi-mi abonamentul" şi nu puteţi fi citit în mod fiabil ca fie, deci ambele butoane numesc rezultatul lor: "Păstrați planul meu" și "Stop viitor plăți.".

  4. · BillingService

    Transportați data de reînnoire a acoperirii și a sarcinilor utile ale grupului

    Ambele suprafeţe raportează acum curentPeriodEnd şi anuleazăAtPeriodEnd. Data este ceea ce "Ţine-ţi locul până la sfârşit." a perioadei" este o asigurare în abstract, "vă păstrați locul până la 14 martie" este asigurarea cineva poate acționa pe.

  5. · kamo-internal

    Spune-le oamenilor când o factură are nevoie de ele, şi lasă-i să nu mai plătească

    Un banner pe pagina de start atunci când o plată această persoană este responsabilă pentru are a eșuat, conectarea directă la pagina lor de facturare. Până acum, o plată eşuată s-au prezentat doar ca aplicații care nu mai deschis care este mai degrabă un software defect decât o factură neplătită. Crescut numai pentru facturile pe care le pot acționa: propriul lor loc și grupurile pe care le gestionează. Se face Nimic când nu e nimic datorat. Anularea este acum vizibilă în cazul în care persoana poate vedea cine plătește: un "Cancel automat plăți" acțiune pe propriul lor loc, cu textul de ajutor spunând clar că acestea să păstreze locul până la sfârșitul perioadei pentru care au plătit deja. ă confirmarea nume data, deoarece frica atunci când apăsați acel buton este că accesul se opreşte imediat. Comutatorul "Lasă-i pe cei care-şi aleg singuri planul" a dispărut. Planul aparţine organizaţia şi toţi cei care plătesc în interiorul ei Cumpără acelaşi plan. Grupul spune acum planul organizaţiei. decât să oferi un culegător.

  6. · BillingService

    Un plan pentru fiecare organizaţie, un plafon de 25 de locuri pentru Enterprise şi o modalitate de a nu mai plăti

    Planul este acum o decizie la nivel de organizație și nimic altceva nu-l poate suprascrie. Lăsând un auto-plătitor sau un manager de grup să-şi aleagă propriile cărţi ca o bunătate şi este o eroare de corectitudine: *************** raspunsurile "se intampla acest org au această aplicație" de OR-ing peste fiecare abonament live care vizează org, astfel încât unul persoana pe un scaun alegerea unui plan mai mare a schimbat aplicațiile acelui plan pentru întreaga organizaţie. Punând fiecare plătitor la planul organizației face ca OR inofensiv identic. OrgPlanService citește planul de la același abonament Planurile & Billing consola numește "planul tău," astfel încât regula și ecranul nu poate fi de acord. Enterprise este nevoie de peste 25 de locuri, numărat în întreaga organizație și fiecare Grupul de facturare. Numărarea per-plătitor ar fi făcut divizarea în grupuri o modalitate de a Cumpără 50 de locuri 25 odată. O editare exclude abonamentul propriu astfel micsorarea este masurata in functie de noua dimensiune, nu de cea veche. GET / sine / alerts conduce un banner de prima pagina. Acces limitat fără explicaţii este cea mai proasta versiune a acestui produs aplicaţiile opri deschiderea şi nimeni nu spune de ce, sau că persoana care citeşte este cea care o poate repara. Doar pentru facturile astea. membru este responsabil pentru: propriul lor loc și grupuri pe care le gestionează. Să spui cuiva Cardul organizaţiei lor a eşuat când nu au putut plăti zgomotul, iar zgomotul este cum bannere nu mai fi citit. Post/self/set/cancel oprește plata automată pe un loc pe care cineva l-a cumpărat ei înşişi. Întotdeauna la sfârșitul perioadei: au plătit pentru perioada curentă și Anularea imediată ar lua acest acces departe în timp ce rambursarea nimic, deoarece Această cale cere Stripe pentru nici o prorație. Două bug-uri în anulare() găsite în timp ce cabluri care sus: - A fost un no-op tăcut pentru COMP și TRIAL. Tot corpul stă în spatele unui dungiAbonamentCec nul, astfel încât un abonament comped sau procesing returnat 200 cu randul inca activ Acum refuză şi spune de ce. - imediat=adevărul rămâne periculos și nu este expus în mod deliberat: setează CANCELED apoi apelează FallbackToFree, care stabilește ACTIVE / FREE cu sezutCount 1, așa un org de 25 de locuri ar păstra o persoană care lucrează și ar spune 24 locul lor a fost tăiat pentru Un motiv pentru care nu s-a întâmplat. right.fail-deschis este setat fals aici pentru a se potrivi Serviciul de securitate, care servește /api/security/fetures și este ceea ce arată ecranul Aplicații & caracteristici. Două servicii Răspunsul la aceeași întrebare drept diferit este mai rău decât oricare dintre răspunsuri. Seif verificat: toate cele șase planuri active poartă un rând explicit pentru toate cele 21 de servicii tipuri, astfel încât nimic acordat anterior nu este negat.

  7. · SecurityService

    Releu de aprobare cu rol rezolvat din drepturi

    ROLUL ESTE STABILIT AICI, din drepturile apelantului și relația lor cu Subiect - niciodată de la organismul de cerere. Un corp care ar putea numi propriul său rol ar lăsa pe oricine pretinde a fi statul de plată. Precendenţă: PAYROLL (cel mai mare, editează în orice stat), apoi MANAGER, apoi MAGLOYEE pentru propria înregistrare. Fiind managerul surprins al subiectului conteaza pe cont propriu -- un manager de linie care aprobă propriul raport este cazul obișnuit și nu ar trebui au nevoie de un drept la scară largă org; dreptul există pentru toți ceilalți care examinează. IsManagerOf eșuează ÎNCHIS: o linie de raportare nerezolvabilă nu este autoritate.

  8. · kamo-shared-library

    APROBAREA TIMECARD ADJUSTMENTS (197) și FINALIZE PAY PERIODS (198)

    Split astfel separarea sarcinilor este expresibil: oricine aprobă o cronologie nu este automat oricine poate închide o perioadă de plată pe ea. MANAGEMENT TIMECARDS (183) rămâne poarta modulului și este în mod deliberat nici unul. Înscrierea nu este încă un drept -- este un fapt persistent al ocupării forţei de muncă. Un drept scurgeri ON prin patru comportamente expediate și dispare de la un membru Terminat Exact atunci când HR trebuie să producă ultima carte de timp. În mod deliberat absent de la NEW RIGHT SEEDS: care poartă o subvenție existentă înainte, și aceste porți o capacitate nimeni nu a avut. Adăugarea unui drept necesită doar o SecurityService restartează - fără permis KamoInitializer, fără DDL. Id-uri fixate de un test, pentru că ID-ul este ceea ce membrii rights aplicate magazine.

  9. · kamo-shared-library

    Mașina de nivel de omologare

    Angajatul depune -> manager aprobă -> statul de plată închide, pe decizia proprietarului. Patru reguli, aplicate într-un tabel de tranziție pur și fixate de 25 de teste: 1. Un manager nu poate aproba până când angajatul a depus. Prezentarea este propria afirmație a angajatului că orele sunt ale lor și sunt complete; aprobarea fără aprobarea ei nu aprobă nimic din ce a fost atestat cineva. 2. Managerul de aprobare LOCKS angajatul din alte editări. (3) Un manager poate acţiona în numele -- depune sau aproba -- şi acesta este singurul Regula 1. Este nevoie de un motiv scris, și rândul înregistrează atât managerul care a făcut clic și angajatul a stat în pentru. 4. Salariu poate edita în orice stare, inclusiv blocat, întotdeauna cu un motiv. Corectările după închidere sunt de rutină și necesare din punct de vedere juridic; interzicerea acestora Doar mută editarea din pista de audit. Segregarea sarcinilor trăieşte în tabelul de tranziţie, nu sub denumirea de rol: nimeni aprobă propria carte de timp, și un manager este angajatul cuiva prea. Cascade neaprobate din PAYROLL LOCKED tot drumul pentru a subscrie, deoarece retragerea unei aprobări invalidează încuietoarea construită pe ea. Aprobările sunt vizate de o RANGE DATĂ, astfel încât o aprobare la jumătatea perioadei supraviețuiește unei mai târziu editează în afara domeniului său de aplicare în loc să acopere în tăcere munca pe care nu a văzut-o niciodată.

  10. · kamo-internal

    Fila Timecard Membru și fila setări Cronologie HRS

    Fila de membru este NUMAI SERVICIU și poartă pe identitate, exact ca conformare juridică: obiectivele sale nu iau niciun act de identitate al membrilor, deci este structural incapabil de a arăta orele altcuiva. CheckRight este inutilizabil aici. întoarce adevărat pentru tot în modul lui Dumnezeu, și propria pagină POATE VERIFICA ALTE MEMBRI RUP cu drepturi nelegate, inclusiv - Nu. HR ajunge la cronologia unei anumite persoane este o suprafață diferită la /h/attendanță, atribuită actorului HR. Plasată înainte de plata planurilor, astfel încât să rămână în grupul de file stânga - orice după moștenește alinierea fila dreapta ml:"auto." Pagina HRS câştigă prima filă reală alături de ComingSoonTab, înregistrată în SETTINGS MENU ca testul de acoperire necesită în ambele direcții. Ambele file pad ei înșiși pe fiecare cale de întoarcere; SetăriView, TabPanel și mișcare div toate Sursa zero.

  11. · kamo-internal

    /hr/attendance list and the NavTop clock control

    Înlocuiește corpul HrTabLocationholder. Traseul, intrarea HR TABS, MANAGE TIMECARDS Porţile şi tab-urile i18n deja existau; nimic aici nu înregistrează nimic. Programul Roster sunt derivate server-side din jurnal punch imuabil pe fiecare citire mai degrabă decât păstrat ca un total de funcționare, astfel încât un pumn corectat arată imediat și un bug produce un număr greșit o dată în loc de compus. Controlul ceasului este fixat crom lângă Legal & Compliance, nu un NAV REGISTRY intrare: registrul nu poate exprima o poziție între două controale fixe, InsignaKey e cod mort, şi fiecare înregistrare e trasă şi de negăsit... un ceas de conformitate nu trebuie să fie ceva ce cineva se poate ascunde de la sine. Poarta pe inscrierea PERSISTED, nu verifica dreapta, care se întoarce adevărat pentru fiecare drept sub modul lui Dumnezeu și ar arăta un ceas în fiecare org un operator Vizitat. timescardControlApplicies este împărtășit de control și sondajele sale, astfel încât ambele Du-te liniștit împreună - două copii ale acelei drift predecate, și modul de funcționare este un nasture ascuns al cărui aducer se execută pentru totdeauna. Starea ceasului este al patrulea semnal independent: nu prezenta (60 batai de inima, 300s TTL), și nu disponibilitatea status, care este automat setat la Away pe logout și porți plumb și ruta de sprijin. Poll-doar pentru moment cu un etaj 60. Releul STOMP aterizează cu MediaService schimbare; nucleul NATS este netransformat și în pierdere, astfel încât semințele REST este obligatorie oricum.

  12. · kamo-shared-library

    Accesor cu ceas de baze de date pe depozitul de punch

    Fiecare clipă de pumn vine de la DB, niciodată JVM: capsule repornirea și nod ceasuri skew, și un record salarial a cărui comandă depinde de care pod răspuns este Nu este un record. SQL-standard CAST, deoarece un:: turnat este mutilat tăcut - Hibernat se citește ":" ca un prefix numit-parametru și se transformă acum ()::timpul în ștampilă :timp.

  13. · kamo-internal

    Traseu BFF pentru /api/security/timecards

    TimecardService este ClusterIP fără intrare, deci fără această rută întregul caracteristici 404 în browser în timp ce fiecare serviciu este sănătos și fiecare clădire este verde - eșecul exact care sa întâmplat deja de două ori pe această platformă. Nici o autorizare aici, în mod deliberat: acest strat este de transport, și o jumătate de verificare ar invita convingerea că este un control. Înainte către Api deţine şirul de interogare. A 204 este returnat ca 204 mai degrabă decât a fi trecut prin .json (), care aruncă.

  14. · SecurityService

    Serviciul de Securitate către serviciul Timecard

    Limita de autorizare. Serviciul Timecard deţine datele şi motorul, dar nu sesiune; aceasta ține sesiunea și decide cine poate face ce, apoi relee. ă Prin urmare, motorul nu poate fi atins fără a trece pe aici. SecurityService ruleaza orice Request ().permitAll() with hand-rolled per-handler auth, Deci, fiecare metodă se deschide cu un paznic care întoarce non-nul pentru a refuza. Autoservire Obiectivele finale iau NU ID membru la toate - membru vine de la sesiune, face Sunt incapabili structural să acţioneze asupra altcuiva. Obiectivul final al RR este deschis MANAGEMENT TIMECARDS (183). Înscrierea se răspunde din rândul de muncă persistent mai degrabă decât un drept, așa că un operator în modul Dumnezeu nu apare înscris în fiecare org la care se uită. SUDO MINTE ID se realizează prin: isSelf() tratează în amonte un imitat sesiune ca membru țintă, astfel încât fără ea pumn un imitator ar fi înregistrat ca al angajatului. timecard.service.url este setat explicit în criptă. comision.service.url este setat nicăieri și producția depinde de un literal în Java, care un Serviciu Renumele s-ar rupe la termen cu nimic în configurare pentru a grep pentru.

  15. · kamo-shared-library

    Găleți zi de lucru, etapa 2 a conductei

    Intervalele rezolvate devin pe zi de afaceri secunde, gata pentru alocator. Un interval este SPLIT la fiecare limita de zi de lucru trece: o schimbare 22:00-06:00 Sub o zi de lucru de miezul nopții este 2 ore pe o dată și 6 pe următoarea. Atribuirea întregul interval până la data de începere face ore suplimentare zilnice și regula de a șaptea zi Greşit pentru fiecare lucrător de noapte. Aceasta este în mod deliberat o atribuire diferită de BusinessDate a persistat pe pumnul. Punch-ul are o singură dată -- pentru evaluarea mesei/restului, excepţia coadă și ceea ce angajatul vede ca schimbarea lor - în timp ce ore suplimentare de numărare nevoile ore împărţite în zilele de lucru şi săptămânile de lucru în care au căzut. Ambele sunt corecte, ambele sunt necesare, și umflându-le este capcana. De asemenea, o trecere a frontierei de la Workweek contribuie la două săptămâni." ore suplimentare totaluri; numărarea totul în fiecare este greșit pentru ambele. Acumulează în câteva secunde. Testele acoperă ambele tranziții DST, 50 de ore şi pumni la sfârşit prin alocarea pentru o săptămână din California.

  16. · InitializerService

    Înregistrare KI și migrare schema

    Mesele vin de la ddl-auto; acest alergător furnizează doar ceea ce Hibernate nu poate - indicii unici parţiali pe baza unei repartiţii primare deschise şi a unei rate de plată deschise fereastra, și REVOKE, care este baza de date jumătate din apendice-doar. @Ordin (0) astfel încât aterizează înainte de JPA SELECT orice alergător mai târziu, cu un 40001 retry pentru că Yugabyte schimbă schema online şi o declaraţie emisă în timp ce ddl-auto este încă de stabilire pierde cursa. Registers com.kamo.z.shared.hr.timecard in @EnableJpaRepositorii - acea listă este un array explicit în timp ce @EntityScan este wildcard, și omiterea unui pachet Anulează contextul astfel încât nici un alergător rulează în timp ce clădirea încă raportează succesul.

  17. · kamo-shared-library

    Limitele săptămânii de lucru și ale zilei de lucru

    Săptămâna de lucru este unitatea de ore suplimentare FLSA -- un fix, periodic 168 de ore perioada -- şi NU este perioada de plată. O perioadă biweekly deține exact două săptămâni de lucru; o perioadă semi-lună sau lunară le deține întotdeauna pe cele fracționale, așa că ore suplimentare de calcul pe o perioadă totală atât subplăți, cât și supraplăți și este nu poate fi fixat odată ce perioadele sunt exportate. Limita zilei de lucru este transportată separat şi nu este neapărat miezul nopţii. A 06:00 start este fix standard pentru personalul de noapte: păstrează o schimbare 22:00-06:00 O zi de lucru în loc să-l împartă peste două zile jumătate, ceea ce face ore suplimentare de zi cu zi și de lucru regula șapte-consecutive zi pentru ei, la toate. Limitele sunt timpi de perete-ceas rezolvate prin ZonedDateTime, deci 06:00 sejururi 06:00 într-o zi 23 sau 25 de ore. Testele blochează ambele tranziții, și pin că unul instant este o altă dată de afaceri în Los Angeles și Kolkata - motiv pentru care zona de înregistrare este persistată pe punch mai degrabă decât derivate mai târziu.

  18. · kamo-shared-library

    Rezoluția intervalului, etapa 1 a conductei de calcul

    Punch-urile se rezolvă. Pure, totale și peste tipuri de valori, mai degrabă decât entitățile astfel încât fiecare etapă să poată fi testată fără niciun context persistent. Durata vine de la Durată.Între momente, nu se scade niciodată. Aceasta este întreaga poveste DST și testele pin-l: o schimbare 22:00-06:00 este Seven ore peste primăvară înainte și NINE peste toamna-back. Reducerea ceasurilor de perete Calculează 8 pentru ambele -- unul care plăteşte mai puţin, unul plăteşte mai mult, şi într-o perioadă zilnică suplimentară Jurisdicţia, noaptea de 9 ore pierde în tăcere orele suplimentare. Orice imposibil de reparat se întoarce ca nerezolvat, mai degrabă decât ghicit. Un neînchis schimbare este o EXCEPTIE: lăsând deschis se acumulează ore absurde, auto-închidere la o Un cap fix inventează un număr la care nimeni nu a fost martor. Niciodată nu trebuie să se termine ca zero - care nu plăteşte nimic pentru o zi care a fost lucrată. Mesele sunt lovite, nu se deduc niciodată automat. Transferul închide un interval şi deschide Următoarea fără a pune capăt schimbării, astfel încât calendarul mesei și perioada de eligibilitate să continue printr-o mutare intermediară între centrele de costuri.

  19. · kamo-shared-library

    Alocator non-piramizant suplimentar cu presetări de competență

    Regulile sunt date privind forma de regulament de cerință deja utilizată în această bibliotecă, nu Ramuri de cod, deci California este un rând de configurare în loc de o rescriere. Ordinea de alocare este portantă: reguli zilnice de cel mai înalt nivel (un interval de 13 ore) Ziua CA este 1h la 2x și 4h la 1.5x, nu 5h la 1.5x), apoi a șaptea zi consecutivă, apoi săptămânal NET de ore deja la o primă zilnică. Acest ultim pas este ceea ce previne piramide, și este unul motoare naive Omite. Cinci zile de 10 ore în California este 10 ore premium, nu 20 - un naiv Motorul plătește zilnic ȘI săptămânal pentru aceleași zece ore, și TOATE regula individuală testul trece în timp ce o face. Alocatorul afirmă, de asemenea, conservarea oră pe cale de ieşire şi aruncă în loc să returneze un salariu greşit. Presets: FLSA Federal, California, Alaska, Nevada, Colorado.

  20. · kamo-internal

    Livrează fusul orar org browser-ului

    Modelul Organizatiei Clientilor nu a avut camp de fus orar, utilizareFormatters si next-intl ambele sunt configurate cu nici un timpZone, și backend timezoneservice apel 404'd - astfel încât fiecare timbru de timp redat în zona browser-ului, și serverului în timpul SSR. Oglinzi toate cele 27 de valori TimezoneType mai degrabă decât un subset: o hartă parțială este o jumătate-oglindă tăcută în cazul în care un org necartografiat cade prin zona browser-ului cu Nici un semnal. Hărţi GMT către Europa/Londra, nu către UTC -- observă BST, aşa că se umflă le schimbă o zi întreagă ore cu o oră timp de jumătate de an. Zona de org este doar o retragere DISPLAY. Un recensământ de producţie a găsit toate cele 13 orgi pe default-ul PACIFIC neatins în timp ce membrii acoperă PACIFIC/EASTERN/ARIZONA/UTC/ INDIA, deci zona de înregistrare a timpului vine de la locul de muncă în schimb.

  21. · SecurityService

    GET ***************

    fusul orarService.ts a numit acest obiectiv de când a fost scris și a existat în nici un serviciu Java; clientul a înghiţit 404 şi a decis să UTC. Între timp UtilizațiFormatters și next-intl sunt ambele configurate fără timpZone, astfel încât fiecare Timestamp redă în zona browser-ului -- şi cădere *** este coarda "GMT," care este Europa/London și observă BST. Identitatea provine doar din sesiune: SecurityService ruleaza permisAll with un hand-rolled pe-handler auth, astfel încât un handler care citește identitatea din cerere nu are nici un control. Registers com.kamo.z.shared.hr.timecard in @EnableJpaRepositores. Această listă este un array explicit în timp ce @ComponentScan/@EntityScan sunt wildcard, și omiterea a Pachetul este cauza documentată a două campanii CrashLooping anterioare.

  22. · kamo-shared-library

    WorkSite, ancora jurisdicţiei

    Numit WorkSite, nu WorkLocul de muncă: TeamMember.workLocul de muncă este un existent Office/remote enum și un al doilea simbol cu acest nume s-ar ciocni în fiecare grep. ZonaId este un șir de caractere gratuit IANA mai degrabă decât TimezoneType pentru că enum lui 27 valorile nu pot acoperi un angajator multistatal și nu este NULL deoarece este numai strat de zonă de încredere - fiecare org în producție stă pe neatins PACIFIC implicit.

  23. · kamo-shared-library

    Ocuparea forței de muncă și revizuirea efectivă a sarcinilor

    Punches se va referi la un ASSsignment, nu un membru. Asta face pozițiile concurente, rata medie ponderată 29 CFR 778.115; jurisdicţie multi-site şi locuri de muncă costa expresibil la toate. Managerul MemberId este surprins de la TeamMember. reorganizarea nu poate rescrie cine a aprobat ce. Finderul de liste nu este construit în mod deliberat pe membr rights applied: acea cerere este TeamMember-tiped, astfel încât omite proprietarii de grant-toate org și nu returnează nimic pentru o Membru Terminat al cărui drept aplicat a fost deposedat -- exact persoana a cărui ultima carte de timp HR încă trebuie să producă.

  24. · kamo-shared-library

    Rata de salarizare efectivă, numai pe bază de apendice

    Pe această platformă nu exista nicio compensație pentru angajați înainte de această entitate. Este necesar: orele suplimentare sunt calculate în funcție de rata regulată FLSA, CA necesită rata salariului și un export fără rate oferă salarii Nimic de consumat. O mărire e o nouă săgeată. O rată efectivă într-o perioadă exportată generează o ajustare retro, niciodată o rescriere tăcută. Neexpus niciodată prin /api/securitate/membri/{id} -- acest obiectiv nu verifică niciun drept la Cu toate acestea, dacă punem o rată în ea, vom pierde fiecare salariu din companie.

  25. · kamo-shared-library

    Adaugă jurnalul de pumni și evenimentul de audit

    Ambele deservite de interfețele de stocare NARrow, nu JpaRepository: ștergeAllInBatch și în vrac JPQL bypass entitate callbacks, astfel încât forma de interfață este ceea ce face Adoptă-doar reale, mai degrabă decât consiliere. Zona instant + IANA + data de afaceri sunt toate persistate, astfel încât durata este calculată din instante si DST este corect gratuit -- o schimbare de ora 22:00-06:00 este 7 ore de-a lungul primăverii înainte și 9 peste toamna înapoi, în timp ce perete-ceas scăderea Calculează 8 pentru amândouă. Updatable = Fals NU este utilizat în mod deliberat pe coloanele de punch congelate: Hibernate le-ar omite în tăcere din UPDATE, mai degrabă decât în caz contrar.

  26. · kamo-shared-library

    Rezolvator temporal

    Locul de muncă al autorității - > membru - > org - > UTC. Site-ul de lucru câștigă pentru că normele privind salariile și orele urmează acolo unde munca este PERFORMATĂ. Un recensământ de producţie a găsit toate cele 13 orgi pe PACIFIC neatins implicit și 38 din 63 de membri fără fus orar, în timp ce cei populați SPAN PACIFIC, EASTERN, ARIZONA, UTC și INDIA -- o răspândire de 13,5 ore. Orgul implicit nu este, prin urmare, o sursă utilizabilă de adevăr, motiv pentru care WorkSite.zoneId nu este NULL și poartă greutatea. Se întoarce la UTC mai degrabă decât la șirul *** GMT, care este Europa/London și observă BST. O zonă neparseabilă cade mai degrabă decât aruncând: refuzul de a rezolva o zonă ar refuza să înregistreze timpul efectiv a lucrat.

  27. · kamo-shared-library

    Garda de refuz WORM comună

    @Column (updatable=fals) NU implementeaza imutabilitatea -- Hibernate silentios Omite coloana din UPDATE și scrie vechi arata ca a reușit. Singurul paznic de lucru este un @PreUpdate care aruncă.

  28. · kamo-shared-library

    Soluţionare a versiunilor domeniului şi a versiunii punctuale

    Enums are all @Enumerated (STRING) at the call site: ORDINAL emits a numeric Verificarea intervalului care conține ȘI, care SchemaCleanupRunner's IN-listă sărituri deliberate și care trebuie apoi lărgite cu mâna pe fiecare valoare nouă. Rezolvatorul se rezolvă lângă fereastra care conține instant, niciodată prin ultimul rând, și păstrează ferestre închise în setul candidat - supersesiune închide fiecare fereastră în afară de cea curentă, aşa că o interogare deschisă nu întoarce nimic pentru orice moment istoric, rupere retro plată și reconstrucție de audit. Suprapunere aruncă mai degrabă decât să ghicească.

  29. · kamo-internal

    Arată-le membrilor care plătesc pentru locul lor şi nu mai oferi încă unul

    Obiectivul de acoperire expediat cu chei de traducere și nici o componentă, astfel încât intrebarea raspunde: Cine plateste pentru locul meu? SeatCoveragePanel îl întreabă, iar răspunsul alimentează panoul auto-pay de lângă el: cineva al cărui loc este deja acoperit de organizația sau un grup este nu mai mult a oferit șansa de a cumpăra un alt pe propriul card. Această ofertă a avut nu cunoașterea acoperirii existente, la toate, așa că a fost arătat tuturor. Planul unui grup poate fi, de asemenea, anulat acum, ceea ce face un grup cu un plan deletabil Refuzat astfel încât taxa nu este orfan. Adăugând pe cineva pentru care organizaţia plăteşte deja vine înapoi refuzat mai degrabă decât Nu face nimic, aşa că butonul se explică.

  30. · BillingService

    Să anulăm planul unui grup şi să nu mai plătim dublu pentru o persoană

    Trei goluri în ceea ce a trimis ultima: Un grup cu un plan nu ar putea fi eliminat. șterge() refuză în timp ce un live abonament există corect, deoarece rândul de grup este singurul lucru care indică la Abonamentul Stripe Dead end. cancel Plan () eliberează scaunele mai întâi, astfel încât lista nu poate continua susţinând că oamenii ocupă locuri care nu mai există. Adăugarea unei persoane pentru care organizaţia cumpără deja un loc este acum refuzată dacă nu Take OverFromorg spune altceva. Acesta este al doilea mod de a fi taxat de două ori pentru o persoană şi nimic nu l-a prins: Subscripţia membrelor unice sunt pe subscripție și contLicense nu declară deloc. Mutarea cineva de la Legea organizaţiei asupra grupului este un lucru real pe care îl face un manager, deci este permis în mod deliberat decât accidental. BillingGroupScopeInterceptor leagă fiecare /api/billing/grups/{uid}/** cerere la organizaţia apelantului. Manipulatorii verifica deja, și acest lucru nu să le înlocuiască; există deoarece aceste controale sunt per-handler și un grup are acum sub-resurse care cheltuiesc bani. Urmatoarea ruta adaugata nu mosteni nimic decat daca ceva mai sus se aplică regula. Deliberat mai îngust decât cei care se ocupă: Acest lucru stabileşte care organizaţie, nu cine din ea poate acţiona, astfel încât cele două nu pot alunecare în răspunsuri care nu sunt de acord. Un ID de grup necunoscut trece prin astfel încât handler răspunde "nu a fost găsit" mai degrabă decât confirmarea ID există undeva.

Universul tău te așteaptă.

Începeți gratuit în câteva minute.Adăugați produse oricând sunteți pregătit — fără migrare, fără autentificări noi.

Gratuit pentru totdeauna — nu este necesar un card de credit