변경 로그
무슨 일이야?
플랫폼에 대한 모든 개선 사항, 그것이 선적.
· kamo-shared-library
급여 기간, 휴식, 프리미엄, 노동 계정, accruals, 수출
나머지 임금 및 시간 스키마를 하나의 공유lib로 변경합니다. 단일 KamoInitializer의 전체 도메인 토지는 이전보다 오히려 실행 단계. 항목 : 규칙 버전 동결 열, 수입 라인, 휴식과 함께 기간을 지불 규칙 및 위반, 노동 계정 및 작업 세그먼트, accrual 정책, 균형과 원장, 휴가 케이스, 수출 배치, 출석 발생. 4개의 순수한 엔진, 51의 시험: BreakEvaluator - 자동 공제 식사 때문에 점심을 자동 공제하지 마십시오. 고용주가 보장 할 수없는 반 시간 책은 의무가 없습니다. 제품정보 WAGES (Naranjo)이므로 보고서보다는 수입으로 흐릅니다. 한국어 일 당 CATEGORY 당 프리미엄 (UPS v. 우량한 법원): 2개의 놓인 식사 owe 한, 놓인 식사 플러스 놓인 나머지 owe 두. 식사 면제는 만찬 statute는 1을 허용 - 직원은 외부에 동의 할 수 없습니다. 기타 시험에 대한 실감은 절대로 평가되지 않습니다. RegularRateCalculator - 과시는 REGULAR 비율에 owed, 기본이 아닙니다 비율. 778.115 무게를 다는 평균, 778.209에 retroactive 가동불능시간 비정상 보너스, 778.216/218 배, 반 시간 프리미엄: 똑바른 시간은 이미 합계에서, 그래서 overtime 추가합니다 0.5x, 1.5x 아닙니다. AccrualEngine - 천장은 잔액을 삭제하지 않고 accrual을 중지합니다. 천장에서 별도로 캡핑하고 바닥을 붓는 데덕 매일 반을 개선하는 것보다 오히려 던져. PayPeriodCalendar — 생성되지 않은, 손 입력하지 않고, checkContiguous 거부 틈 (기간에 속하는 작업, 결코 지불되지 않음) 또는 오버랩 (두 번 지불).
· kamo-shared-library
예외 모형과 발견자
BlockingExceptions 문이 진짜로 만듭니다. 이제까지 전환 테이블 읽기 아무것도 썼다, 그래서 모든 timecard가 깨끗하고 '누락을 누락 제로로 지불하지 않는 것은 통제 보다는 오히려 의견이었습니다. BLOCKING 구분은 세금의 전체 지점입니다 : 열린 교대, unpairable 펀치 및 unattested 규정식 펀치 정지 최종화, 때문에 그들에 닫히는 것은 아무도 뒤에 서 있을 수 없다. 기력 놓고 시계 skew는 ADVISORY이고 결코 막지 않습니다 -- 기록하거나 시간을 최종화하는 실제로 일한 것은이 시스템의 정확한 임금 위반입니다. 검출기 보고는 결코 수선하지 않습니다. 동봉된 이동을 추측하는 모든 방법 틀린: 그것을 열기 accrues absurd 시간을 떠나십시오, 모자의 밑에 자동 폐쇄 증언된 인물을 발명합니다. 대신 예외가 됩니다. 독특한 (회원, 날짜, 유형) 제약을 통해 건설에 의해 Idempotent -- 중복은 수를 팽창시키고 이유를 위해 timecard를 unfinalizable 만들 것입니다 아무도 찾을 수 없습니다.
· kamo-internal
Recurring 지불을 멈추기 전에 확인
모두 취소 작업 — 회원의 자신의 좌석과 그룹 관리자의 계획 — 지금 요청 첫째, 날짜 표지가 실행되고, 그룹에 대한, 얼마나 많은 사람들이 그들의 유지 다음까지 좌석. 공유 확인Dialog가 아닙니다. 즉, DESTROY를 입력해야 합니다. 버튼의 앞에 DELETE, REMOVE 또는 ERASE는, 오른쪽으로 그것을 위해 건축된 불능한 deletions. 취소할 수 없습니다. 파괴 : 데이터가 손실되지 않으며, 액세스는 유료 기간의 끝으로 계속됩니다. 당신이 좋아할 때마다 다시 구독할 수 있습니다. 본문내용 바로가기 주메뉴 바로가기 결제를 중지 한 행동에 마찰은 고객 unambiguously 자주 묻는 질문 Neither 버튼은 "Cancel". 취소에 대한 대화에서, 그 단어는 모두 의미 "이 대화 상자"및 "당신의 구독을받을 수 있습니다"그리고 믿을 수 없습니다 어느 쪽이든, 두 개의 버튼은 다음과 같습니다. "내 계획"과 "미래를 멈추십시오. 지불".
· BillingService
적용 및 그룹 페이로드의 갱신 날짜를 수행
이제 두 표면은 현재PeriodEnd 및 cancelAtPeriodEnd를 보고합니다. 날짜는 무엇입니까? 취소 확인은 실제로 말해야합니다 - "당신은 끝까지 좌석을 유지 기간"은 추상에 재흡입, "당신은 14 3 월까지 좌석을 유지" reassurance 누군가가 행동 할 수 있습니다.
· kamo-internal
청구서가 그들을 필요로 할 때 사람들에게 말하고 지불을 중지하십시오
결제를 할 때 홈 페이지의 배너가 있습니다. 실패, 청구 페이지로 연결. 이제 실패한 지불까지 더 이상 열리지 않는 앱만큼만 보여주었습니다. unpaid 송장보다는 깨진 소프트웨어로 읽습니다. 만에 그들이 행동 할 수있는 청구서 : 자신의 좌석, 그들은 관리 그룹. 그것은 렌더링 아무것도하지 않을 때. 취소는 이제 사람이 지불 할 수있는 곳을 볼 수 있습니다 : "자동 캔 자신의 좌석에 지불"작동, 도움 텍스트와 함께 그들은 일반적으로 말하는 해당 이용 후기에 달린 코멘트가 없습니다. 더 보기 확인 이름 날짜, 그 버튼을 누르면 두려움 때문에 접근은 즉각 멈춥니다. "Let self-payers는 자신의 계획을 선택" 스위치가 사라집니다. 이 플랜은 조직과 그 안에 지불하는 모든 사람 — 개별적으로 또는 그룹 — 같은 플랜 구입. 그룹 패널은 이제 조직의 계획은 오히려 픽업 서비스.
· BillingService
조직 당 한 계획, 25 좌석 기업 천장, 그리고 지불하는 방법
계획은 이제 조직 수준 결정이며 다른 것은 무시 할 수 없습니다. 셀프 페이너 또는 그룹 관리자가 친절과 같은 자신의 읽기를 선택 정확한 버그: **************** "이 org를 사용 OR-ing에 의해이 응용 프로그램을 가지고 모든 라이브 구독 대상 org, 그래서 하나 1개의 좌석에 사람 더 높은 계획은 계획의 신청을 위해 전환했습니다 전체 조직. 조직의 계획에 모든 급여를 꼿는 것은 또는 무해 - 모든 이름과 동일한 계획을 구독하므로 답변을 이길 수 있습니다. 같은. OrgPlanService는 동일한 구독 플랜 및 빌링 콘솔 호출 "당신의 계획",그래서 규칙과 화면은 동의 할 수 없습니다. 기업은 25 석 이상 요구, 조직과 각을 걸쳐 계산 청구 그룹. per-payer의 계산은 그룹으로 나뉩니다. fifty 좌석을 한 번에 구입하십시오. 편집은 자체 구독을 제외한다. 수축은 오래된 새로운 크기에 대하여 측정됩니다. GET /self/alerts는 홈 페이지 배너를 구동한다. 자주 묻는 질문 이 제품의 최악의 버전입니다 - 앱 스톱 오프닝 및 아무도 왜 말하지, 또는 그 사람의 독서는 그것을 고칠 수 있는 사람입니다. 청구서 만 제기 회원은 책임이 있습니다. 자신의 좌석과 그룹은 관리합니다. 다른 사람 조직의 카드는 잡음을 지불 할 수 없을 때 실패하고, 소음은 배너가 읽는 방법. POST /self/seat/cancel는 좌석 누군가에 자동적인 지불을 샀습니다 한국어 항상 기간 끝에: 그들은 현재 기간을 위해 지불하고, 취소는 즉시 그 접근을 취하고 아무것도 환불하는 동안, 이후 그 경로는 proration를 위해 줄무늬를 요구합니다. 삭제 된 동안 발견 된 두 가지 버그 : - COMP와 TRIAL에 대한 침묵의 no-op이었다. 전체 몸은 뒤에 앉아 stripeSubscriptionId null check, 그래서 계산 또는 평가 구독 반환 200 연속으로 여전히 ACTIVE - 콜러는 변경되지 않을 때 일했습니다. 그것은 지금 거절하고 왜 말한다. - 즉각적인=true는 위험한 남아 있고 deliberately 드러내지 않습니다: 그것은 놓습니다 CANCELED는 fallbackToFree를 호출합니다. 이는 seatCount 1로 ACTIVE / FREE를 설정하므로 25석의 org는 1명의 근무 사람을 지키고 24의 그들의 좌석을 위한 커트를 말할 것입니다 결코 일어나지 않는 좌석 계정 이유. entitlement.fail-open은 여기서 SecurityService와 일치하도록 설정되어 있습니다. /api/security/features는 앱 및 기능 화면이 읽는 것입니다. 두 서비스 동일한 제목 질문에 대답은 다르게 응답보다 나쁘다. 검증된 안전: 모든 6개의 활동 계획은 모든 21의 서비스를 위한 명시적인 줄을 나릅니다 유형, 그래서 이전에 부여되지 않습니다.
· SecurityService
권한에서 해결된 역할을 가진 승인 층 릴레이
ROLE IS DECIDED HERE, 콜러의 권리와 그들의 관계에서 주제 -- 요청 몸에서 절대. 자신의 역할을 할 수있는 신체 지불해야 할 사람이 주장 할 수 있습니다. 선구자: PAYROLL (모든 국가에서 가장, 편집), 다음 MANAGER, 다음 EMPLOYEE 1개의 자신의 기록을 위해. 제목의 스냅샷 관리자가 자신의 것에 계산 -- 그들의 자신의 보고를 찬성하는 선 매니저는 정규적인 케이스이고 org-wide가 필요합니다. 리뷰가 있는 다른 모든 분들을 위한 권리가 있습니다. isManagerOf는 CLOSED가 실패합니다. 신뢰할 수있는보고 라인은 권한이 없습니다.
· kamo-shared-library
APPROVE TIMECARD ADJUSTMENTS (197) 및 FINALIZE PAY PERIODS (198)
의무의 별거는 표현할 수 있습니다: 누구든지 timecard를 찬성하지 않습니다 자동 누가 그것을 통해 지불 기간을 닫을 수 있습니다. MANAGE 팀 (183) 모듈 게이트를 유지하고 deliberately하지 않습니다. 예상은 여전히 맞지 않습니다 -- 그것은 지속적인 고용 사실입니다. 견적 요청 TERMINATED 회원으로부터 4개의 배송된 행동과 멸종을 통해 누출 HR이 최종 timecard를 생성해야 할 때 정확히. 새로운 RIGHT SEEDS의 결정적인 주장: 그것은 EXISTING 보조금을 운반 앞으로, 이 문은 기능 아무도 없었다. 올바른 요구 사항 추가 SecurityService 재시작 -- KamoInitializer 패스 없음, DDL 없음. Ids는 id가 어떤 member rights applied 상점이기 때문에 시험에 의해 핀으로 꼿습니다.
· kamo-shared-library
승인 계층 상태 기계
직원 제출 -> 관리자 승인 -> 급여 닫힘, 소유자의 결정 당. 4개의 규칙은 순수한 전이 테이블에서 시행하고 25의 시험에 의해 핀으로 꼿습니다: 1. 직원이 제출 될 때까지 관리자 CANNOT 승인. 제출은 직원의 자신의 assertion 그 시간은 그들의 및 완료; 그것을 approves 없이 approving 아무 누구든지 attested. 2. 관리자 승인은 더 많은 편집에서 직원을 차단합니다. 3. 관리자 MAY 대신 행동 -- 제출 또는 승인 -- 그리고 그 유일한 sanctioned 노선 과거 규칙 1. 그것은 쓴 이유를 요구하고, 행 클릭한 관리자와 직원 모두 기록합니다. 4. Payroll는 잠그기를 포함하여 ANY 국가에서, 항상 이유로 편집할지도 모릅니다. 닫은 후에 개정은 일상적이고 법적으로 요구됩니다; 그들을 위조 그냥 감사의 흔적을 편집합니다. 의무의 분리는 전환 테이블에 살고, 역할 naming: nobody 자신의 타이머를 승인하고 관리자는 누군가의 직원입니다. PAYROLL LOCKED에서 Cascades를 제거하지 않기 때문에 모든 방법을 SUBMITTED에 잠금 해당 이용 후기에 달린 코멘트가 없습니다. 승인은 DATE RANGE에 도달하므로 중간 기간 승인은 나중에 살아 있습니다. 침묵적으로 덮음 대신 범위 밖에서 편집하십시오.
· kamo-internal
회원 Timecard 탭 및 HRS Timecards 설정 탭
회원 탭은 SELF-SERVICE ONLY이며 정체성에 문질러 정확히 같은 법적 책임: 그것의 endpoints는 아무 일원 id를 전혀 가지고 갑니다, 그래서 구조상으로 입니다 다른 사람의 시간을 보여주는 것. checkRight는 여기에서 사용할 수 없습니다 -- 그것은 신 모드의 모든 것에 대한 진실을 반환, 페이지의 자신의 canViewOtherMemberAccount ORs 관련 권리 ****** ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** HR는 특정한 사람의 timecard에 도달 /hr/attendance의 다른 표면은 HR 배우에 기인합니다. 계획 청구 전에 배치하여 왼쪽 탭 그룹에 머물 -- 후에 아무것도 탭의 정렬Right ml:'auto'를 상속합니다. HRS 페이지는 ComingSoonTab 옆에 첫 번째 실제 탭을 얻습니다. SETTINGS MENU는 적용 시험이 두 방향으로 요구합니다. 두 탭 패드 모든 반환 경로에 스스로; 설정보기, TabPanel 및 모션 div 모두 공급 제로.
· kamo-internal
/hr/attendance roster와 NavTop 시계 통제
HrTabPlaceholder 몸을 대체합니다. 경로, HR TABS 항목, MANAGE TIMECARDS 문과 탭 i18n 열쇠는 이미 존재했습니다; 여기 아무 것도 등록하지 않습니다. 로스터 시간은 모든 읽기에 immutable 펀치 로그에서 파생 된 서버 측입니다. 오히려 실행 합계로 유지, 그래서 정확한 펀치는 즉시 보여줍니다 버그는 합성 대신 한 번 잘못된 번호를 생성합니다. 시계 제어는 NAV REGISTRY가 아닌 법률 및 규정 준수 옆에 고정 크롬입니다. 항목: 레지스트리는 2개의 고정 통제 사이 위치를 표현할 수 없습니다, 그것의 배지키는 죽은 코드이며, 모든 레지스트리 항목은 드래그 앤 unpinnable -- 준수 시계는 누군가가 스스로 숨길 수 없다는 것입니다. 그것은 PERSISTED 등록에 게이트, 절대 checkRight, 이는 true를 반환 신 모드의 밑에 각 권리는 모든 org에 있는 시계를 통신수 보여줄 것입니다 자주 묻는 질문 timecardControlApplies는 통제에 의해 공유되고 그것의 polling 이렇게 둘 다 함께 조용히 이동 -- 그 predicate drift의 두 사본, 및 실패 모드는 영원히 실행되는 숨겨진 버튼. 시계 상태는 FOURTH 독립적인 신호입니다: 존재 (60s heartbeat, 300s TTL), and not available status, 이는 자동 설정 로그 아웃 및 게이트에 지도와 지원 여정. 60 층의 지금에 대한 설문 조사. MediaService와 STOMP 릴레이 토지 변화; 핵심 NATS는 언스트림 및 손실 그래서 REST 씨앗은 필수입니다.
· kamo-shared-library
Punch repository에 데이터베이스 시간 액세스
모든 펀치는 즉시 DB에서 제공, JVM: pods 재시작 및 노드 시계 skew, 과 wage 기록 그의 주문은 어떤 pod 대답은에 달려 있습니다 이름 * SQL 표준 CAST, 때문에 :: 캐스트는 조용히 mangled -- Hibernate reads ':'라는 매개 변수 접두사로 지금 전환():timestamp로 :timestamp.
· kamo-internal
/api/security/timecards를 위한 BFF 노선
TimecardService는 진입없이 ClusterIP입니다. 기능 404s 브라우저에서 모든 서비스는 건강하고 모든 빌드는 녹색 -- 이미이 플랫폼에 두 번 일어난 정확한 실패. 여기에서 허가 없음, deliberately: 이 층은 수송이고, 반 검사 통제되는 믿음을 초대합니다. forwardToApi는 쿼리 문자열을 소유합니다. A 204는 .json()를 통과하는 것보다 204로 반환됩니다.
· SecurityService
TimecardService에 보안 서비스 릴레이
승인 경계. TimecardService는 데이터와 엔진을 보유하지만, 세션; 이것은 세션을 보유하고 누가 무엇을 할 수 있는지 결정, 다음 릴레이. 더 보기 엔진은 따라서 여기에서 통과하지 않고 도달 할 수 없습니다. SecurityService는 모든 리퀘스트().permitAll()를 실행합니다. 그래서 모든 방법은 비-null을 거부하는 가드와 함께 열립니다. 셀프 서비스 endpoints는 모든 회원 ID를 가지고 -- 회원은 세션에서 온다, 만들기 그들은 다른 사람에 행동의 구조적으로 incapable. HR 엔드포인트 게이트 MANAGE TIMECARDS (183). 예상은 우측이 아닌 지속된 고용 행에서 답변됩니다. 신 모드 연산자는 모든 org에 등록되지 않습니다 그들은 봐. SUDO MEMBER ID를 통해 수행됩니다. 대상 회원으로 세션, 그래서 impersonator의 펀치없이 직원의 소유로 기록. timecard.service.url은 configmap에서 EXPLICITLY를 설정한다. 계정 관리 설정하고 생산은 Java의 리터럴에 따라 달라집니다. 이름은 config에서 grep에 아무것도와 실행 시간에 휴식 할 것입니다.
· kamo-shared-library
Workday 버킷, 파이프라인의 2단계
해결된 간격은 사업 날짜 초, 할당기를 위해 준비되어 있습니다. 간격은 SPLIT에서 매일 경계를 횡단합니다: 22:00-06:00 교대 하룻밤의 평일은 다음 날에는 2 시간입니다. 관련 기사 시작 날짜에 전체적인 경은 매일 과시와 일곱 일 규칙을 만듭니다 모든 밤 노동자에 대 한 잘못. 이것은 사업일로부터의 DIFFERENT attribution입니다. 펀치. 펀치는 한 날짜를 운반 -- 식사 / 휴식 평가, 예외 queue와 직원은 그들의 이동으로 볼 -- 과시 계산 필요 근무일과 근무일 사이에 승인되는 시간은 실제로 떨어졌다. 둘 다 정확하고, 둘 다 필요하고, 그(것)들을 팽창시키는 것은 함정입니다. WORKWEEK 경계를 넘어 두 주에 기여 overtime 합계; 그들 중 하나에서 전부 계산은 둘 다를 위해 잘못됩니다. 몇 초 동안 축적. DST 전환 모두 테스트, 50 시간 경간 및 펀치는 캘리포니아 주에 할당을 통해 종료됩니다.
· InitializerService
KI 등록 및 스키마 마이그레이션
테이블은 ddl-auto에서 온다; 이 러너는 Hibernate가 할 수없는 것을 공급합니다 -- 1개의 열린 1 차적인 할당 및 1개의 열리는 급여 비율에 부분적인 유일한 색인 window, 그리고 REVOKE 는 데이터베이스 절반의 부트 전용입니다. @Order(0) 그래서 나중에 런너의 JPA SELECT 전에 착륙하여 40001 재량으로 Yugabyte는 온라인 스키마 변화와 ddl-auto에서 발급된 성명을 합니다. 아직도 settling은 경주를 잃습니다. 등록 com.kamo.z.shared.hr.timecard @EnableJpaRepositories -- 그 목록 @EntityScan은 와일드 카드이며 패키지를 omitting하는 경우 aborts the context so no runner run while build still report success.
· kamo-shared-library
일주 및 근무일 경계
평일은 FLSA 과시 단위입니다 -- 고정, 정기적으로 168 시간 반복 기간 -- 그리고 지불 기간이 아닙니다. Biweekly 기간은 정확하게 2를 붙듭니다 workweeks; 반 월간 또는 월별 기간은 항상 fractional 하나를 보유하고 있으므로 기간에 과잉 가동은 둘 다 underpays와 overpays를 합계하고 입니다 한 번의 기간이 수출됩니다. 일상 경계는 별도로 수행되며 반드시 자정이 아닙니다. · 06:00 시작은 밤 직원을위한 표준 수정입니다 : 22:00-06:00 이동을 유지 2개의 반일 맞은편에 그것을 나누는 대신에 1 작업 일, 어느 것이 만드는 매일 과시와 일곱째-consecutive-day 규칙은 그들 모두를 위해 일합니다. 경계는 ZonedDateTime을 통해 해결 된 벽 시간입니다. 따라서 06:00 숙박 06:00 에 23- 또는 25 시간 일. 핀을 모두 전환, 그리고 핀을 테스트 즉시 로스 앤젤레스와 콜카타에서 다른 비즈니스 날짜입니다 -- 왜 레코드의 영역은 나중에 파생 된 것보다 펀치에 지속됩니다.
· kamo-shared-library
간격 해결책, 계산 파이프라인의 단계 1
펀치가 해결되었습니다. , 총, 값 유형 이상 entities 그래서 각 단계는 persistence 컨텍스트 없이 정착물 테스트할 수 있습니다. 내구시간은 내구시간에 옵니다. 그것은 전체 DST 이야기와 테스트 핀: 22:00-06:00 이동은 SEVEN 봄-앞과 NINE의 시간. 벽 시계를 빼기 모두를위한 8을 계산 -- 하나 납입, 1 상환, 그리고 일상에서 9 시간의 밤을 조용히 잃어버린 관할권. 의심의 여지없이 해결되지 않는 한. 분류되지 않음 Shift는 EXCEPTION입니다. accrues absurd 시간, 자동 폐쇄를 열어 예정된 엔드 under-reports, 그리고 고정 캡은 숫자 아무도 목격. 0로 끝나지 않아야합니다. - 일하는 날에는 아무것도 지불합니다. 식사는 펀치, 자동 공제하지 않습니다. TRANSFER는 1개의 경간을 닫고 열립니다 교대 없이, 그래서 식사 타이밍과 교대 eligibility 중앙시프트 이동을 계속하십시오.
· kamo-shared-library
관할 구역 presets를 가진 비 pyramiding overtime allocator
규칙은 이미 이 라이브러리에서 사용 된 RequirementRule 모양의 DATA입니다. code branch, 그래서 캘리포니아는 rewrite 대신 구성 행이다. 할당 순서는 짐 방위입니다: 매일 규칙 가장 높 돌격 첫번째 (13 시간 CA의 날은 1.5x에서 2x와 4h에 1h, 1.5x에서 5h하지), 그 일곱 번째 연속 일, 그 다음 매일 프리미엄에 이미 시간의 주간 넷. 마지막 단계는 피라미드를 방지하고, 하나의 네이티브 엔진입니다. 이름 * 캘리포니아의 5 시간 일 10 프리미엄 시간, 20 -- 네이티브 엔진은 10 시간 동안 매일과 주간을 지불하고, EVERY 개별 규칙 테스트는 동안 통과합니다. allocator는 또한 시간 보존을 주장 잘못된 paycheck를 반환하는 것보다 오히려 방법. 미리 설정: FLSA 연방, 캘리포니아, 알래스카, 네바다, 콜로라도.
· kamo-internal
Org timezone을 브라우저로 전달하십시오
클라이언트 조직 모델은 timezone 필드가 없었다, useFormatters 및 next-intl timeZone 및 timezoneService의 백엔드 호출 404'd -- 그래서 브라우저의 영역에서 렌더링 된 모든 타임스탬프, SSR의 서버. subset 보다는 오히려 모든 27 TimezoneType 값: 부분적인 지도는 입니다 unmapped org가 브라우저 영역으로 떨어지는 조용한 반 거울 신호 없음. Europe/London에 GMT 맵, UTC가 아닌 -- 그것은 BST를 관찰, 그래서 conflating 1 년 반 동안 1 시간으로 하루의 시간을 이동. org 영역은 DISPLAY 가을입니다. 생산 인구 통계는 모든 13 orgs를 발견했습니다. PACIFIC/EASTERN/ARIZONA/UTC/를 경간하는 동안 비접촉된 PACIFIC 과태 INDIA, 그래서 기록의 timecard 영역은 대신 작업 사이트에서 온다.
· SecurityService
*** * ***
timezoneService.ts 는 이 endpoint 를 썼고 존재했습니다. Java 서비스 없음; 클라이언트는 404을 삼았고 UTC로 해결되었습니다. 이름 * useFormatters와 next-intl은 timeZone 없이 구성됩니다. timestamp는 브라우저의 영역에서 렌더링합니다. - 그리고 *** fallback은 문자열입니다. 'GMT', 유럽/런던이며 BST를 준수합니다. Identity는 세션에서만 제공됩니다. SecurityService는 모든 것을 허용합니다. hand-rolled per-handler auth, 그래서 요청에서 정체성을 읽는 핸들러 아무 통제도 없습니다. @EnableJpaRepositories의 com.kamo.z.shared.hr.timecard에 등록하십시오. 그 목록은 @ComponentScan/@EntityScan은 와일드카드이며, 패키지는 CrashLooping의 두 가지 우선 원인입니다.
· kamo-shared-library
WorkSite, 관할권 앵커
Named WorkSite, workLocation: TeamMember.workLocation은 기존의 office/remote enum 및 그 이름에 의해 두 번째 기호는 모든 grep에 충돌합니다. ZoneId는 TimezoneType보다는 무료 IANA 문자열입니다. 즉, 27 값은 다중 상태 고용주를 커버 할 수 없으며 NULL이 아닙니다. 믿을만한 영역 층 -- 생산에 있는 각 org는 untouched에 둡니다 PACIFIC 과태.
· kamo-shared-library
고용 및 효과적인 할당 개정
Punches는 회원이 아닌 ASSIGNMENT를 참조합니다. 그것은 무엇 만드는 동시 위치, 29 CFR 778.115 가중치 정규적인 비율, 다중 사이트 관할 및 작업은 모두에서 표현할 수 있습니다. managerMemberId는 TeamMember.manager에서 개정 시간으로 스냅샷 재편할 수 없습니다. roster finder는 member rights applied에 내장되지 않습니다. 그 쿼리 TeamMember-typed이므로 omits Grant-all org 소유자에게 아무것도 반환합니다. TERMINATED 회원은 적용된 권리가 구부렸습니다 -- 정확하게 사람 마지막 timecard HR은 여전히 생산하고 있습니다.
· kamo-shared-library
유효성 검사, 부과금 지급율
이 단체 전에는 직원 보상이 없습니다. 그것은 요구됩니다: 가동불능시간은 FLSA 일정한 비율에 대하여, CA 요구합니다 임금 진술에 대한 비율, 그리고 비율이 없는 수출은 payroll를 줍니다 아무것도 소비. 새로운 ROW입니다. 수출한 기간 안에 효과적인 비율은 생성합니다 retro 조정은, 결코 침묵하는 rewrite. /api/security/members/{id}를 통해 절대 노출되지 않음 -- 그 엔드포인트는 오른쪽에 체크하지 않습니다. 모두, 그래서 회사에 모든 급여를 누출 할 것입니다.
· kamo-shared-library
Append-only 펀치 로그 및 감사 이벤트
모두 NARROW 저장소 인터페이스에 의해 제공, JpaRepository: deleteAllInBatch 그리고 대량 JPQL 우회 법인 콜백, 그래서 인터페이스 모양은 무엇이 만드는지 append-only real 오히려 고문보다. Instant + IANA Zone + 비즈니스 날짜는 모두 지속되므로 지속 시간은 계산됩니다. 즉시와 DST는 무료로 -- 22:00-06:00 교대는 7 시간입니다 봄-앞과 가을-뒤에 9번을 가로지르며, 벽-clock subtraction 둘 다를 위해 8를 computes. updatable=false는 언 펀치 란에 deliberately 사용되지 않습니다: Hibernate 실패하지 않고도 UPDATE에서 그들을 침묵시킬 것입니다.
· kamo-shared-library
Timezone-of-record 해결자
권한 작업 사이트 -> 회원 -> org -> UTC. 업무 사이트가 승리하기 때문에 wage-and-hour 규칙은 작업이 PERFORMED 어디에 있는지 따릅니다. 이 세션의 생산 인구 조사는 터치되지 않은 PACIFIC에 13 orgs를 발견했습니다. 기본적으로 63명의 회원 중 38명은 시간대가 전혀 없습니다. PACIFIC, EASTERN, ARIZONA, UTC 및 INDIA -- 13.5 시간 스프레드. 한국어 기본값은 왜 WorkSite.zoneId 인 진실의 사용 가능한 소스가 아닙니다. NULL이 아니며 무게를 운반하지 않습니다. 아래 UTC로 돌아가십시오. *** 'GMT' 문자열, 유럽 / 론도 BST를 관찰합니다. unparseable 사이트 영역은 던지는 것보다 떨어졌다 : 지역을 해결하는 것은 기록 시간을 실제로 일할 수 없습니다.
· kamo-shared-library
공유 WORM refusal 감시
@Column (updatable=false)는 불능을 시행하지 않습니다 -- 조용히 Hibernate omits the column from UPDATE and the stale write looks 같은 그것 성공. 유일한 작업 가드는 @PreUpdate 그 던져.
· kamo-shared-library
도메인 enums 및 point-in-time version resolver
Enums는 전화 사이트에서 @Enumerated (STRING)입니다. ORDINAL은 수치를 방출합니다. SchemaCleanupRunner의 인리스트 스윕을 포함하는 범위 CHECK 모든 새로운 값에 손으로 넓혀야 합니다. 해결자는 즉시, 절대로 CONTAINS 창에 의해 해결 최신 검색 및 후보자 설정에서 닫힌 창 유지 -- supersession 닫기 모든 창 하지만 현재 하나, 그래서 open-rows-only 쿼리에 대 한 아무것도 반환 어떤 역사적인 순간, retro 지불 및 감사 개조를 끊기. 오버랩 오히려 추측보다.
· kamo-internal
좌석을 지불 한 회원을 표시하고, 두 번째를 제공 중지
적용 엔드포인트는 번역 키와 구성 요소가 포함되지 않습니다. 질문에 대답 - 내 좌석을 지불하는 사람은 여전히 묻지 않았습니다. SeatCoveragePanel은 그것을 요구하고, 대답은 그 옆에 각자 급여 패널을 먹습니다: 좌석이 이미 조직 또는 그룹에 의해 덮여있는 누군가는 아니 더 이상 자신의 카드에 다른 것을 구입 할 수있는 기회를 제공합니다. 그 제안은 없었다 모든 것에 대한 기존 적용의 지식, 그래서 모든 사람에게 보여졌다. 그룹 플랜도 취소할 수 있습니다. 계획 deletable - 여전히 라이브 구독에 포인트를 제거 소지품은 소지품이 아닙니다. 누군가를 추가하는 조직은 이미 많은 돈을 지불합니다. 조용히 아무것도하지 않습니다, 그래서 버튼을 설명합니다.
· BillingService
그룹 플랜 취소 및 1인용 더블 결제
마지막 배송의 세 가지 간격 : 계획이있는 그룹은 제거 할 수 없습니다. delete()는 살아있는 동안 거부합니다. 구독은 존재하지 않습니다., 그룹 행이 점유하는 것은 Stripe 구독 — 하지만 취소 할 방법이 없었다, 그래서 the safeguard was 죽은 끝. cancelPlan()은 좌석을 먼저 공개하므로 roster는 갈 수 없습니다. 사람들은 더 이상 존재하지 않는 좌석을 보유합니다. 누군가를 추가하는 조직은 이미 좌석을 구입하지 않는 한 이제 거부 takeOverFromOrg 말한다 그렇지 않으면. 두 번 충전 할 수있는 두 번째 방법입니다. 한 사람과 아무것도 잡았다 : SubscriptionMember의 고유는 per-subscription 과 accountLicense 선언 아니 에 모든. 다른 사람 그룹에 대한 조직의 청구는 관리자가 수행하는 실제 일입니다. let — deliberately 오히려 사고로. BillingGroupScopeInterceptor는 모든 /api/billing/groups/{uuid}/** 요청을 바인딩합니다. 콜러의 조직에. 핸들러는 이미 검사하고, 이것은 아닙니다 그들을 대체; 그 체크가 per-handler이고 이제 그룹이 있기 때문에 존재한다. 돈을 소비하는 하위 자원. 다음 루트 추가하지 않는 아무것도 상속 위의 무언가는 규칙을 적용합니다. 핸들러보다 좁아집니다. 이 조직이 행동 할 수없는 분은 두 가지가 할 수 없습니다. 답을 해소한다. 알 수없는 그룹 ID는 이렇게 통과합니다. 핸들러는 "찾지 못했습니다"라고 id는 어딘가에 존재합니다.

당신의 우주는 기다리고 있습니다.
몇 분 안에 무료로 시작하세요. 준비가 되면 언제든지 제품을 추가할 수 있습니다.
영원히 무료 - 신용 카드 필요 없음