Skip to content

Open source dental practice management platform built with dotnet blazor server & micro services.. Patient Scheduling, Claims 837D, eligibility (270/271), ERA, 835, and multi tenant says - Apache 2.0 licensed

License

Notifications You must be signed in to change notification settings

aurelianware/clouddentaloffice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

71 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Cloud Dental Office

Modern SaaS Practice Management Platform for Dental Providers

A cloud-native, microservices-based dental practice management system built from the ground up with .NET 8, Blazor Server and deep payer interoperability.

License: Apache 2.0 .NET Blazor Server Architecture


Architecture

Cloud Dental Office uses a microservices architecture with each bounded context deployed as an independent service:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Blazor Server Portal                      β”‚
β”‚         (MudBlazor Β· Dark Theme Β· Real-time Β· AI Vision)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                           β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”
                    β”‚ API Gateway β”‚  ← YARP Reverse Proxy
                    β”‚   :5200     β”‚
                    β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜
         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
         β”‚         β”‚       β”‚       β”‚          β”‚          β”‚          β”‚
    β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β” β”Œβ”€β”€β”€β”΄β”€β”€β”€β”€β” β”Œβ”΄β”€β”€β”€β”€β”€β” β”Œβ”΄β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”΄β”€β”€β”€β”€β”€β”€β” β”Œβ”΄β”€β”€β”€β”€β”€β” β”Œβ”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚Patient β”‚ β”‚Scheduleβ”‚ β”‚Claimsβ”‚ β”‚Eligibltyβ”‚ β”‚  ERA  β”‚ β”‚ Auth β”‚ β”‚Rx (EPCS) β”‚
    β”‚Service β”‚ β”‚Service β”‚ β”‚Svc   β”‚ β”‚Service  β”‚ β”‚Serviceβ”‚ β”‚  Svc β”‚ β”‚ :5107    β”‚
    β”‚ :5101  β”‚ β”‚ :5102  β”‚ β”‚:5103 β”‚ β”‚ :5104   β”‚ β”‚ :5105 β”‚ β”‚:5106 β”‚ β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜
    β””β”€β”€β”€β”€β”¬β”€β”€β”€β”˜ β””β”€β”€β”€β”¬β”€β”€β”€β”€β”˜ β””β”¬β”€β”€β”€β”€β”€β”˜ β””β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”¬β”€β”€β”€β”€β”€β”€β”˜ β””β”¬β”€β”€β”€β”€β”€β”˜       β”‚
         β”‚         β”‚       β”‚        β”‚           β”‚         β”‚             β”‚
         β”‚         β”‚       β”‚        β”‚           β”‚     β”Œβ”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”      β”‚
         β”‚         β”‚       β”‚        β”‚           β”‚     β”‚AI Vision β”‚      β”‚
         β”‚         β”‚       β”‚        β”‚           β”‚     β”‚ Service  β”‚      β”‚
         β”‚         β”‚       β”‚        β”‚           β”‚     β”‚ :5108    β”‚      β”‚
         β”‚         β”‚       β”‚        β”‚           β”‚     β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜      β”‚
         β”‚         β”‚       β”‚        β”‚           β”‚          β”‚            β”‚
         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                        PostgreSQL (per-service DB)
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚  privaseeAI Edge Devices (IP Cameras,     β”‚
              β”‚  Tablets, Raspberry Pi) + Azure AI Vision β”‚
              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Services

Service Port Description
Portal 5000 Blazor Server UI β€” dashboard, patient management, claims, scheduling, e-prescribing, AI vision
API Gateway 5200 YARP reverse proxy routing to all backend services
PatientService 5101 Patient demographics, insurance/subscriber info, search
SchedulingService 5102 Appointments, operatory management, provider calendars
ClaimsService 5103 Claim lifecycle (draft β†’ submit β†’ adjudicate), 837D generation
EligibilityService 5104 Real-time 270/271 eligibility verification
EraService 5105 835 ERA file processing, claim matching, auto-posting
AuthService 5106 JWT authentication, OpenID Connect, multi-tenant identity
PrescriptionService 5107 e-Prescribing with DoseSpot integration, EPCS compliance, Surescripts certified
VisionService 5108 AI vision platform β€” privaseeAI integration, insurance card OCR (Azure AI Vision), narcotics cabinet monitoring, consent recording, clinical note generation

Shared Libraries

  • CloudDentalOffice.Contracts β€” DTOs, integration events, and API contracts shared across services
  • CloudDentalOffice.EdiCommon β€” Clean-room X12 EDI parser and generators (837D, 270/271, 835)

