Changelog

Lịch sử cập nhật DentIQ. Phiên bản mới nhất ở trên.

v1.0.2 — 2026-06-03 (Vị trí chuyên môn → dropdown)

Changed

  • Dropdown chọn bác sĩ / phụ tá nay lọc theo vị trí chuyên môn (StaffPosition) thay vì vai trò truy cập (role). "Chọn bác sĩ" = DENTIST; "Chọn phụ tá" = DENTIST + ASSISTANT + HYGIENIST + TECHNICIAN. Lý do: role được cấu hình tự do theo phòng khám nên không ổn định để xác định "ai là bác sĩ".
  • Áp dụng cho mọi dropdown: lễ tân, chẩn đoán, lịch hẹn, kê đơn, mở visit, kế hoạch điều trị.
  • Dropdown nhân viên luôn hiển thị mã số (staffCode) để phân biệt người trùng tên.

Added

  • Mã số nhân viên (staffCode) phải duy nhất trong phòng khám — trùng mã báo lỗi 409 "Mã số nhân viên đã tồn tại".
  • Form thêm/sửa nhân viên có mô tả dưới ô vị trí chuyên môn, giải thích vị trí quyết định dropdown + hoa hồng.

Fixed

  • Trường vị trí chuyên môn trong form thêm/sửa nhân viên trước đây không được lưu — nay đã gửi đúng lên server.

v1.0.1 — 2026-06-01 (Staff Compensation)

Added

  • Staff Compensation system: replaces "Doctor earning" with position-aware, multi-performer model
  • Staff positions (StaffPosition): DENTIST, ASSISTANT, HYGIENIST, TECHNICIAN, OTHER — controls automatic commission rates
  • Multi-performer per stage: primary operator + assistants with weight percent (tỉ trọng) to split commission
  • Commission rate resolution: override (staff × service) → position rate (service × position) → none
  • Permission treatment_plan.execute (56th permission code): separate from treatment_plan.manage for stage completion
  • New ASSISTANT (Phụ tá) default role: includes treatment_plan.execute, visit.manage, diagnosis.read, document.print, earnings.read

Changed

  • Doctor Earning → Staff Compensation / Thu nhập nhân sự (generalized terminology)
  • DOCTOR role: now includes treatment_plan.execute to complete stages
  • Earnings.read: non-admin users see only their own ledger (CI-08)
  • Help site updated: doctor-earnings.html → Staff Compensation content with multi-performer examples

Fixed

  • Commission calculation for multi-performer stages: weight % now applied correctly in ledger
  • Permission precedence: override > position rate > none (idempotent rule resolution)

v1.0.0 — 2026-05-28 (Initial Release)

Added

  • Patient 360 hub: unified timeline, multi-tab clinical & financial context
  • Visit management: create visit, record diagnosis, tooth chart with ICD-11 codes
  • Treatment plan: multi-stage execution, doctor assignment, warranty tracking
  • Payment & cash: payment recording, cash session reconciliation, e-invoice integration
  • E-invoice: VNPT, MISA, Viettel provider support (sandbox + production)
  • Customer Care queue: auto-task generation for unaccepted plan, no-show, outstanding balance
  • Doctor earning: commission calculation per stage completion, adjustment per month
  • Lab order: work order creation, status tracking, provider SMS/email integration
  • Appointment & Scheduler: calendar + table view, branch-aware operating hours
  • User management: role-based access control (clinic scope), permission matrix, audit log
  • Multi-clinic: tenant isolation, branch scope, cross-branch patient timeline (no cutoff)
  • Reporting: revenue, no-show rate, treatment completion, doctor performance, cash reconciliation
  • Data export: patient list, appointment, payment, e-invoice export to Excel
  • Help system: in-app help, inline tooltips, documentation site
  • Mobile responsive: full functionality on iPad/tablet, basic support for phone

Changed

  • UI localization: full Vietnamese + English support, i18n keys in database (CI-11)
  • API response shape: explicit DTO allowlists, no data leakage (CI-02, CI-08)
  • Database: Prisma ORM with transaction locks for idempotency (CI-06)
  • Cache invalidation: outbox-driven, outside transaction (CI-04)
  • Job queue: BullMQ repeatable scheduler (multi-instance safe, CI-09)

Fixed

  • Bootstrap clinic setup: fixed seed data role-permission mismatch vs run-demo.ts
  • Patient import: dedupe by phone number, warn on duplicate before merge
  • Visit-diagnosis link: historical diagnosis (visitId = null) now rendered correctly
  • E-invoice retry: exponential backoff + max 3 retry on provider timeout
  • Cash session: prevent edit after close (period lock enforcement)
  • Permission redaction: "Data hidden…" shown on missing read, not fake zero (CI-02)

Known Issues

  • OutboxProcessorService polling: BullMQ migration planned for v1.2 (currently uses bespoke FOR UPDATE SKIP LOCKED loop, documented exception per CI-09)
  • Mobile print: Print bridge not optimized for small screens; browser print fallback recommended for phone
  • Lab order SMS: Requires provider API key setup; sandbox mode uses mock SMS (not sent to real number)
  • Dark mode: Not yet implemented; light mode only in v1.0

v1.1.0 — Planned (Q3 2026)

Planned Features

  • Mobile app (iOS/Android) with offline sync support
  • Advanced BI dashboard with custom report builder
  • AI-powered diagnosis suggestion (beta)
  • SMS/Zalo auto-notification for appointment reminders
  • Pharmacy integration: inventory tracking + prescription auto-sync
  • Dark mode support
  • Keyboard shortcut command palette (⌘/)

v1.2.0 — Planned (Q4 2026)

Planned Improvements

  • BullMQ migration for outbox processor (remove polling-based processor)
  • Multi-language support: French, Spanish, Chinese
  • SAML / SSO for Enterprise customers
  • Advanced permission scoping (department-level ACL)
  • Warranty claim workflow automation

Getting Help

For questions about a specific version, features, or bug reports:

Backward compatibility

DentIQ maintains API backward compatibility within major version (v1.x). Breaking changes only occur in major version bumps (v1 → v2). Deprecation notices are given 6 months in advance.