변경 로그
무슨 일이야?
플랫폼에 대한 모든 개선 사항, 그것이 선적.
· kamo-shared-library
선, 주, 납품업자, 표시 떨어져 및 시계는 일에 씁니다
SW6b 작업 3, 라이브러리 절반. ServiceJobService에 대한 8 가지 새로운 운영, 플러스 그(것)들을 위한 철사 기록 및 3는 세부사항 페이지 필요를 읽습니다. 서버가 소유하고 클라이언트가 보낼 수있는 3 가지 : - 총. labourTotal, materialTotal 및 합계는에서 recomputed 입니다 모든 선 쓰기에 직업의 선, 그리고 선의 자신의 합계는 양 x입니다 단위Amount. LineInput에는 총 회원과 JobInput이 없습니다. 작업의 세. SW6a가 출하했을 때 JobInput에 있었습니다. 그대를 맹세하지 말라 그대를 두 번 떠나라 규칙을 지나서 문. ****************는 무엇입니까? 그 문의 먼 측은 같이 보입니다 -- 그것은 요청을 빼고 그 라인의 총을 추가, 그래서 클라이언트는 둘 다 그림을 전송 일치하지 않는, 실패 QuoteTotals의 javadoc은 이름에 존재한다. - 사인오프 타임스탬프. signoff 우표 signoff 플래그가 true이고 거짓이 될 때 그것을 명확하게, 그래서 쌍은 결코 동의 할 수 없다. 로그인 boolean 및 무료 텍스트와 시간을 운반합니다. - 시계. ClockVisit 우표 realStart/actualEnd 및 방문을 이동 그(것)들을 가진 상태 -- ON SITE in, COMPLETED out. 시계에서 is a IllegalStateException naming the visit's state (409 컨트롤러에서): 처음에 대한 끝은 totalLabourMinutes에 0에 기여합니다. symptom은 아무것도 말하지 않고 하루 짧은 시간 시트가 될 것입니다. 두 번째 시계에서 너무 거부; 두 번째 스텐트는 두 번째 방문이다. 모든 아이들은 그 직업 uid와 org로 해결됩니다. 쿼리 -- findByUidForJob 라인에, 공급 업체 및 방문 저장소. 관련 제품 by uid and org alone will make DELETE /{jobUid}/lines/{lineUid} 어떤 라인에 도달 완전히 올바른 URL을 통해 org에서. JobView는 라인/노트/벤더를 얻습니다: 목록 투상에서 null (부하되지 않음), 항상 세부적인 프로젝션 (empty 수단 없음)에 채워. 행당 적재 네 테이블을 읽을 수 있습니다. Mutation-tested: 이 파일의 9개의 mutations, 각 생성은 구별합니다 실패 -- 저장소의 상단에 줄 합계를 추가 그림, 시계 밖으로 감시를 떨어지고, 방문 상태를 이동하지 않는, 각인하지 않기 위하여 로그인하지 않고, 그것을 지우지 않고, uid에 의해 세 명의 어린이를 해결 혼자.
· VOIPService
KamoPBX 확장, 사용자 및 장치 관리 구현
공급자는 extensionManagement, userManagement 및 deviceManagement를 광고했습니다 진정한 그들을 구현하는 동안, 그래서 UI는 버튼이있을 것입니다 501을 던졌습니다. 역량은 이제 행동과 일치합니다. KamoPBX의 확장은 3개의 문서입니다 — 사용자, 그 사용자가 소유한 장치, 사용자의 숫자를 매핑하는 콜 플로우. 그 결과의 몇 가지 만들기 아무것도를 덮는 수 또는 어떤 경로, 그래서 모든 세 함께 생성하고 부분적인 실패는 어떻게 만들어졌는지 다시 구합니다. 확장을 삭제하면 콜 플로만 제거됩니다. 회원은 몇 가지를 소유 할 수 있습니다. device, and deleting someone's registered handset because the number was remove. 나판된 문서보다 훨씬 더 악화 될 것입니다. 253 테스트 패스, 5 새로운 커버 생성, 롤백, 검증, 삭제 범위 및 정직한 기능.
· kamo-shared-library
작업 라인, 노트 및 공급 업체 그래서 작업 주문 탭 persist
Labour와 부품은 ServiceJobLine 행이 아닌 작업에 ServiceLineItem 행, orderLineItem.order가 옵션 = false: a ServiceLineItem은 주문 없이 존재할 수 없으며, 기술 기록 무엇이든의 앞에 노동은 청구됩니다. 그 부모를 nullable 만들 것 purchaseLineItem은 주문 밖에 존재하므로 매핑 테스트 invariant 대신 핀. ServiceJobNote는 저자 및 부록 만 - 업데이트되지 않음At, createdAt updatable = @PrePersist에서 false와 우표. ServiceJobVendor는 Vendors 탭이 항상 표시됩니다. 역할은 무료 텍스트를 유지 벤더 유형 구급차가 스키마에 동결하기 때문에. 모든 저장소는 직업의 EXPLICIT를 통해 org에 도달합니다. implicit l.job.organization.id는 INNER에 가입하고 조용히 협회가 null인 행을 삭제합니다. ServiceJobLineMapping 시험 asserts 그것을 신뢰하는 것보다 모양.
· kamo-internal
실패한 임상 짐은 빈 결과로 렌더링하지 않아야 합니다
이 둘은 누구에게 통지하기 전에 발송, 그리고 감시는 2개를 더 안으로 발견했습니다 최신 패널 그 순간 그것은 ran — 환자의 다른 관행을 로드 실패 이미 "nothing receive yet"로 읽었으며 파트너를로드하지 못했습니다. 목록은 "교환 파트너가 설정되지 않음"으로 읽습니다. 누군가가 추가하기 위해 보낼 것입니다. 이미 존재하는 파트너. 그것은 왜이 빌드 가드이며 리뷰 노트가 아닙니다. 실패는 침묵 건설: 오류 없음, 로그 없음, 화면에 아무것도, 그것은 정확히 같은 보인다 건강한 빈 국가. 아무도 버그로보고 할 것입니다. 차트에서 빈 목록은 "측정 없음", "nobody overdue", "아니 알레르기"-사람들은 그것을 행동합니다. 동일한 구분은 이미 실행 서버 측에 모듈: "그들은 아무것도" versus "우리는 요청할 수 없었다", 그리고 503 오히려 교환 수송에서 빈 목록보다. 이 시행 고객. 다른 수직이 있기 때문에 임상 표면에 스코프는 대회. 오류, 로그, 재화, 반환, 재로드를 설정하는 캐치 패스 - 그래서 침묵이 우측 이유를 설명하는 한 가지를 수행, PatientCommsPanel은 다음과 같은 결과를 보여줍니다. 두 번째 배너는 독자에게 새로운 것을 말할 것입니다. npm 테스트에 Chained.
· SecurityService
시스템 구성 API를 통한 플랫폼 설정
toDto는 명시적인 수당이며 updateConfig는 유형의 신체를 가지고 있으므로 7 new SYSTEM CONFIGURATION 열은 보이지 않고 설정할 수 있습니다. 플랫폼 설정 카드는 빈 및 저장을 렌더링 할 것입니다 아무것도. 관리자 암호는 결코 반환되지 않습니다. 그것은 뒤에 주인 credential입니다 모든 임계 값, 그래서 GET은 설정할 때 sendinel "***"을 수율, 그리고 전송 "***"백은 계속 - 그렇지 않으면 양식에 다른 필드를 저장하면 리터럴 문자열을 가진 credential을 겹쳐 씁니다. MANAGE VOIP SMS가 기존의 VoIP 필드에 따라 조정되므로 MANAGE DOCUMENT AI 할 수 없습니다.
· VOIPService
KamoPBX 자격 증명을 해독하십시오; refusal 경로를 시험하십시오
마스터 자격은 플랫폼 설정 UI에 의해 ciphertext로 저장되므로 사용하기 전에 해독되어야 합니다 — 암호로 API에 ciphertext를 잡는 것은 나쁜 신념으로 존재 하 고 누가 잘못 된 방법을 디버깅. 두 가지 새로운 테스트는 이전에 익지않는 쿠버네티스를 표면화하는 refusal 경로를 다룹니다. org 관리자에 DNS 오류 : 마스터 계정 ID 및 관리자 없음 자격. 둘 다 assert the message name the settings page. 248 테스트 패스.
· KlusterServices
인바운드 인사를 KamoCRM-Main-Intro-3로 교환하십시오
세 번째 소요, 40s (60에서 아래로). 이전 2와 함께 업로드 그들보다, 그래서 하나에 회전 한 줄의 변화입니다 KAMO ATTENDANT INTRO plus 다이얼 플랜 리로드 - 재판매가 없습니다. 48 kHz 스테레오 소스는 8 kHz 모노 Asterisk에 변환됩니다. 인증 및 인증 라이브: 체크섬은 로컬 파일과 일치, Asterisk는 319914 바이트로 디코딩 u-law (39.99s에서 8000 B / s), 그리고 CDR 쇼 BackGround 관례/kamocrm-main-intro-3.
· InitializerService
스토리지 및 플랫 엔터프라이즈 풀
무료 좌석 당 2 GB, 시동기에 4, 사업에 5. 기업은 사기를 막습니다 전체 좌석 - 조직을위한 평면 150 GB - "N GB 당 좌석"는 표현할 수 없습니다, 그래서 행은 prose override를 사고 표면 이제 숫자를 선호합니다. 특징 단위는 GB/seat입니다. 청구 단위는 전 좌석입니다; headcounts 체재 사용자, 단위가 아닌 사람들.
· kamo-internal
플랫폼 설정 카드, FreePBX 사본을 보여주는 중지
KamoPBX 전화 서버 페이지의 세 가지 문제, 모든 광산 : - PHONE SERVER ID 카드는 ungated, 그래서 모든 공급자 — KamoPBX, RingCentral 그리고 팀 포함 — kamo-asterisk-support의 id를 붙여 넣기 위해 말했다 FreePBX 호스트에 설정. FreePBX-only이며 이제는 단지 렌더링합니다. - KamoPBX는 모든 공급자 특정한 내용이 없었습니다. org는 이름, 번호, 활성 toggle 및 그 FreePBX 명령. 그것은 이제 카드가 Kamo를 말하는 실행, 그것의 SIP 주소, 규정 상태, 그리고 다음을 수행. - 어디 KamoPBX에 대한 플랫폼 구성이 없습니다. 공급자 unusable: 아무것도 주인 계정 또는 credential를 놓을 수 있었습니다. A 카드 에 ?tab=voip-sms 지금 그들과 warns 동안 unconfigured. 사전 키가 먼저 밀어 (messages/는 여기에 gitignored).
· VOIPService
데이터베이스에서 KamoPBX 플랫폼 설정 읽기
KamoPBX 전화 서버 추가는 익지않는 쿠버네티스 DNS 오류로 실패 — 'PUT의 I / O 오류 ... **************** — 읽거나 행동 할 수없는 조직 관리자. 두 가지 원인, 모두 고정 : - 프로듀서는 모든 플랫폼 구성 없이 호출을 시도했습니다. · 이제 첫 번째를 확인하고 실행 가능한 메시지로 거부 페이지, 대신 DNS 오류로 실패. - 설정은 @Value-only이므로 KamoPBX를 구성하는 방법이 없습니다. 빨간. 그들은 이제 system CONFIGURATION 싱글턴에서 왔습니다. 플랫폼 설정 UI 쓰기; @Value 기본값은 fallback을 유지하므로 서비스 여전히 이동 전에 부츠를 실행.
· kamo-shared-library
시스템의 KamoPBX 플랫폼 설정 CONFIGURATION
KamoPBX는 Kamo의 자체 플랫폼이므로 모든 구성은 플랫폼 전체입니다. 기본 URL, 마스터 계정 ID, 계정 이름, 관리자 자격, SIP 영역 suffix 그리고 WSS URL. 그들은 기존의 System CONFIGURATION 싱글턴에 앉아 VoIP tunables 그래서 연산자는 대신 플랫폼 설정 UI에서 설정할 수 있습니다 환경 변수를 변경하기 위해 redeploy가 필요합니다. 관리자 암호 열은 AES-256-GCM ciphertext이며 @JsonIgnore를 운반합니다. 이 행은 플랫폼 설정 UI에 직선을 직렬화하고, 그것없이 각 10ant를 위한 주된 credential는 철사에 일 것입니다.
· InitializerService
Seed KamoPBX 플랫폼 기본값
Hibernate ddl-auto는 system CONFIGURATION 열을 추가합니다. @ColumnDefault만 새로 삽입된 행에 적용되므로 기존의 싱글톤은 backfilling을 필요로 합니다. non-secret 디폴트 만 씨앗. 마스터 계정 ID 및 관리자 자격 deliberately left NULL - 프로듀서 보고서를 만드는 것 ' 아직 구성되지 않음' 및 거부, 공개 또는 서핑 대신 쿠버네티스 DNS 오류는 읽을 수 없거나 행동할 수 없습니다. 모든 진술은 NULL을 채우므로 운영자의 UI는 redeploys를 생존합니다.
· kamo-internal
Work-order grid는 실제 업무 작업을 읽습니다
이 그리드의 모든 행은 건설에 의해 죽은 링크였다. 생성MockWorkOrders minted ids String(8000 + i), 행 클릭 Pushed /commerce/service/8001, 그리고 핸들러가 @PathVariable UUID id를 선언했습니다. 그래서 id는 전환율이 실패했습니다. 어떤 핸들러 ran 및 세부 페이지는 잘못된 상태를 렌더링. 15개의 줄, 15 죽은 링크, 완성 된 화면에. 이제 두 표면은 ServiceJob를 통해 읽었습니다 *********** 프록시 수출 GET, PUT 및 PATCH — 정확히 무엇 ServiceJobController지도, 그것은 안전한 템플릿 옆에 상거래 프록시는 없습니다 : 견적 내보내기 GET/POST/PATCH/DELETE 없이 PUT, 서비스 면책 수출 GET/POST/PUT/DELETE PATCH 없이. 복사 한 다음 자신에 의해 제기 된 답변 405, 서버 로그에서 아무것도, 모든 읽기가 작동을 유지하면서. serviceJobWireContract.test.ts는 컨트롤러에 대한 동사 세트를 핀 두 방향으로 표기, 모든 JobView/VisitView/AddressView 비교 name 으로 TypeScript 회원에 기록합니다. 즉 이름 비교는 두 번째 수정입니다. posApi. WorkOrder 선언 된 서비스 이름, serviceId 및 join서비스를 전송하는 DTO에 대하여 이름, serviceOfferingUid 및 참여 세는 결코 일치하지 않습니다, 그래서 세부 사항 페이지의 자막과 "서비스" 요약 줄은 삶에 정의되지 않았습니다. 화면을 떨어 뜨리고 em dash로 떨어졌습니다. "기록 없음"으로 읽습니다. 왜 아무도 그것을 발견하지 않는 타이토보다 오히려. 489 라인의 세부 Dialog는 열 수 없습니다 : detailOpen이되었습니다. initialised false, setDetailOpen(true)는 파일에 아무 것도 나타났습니다. selectedOrder는 독립적으로 항상 null이었다. 6개의 핸들러가 그것과 아무것도 먹었습니다 다른 사람들과 갔다. 그 노트 탭은 codebase에서 단지 하나였다, 그래서 그것은이었다 첫 번째 축소 — ****** ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** 아는 곳 : - 어떤 technician 이름든지. ServiceJobApi 가 방문합니다. 할당 된MemberId 그리고 다른 아무것도, 그리고 endpoint는 이름에 회원 ID의 배치를 해결하지 — memberDirectory는 직원을 들고 자신의 노트를 검색하는 페이지입니다 이름 * 열은 오히려 사람으로 옷을 입은 ID를 보여주기 보다는 사라집니다. - "Time Attended", "Labor Hours"가 아닙니다. 서버는 totalLabourMinutes를 요약합니다. 각 방문의 실제 창 때문에 priced 노동은 주문 없이 걸린다 작업에 연결. formatLabourMinutes로 렌더링; float-hours 필드 없음 1개의 측. - 무역은 10 개의 무료 카테고리 문자열을 대체합니다. 즉, 구급차가 없었습니다. 무엇이든은 왕복 할 수 있었습니다: “Plumbing Repair”는 WorkClass.REPAIR 플러스 PLUMBING입니다. - 대량 상태는 지금 일 당 1개의 PATCH를 문제하고 부분적인 refusals를 보고합니다, 때문에 상태 기계는 각 전환을 확인합니다. 오래된 핸들러 세트 그들 모두에 국부적으로와 보고된 성공. - Labour, 부품, 시간 항목 및 공급 업체는 local useState를 유지합니다. 회사명 그들 중 하나; SW6b 그들을 구축. 사전 처음 착륙 : kamo-translation-dictionary 947e585.
· kamo-marketing
Plan card show what tier add, 아니 모든 그것 있다
모든 포함 된 기능에 나열 된 카드 - 16 무료, 30 스타터, 52 온 비즈니스, 기업에 57. 야생의 4 카드 적절 한 높이, 각 벽의 텍스트, 그리고 비교 테이블의 주변 완성 복원 사이 직접 underneath 앉아. 계획은 누적이므로 카드가 "무엇인지 이것은 저를 더 싼 것을하지 않습니다. 이제 각 카드는 시트 라인 (축하지 않는 한 그림), 그것을 구축하는 계층 말한다 에, 대부분의 6개의 differentiators에 명부는, 비교에 나머지를 보냅니다 "과 N 더 많은 기능을 통해 테이블". 52개의 선에서 8개의 사업 하락, 4개의 카드는 가까이에 옵니다, 테이블은 중복되고 시작합니다 여행 일정 기능 순서는 지금 카탈로그의 자신의 display order를 따릅니다. 분류 된 "Core"의 "AI & Intelligence"를 넣는 범주 이름으로 알파벳으로 플랫폼"은 실제로 tier를 판매하는 것을 매장했습니다. CONTRAST : 올리브 악센트에 흰색은 그라디언트의 어두운 끝에 3.78 : 1을 측정했습니다. 그리고 3.01:1 빛 끝에 - 둘 다 4.5 그 14px 준설 상표 필요, 왜 버튼과 배지를 읽는지. 모든 악센트 표면 잉크로 페이지의 자신의 배경 색상을 사용합니다 : 4.53 : 1 및 5.68 : 1, 녹색 흰색 텍스트를 구출하기 위해 진흙보다 전체 강도에 유지. Fallback 및 JSON-LD 좌석은 카탈로그와 일치하기 위해 25 / 100로 수정되었습니다. 그들은 여전히 5 / 25 같은 혼란 카드 헤드 라인이 있었다. 전체 생산 빌드로 검증 된 두 유형의 구멍 tsc를 잡은 --noEmit 하지 않았다.
· kamo-internal
환자의 역사를 잡아 그들은 참석하는 데 사용
아웃바운드 절반의 교환, 릴리스 표면 옆에 기록 탭에 — 떠나는 기록과 도착은 한 사람의 일이며, 누군가가 다른 연습에 대한 요약을 보내면 가장 가능성이 있습니다. 세 단계로 표시 된 세 단계는 표준이 무엇인지 때문에 : 요청 그들이이 사람을 알고 있는지 여부, 그들이 보유하는 것을 묻고, 한 사람의 가치. "import Everything" 버튼은 중간 결정을 숨기고 수십 년 동안 끌어올릴 것입니다. 두 번의 관행을 옮긴 환자에 중복. 일치는 결코 auto-picked: 틀린 것은 이 도표로 다른 사람의 역사를 읽습니다. 검색 및 재구성은 결코 싫어. 다른 연습의 문서는 그들의 assertion — 그것은 붙어 있고 읽을 수 있고, 아무것도 이것에 도달 차트의 문제, 약물 또는 알레르기 목록은 클리닉 레코드까지 그들이 떠난 것. 빈 상태는 이렇게 말한다, 때문에 "received" 조용히 "applied"로 읽는 것은 2019 조건이 활성화 된 방법입니다. 네트워크가 내장되지 않는 연습은 한 번 말했다, 일반적으로, 대신 항상 실패 한 버튼을 주어진 — 그리고 "이 기록은 일치하지 않습니다 환자"는 질문하는 실패 보다는 오히려 그들의 대답으로 레테르를 붙입니다. 두 사람은 보이지 않는 것: 첫번째는 임상 사실 누군가가 찾고 있기 때문에 멈추지 않을지도 모릅니다 이름 * 또한 i18n 가드와 고정에 의해 잡았다: 나는 메시지에 {partner} 값을 전달 그러한 위주자와 더불어, 가치는 먼 환자 ID 어쨌든이었습니다.
· SecurityService
TEFCA의 아웃 바운드 반 - 요청, 만 대답하지 마십시오
지금까지 다른 사람들의 쿼리에 대한 모든 것 : 발견, 문서 쿼리, 문서 검색, 일치 queue, 회계. 연습 ASKED가 될 수 있으며 ASK가 될 수 없습니다. - 요청은 클리닉 방향입니다. 실제로, 새로운 환자의 역사가 어느 누구든지 연습하기 때문에, 참석에 사용. ExchangeRequest는 전체 시간의 방향 열을 수행했습니다. 그리고 INBOUND는 그것을 썼습니다. 아웃바운드 쿼리는 필수입니다. PHI 여행 우리, 그래서 여기는 공개 ledger를 터치 - 그것을 기록 할 것 환자의 §164.528 회계에 선은 그들의 기록이 어딘가에 갔다 에 있다. Discovery는 우리의 기록에서 인구 통계를 읽습니다. 끝점 typed-in 이름을 받아들이는 것은 네트워크에 묻는 방법입니다 "당신은 누구가 라는, 다른 많은 더 나쁜 기능 "내를 흠뻑 환자의 역사". 각 단계는 VIEW CHART와 배려 관계를 필요로 합니다, discovery 포함: 어떤 관행은 누군가에 대한 기록 자체 그들에 대한 정보. 검색된 문서는 UNRECONCILED를 제출하고 클리닉까지 그 방법을 유지 그들이 그에게서 한 것을 말한다. 또 다른 연습의 요약은 그들의 assertion, 아니 이 연습의 기록; 자동 병합 하나는 2019에서 해결 된 조건입니다. 활성 문제와 단종 약물이 목록에 누군가가 관련 제안 Reconciling은 "reconciled"가 혼자 있기 때문에주의를 요구합니다. 외부 역사가 차트에 있는지 알려지지 않은 다음 독자를 나눕니다. 또는 여전히 첨부 파일에서만. 실패한 쿼리는 성공적인 것만큼 단단히 기록됩니다. 거래. "우리는 요청하고 그들은 거부"는 누군가가 틈을 조사하는 것은 환자의 역사가 필요하며, 실패로 행을 다시 회전하면 정확히 유지되는 경우. 운송은 믿을 수 있습니다. TEFCA의 참가자는 Common Agreement에 의해 발행 된 X.509 인증서 - 서명하여 획득 참가자 계약 및 QHIN 내장 완료, 문자열을 넣어하지 데이터베이스 이 플랫폼은 그 종류의 비밀에 대한 나머지에 암호화가 없습니다. 어떤 QHIN 관계에서 하나를 얻을, 그래서 토큰 열을 발명하고 호출 TEFCA는 증대하고 아무것도 연결하는 무언가를 일으킬 것입니다. 어떤 선박은 문장의 모든 통화를 거부하는 수송입니다 비어있는 목록보다 503을 누락 - "찾지 않은 문서"는 임상 사실 병원은 행동 할 수 있으며 "우리는 요청 할 수 없습니다"는 아니고, 빈 리스트에 모두 답하는 시스템은 사람들이 부재를 신뢰하는 것을 가르칩니다. 그것은 결코 설치되지 않았습니다. 검색된 문서는 자신의 물통과 그들의 자신의 저장 선을 얻을, keyed 수출과 같은 10 년의 첫 번째, 아무것도 삭제하고 그 연습 네트워크가 모든 요약을 축적했습니다. 바다 위의 모든 것을 16 테스트.
· kamo-shared-library
다른 조직에서 관련 문서의 선
DOCUMENTS의 공유 보다는 오히려 그것의 자신의 도메인은, 왜냐하면 대량 수출은 얻었습니다 1 : 건강 정보 네트워크가 일상적으로 축적 한 연습 모든 요약 그것은 이제까지 보내졌다, 아무것도 삭제 — retrieved document 이 연습의 증거는 말했다 때, 어느 나중에 독자는 차트와 외부 역사가 동의 할 때 확인합니다. 바이트가 다른 곳에서 왔더라도 빌려. 저장은 진짜, 그것입니다 이 연습을 위해 개최되고,이 연습이 그것에 대해 물었다 때문에 개최됩니다.
· VOIPService
휴대폰 서버가 생성될 때 KamoPBX 계정을 Provision
이제 KamoPBX 폰 서버를 추가하고 아래 계정 작성 configJson에 id와 realm 뒤로 계정합니다. 어떤 configJson 클라이언트가 보낸 병합보다는 DISCARDED : 수행 할 수있는 합법적 인 필드가 없습니다. 다른 10ant의 계정에서 org를 점할 수있는 방법이 될 것입니다. 프로비저닝 실패는 표시되지 않은 뒤에 행을 떠납니다 이유, 오히려 그것을 삭제하는 것보다 - id는 이미 계정을 만들 수 있습니다 즉, 연산자는 인스턴스 페이지에서 다시 구할 수 있습니다. 클라이언트는 공유한 bean 그래서 토큰 캐시가 재사용됩니다; 당 하나 건설 호출은 모든 요청에 KamoPBX에 대한 재조합합니다. kamo.pbx.*는 공백 credential 과태로 플랫폼 조정, 그래서 unconfigured platform log 'not configuration' 대신 실패가 열립니다. 246 테스트 패스.
· kamo-internal
KamoPBX 선택 가능
공급자는 VOIPService에서 실행됩니다, 그래서 오순 문은 떨어져 옵니다. 기술 더 이상 업스트림 프로젝트를 지명하고 실제로 중요한 것을 말한다. 구매자에 : Kamo는 그것을 실행하고, 가입 할 아무것도 없습니다. 외과 편집 만. 이 배열은 또한 billingClass 및 피드를 운반 lockReason's entitlement gating 부터 동시 일, 그래서 그것은 왼쪽에 위치 오히려 추출 - 공급자 카탈로그에 대한 진실의 두 소스 긴 파일보다 악화됩니다. 사전 키 제공 업체Bullet1 먼저 밀어 (c822cfeb); 메시지 / 이다 여기에 gitignored 그래서 녹색 로컬 빌드는 생산에 대해 아무것도 입증.
· SecurityService
Right-gated 서비스 작업 API
**************** — 목록, 도착, 업데이트 및 PATCH 상태. Copies ServiceTaskBookController의 idiom: orgId(req) 또는 401, 오른쪽 체크 또는 403, parseUuid 또는 400을 통해 문자열 경로 변수, 그리고 하나의 실패() 도우미 서비스의 IllegalArgumentException을 누락한 행에 404로 나누기 그리고 다른 모든 것을 위해 400. 누락된 작업은 404이며, 모든 sibling 핸들러와 일치합니다. 그 코드를 사용하지 않는 상태 렌더링, 그리고 400 거기 숨을 것 'no '당신의 요청이 malformed' 뒤에 더 긴 존재. 거절된 상태 전환은 존재하는 일에 대한 잘 만들어진 요청입니다. ServiceJobStatusMachine의 메시지는 둘 다 국가가 클라이언트에 도달합니다 읽기 쉬운 400. 읽기 VIEW SERVICE WORK 및 쓰기 MANAGE SERVICE WORK, 이는 CHILD of VIEW in the rights tree — 그래서 VIEW에 정착 된 쓰기는 여전히 리뷰에 문을 보였습니다. 문 테스트는 각 호출 보기 전용 세션으로 작성하여 발생하지 않습니다. 테스트는 소스를 그리는 것보다 실제 핸들러를 구동한다. ServiceTaskBookRightsGateTest는 소스 스캔이 자체 javadoc에서 말한다. '일 전에 체크 실행을 증명할 수 없습니다'; BaseLosController가 해결 요청 속성에서 세션, 그래서 MockHttpServletRequest 나르기 권한 목록은 실제 상태 코드를 다시 읽는 것이 충분하다 — and to assert 서비스는 결코 도달하지 않았다, 이는 절반 스캔을 볼 수 없습니다: 핸들러 그 행동하고 403이 이미 행을 썼다. Mutation-tested: 보기를 위해, 오른쪽 체크 삭제된 관리 outright, 오른쪽 체크는 서비스 호출 후 이동, 실패 () 평평하게 항상-400, PATCH /status는 PUT로 전환, 세션의 org는 대체 리터럴. 각각은 결함에 핸들러를 명명했다.
· kamo-shared-library
서비스 작업에 대한 org-scoped read/write API
ServiceJob은 저장소와 통과 테스트와 함께 맵핑 된 기업이되었습니다. 행을 읽는 방법. 이것은 완성 된 작업 주문 UI를 헤더를 제공합니다. 이미 렌더링, 그래서 그리드는 자체를 생성 할 수 있습니다. ServiceTaskBookApi/Service에 모양: 문자열 ids 및 ISO-8601 문자열에 철사, orgId는 각 방법에 첫째로, 각 읽힌 mapped 전망 INSIDE에 ServiceJob.visits가 LAZY이고, 10년 전부터 거래 짐 후에 체크 보다는 오히려 JPQL. 서비스JobRepository 이미 모든 4 개의 쿼리를 수행하므로 터치되지 않습니다. 두 가지 모양은 DTO를 결정했다 : - totalLabourMinutes는 정수입니다. 20분 작업 0.333 시간 및 세 가지는 시간이 아닙니다. ServiceLineItem.labourMinutes argues 열을 위한 케이스 및 그것은 철사에 역시 붙입니다. 그것은 요약 방문의 실제 창에서, 유일한 노동 작업은 도달 할 수 있습니다: ServiceLineItem은 작업에 대한 링크가없는 주문 오프. 참석 시간, 시간 청구. - 거래는 UI의 범주가 아닙니다. 10 개의 무료 합성 문자열에 대한 fifteen ServiceTrade 상수, 하지 1:1 — 'Plumbing Repair'는 PLUMBING 플러스 WorkClass.REPAIR 및 작업 클래스는 라인 아이템에 살고 있습니다. 철사는 나릅니다 거래 및 클라이언트는 라벨을 렌더링합니다. 상태는 ServiceJobStatusMachine을 통해 이동하고 다른 곳에, 왜 JobInput에는 상태 회원이 없으며 StatusInput은 자체 레코드입니다. A 상태 일반 업데이트를 통해 도달하면 열에 두 번째 문이 될 것입니다. 두 번째 문은 아무도 체크입니다. 테스트는 행동, 소스 스캔이 아닙니다 : 저장소는 프록시입니다. findByIdForOrg는 org와 그의 findById deliberately가 아니라, 그래서 unscoped 읽음은 틈 보다는 오히려 누출으로 붙잡습니다. 관련 기사 - assertTransition 삭제, assertTransition은 setStatus 후 이동, org-scoped query swapped for findById, 분은 시간으로 변환, 상태 필터가 SQL에서 이동, getVisits() 왼쪽 읽지 않은, \@Transactional workInput에 추가된 'status' 구성 요소. 각각 다른 생산 실패는 재산을 보호한다.
· kamo-login
Preselected workspace를 수정하고 org의 scrollbar 목록을 제공합니다
Workspace Picker에 대한 두 가지, 둘 다 같은 목록. workspace는 마지막으로 사용 된 회원은 버튼에 사전 선택되어 있기 때문에 이 화면은 설문 조사보다는 확인입니다. 그러나 그것으로 스크롤하지 않습니다. · 평소에 앉아있는 20 조직의 회원은 14th 목록을 열었습니다. 강조 표시 줄을 표시 그들은 볼 수 없습니다, 머리 아래에, 버튼 위 화면에 nowhere에 나타난 workspace를 naming. 사전 선택이 되었는지 org가 목록에 떨어졌다는 곳까지 가다. 한 번에 볼 수 있으며, 열려있을 때만 시력 — 화면에 이미 행은, 목록 스크롤하기 때문에 스크롤이 필요 없습니다. 플러시 보다는 오히려 중심 가장자리에, 그래서 위의 행과 아래 여전히 "이 목록의 위치입니다". `scrollTop` 오히려 `scrollIntoView`: 그 모든 스크롤 조수, 그리고 로그인 화면에서 페이지를 가지고 갈 수 있습니다. 현재 위치 `position: 상대` 그래서 행 `offsetTop`는 목록 자체에 대해 측정한다 — 정확한, 그리고 경계와 달리 그것은 행의 입구에 의해 이동되지 않습니다 변환. scrollbar는 두 번째 일입니다. 이 스크린에 각 악센트는에서 섞입니다 `--color-primary`, 테마 스타일 시트가 이미 설정 한 조직은 스크린으로 상표를 붙입니다: 선택 가로장, 줄 주석, "마지막 사용"pill, 버튼. scrollbar는 아직도 크롬의 한 조각이었습니다 브라우저의 기본 회색에서 렌더링, 이는 강력하게 브랜드의 테넌트는 패널에 유일한 회색. 이제 동일한 토큰의 톤입니다 — translucent 호버에 깊은 점, 연한 궤도, 둥근 둘 다. <style> 요소가 아닌 인라인 스타일로 쓰여져서 나머지는 구성 요소는 scrollbar가 pseudo-elements를 통해서만 도달할 수 있기 때문에, 이용합니다. 두 구절은 거기에 있고 다른 것에 대한 낙진은 없습니다 : WebKit 및 크롬은 가짜 요소를 읽고 `scrollbar-color`, Firefox 읽기를 무시 `scrollbar-color`와 가짜 요소가 없습니다.
· VOIPService
Implement the KamoPBX provider
스텁을 대체합니다. KamoPBX는 Kamo의 자체 플랫폼이므로 조직은 없습니다. 모든 자격 : KamoPBXAccountProvisioner는 전화를 할 때 계정을 만듭니다. 서버가 추가되고, KamoPBXClient는 당 단기적인 아이스코프 토큰을 채굴합니다. Kamo의 단일 마스터 자격의 호출. Auth는 아이 계정의 OWN api key를 사용하여 마스터 토큰을 읽고 교환 - 문서화 및 schema'd. undocumented as:{account id,owner id} 주장은 deliberately 사용되지 않습니다 : 그것은 열려 실패, 전체-privilege 반환 소유자 id가 omitted 때 오류가없는 PARENT 토큰. rangedToken()는 반환된 토큰은 아이에 적용되며 부모를 대폭적으로 거부합니다. 특별한 에스컬레이션이 있습니다. 또한 스텁에서 고정 : - getCallHistory는 null을 반환합니다. NPE는 해당 콜러를 호출합니다. - CDRs는 per-leg이며, 역사는 interactive id 또는 한 호출 쇼에 붕괴됩니다. 2 세 이상. - callResult는 ANSWERED/NO ANSWER/BUSY/FAILED에 시험에 의해 핀으로 꼿습니다; 다른 사람이 조용히 놓친 호출 카운터가 0을 읽습니다. 걸쇠는 통과 보다는 FAILED에 붕괴를 감소시킵니다. 플랫폼 설정 (기본 URL, 마스터 계정, 관리자 자격, WSS URL)은 @Value-injected 과 결코 당. 246 테스트 패스, 29 그 중 새로운.
· KlusterServices
앱, 미디어, 가장자리 표시 및 네트워크 정책
- config.ini는 1 일에서 [zone] 블록을 운반하므로 두 번째 영역은 구성입니다. 편집, 수술하지. 비밀은 컨테이너 시작의 엔트리포인트에 의해 대체됩니다. ConfigMap에 구운 것 보다는 오히려. - ecallmgr는 One pod의 FreeSWITCH와 공동으로 배치됩니다. 공유 쿠키, TLS가 없으며 1500/1420 MTU 경계를 횡단합니다. - Kamailio는 192.168.4.36을 듣는 동안 47.181.8.87을 광고합니다. - Cilium은 기본적으로 밀도와 toEndpoints:[{}]은 namespace-scoped이므로 명시 된 kamo/kamovoip -> kamopbx-apps :8000 규칙은 단계 3 실패하는 것입니다 조용한 운동으로.
· kamo-internal
**************** 및 기업 카드를 잠그십시오
오른쪽 클라이언트 측 등록 - 목록, 색상, 아이콘 -에 추가 적용 시험의 non-tab는 그것이 실제로 어떤 문에 주의로 놓았습니다, 그것 때문에 구성 탭보다 2개의 서비스에서 동작을 가집니다. 주문 마법사는 모든 활성 계획, Enterprise 포함, 가격 카탈로그에서 읽으십시오. 서버는 이제 그 가격을 파악하고 거부합니다. 구독이 뚜렷하다, 그래서 카드는 계획을 보여주려고하지 않았다 를 위해 그리고 살 수 없었습니다. 누군가를 기꺼이하는 대신 메모에 비활성화됩니다. 전체 마법사를 걸어 끝에 굴절을 맞습니다. 서버는 경계입니다 - EnterprisePlanGuard BillingService, 그리고 가격을 위한 POSController. 이것은 단지 낭비 된 여행을 저장합니다.
· BillingService
Self-serve Enterprise 구독을 참조하십시오
기업 협상. 가격을 결정하는 것은 발표; 이것은 한국어 기업 계획의 명칭은 콜러가 아닌 거절됩니다. 주요사업 *********** 그래서 플랜 코드를 추측하고 게시 직접 콘솔을 읽는 것과 같은 대답을 가져옵니다. CALLER-SUPPLIED 플랜 코드에만 불립니다. 밤의 reconcilers amend 살고있다 빈 몸과 HTTP와 같은 업데이트 경로를 통해 구독 모든 요청에 - null을 보호하는 것은 모든 협상 고객을 청구 할 것입니다. 규칙은 "이 계획은"이 계획이 아니라 "이 계획은 만지지 않을 수 있습니다." Identity는 PlatformAdminInterceptor로 정확히 해결되며, verdict 이다 left to the shared PlatformRightsResolver, 그래서 이것은에서 드리프트 할 수 없습니다 SecurityService가 같은 사람에 대해 결정합니다. 해당 이용 후기에 달린 코멘트가 없습니다. 고객이 행동 할 수있는 일을 얻는다 - 저희에게 연락하십시오 - 올바른 존재와 그들은 그것을 얻을 수 힌트가 아닙니다.
· SecurityService
카탈로그의 Ashold Enterprise 가격
기업은 직접 KamoCRM와 협상됩니다, 그래서 그것의 비율은 우리의 것은 아닙니다 게시. 계획 가격을 인용하는 모든 표면은이 하나의 엔드 포인트를 읽습니다 - APIService 프록시를 통해 공개 가격 페이지, 인앱 주문 마법사 및 등록 깔때기 - 그래서 가격은 여기에서 payload에서 떨어졌다 특별 케이스 하나 계획을 기억하기 위하여 3개의 클라이언트를 요구하십시오. 내부 (public-proxy) 호출은 플랫폼의 권리를 보유하며 항상 적색합니다. 콜러가 보유하지 않는 한 세션 호출은 적색 ****** ********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** 계획 행 자체 유지 : 독자는 여전히 엔터프라이즈가 무엇인지보고해야합니다. 우리에 대해 숫자만 이동. 이것은 발표입니다. EnterprisePlanGuard는 BillingService의 경계입니다. 구매 거부 - 계획 코드를 추측하고 게시물을 직접 콘솔을 읽고 같은 대답을 가져옵니다.
· kamo-internal
전표가 처방되기 전에 무엇을 말하는지 보여줍니다
서버는 이제 기록 된 알레르기와 충돌하는 처방을 거부합니다. 환자는 이미 약, 또는 환자 아무도에 대해 물었다. allergies — 그리고 그것이 발견되는 것을 반환합니다. 이 렌더링. inline 오류가 아닌 형태의 밑에 카드는, 처방전이기 때문에 intact와 다음 행동은 임상 결정, 보정이 아닙니다. 높은 리스크 경고는 표시됩니다: "penicillin"과 "penicillin, 높은 긴요한"는 아닙니다 같은 경고. override 필드는 질문을한다 - "왜이 어쨌든 선사하고 있습니까?" - 그리고 그 도우미는 대답이 무엇인지 말한다. 기록 보관소 임상 의사 결정은 나중에 방어해야 할 수 있으며, 그 이유는 무엇입니까? 그것을 방어. 버튼은 한 번에 사용할 수 없습니다. "Don't prescribe"는 옆에 있습니다. 한 가지 방법으로 경고는 경고입니다. 자주 묻는 질문 경고는 어떤 이유로 수행되지 않는 한 모든 신선한 시도에 명확합니다, 그래서 1개의 약을 위한 승인은 다른 것에 대하여 재사용될 수 없습니다.
· KlusterServices
CouchDB와 k3m1에 RabbitMQ
CouchDB q=8 / n=1, 검증된 라이브. q는 데이터베이스 작성 및 KamoPBX에 고정됩니다. 계정 당 데이터베이스를 작성하여 월간 MODB를 추가합니다. 그래서 q는 이제 크기로 eventual 3-node cluster; n은 나중에 shard 맵 편집, q는 할 수 없습니다. Auto-compaction 활성화 — 업스트림은 떨어져 발송하고 KamoPBX의 쓰기 패턴 파편을 악화한다. 세 개의 배포 버그 발견 및 고정 라이브: - /opt/couchdb/etc/local.d에 ConfigMap을 설치하여 읽기 전용 및 Entrypoint는 docker.ini를 작성합니다. 단일 파일에 대한 subPath를 사용합니다. - 신선한 Longhorn 볼륨은 뿌리 소유; couchdb는 uid 5984로 실행하고 1을 종료 모든 로그 출력 없이. 추가 fsGroup 플러스 chown initContainer. - rabbitmq-diagnostics는 과태 1s 조사 timeout 보다는 더 많은 것을 필요로 합니다; 서버 건강한 (9s 시작) 그러나 조사는 실패했습니다. RabbitMQ는 kamopbx로 실행되며, 배송된 게스트가 아닙니다. loopback users가 꺼집니다.
· kamo-shared-library
"바이트가 사라집니다"를 "저장은 내려"에서
openRange는 각 노드 실패를 하나의 IOException으로 축소하므로 콜러가 할 수 있습니다. 500을 반환하지만 아무것도. 브라우저의 <img>/<video>/<audio>는 렌더링할 수 없습니다. 500 - 그것은 하나의 비트를 얻, "실행", 그리고 그에 래치 — 그래서 그 부착물 절대로 썼습니다. 실패 누군가가 "보냈지만 그들은 그것을 재생할 수 없습니다. 두 가지 원인은 반대의 답변을받습니다. Content absent 이다 영구 하 고 가치 평소와 같이 말하십시오; 저장 unachable는 transient와 retrying 가치가 있습니다. 지원하다 ObjectNotStoredException은 WHOLE 함대가 대답하고 모든 답변이되었습니다. NoSuchKey : 도달 할 수없는 노드는 객체를 붙일 수 있습니다. 그래서 믹스는 정규 IOException을 유지합니다. 회원에게는 파일이 있습니다. 부분적인 정전 중에 영구적으로 잃어버린 것은 불가능한 한 실수입니다. 다시 걸어. 그것은 IOException을 확장, 그래서 모든 7 기존의 전화 사이트는 작동을 해제 그리고 그것을 첫째로 붙잡기에 의해 구별을 선택합니다.

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