Quick Start

Docker Compose (recommended)

git clone https://github.com/aurelianware/clouddentaloffice.git
cd clouddentaloffice
docker-compose up -d

Portal: http://localhost:5000 API Gateway: http://localhost:5200 Swagger (per service): http://localhost:510x/swagger

Local Development

# Prerequisites: .NET 8 SDK, PostgreSQL (or use SQLite default)

git clone https://github.com/aurelianware/clouddentaloffice.git
cd clouddentaloffice

# Restore and build all projects
dotnet restore CloudDentalOffice.sln
dotnet build CloudDentalOffice.sln

# Run individual services
dotnet run --project src/Services/PatientService
dotnet run --project src/Services/ClaimsService
dotnet run --project src/Services/ApiGateway
dotnet run --project src/CloudDentalOffice.Portal

Each service defaults to SQLite for local dev β€” no database setup required.


EDI / Payer Interoperability

Cloud Dental Office provides native support for dental EDI transactions:

Transaction Standard Status
837D Claims ASC X12 005010X224A2 βœ… Generator implemented
270/271 Eligibility ASC X12 005010X279A1 πŸ”§ In progress
835 ERA ASC X12 005010X221A1 πŸ”§ In progress
276/277 Claim Status ASC X12 005010X212 πŸ“‹ Planned
278 Prior Auth ASC X12 005010X217 πŸ“‹ Planned

Designed to pair with Cloud Health Office for end-to-end provider ↔ payer automation.


AI Vision Platform

Cloud Dental Office integrates with privaseeAI edge devices to provide intelligent vision capabilities for dental practices:

Features

Feature Description Status
Insurance Card OCR Automatic extraction of member ID, payer info, group numbers from insurance cards using Azure AI Vision βœ… Implemented
Narcotics Cabinet Monitoring Real-time detection and compliance tracking for controlled substance access with badge verification βœ… Implemented
Patient Consent Recording Video-verified consent capture with detection of patient, provider, and consent forms βœ… Implemented
Clinical Note Generation AI-assisted procedure documentation from instrument detection and procedure observations βœ… Implemented
Real-time Detection SignalR hub for live camera feeds and event streaming βœ… Implemented
Device Management Multi-device registration and monitoring (IP cameras, tablets, Raspberry Pi, mobile devices) βœ… Implemented

Detection Classes

The VisionService supports detection of:

  • Generic objects: Person, Document, Cell Phone, Backpack, Handbag (COCO-SSD)
  • Dental instruments: Handpiece, Mirror, Explorer, Forceps, Elevator, Scaler/Curette, Syringes, Suture Kit, Cotton Roll, Gauze, Impression Tray, Crown/Bridge, Dental Dam
  • Documents: Insurance cards, consent forms, ID documents, prescription pads
  • Security: Cabinet door status, badge scanning, medication vials, narcotics safe monitoring

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     privaseeAI Edge Devices                    β”‚
β”‚  (IP Cameras, Tablets, Raspberry Pi, Mobile Devices)          β”‚
β”‚                  ↓ Detection Events (HTTPS)                   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      VisionService (:5108)                     β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ Ingest Detectionsβ”‚β†’β”‚Context Correlateβ”‚β†’β”‚ Event Storage β”‚ β”‚
β”‚  β”‚  (REST API)      β”‚  β”‚   (Appt/Pt)     β”‚  β”‚  (PostgreSQL) β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                              ↓                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ SignalR Hub      β”‚  β”‚  Azure AI      β”‚  β”‚ Alert Engine  β”‚ β”‚
β”‚  β”‚ (Real-time)      β”‚  β”‚  Vision OCR    β”‚  β”‚ (Compliance)  β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              ↓
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   Portal UI β€” AI Vision Pages                  β”‚
β”‚  β€’ Vision Dashboard  β€’ Device Management  β€’ Events & Alerts    β”‚
β”‚  β€’ Insurance Scans   β€’ Consent Recording  β€’ Cabinet Access     β”‚
β”‚  β€’ Clinical Notes                                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Configuration

The VisionService supports two modes:

  • Development/Mock: Uses mock OCR and correlation providers for testing without external dependencies
  • Production: Integrates with Azure AI Vision API and live correlation engine

Configure via appsettings.json:

