Changelog
Ada kabar baru.
Setiap perbaikan pada platform, sebagai kapal.
· kamo-shared-library
Baris, catatan, vendor, sign-off dan jam menulis pada pekerjaan
SW6b Task 3, perpustakaan setengah. Delapan operasi baru di ServiceJobService, ditambah catatan kawat untuk mereka dan ketiga membaca halaman detail kebutuhan. Tiga hal yang server memiliki dan tidak ada klien dapat mengirim: - Totalnya. LabourTotal, materialTotal dan total yang dihitung kembali dari baris pekerjaan pada setiap baris menulis, dan total baris sendiri adalah kuantitas x unitAmount. LineInput tidak memiliki total anggota dan JobInput tidak lagi memiliki Pekerjaan tiga. Mereka berada di JobMasukan ketika SW6a dikirim karena ada tidak ada yang bisa didapat dari mereka, meninggalkan mereka sekali akan ada kedua pintu lurus melewati aturan. * * * * * * * * * * * * * * * * adalah apa yang jauh sisi pintu itu terlihat seperti - dibutuhkan subtotal dari permintaan DAN menambah batas total untuk itu, sehingga klien mengirim keduanya mendapatkan angka yang keduanya tidak cocok, yang mana quoteTotals gagal 'Javadoc ada dalam nama. - Tanda-off timestamp. signloff perangko signoffAt when the flag goes true and Membersihkan ketika pergi palsu, sehingga pasangan tidak pernah bisa tidak setuju. Masukan Tanda Tangan membawa boolean dan teks gratis dan tidak ada waktu. - Jam. Stempel clock Start / ActualEnd AND memindahkan kunjungan Status dengan mereka - ON _ SITE dalam, KOMPLETED keluar. A clock-out tanpa clock-in adalah IllegalStateException penamaan negara kunjungan (409 di controller): sebuah akhir tanpa awal berkontribusi nol untuk totalLabourMinutes, sehingga Gejala akan menjadi lembar waktu pendek per hari dengan tidak mengatakan begitu. Sebentar. clock-in juga ditolak; tugas kedua adalah kunjungan kedua. Setiap anak diselesaikan dengan pekerjaannya uid DAN org sebagai predikat dalam ONE query - findByUidForJob pada baris, vendor dan kunjungi repositori. Menyelesaikan oleh uid dan org saja akan membuat DELETE / {jobUid} / lines / {lineUid} mencapai baris apapun dalam org melalui URL yang terlihat sepenuhnya benar. JobView memperoleh baris / catatan / vendor: kosong dalam daftar proyeksi (tidak dimuat), selalu mengisi rincian proyeksi (kosong berarti tidak ada). Memuat mereka per baris akan membaca empat tabel untuk melukis kisi yang tidak menunjukkan satupun. Mutasi - dites: 9 mutasi dari berkas ini, masing-masing memproduksi berbeda bernama gagal -- menjatuhkan recompute, menambahkan total baris di atas yang tersimpan angka, menjatuhkan clock-out penjaga, tidak bergerak status kunjungan, tidak stamping tanda-off, tidak membersihkannya, dan menyelesaikan setiap tiga anak dengan uid sendirian.
· VOIPService
Implikasi ekstensi KamoPBX, manajemen pengguna dan perangkat
Penyedia yang diiklankan pengelolaan ekstensi, manajemen pengguna, dan pengelolaan device@@ sebagai benar ketika menerapkan tidak satupun dari mereka, sehingga UI akan menunjukkan tombol yang melempar 501. Kemampuan sekarang cocok dengan perilaku. Ekstensi di KamoPBX adalah tiga dokumen - pengguna, perangkat yang dimiliki pengguna itu, dan sebuah callflow pemetaan nomor ke pengguna. Membuat hanya beberapa dari mereka menghasilkan baik nomor yang cincin apa-apa atau handset tidak ada rute ke, sehingga ketiga diciptakan bersama dan sebagian kegagalan memutar kembali apa yang dibuat. Menghapus sebuah ekstensi hanya menghapus callflow. Seorang anggota mungkin memiliki beberapa perangkat, dan menghapus handset seseorang yang terdaftar karena nomor dihapus akan menjadi kejutan yang jauh lebih buruk daripada dokumen yatim piatu. 253 tes pass, 5 baru meliputi membuat, rollback, validasi, menghapus scope dan Kemampuan kejujuran.
· kamo-shared-library
Baris tugas, catatan dan vendor sehingga tab kerja-urutan dapat bertahan
Buruh dan bagian menjadi baris ServiceJobLine pada pekerjaan daripada Baris ServiceLineItem, karena OrderLineItem.order adalah opsional = false: a ServiceLineItem tidak dapat ada tanpa Ordo, dan catatan teknisi tenaga kerja jauh sebelum apa pun ditagih. Membuat orang tua itu gila. biarkan sebuah PurchaseLineItem ada diluar perintah juga, jadi tes pemetaan Pin invarian sebagai gantinya. ServiceJobNote ditulis dan ditambahkan-hanya - tidak ada updateAt, created At updatable = salah dan dicap dalam @ PrePersist. ServiceJobVendor adalah many- sisi tab Vendor selalu ditampilkan; peran tetap teks bebas karena tidak ada tipe vendor- kosakata ada untuk membekukan skema. Setiap repositori mencapai org melalui gabungan EXPLISIT dari pekerjaan. Render implisit l.job.organization.id sebagai INNER bergabung dan diam-diam baris tetes yang asosiasi adalah null; ServiceJobLineMapping Test asserts bentuknya daripada mempercayainya.
· kamo-internal
Muatan klinis yang gagal tak boleh dibuat sebagai hasil kosong
Dua ini dikirim sebelum ada yang melihat, dan penjaga menemukan dua lagi di panel terbaru saat itu dijalankan - gagal untuk memuat apa pasien lain praktek telah dikirim membaca sebagai "tidak diterima belum", dan gagal untuk memuat pasangan daftar dibaca sebagai "tidak ada mitra pertukaran diatur", yang akan mengirim seseorang untuk menambahkan mitra yang sudah ada. Itu sebabnya ini adalah penjaga bangunan dan bukan catatan tinjauan. Kegagalan diam konstruksi: tidak ada kesalahan, tidak ada log, tidak ada di layar, dan terlihat persis seperti keadaan kosong sehat. Tak seorang pun akan melaporkan hal itu sebagai bug. Pada grafik daftar kosong adalah pernyataan - "tidak ada pengukuran", "tidak ada yang terlambat", "Tidak ada alergi" - dan orang-orang melakukannya. Perbedaan yang sama sudah berjalan melalui modul di sisi server: "mereka tidak memiliki" versus "kita tidak bisa meminta", dan 503 daripada daftar kosong dari pertukaran transportasi. Hal ini memaksa pada klien. Terselip ke permukaan klinis, karena vertikal lain memiliki mereka sendiri Pertemuan. Tangkapan yang menetapkan kesalahan, log, rethrows, kembali, atau mengisi ulang melewati - dan begitu juga orang membawa komentar menjelaskan mengapa keheningan benar, yang Pasien ComplatsPanel mengandalkan: yang saudara garis waktu melaporkan pemadaman yang sama dan banner kedua akan memberitahu pembaca apa-apa baru. Dirantai dalam tes npm.
· SecurityService
Tampilkan pengaturan platform melalui konfigurasi sistem-config API
toDto adalah allowlist eksplisit dan updateConfig mengambil tubuh yang diketik, sehingga tujuh kolom SYSTEM _ CONFIGURASI baru akan tidak terlihat dan tidak dapat diselesaikan - yang kartu konfigurasi platform akan diberikan kosong dan menyimpan akan dilakukan Tidak ada. Sandi administrator tidak pernah dikembalikan. Ini adalah kredensial master belakang setiap rekening penyewa, sehingga GET menghasilkan sentinel "* *" ketika ditetapkan, dan mengirim "* * *" kembali berarti menyimpan - jika tidak menyimpan bidang lain pada bentuk akan overwrite kredensial dengan string literal. Gated by manage _ VOIP _ SMS bersama dengan ruas VoIP yang ada, so Manage _ DOCUMENT _ AI tidak bisa mencapainya.
· VOIPService
Dekripsi kredensial KamoPBX; uji tapak penolakan
Kredensial master disimpan sebagai ciphertext oleh platform pengaturan UI, sehingga harus didekripsi sebelum digunakan - menyerahkan ciphertext ke API sebagai kata sandi akan hadir sebagai kredensial buruk dan mengirim siapa pun debug itu dengan cara yang salah. Dua tes baru menutupi jalan penolakan yang sebelumnya muncul sebuah Kubernetes mentah DNS error ke sebuah admin org: tidak ada id akun master, dan tidak ada administrator kredensial. Keduanya menegaskan nama pesan halaman pengaturan. 248 tes lulus.
· KlusterServices
Tukar salam inbound ke KamoCRM-Ini- Perkenalan-3
Ketiga, 40 (turun dari 60). Diunggah bersama dua sebelumnya daripada atas mereka, sehingga bergulir kembali ke baik adalah satu baris perubahan untuk KAMO _ ATTENDANT _ INTRO plus a dialek reload - no re- upload. Sumber stereo 48 kHz dikonversi ke 8 kHz mono Asterisk membutuhkan. Verifikasi live: checksum cocok dengan file lokal, Asterisk diterjemahkan ke 319914 bytes dari u- hukum (39.99s di 8000 B / s), dan CDR menunjukkan BackGround custom / kamocrm -main- intro-3.
· InitializerService
Penyimpanan per- kursi, dan kolam renang Enterprise datar
2 GB per kursi di Free, 4 di Starter, 5 pada Bisnis. Enterprise berhenti skala dengan kursi lengkap - sebuah 150 GB datar untuk organisasi - yang "N GB per kursi "tidak dapat mengekspresikan, sehingga baris yang membawa prosa menimpa membeli permukaan sekarang lebih memilih dari nomor. Unit fitur adalah GB / seat. Unit penagihan adalah kursi di seluruh; jumlah kepala tetap pengguna, menjadi orang daripada unit.
· kamo-internal
Kartu pengaturan platform, dan berhenti menampilkan salinan FreePBX
Tiga masalah pada ponsel KamoPBX-server halaman, semua milikku: - The PHONE _ SERVER _ ID kartu dilepaskan, sehingga setiap penyedia - KamoPBX, RingCentral dan Tim termasuk - diberitahu untuk paste id ke kamo- tanda bintang - dukungan config on a FreePBX host. Ini adalah FreePBX-hanya dan sekarang render hanya ada. - KamoPBX sama sekali tidak memiliki konten khusus. Sebuah org melihat nama, nomor, sebuah instruksi aktif toggle dan bahwa FreePBX. Sekarang mendapat kartu mengatakan Kamo jalankan itu, alamat SIP nya, negara penyediaan, dan apa yang harus dilakukan selanjutnya. - Tidak ada konfigurasi platform untuk KamoPBX di mana saja, yang membuat penyedia tidak dapat digunakan: tidak ada yang dapat mengatur akun atau kredensial. Sebuah kartu pada? tab = voip-sms sekarang memiliki mereka dan memperingatkan ketika tidak dikonfigurasi. Kunci kamus didorong pertama (pesan / adalah diabaikan di sini).
· VOIPService
Baca konfigurasi platform KamoPBX dari basis data
Menambahkan server telepon KamoPBX gagal dengan galat DNS mentah - 'Aku / O error pada PUT... * * * * * * * * * * * * * - ditampilkan ke organisasi admin yang tidak bisa membaca atau bertindak di atasnya. Dua penyebab, baik tetap: - Pemasok mencoba panggilan tanpa konfigurasi platform sama sekali. Ini sekarang periksa dulu dan tolak dengan sebuah pesan yang dapat ditindaklanjuti penamaan pengaturan halaman, daripada gagal membuka ke dalam galat DNS. - Pengaturan @ Value-only, sehingga tidak ada cara untuk mengkonfigurasi KamoPBX tanpa menyebarkan kembali. Mereka sekarang datang dari SYSTEM _ CONFIGURASI singleton, yang konfigurasi platform UI menulis; standar @ Value tetap sebuah fallback sehingga Layanan masih boots sebelum migrasi telah berjalan.
· kamo-shared-library
Pengaturan platform KamoPBX pada SISTEM _ CONFIGURASI
KamoPBX adalah platform Kamo sendiri, jadi semua konfigurasi adalah platform-lebar: URL dasar, id akun master, nama akun, kredensial admin, akhiran realm SIP dan WSS URL. Mereka duduk di SYSTEM _ CONFIGURASI singleton di samping yang ada tunables VoIP sehingga operator dapat menset mereka dari konfigurasi platform UI sebagai gantinya membutuhkan reoffents untuk mengubah variabel lingkungan. Kolom kata sandi admin adalah AES-256- GCM ciphertext dan membawa @ JsonAbaikan: baris ini serialisasi langsung ke konfigurasi platform UI, dan tanpa itu master kredensial untuk setiap penyewa akan berada di kawat.
· InitializerService
Default platform SemoPBX
Hibernasi ddl- auto menambahkan kolom SYSTEM _ CONFIGURASI; @ Kolom Standar saja berlaku pada baris baru yang dimasukkan, sehingga singleton yang ada perlu mengisi kembali. Membibit default non-rahasia saja. ID akun induk dan kredensial admin yang sengaja meninggalkan NULL - itulah yang membuat laporan provisioner 'tidak dikonfigurasi belum' dan menolak, daripada gagal terbuka atau permukaan Kesalahan Kubernetes DNS pada suatu admin org yang tidak dapat membaca atau dijalankan di atasnya. Setiap pernyataan hanya mengisi NULL, sehingga operator 's UI edits bertahan hidup memindahkan.
· kamo-internal
Jaringan kerja-order membaca tugas layanan nyata
Setiap baris di grid ini adalah link mati oleh konstruksi. generate MockWorkOrder id minted String (8000 + i), klik baris push / commerce / service / 8001, dan penangan dideklarasikan @ PathVariable UUID id - jadi id gagal konversi sebelum setiap penangan dijalankan dan halaman detail diberikan nya tidak ditemukan negara. Lima belas baris, Lima belas link mati, pada layar yang tampak selesai. Kedua permukaan sekarang membaca ServiceJob melalui * * * * * * * * * * * * * * Proxy ekspor GET, PUT dan PATCH - persis apa ServiceJobController peta, dan tidak ada proksi perdagangan selain itu adalah template aman: kutipan ekspor GET / POST / PATCH / DELETE tanpa PUT, service- task- buku ekspor GET / POST / PUT / DELETE tanpa Patch. Salin baik dan satu menyimpan jawaban 405 dibesarkan oleh Berikutnya itu sendiri, dengan tidak ada dalam log server, sementara setiap membaca terus bekerja. ServiceJobWireContract.testts memasang kata kerja terhadap pengontrol anotasi di kedua arah, dan membandingkan setiap JobView / VisitView / AddresssView komponen rekaman ke anggota TypeScript dengan nama. Perbandingan nama itu adalah perbaikan kedua. posapi. WorkOrder dideklarasikan serviceName, ServiceId dan engagemecId terhadap DTO mengirim serviceOffering Nama, Layanan OfferingUid dan Dana Uid. Tiga tidak pernah cocok, sehingga detail subjudul halaman dan baris ringkasan "Layanan" nya tidak didefinisikan untuk kehidupan layar dan jatuh kembali ke dash em - yang berbunyi sebagai "tidak tercatat" bukan sebagai tipo, itulah sebabnya tidak ada yang menemukannya. Dihapus 489 baris dari suatu Dialog detail yang tidak dapat membuka: detail Buka adalah inisialisasi false, setDetailOpen (true) muncul entah dimana di berkas, dan pilihan Orde secara independen selalu batal. Enam penangan memberinya makan dan tidak ada lain dan pergi dengan itu. Catatan tab adalah satu-satunya di codebase, jadi itu Ranjau keluar pertama - * * * * * * * * * * * * * * * Keberadaan layak diketahui: - Tidak ada nama teknisi di mana saja. ServiceJobApi membawa kunjungan [] .assignedAnggota Id dan tidak ada yang lain, dan tidak ada titik akhir menyelesaikan batch ID anggota ke nama - Keanggotaan adalah pencarian paged yang catatan sendiri melarang memegang staf daftar. Kolomnya hilang daripada menunjukkan tanda pengenal sebagai seseorang. - "Waktu Dihadiri", bukan "Jam Buruh". Jumlah server menit tugas dari setiap kunjungan sebenarnya jendela karena tenaga kerja harga hang off Order dengan tidak menghubungkan ke pekerjaan. Dirender dengan format LabourMinutes; tidak ada daerah float-jam pada kedua sisi. - perdagangan menggantikan sepuluh string kategori bebas, yang tidak pernah kosakata apapun bisa round-trip: "Plumbing Repair" adalah PLANGMING ditambah Workclass.REPAIR. - Status Bulk sekarang mengeluarkan satu PATCH per pekerjaan dan melaporkan penolakan parsial, karena mesin status memeriksa setiap transisi. Handler lama mengatur ruas lokal pada mereka semua dan dilaporkan sukses. - Buruh, suku cadang, waktu entri dan vendor tetap lokal useState. Tidak ada punggung entitas salah satu dari mereka, SW6b membangun mereka. Dictionary mendarat pertama: kamo- terjemahan - kamus 947e585.
· kamo-marketing
Kartu rencana menunjukkan apa tingkat ADDS, tidak segala sesuatu yang memiliki
Kartu terdaftar setiap fitur termasuk - 16 pada Bebas, 30 pada Starter, 52 pada Bisnis, 57 di Enterprise. Empat kartu tinggi liar tidak seimbang, masing-masing dinding teks, dan di antara mereka ada pernyataan-lengkap dari tabel perbandingan duduk langsung di bawahnya. Rencananya bersifat bersamaan, jadi satu-satunya pertanyaan yang harus dijawab adalah "apa ini membuat saya bahwa yang lebih murah tidak ". Setiap kartu sekarang mengarah dengan baris kursi (angka yang tidak terakumulasi), mengatakan tingkat mana yang dibangun pada, daftar di sebagian besar enam diferensiasi, dan mengirimkan sisanya ke perbandingan tabel melalui "dan N lebih fitur". Bisnis menurun dari 52 baris ke delapan, empat kartu keluar dekat-sama, dan meja berhenti menjadi duplikat dan mulai menjadi tujuan. Urutan fitur kini mengikuti _ urutan tampilan katalog sendiri. Itu diurutkan alfabet dengan nama kategori, yang menempatkan "Al & Intelligence" di atas "Core Platform "dan mengubur apa yang benar-benar menjual tingkat. CONTRAST: putih pada aksen zaitun diukur 3.78: 1 di ujung gelap gradien dan 3.01: 1 pada akhir terang - baik di bawah 4,5 bahwa 14px semidold label perlu, Itulah sebabnya mengapa tombol dan lencana terbaca dicuci. Setiap permukaan aksen sekarang menggunakan warna latar belakang sendiri sebagai tinta: 4.53: 1 dan 5.68: 1, dengan warna hijau menjaga kekuatan penuh daripada lumpur untuk menyelamatkan teks putih. Fallback dan JSON-LD jumlah kursi dikoreksi ke 25 / 100 untuk mencocokkan katalog; mereka masih mengatakan 5 / 25 dari kebingungan yang sama judul kartu memiliki. Diverifikasi dengan produksi penuh membangun, yang menangkap dua lubang yang diketik tsc --noEmit tidak.
· kamo-internal
Tarik sejarah pasien dari praktek mereka digunakan untuk menghadiri
Setengah dari pertukaran, pada tab catatan di samping permukaan rilis - catatan meninggalkan dan catatan tiba adalah pekerjaan satu orang, dan seseorang yang memiliki Hanya mengirim ringkasan ke praktek lain adalah orang yang paling mungkin ingin mereka. Tiga langkah ditunjukkan sebagai tiga langkah, karena itulah standarnya: tanya apakah mereka tahu orang ini, bertanya apa yang mereka pegang, mengambil yang layak dimiliki. Sebuah tombol "impor semuanya" akan menyembunyikan keputusan tengah dan menarik satu dekade duplikasi pada pasien yang telah bergerak praktek dua kali. Pertandingan ini tidak pernah auto- dipilih: yang salah membaca sejarah orang lain ke dalam grafik ini. Diambil dan didamaikan pernah terlihat sama. Sebuah dokumen dari praktek lain adalah pernyataan mereka - duduk terpasang dan dapat dibaca, dan tidak ada di dalamnya mencapai ini Masalah grafik, obat-obatan atau daftar alergi sampai catatan klinis apa yang mereka mengambil DAN apa yang mereka tinggalkan. Keadaan kosong mengatakan demikian, karena "diterima" diam-diam membaca sebagai "diterapkan" adalah bagaimana kondisi diselesaikan 2019 menjadi masalah aktif. Sebuah praktek tanpa jaringan onboarding diberitahu sekali, jelas, bukannya menjadi diberikan sebuah tombol yang selalu gagal - dan "mereka tidak memiliki catatan yang cocok ini pasien "diberi label sebagai jawaban mereka daripada kegagalan untuk meminta. Mereka berdua harus tidak pernah terlihat sama: pertama adalah fakta klinis seseorang dapat berhenti mencari karena dari. Juga tertangkap oleh penjaga I18n dan tetap: saya melewati nilai {partner} ke sebuah pesan tanpa placeholder tersebut, dan nilainya adalah id pasien jauh pula.
· SecurityService
Setengah keluar dari TEFCA - bertanya, tidak hanya menjawab
Semuanya dibangun sejauh ini menjawab pertanyaan orang lain: penemuan, dokumen query, dokumen mengambil, antrian match-review, akuntansi. Sebuah praktek bisa diminta dan tidak bisa ASK - dan meminta adalah arah klinik sebenarnya membutuhkan, karena sejarah pasien baru ada pada praktek mana saja mereka digunakan untuk hadir. ExchangeRequest telah membawa kolom arah sepanjang waktu dan hanya diketahui pernah menulis untuk itu. Query outbound adalah AKSESISI, bukan pengungkapan. PH perjalanan menuju Kami, jadi tidak ada di sini menyentuh buku pernyataan - rekaman itu akan menempatkan Sebuah baris dalam akuntansi pasien 164.528 mengatakan catatan mereka pergi ke suatu tempat Datang dari. Discovery membaca demografi dari catatan KAMI, tidak pernah dari penelepon. Titik akhir yang menerima typed- dalam nama adalah cara untuk meminta jaringan "apakah Anda memiliki siapa pun disebut ini, "yang berbeda dan jauh lebih buruk kemampuan daripada" mengambil saya "Sejarah pasien". Setiap langkah membutuhkan VIEW _ CHART dan hubungan peduli, penemuan termasuk: yang praktek terus catatan untuk seseorang adalah dirinya sendiri Informasi tentang mereka. Sebuah dokumen diambil diajukan UNRECONCILED dan tetap seperti itu sampai seorang klinik mengatakan apa yang mereka ambil dari itu. Ringkasan praktek lain adalah pernyataan mereka, bukan catatan praktek ini; auto- penggabungan satu adalah bagaimana kondisi diselesaikan dari 2019 menjadi masalah aktif dan obat yang dihentikan muncul kembali dalam daftar seseorang Resep terhadap. Rekonciling membutuhkan catatan, karena "berdamai" saja daun pembaca berikutnya tidak dapat memberitahu apakah sejarah luar dalam bagan atau masih hanya dalam lampiran. Pencarian gagal dicatat sebagai tegas sebagai sukses yang, dalam mereka sendiri transaksi. "Kami bertanya dan mereka menolak" adalah apa seseorang menyelidiki celah di sejarah pasien kebutuhan, dan bergulir baris kembali dengan kegagalan akan menghapus persis kasus yang layak disimpan. Transaksi adalah SEAM DELIBERATE. Berdasarkan TEFCA, suatu otentikasi partisipan dengan sebuah sertifikat X.509 dikeluarkan di bawah Perjanjian Umum - diperoleh dengan menandatangani Perjanjian partisipan dan melengkapi QHIN onboarding, bukan dengan meletakkan string di database. Platform ini tidak memiliki enkripsi pada istirahat untuk rahasia semacam itu dan tidak ada hubungan QHIN untuk memperoleh satu dari, sehingga menciptakan kolom token dan memanggil itu TEFCA akan menghasilkan sesuatu yang terlihat federal dan terhubung ke apa-apa. Apa kapal adalah transportasi yang menolak setiap panggilan dengan kalimat penamaan hilang onboarding, dan 503 daripada daftar kosong - "tidak ditemukan dokumen" adalah fakta klinis seorang klinik mungkin bertindak pada dan "kita tidak bisa meminta" tidak, dan sistem yang menjawab baik dengan daftar kosong mengajarkan orang untuk mempercayai ketiadaan yang tidak pernah didirikan. Mengambil dokumen mendapatkan ember mereka sendiri dan garis penyimpanan mereka sendiri, keyed tenant-pertama seperti ekspor, karena tidak ada menghapus mereka dan praktek yang Kueri jaringan mengumpulkan setiap ringkasan itu pernah dikirim. 16 tes atas segala sesuatu di atas jahitan.
· kamo-shared-library
Baris untuk dokumen yang diambil dari organisasi lain
Domain sendiri daripada berbagi DOCUMENTS, untuk alasan ekspor massal mendapat satu: praktek yang query jaringan informasi kesehatan secara rutin akumulasi setiap ringkasan itu pernah dikirim, dan tidak ada menghapus mereka - dokumen diambil adalah bukti dari apa praktek ini diberitahu dan kapan, yang adalah apa yang kemudian pembaca memeriksa ketika bagan dan sejarah luar tidak setuju. Billed even though the bytes came from somewhere else. Penyimpanan adalah nyata, itu Diadakan untuk praktek ini, dan diadakan karena praktek ini meminta untuk itu.
· VOIPService
Provisi akun KamoPBX ketika server telepon dibuat
Menambahkan server telepon KamoPBX sekarang menciptakan akun yang mendasari dan menulis id akun dan alam kembali ke konfigurasi Json. Setiap konfigurasi Json klien yang dikirim adalah DICARED daripada digabung: tidak ada bidang yang sah untuk dibawanya, dan menerima satu akan menjadi cara untuk menunjuk org di rekening penyewa lain. Sebuah kegagalan pemberian meninggalkan baris di belakang ditandai not- terhubung dengan alasan, daripada menghapusnya - id mungkin sudah memiliki akun dibuat melawannya, dan operator dapat mencoba lagi dari halaman instance. Klien adalah kacang bersama sehingga singgahan token digunakan kembali; membangun satu per call akan kembali otentikasi terhadap KamoPBX pada setiap permintaan. kamo.pbx. * adalah konfigurasi platform dengan baku kredensial kosong, jadi laporan platform tidak terkonfigurasi 'tidak dikonfigurasi' daripada gagal terbuka. 246 tes lulus.
· kamo-internal
KamoPBX dapat dipilih
Operator diimplementasikan dalam VOIPService, sehingga gerbang datang- segera keluar. Deskripsi tidak lagi nama proyek upstream dan mengatakan apa yang benar-benar penting Kamo yang menjalankannya, dan tak ada yang perlu ditandatangani. Penyuntingan bedah saja. array ini sekarang juga membawa bilingClass dan feed lockedReason 's records gating from concurrent work, so it is left in place daripada diekstrak - dua sumber kebenaran bagi katalog penyedia akan lebih buruk dari file panjang. Dictionary key providersBullet1 didorong pertama (c822cfeb); pesan / is Di sini digitignored sehingga bangunan lokal hijau membuktikan apa-apa tentang produksi.
· SecurityService
API layanan bergerbang kanan
Daftar, dapatkan, update, dan status PATCH. Salinan Idiom ServiceTaskBookController: orgId (req) atau 401, cek kanan atau 403, sebuah string path variabel melalui parseUid atau 400, dan satu gagal () helper Memisahkan Exception IllegalArgumen menjadi 404 untuk baris yang hilang dan 400 untuk segala sesuatu yang lain. Pekerjaan yang hilang adalah 404 yang cocok dengan setiap penangan bersaudara - halaman detail menghasilkan not- ditemukan negara dari kode itu, dan 400 di sana akan menyembunyikan 'tidak ada lagi 'belakang' permintaan Anda salah bentuk '. Status ditolak transisi adalah baik-dibentuk permintaan terhadap pekerjaan yang ada, jadi ServiceJobStatusMachine menyebutkan kedua negara bagian mencapai klien sebagai Dapat dibaca 400. Membaca mengambil VIEW _ SERVICE _ works dan menulis mengambil Manvage _ Service _ works, yang merupakan Anak dari VIEW di pohon hak cipta - sehingga menulis yang diselesaikan untuk VIEW akan menjadi diam downgrade yang masih tampak gated dalam tinjauan. Tes gerbang memanggil setiap tulis dengan sesi view-only untuk membuktikan hal itu tidak terjadi. Tes drive penangan nyata daripada menyapu sumber. ServiceTaskBookRightsGateTest mengatakan dalam Javadoc sendiri bahwa suatu pemindaian sumber 'Tidak dapat membuktikan cek berjalan sebelum bekerja'; BaseosController menyelesaikan sesi dari sebuah atribut permintaan, jadi sebuah permintaan pelayan MockHttpQuery membawa daftar hak cukup untuk membaca kode status nyata kembali - dan untuk menegaskan layanan tidak pernah dicapai, yang merupakan setengah scan tidak dapat melihat: penangan yang act and then checks returns 403 having already written the row. Mutasi - dites: manajemen kanan ditukar dengan tampilan, cek kanan dihapus pemeriksaan kanan dipindahkan setelah panggilan layanan, gagal () diratakan ke selalu -400, PATCH / status berubah menjadi PUT, dan sesi org diganti oleh literal. Masing-masing menghasilkan kegagalan yang berbeda penamaan penangan pada kesalahan.
· kamo-shared-library
Org- scoped baca / tulis API untuk tugas layanan
ServiceJob telah menjadi entitas yang dipetakan dengan repositori dan ujian yang lewat dan Tidak ada cara untuk membaca baris. Ini memberikan header selesai work- order UI sudah dirender, sehingga grid dapat berhenti menghasilkan sendiri. Berbentuk pada ServiceTaskBookApi: ID String dan ISO- 8601 string pada kawat, orgId pertama pada setiap metode, setiap baca dipetakan ke tampilan INSIDE transaksi karena ServiceJob.visit adalah LAZY, dan penyewa predikat di JPQL daripada cek setelah muatan. ServiceJobRepositori sudah membawa keempat kueri, sehingga tidak tersentuh. Dua keputusan bentuk DTO harus dibuat: - TotalLabourMinutes adalah Integer, tidak pernah mengapung berjam-jam. Tugas 20 menit adalah 0.333 jam dan tiga dari mereka tidak satu jam; ServiceLineItem.labourMinutes berpendapat kasus untuk kolom dan memegang kawat juga. Hal ini disimpulkan dari jendela yang sebenarnya kunjungan ', yang merupakan satu-satunya tenaga kerja pekerjaan dapat mencapai: ServiceLineItem hang off Orde tanpa link ke pekerjaan. Waktu dihadiri, Tidak ada waktu. - Perdagangan bukan kategori UI. Sepuluh string komposit bebas terhadap lima belas Konstanta ServiceTrade, bukan 1: 1 - 'Plumbing Repair' adalah PLOMING plus WorkClass.REPAIR, dan kelas kerja hidup pada item baris. Kawat membawa pertukaran dan klien membuat label. Status bergerak melalui ServiceJobStatusMachine dan tempat lain, itulah sebabnya JobMasukan tidak memiliki anggota status dan StatusMasukan adalah catatan sendiri. Status Dapat dicapai melalui update umum akan menjadi pintu kedua ke kolom, dan pintu kedua adalah satu tidak ada yang memeriksa. Tes adalah perilaku, bukan sumber pemindaian: repositori adalah Proxy yang findByIdForOrg menghormati org dan yang findById sengaja tidak, jadi Sebuah membaca unscoped tertangkap sebagai kebocoran bukan sebagai istirahat. Mutasi - teruji - assertTransition dihapus, assertTransition dipindahkan setelah setStatus, org- scoped query swapped for findById, the minutes dikonversi ke jam, filter status pindah dari SQL, getVisits () tidak dibaca,\ @ Transaksional dihapus, dan komponen 'status' ditambahkan ke JobInput. Masing-masing menghasilkan berbeda Gagal menamai properti itu sebagai penjaga.
· kamo-login
Mengungkapkan ruang kerja yang dipilih sebelumnya, dan memberikan daftar scrollbar org
Dua hal tentang pemetik area kerja, keduanya tentang daftar yang sama. Area kerja anggota yang digunakan terakhir dipilih dan dinamai pada tombol, karena layar ini adalah konfirmasi daripada survei. Tapi tak ada yang menggulungnya. A anggota dari dua puluh organisasi yang biasanya duduk empat belas membuka daftar menampilkan baris yang disorot mereka tidak bisa melihat, di bawah judul, di atas tombol penamaan area kerja yang muncul mana-mana di layar. Apakah preselection adalah terlihat turun ke mana org yang kebetulan jatuh dalam daftar. Hal ini dibawa ke tampilan sekali, terbuka, dan hanya ketika itu benar-benar keluar dari tampilan - baris sudah di layar tetap di mana itu, karena menggulung daftar yang tidak perlu scrolling dibaca sebagai halaman bergerak di bawah Anda. Centred daripada flush ke tepi, sehingga baris di atas dan di bawah masih mengatakan "ini adalah posisi dalam daftar". 'scrollTop' daripada 'scrollIntoView': bahwa gulungan setiap nenek moyang yang dapat digulung, dan pada tanda-di layar dapat mengambil halaman dengan itu. Daftar sekarang 'posisi: relatif' sehingga baris 'offsetTop' diukur terhadap daftar itu sendiri - tepat, dan tidak seperti pantulan itu tidak bergeser oleh baris 'masuk berubah. Scrollbar adalah hal kedua. Setiap aksen di layar ini dicampur dari '--color-primary', dimana stylesheet tema telah diset ke manapun organisasi layar dicap sebagai: pemilihan rel, baris warna, Pil terakhir yang digunakan, tombol. Scrollbar adalah salah satu bagian dari krom masih rendering dalam browser 's baku abu-abu, yang pada penyewa stronglig- bermerek adalah satu-satunya abu-abu di panel. Ini adalah nada token yang sama sekarang - translucent sebuah thumb yang mendalam pada hover, trek samar, keduanya bulat. Ditulis sebagai elemen < style > daripada gaya inline sisanya komponen menggunakan, karena sebuah scrollbar hanya dapat dicapai melalui elemen pseudo-. Kedua vokaliun ada di sana dan juga tidak merupakan fallback untuk yang lain: WebKit dan Chromium membaca elemen nama samaran dan mengabaikan 'scrollbar', Firefox membaca 'scrollbar-color' dan tidak memiliki nama samaran-elemen.
· VOIPService
Implementasikan penyedia KamoPBX
Mengganti potongan. KamoPBX adalah platform Kamo sendiri, sehingga organisasi memegang no kredensial sama sekali: KamoPXAccountProvisioner membuat akun ketika sebuah telepon server ditambahkan, dan KamoPBXClient menanamkan sebuah token anak-anak yang tinggal pendek per panggilan dari Kamo 's single master credential. Auth menggunakan kunci API milik anak itu, dibaca dengan token utama dan Ditukar - dokumen dan skema 'd. Tidak didokumentasikan sebagai: {account _ id, owner _ id} klaim sengaja tidak digunakan: itu gagal terbuka, kembali full- hak istimewa Tanda PARENT tanpa kesalahan ketika pemilik _ id diabaikan. scopedToken () menegaskan token kembali adalah scoped untuk anak dan menolak seorang orangtua-scoped satu sebagai Perkembangan hak istimewa. Juga tetap dari stub: - getCallHistory kembali kosong, yang NPEs setiap penelepon yang iterasi. - CDRs adalah per- kaki, jadi sejarah runtuh pada interaksi _ id atau satu acara panggilan dua atau tiga kali. - CallResult disematkan oleh tes untuk menjawab persis / NO jawaban / BISEY / GAGAL; apapun yang lain diam-diam membuat missed- counter panggilan membaca nol, begitu tidak diketahui Menggantung menyebabkan keruntuhan ke GAGAL daripada lewat. Pengaturan platform (basis URL, akun master, kredensial admin, URL WSS) adalah @ Value- disuntikkan dan tidak pernah per-org. 246 tes lulus, 29 dari mereka baru.
· KlusterServices
Apps, media, batas manifestasi dan kebijakan jaringan
- konfigurasi. Ini membawa [zona] blok dari hari pertama sehingga daerah kedua adalah config edit, bukan operasi. Rahasia diganti dengan titik masuk pada awal kontainer daripada dipanggang ke dalam ConfigMap. - ecallmgr adalah co-located dengan FreeSWITCH dalam SATU pod: distribusi Erlang mentah, berbagi cookie, tidak ada TLS, dan membelah mereka melintasi 1500 / 1420 perbatasan MTU. - Kamailio mengiklankan 47.181.8.87 sambil mendengarkan pada 192.168.4.36. - Cilium adalah default -deny dan toEndpoints: [{}] adalah namespace- scoped, sehingga eksplisit kamo / kamovoip - > aplikasi kabobx-apps: 8000 aturan adalah apa yang berhenti Fase 3 gagal sebagai istirahat diam.
· kamo-internal
Dan mengunci kartu Enterprise
Register sisi klien-kanan - daftar, warna, ikon - dan menambahkannya ke cakupan tes non-tab set dengan catatan pada apa yang sebenarnya gerbang, karena menjaga tindakan di dua layanan daripada tab Konfigurasi. Para penyihir urutan diberikan setiap rencana aktif, Enterprise termasuk, dengan harga membaca langsung dari katalog. Server sekarang menahan bahwa harga dan menolak langganan langsung, jadi kartu itu akan menunjukkan rencana itu tidak nomor untuk dan tidak bisa membeli. Hal ini dinonaktifkan dengan catatan daripada membiarkan seseorang berjalan seluruh penyihir dan memenuhi penolakan di akhir. Server adalah batas baik cara - Menghibur PlanGuard dalam Layanan BillingService, dan POSController untuk harga. Ini hanya menyimpan perjalanan sia-sia.
· BillingService
Menolak diri melayani langganan Enterprise
Enterprise dinegosiasikan. Menyembunyikan harga adalah presentasi, ini adalah Batas. Permintaan penamaan rencana Enterprise ditolak kecuali penelepon dipegang * * * * * * * * * * * * * sehingga menebak kode rencana dan posting itu secara langsung mendapatkan jawaban yang sama seperti membaca konsol. Kebakaran hanya pada CALLER- SuPLIED kode rencana. The rekonsiliers malam mengubah hidup subscriptions melalui jalur update yang sama dengan tubuh kosong dan tidak ada HTTP Permintaan sama sekali - menjaga null akan berhenti menagih setiap pelanggan dinegosiasikan. Aturannya adalah "Anda mungkin tidak NAMA rencana ini", bukan "rencana ini mungkin tidak disentuh". Identitas diselesaikan persis seperti PlatformAdminInterceptor menyelesaikannya, dan Putusan tersisa bagi PlatformRightsResolver, jadi ini tidak dapat hanyut dari Apa yang SecurityService putuskan tentang orang yang sama. Penolakan nama tidak ada izin. Seorang pelanggan mendapatkan hal yang mereka dapat bertindak pada - hubungi kami - tidak petunjuk bahwa hak ada dan mereka mungkin mendapatkannya.
· SecurityService
Menahan harga Enterprise dari katalog
Enterprise secara langsung dinegosiasikan dengan KamoCRM, sehingga ratingnya bukan milik kita untuk mempublikasikan. Setiap permukaan yang mengutip harga rencana membaca satu titik akhir - halaman harga publik melalui proksi APIService, wizard urutan in- app dan corong registrasi - sehingga harga yang diturunkan dari muatan di sini bukan daripada meminta tiga klien masing-masing untuk mengingat untuk khusus kasus satu rencana. Panggilan internal (public-proxy) tidak menyimpan platform yang benar dan selalu disunting. Sebuah panggilan sesi dihapus kecuali penelepon memegang * * * * * * * * * * * * * * * Rencananya tetap berjalan: seorang pembaca masih perlu melihat apa yang Enterprise IS dan diberitahu untuk berbicara dengan kami. Hanya angka pergi. Ini adalah presentasi. Hiburan PlanGuard di BillingService adalah batas yang menolak pembelian - seseorang yang menebak kode rencana dan posting secara langsung mendapat jawaban yang sama seperti seseorang membaca konsol.
· kamo-internal
Tampilkan apa yang tertulis sebelum resep ditulis
Server sekarang menolak resep yang bertentangan dengan alergi yang direkam, obat pasien sudah aktif, atau pasien tidak ada yang pernah bertanya tentang alergi - dan kembali apa yang ditemukan. Ini membuatnya. Kartu di bawah bentuk daripada kesalahan inline, karena resepnya adalah utuh dan tindakan berikutnya adalah keputusan klinis, bukan koreksi. Risiko tinggi peringatan ditandai: "penisilin" dan "penisilin, kritik tinggi" bukan peringatan yang sama. Lapangan penimpa mengajukan pertanyaan - "Mengapa Anda meresepkan ini pula?" - dan pembantunya mengatakan apa jawabannya. Membuat resep alergi yang direkam adalah keputusan klinis seseorang mungkin perlu untuk membela nanti, dan alasannya adalah apa Membela itu. Tombol tetap dinonaktifkan sampai ada satu. "Jangan meresepkan" duduk di sampingnya. Sebuah peringatan dengan hanya satu jalan keluar adalah peringatan orang belajar untuk mengklik melalui. Peringatan dibersihkan pada setiap upaya segar kecuali alasan sedang dilakukan, jadi Sebuah pengakuan diketik untuk satu obat tidak dapat digunakan kembali terhadap yang berbeda.
· KlusterServices
CouchDB dan RabbitMQ pada k3m1
CouchDB q = 8 / n = 1, diverifikasi langsung. q tetap pada pembuatan basis data dan KamoPBX membuat basis data per akun ditambah MODB bulanan, jadi q berukuran sekarang untuk eventual 3-node cluster; n dapat dibangkitkan kemudian dengan mengedit peta shard, q tidak bisa. Compat otomatis diaktifkan - upstream kapal it off dan KamoPBX pola menulis fragmen buruk. Tiga bug penyebaran ditemukan dan tetap hidup: - Mounting ConfigMap atas / opt / couchdb / etc / local.d membuatnya baca-saja dan Titik masuk mati menulis docker.ini.the. Menggunakan subPath untuk berkas tunggal. - Sebuah volume Longhorn segar adalah root- dimiliki; couchdb berjalan sebagai uid 5984 dan keluar 1 tanpa keluaran log sama sekali. Ditambah fsGroup ditambah Kontainer Chown. - rabbitmq- diagnosa membutuhkan lebih dari waktu uji 1s baku; server sehat (9s startup) tapi probe gagal itu. RabbitMQ berjalan sebagai kamobbx, bukan tamu dikirim: tamu dengan loopback _ users off.
· kamo-shared-library
Katakan "byte hilang" selain "penyimpanan turun"
openRange runtuh setiap node kegagalan menjadi satu IOException, sehingga penelepon bisa melakukan tidak ada dengan itu tapi kembali 500. Peramban < img > / < video > / < audio > tidak dapat membuat 500 - itu mendapat satu bit, "gagal", dan menempel di atasnya - sehingga lampiran yang objek tidak pernah ditulis menjawab tombol play anggota dengan pergi tenang. Kegagalan mencapai kami hanya karena seseorang mengatakan "itu dikirim tetapi mereka tidak bisa memainkannya". Kedua penyebab pantas jawaban yang berlawanan. Isi absen adalah permanen dan bernilai Mengatakan jelas; penyimpanan tidak dapat dicapai adalah sementara dan layak dicoba kembali. Naikkan ObjectNotStoredException hanya ketika armada WHOLE menjawab dan setiap jawaban adalah NoSuchKey: node yang tidak dapat dicapai mungkin yang memegang objek, jadi campuran tetap sebuah IOException biasa. Memberitahu anggota file mereka adalah hilang permanen selama parsial outage adalah satu kesalahan di sini yang tidak dapat Berjalan kembali. Ini memperluas IOException, sehingga semua tujuh situs panggilan yang ada terus bekerja tidak tersentuh dan memilih ke dalam perbedaan dengan menangkap terlebih dahulu.

Alam semestamu menunggu.
Mulai gratis dalam beberapa menit. Tambahkan produk kapanpun Anda siap — tidak ada migrasi, tidak ada login baru.
Gratis selamanya — tidak diperlukan kartu kredit