Add clinical device registry, browser wedge scan, and local agent API.
Deploy Ladill Care / deploy (push) Successful in 1m39s

Branch-scoped Care devices with hashed agent tokens, patient barcode lookup/labels, and provenance-aware vitals from a minimal device agent (Pro for agent hardware; wedge free).

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-07-17 14:28:46 +00:00
co-authored by Cursor
parent 1da90203e8
commit e0a7a64d38
37 changed files with 1970 additions and 10 deletions
+7
View File
@@ -4,6 +4,7 @@ use App\Http\Controllers\Api\AppointmentController;
use App\Http\Controllers\Api\AssessmentController;
use App\Http\Controllers\Api\BillController;
use App\Http\Controllers\Api\ConsultationController;
use App\Http\Controllers\Api\DeviceAgentController;
use App\Http\Controllers\Api\DrugController;
use App\Http\Controllers\Api\InvestigationController;
use App\Http\Controllers\Api\PathwayController;
@@ -17,6 +18,12 @@ Route::get('/health', fn () => response()->json(['status' => 'ok', 'app' => 'car
Route::post('/service-events', ServiceEventController::class)->name('api.service-events');
Route::middleware(['care.device', 'throttle:care-device'])->prefix('v1/device-agent')->group(function () {
Route::post('/heartbeat', [DeviceAgentController::class, 'heartbeat'])->name('api.device-agent.heartbeat');
Route::post('/vitals', [DeviceAgentController::class, 'storeVitals'])->name('api.device-agent.vitals');
Route::post('/samples/collect', [DeviceAgentController::class, 'collectSample'])->name('api.device-agent.samples.collect');
});
Route::middleware(['auth:sanctum', 'care.setup'])->prefix('v1')->group(function () {
Route::get('/patients', [PatientController::class, 'index'])->name('api.patients.index');
Route::post('/patients', [PatientController::class, 'store'])->name('api.patients.store');
+12
View File
@@ -12,6 +12,7 @@ use App\Http\Controllers\Care\BranchController;
use App\Http\Controllers\Care\ConsultationController;
use App\Http\Controllers\Care\DashboardController;
use App\Http\Controllers\Care\DepartmentController;
use App\Http\Controllers\Care\DeviceController;
use App\Http\Controllers\Care\DrugController;
use App\Http\Controllers\Care\InvestigationController;
use App\Http\Controllers\Care\InvestigationTypeController;
@@ -61,9 +62,11 @@ Route::middleware(['auth', 'platform.session'])->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index'])->name('care.dashboard');
Route::get('/patients', [PatientController::class, 'index'])->name('care.patients.index');
Route::get('/patients/scan', [PatientController::class, 'scanLookup'])->name('care.patients.scan');
Route::get('/patients/create', [PatientController::class, 'create'])->name('care.patients.create');
Route::post('/patients', [PatientController::class, 'store'])->name('care.patients.store');
Route::get('/patients/{patient}', [PatientController::class, 'show'])->name('care.patients.show');
Route::get('/patients/{patient}/label', [PatientController::class, 'label'])->name('care.patients.label');
Route::post('/patients/{patient}/email', [PatientMessageController::class, 'sendEmail'])->name('care.patients.email');
Route::post('/patients/{patient}/sms', [PatientMessageController::class, 'sendSms'])->name('care.patients.sms');
Route::get('/patients/{patient}/edit', [PatientController::class, 'edit'])->name('care.patients.edit');
@@ -192,6 +195,15 @@ Route::middleware(['auth', 'platform.session'])->group(function () {
Route::get('/settings/branches/{branch}/edit', [BranchController::class, 'edit'])->name('care.branches.edit');
Route::put('/settings/branches/{branch}', [BranchController::class, 'update'])->name('care.branches.update');
Route::get('/settings/devices', [DeviceController::class, 'index'])->name('care.devices.index');
Route::get('/settings/devices/create', [DeviceController::class, 'create'])->name('care.devices.create');
Route::post('/settings/devices', [DeviceController::class, 'store'])->name('care.devices.store');
Route::get('/settings/devices/{device}/edit', [DeviceController::class, 'edit'])->name('care.devices.edit');
Route::put('/settings/devices/{device}', [DeviceController::class, 'update'])->name('care.devices.update');
Route::delete('/settings/devices/{device}', [DeviceController::class, 'destroy'])->name('care.devices.destroy');
Route::post('/settings/devices/{device}/token', [DeviceController::class, 'regenerateToken'])->name('care.devices.token.regenerate');
Route::delete('/settings/devices/{device}/token', [DeviceController::class, 'revokeToken'])->name('care.devices.token.revoke');
Route::redirect('/branches', '/settings/branches');
Route::redirect('/branches/create', '/settings/branches/create');