{
  "OcrProvider": "AzureAiVision",  // or "Mock"
  "CorrelationProvider": "Live",    // or "Mock"
  "AzureAiVision": {
    "Endpoint": "https://yourresource.cognitiveservices.azure.com/",
    "ApiKey": "your-api-key"
  }
}

Project Structure

clouddentaloffice/
β”œβ”€β”€ CloudDentalOffice.sln          # Solution file
β”œβ”€β”€ Directory.Build.props          # Shared build settings
β”œβ”€β”€ docker-compose.yml             # Full stack orchestration
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ CloudDentalOffice.Portal/  # Blazor Server UI (your existing Portal)
β”‚   β”œβ”€β”€ CloudDentalOffice.Portal.Tests/
β”‚   β”œβ”€β”€ Services/
β”‚   β”‚   β”œβ”€β”€ ApiGateway/            # YARP reverse proxy
β”‚   β”‚   β”œβ”€β”€ PatientService/        # Patient bounded context
β”‚   β”‚   β”œβ”€β”€ SchedulingService/     # Scheduling bounded context
β”‚   β”‚   β”œβ”€β”€ ClaimsService/         # Claims bounded context
β”‚   β”‚   β”œβ”€β”€ EligibilityService/    # 270/271 bounded context
β”‚   β”‚   β”œβ”€β”€ EraService/            # 835 bounded context
β”‚   β”‚   β”œβ”€β”€ AuthService/           # Identity bounded context
β”‚   β”‚   β”œβ”€β”€ PrescriptionService/   # e-Prescribing (DoseSpot, EPCS)
β”‚   β”‚   └── VisionService/         # AI Vision (privaseeAI, Azure AI)
β”‚   └── Shared/
β”‚       β”œβ”€β”€ CloudDentalOffice.Contracts/   # Shared DTOs & events
β”‚       └── CloudDentalOffice.EdiCommon/   # X12 parser & generators
β”œβ”€β”€ infrastructure/
β”‚   β”œβ”€β”€ docker/                    # Per-service Dockerfiles
β”‚   β”œβ”€β”€ k8s/                       # Kubernetes manifests
β”‚   └── azure/                     # Azure Bicep/ARM templates
β”œβ”€β”€ scripts/
β”‚   └── seeds/                     # Database init & seed data
└── docs/                          # Architecture & API documentation

Technology Stack

  • .NET 8 β€” All services and portal
  • Blazor Server with MudBlazor β€” Responsive UI with dark theme
  • Entity Framework Core β€” Multi-provider (PostgreSQL, SQL Server, SQLite)
  • YARP β€” API Gateway / reverse proxy
  • Docker + Kubernetes β€” Container orchestration
  • Azure β€” Cloud deployment (Bicep IaC templates)
  • JWT / OpenID Connect β€” Authentication and multi-tenant identity
  • SSH.NET β€” SFTP for clearinghouse file exchange
  • DoseSpot β€” Electronic prescription (eRx) and EPCS integration

Roadmap

  • Microservices architecture with per-service databases
  • API Gateway with YARP
  • Patient, Scheduling, Claims, Eligibility, ERA, Auth services
  • e-Prescribing service with DoseSpot integration (EPCS, Surescripts)
  • AI Vision service β€” privaseeAI integration for dental practice automation
  • Insurance card OCR with Azure AI Vision
  • Narcotics cabinet monitoring and compliance tracking
  • Video consent recording and verification
  • Clinical note generation from procedure observations
  • Clean-room X12 837D claim generator
  • Docker Compose full-stack deployment
  • Blazor Portal integration with microservices via API Gateway
  • Kubernetes deployment manifests (DOKS)
  • CI/CD with GitHub Actions
  • Send 837D Claim transactions to payer SFTP
  • Full 270/271 real-time eligibility checks
  • 835 ERA auto-posting & reconciliation
  • 276/277 claim status polling
  • 278 prior authorization
  • Multi-location / DSO support
  • Azure AD B2C / OpenID Connect auth
  • Kubernetes Helm charts
  • Availity Integration
  • Change Healthcare Integration

Related Projects

  • Cloud Health Office β€” Payer-side EDI platform (X12, FHIR R4, CMS-0057-F compliance)
  • Together, Cloud Dental Office + Cloud Health Office provide complete provider ↔ payer interoperability

License

Apache License 2.0 β€” Copyright 2025 Aurelianware, Inc.

About

Open source dental practice management platform built with dotnet blazor server & micro services.. Patient Scheduling, Claims 837D, eligibility (270/271), ERA, 835, and multi tenant says - Apache 2.0 licensed

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages