finish bills , po , jobcards relational fields creation

This commit is contained in:
2026-04-13 18:48:15 +03:00
parent 3eb471a604
commit 020ffccfd6
41 changed files with 11973 additions and 467 deletions
+140 -125
View File
@@ -1,20 +1,24 @@
# Garage Management System — Feature Implementation Checklist
> **Generated**: April 3, 2026
> **Generated**: April 11, 2026
> **Dependency Order Reference**: Postman API Collection (`packages/api/postman/collection.json`)
> **Status Source of Truth**: Implemented API clients in `packages/api/src/clients` and implemented dashboard modules in `apps/dashboard/modules`
> **Status Source of Truth**: API clients in `packages/api/src/clients`, route pages in `apps/dashboard/app`, and dashboard modules in `apps/dashboard/modules`
> **Ordered by**: Dependency level (no dependencies → most complex relations)
---
## How to Read This Checklist
- **✅ Client + UI Module** = matching API client exists and a matching dashboard module exists
- **🔧 API Client Only** = matching API client exists, but no dedicated dashboard module was found
- **🧩 UI Module Only** = matching dashboard module exists, but no matching API client was found
- **⬜ Not Started** = no matching client or module was found
- **Module** = a dedicated top-level form, inline form, or resource subform inside `apps/dashboard/modules`
- **Lookup usage only** (for example an async select inside another form) does **not** count as a module
- **✅ Client + UI** = a matching API client exists and at least one dedicated route page or module exists
- **🔧 Client Only** = a matching API client exists, but no dedicated route page or module was found
- **🧩 UI Only** = a dedicated route page or module exists, but no matching API client was found
- **⬜ Not Started** = no client, page, or module was found
- **Client** paths are relative to `packages/api/src/clients`
- **Page** paths are relative to `apps/dashboard/app`
- **Module** paths are relative to `apps/dashboard/modules`
- **Module** includes top-level forms, CRUD dialogs, detail subforms, and inline forms
- **Lookup usage only** (for example an async select or picker field) does **not** count as module coverage
- **Page coverage** only counts when that route actively manages the resource itself; a parent route that happens to exist for a neighboring resource does not count
- **Depends on** = other resources that must exist before this one (based on foreign keys in the Postman collection)
---
@@ -23,39 +27,39 @@
These resources have no foreign key references. They are the foundation.
| # | Resource | Status | Implementation Details |
|---|----------|--------|----------------------|
| 1 | Auth (Login / Profile / Logout) | ✅ Client + UI Module | Client: `AuthClient` · Module: `auth/login-form.tsx` |
| 2 | Countries | 🔧 API Client Only | Client: `GeoClient.countries()` · Module: none |
| 3 | Customer Types | 🔧 API Client Only | Client: `CustomersClient.listCustomerTypes()` · Module: none |
| 4 | Referral Sources | 🔧 API Client Only | Client: `ReferralSourcesClient` · Module: none |
| 5 | Payment Terms | 🔧 API Client Only | Client: `PaymentTermsClient` · Module: none |
| 6 | Payment Modes | 🔧 API Client Only | Client: `PaymentsClient.listModes()` · Module: none |
| 7 | Shop Types | ✅ Client + UI Module | Client: `ShopTypesClient` · Module: `settings/shop-type/shop-type-form.tsx` |
| 8 | Vehicle Body Types | ✅ Client + UI Module | Client: `VehicleAttributesClient.listBodyTypes()` · Module: `vehicles/inline-forms/body-type-inline-form.tsx` |
| 9 | Vehicle Fuel Types | ✅ Client + UI Module | Client: `VehicleAttributesClient.listFuelTypes()` · Module: `vehicles/inline-forms/fuel-type-inline-form.tsx` |
| 10 | Vehicle Transmissions | ✅ Client + UI Module | Client: `VehicleAttributesClient.listTransmissions()` · Module: `vehicles/inline-forms/transmission-inline-form.tsx` |
| 11 | Vehicle Colors | ✅ Client + UI Module | Client: `VehicleAttributesClient.listColors()` · Module: `vehicles/inline-forms/color-inline-form.tsx` |
| 12 | Document Types | ✅ Client + UI Module | Client: `VehicleDocumentsClient.listDocumentTypes()` · Module: `vehicles/inline-forms/document-type-inline-form.tsx` |
| 13 | Unit Types | ✅ Client + UI Module | Client: `InventoryClient.listUnitTypes()` · Module: `services/inline-forms/unit-type-inline-form.tsx` |
| 14 | Labels | 🔧 API Client Only | Client: `LabelsClient` · Module: none |
| 15 | Insurance Types | 🔧 API Client Only | Client: `InsuranceTypesClient` · Module: none |
| 16 | Inspection Categories | ✅ Client + UI Module | Client: `InspectionsClient.listCategories()` · Module: `inspections/inline-forms/inspection-category-inline-form.tsx` |
| 17 | Check Point Labels | 🔧 API Client Only | Client: `InspectionsClient.listCheckpointLabels()` · Module: none |
| 18 | Quick Remarks | 🔧 API Client Only | Client: `EstimatesClient.listQuickRemarks()` · Module: none |
| 19 | Quick Notes | 🔧 API Client Only | Client: `EstimatesClient.listQuickNotes()` · Module: none |
| 20 | Reasons | ⬜ Not Started | Client: none found · Module: none |
| 21 | Task Types | 🔧 API Client Only | Client: `TasksClient.listTypes()` · Module: none |
| 22 | Task Sections | 🔧 API Client Only | Client: `TasksClient.listSections()` · Module: none |
| 23 | Invoice Labels | 🔧 API Client Only | Client: `InvoicesClient.listLabels()` · Module: none |
| 24 | Holiday Years | ✅ Client + UI Module | Client: `HolidayYearsClient` · Module: `settings/holiday-year/holiday-year-form.tsx` |
| 25 | Taxes | ✅ Client + UI Module | Client: `TaxesClient` · Module: `settings/tax-rates/tax-form.tsx` |
| 26 | Departments | ✅ Client + UI Module | Client: `DepartmentsClient` · Module: `services/inline-forms/department-inline-form.tsx` |
| 27 | Labor Rates | 🔧 API Client Only | Client: `InventoryClient.listLaborRates()` · Module: none |
| 28 | Vendors | ✅ Client + UI Module | Client: `VendorsClient` · Module: `vendors/vendor-form.tsx` |
| 29 | Shop Calendars | ✅ Client + UI Module | Client: `ShopCalendarsClient` · Module: `shop-calendars/shop-calendar-form.tsx` |
| 30 | Shop Timings | ✅ Client + UI Module | Client: `ShopTimingsClient` · Module: `shop-timings/shop-timing-form.tsx` |
| 31 | Settings | ⬜ Not Started | Client: none in `packages/api/src/clients` · Module: none (tracked setting resources are listed separately) |
| # | Resource | Status | Client | Page | Module |
|---|----------|--------|--------|------|--------|
| 1 | Auth (Login / Profile / Logout) | ✅ Client + UI | `auth.ts` | `(auth)/login/page.tsx` | `auth/login-form.tsx` |
| 2 | Countries | 🔧 Client Only | `geo.ts` | — | — |
| 3 | Customer Types | 🔧 Client Only | `customers.ts` | — | — |
| 4 | Referral Sources | 🔧 Client Only | `referral-sources.ts` | — | — |
| 5 | Payment Terms | 🔧 Client Only | `payment-terms.ts` | — | — |
| 6 | Payment Modes | 🔧 Client Only | `payment-modes.ts` | — | — |
| 7 | Shop Types | ✅ Client + UI | `shop-types.ts` | `(authenticated)/settings/shop-type/page.tsx` | `settings/shop-type/shop-type-form.tsx` |
| 8 | Vehicle Body Types | ✅ Client + UI | `vehicle-attributes.ts` | — | `vehicles/inline-forms/body-type-inline-form.tsx` |
| 9 | Vehicle Fuel Types | ✅ Client + UI | `vehicle-attributes.ts` | — | `vehicles/inline-forms/fuel-type-inline-form.tsx` |
| 10 | Vehicle Transmissions | ✅ Client + UI | `vehicle-attributes.ts` | — | `vehicles/inline-forms/transmission-inline-form.tsx` |
| 11 | Vehicle Colors | ✅ Client + UI | `vehicle-attributes.ts` | — | `vehicles/inline-forms/color-inline-form.tsx` |
| 12 | Document Types | ✅ Client + UI | `vehicle-documents.ts` | — | `vehicles/inline-forms/document-type-inline-form.tsx` |
| 13 | Unit Types | ✅ Client + UI | `inventory.ts` | — | `services/inline-forms/unit-type-inline-form.tsx` |
| 14 | Labels | 🔧 Client Only | `labels.ts` | — | — |
| 15 | Insurance Types | ✅ Client + UI | `insurance-types.ts` | `(authenticated)/settings/insurance-types/page.tsx` | `settings/insurance-types/insurance-type-form.tsx` |
| 16 | Inspection Categories | ✅ Client + UI | `inspections.ts` | — | `inspections/inline-forms/inspection-category-inline-form.tsx` |
| 17 | Check Point Labels | 🔧 Client Only | `inspections.ts` | — | — |
| 18 | Quick Remarks | 🔧 Client Only | `quick-remarks.ts` | — | — |
| 19 | Quick Notes | 🔧 Client Only | `quick-notes.ts` | — | — |
| 20 | Reasons | 🔧 Client Only | `reasons.ts` | — | — |
| 21 | Task Types | ✅ Client + UI | `task-types.ts` | — | `tasks/task-type-form.tsx`, `tasks/task-type-crud-dialog.tsx` |
| 22 | Task Sections | ✅ Client + UI | `task-sections.ts` | — | `tasks/task-section-form.tsx`, `tasks/task-section-crud-dialog.tsx` |
| 23 | Invoice Labels | 🔧 Client Only | `invoices.ts` | — | — |
| 24 | Holiday Years | ✅ Client + UI | `holiday-years.ts` | `(authenticated)/productivity/holidays/page.tsx` | `settings/holiday-year/holiday-year-form.tsx` |
| 25 | Taxes | ✅ Client + UI | `taxes.ts` | `(authenticated)/settings/tax-rates/page.tsx` | `settings/tax-rates/tax-form.tsx` |
| 26 | Departments | ✅ Client + UI | `departments.ts` | `(authenticated)/settings/departments/page.tsx` | `settings/departments/department-form.tsx` |
| 27 | Labor Rates | 🔧 Client Only | `inventory.ts` | — | — |
| 28 | Vendors | ✅ Client + UI | `vendors.ts` | `(authenticated)/purchase/vendor/page.tsx` | `vendors/vendor-form.tsx` |
| 29 | Shop Calendars | ✅ Client + UI | `shop-calendars.ts` | `(authenticated)/productivity/shop-calendars/page.tsx` | `shop-calendars/shop-calendar-form.tsx` |
| 30 | Shop Timings | ✅ Client + UI | `shop-timings.ts` | `(authenticated)/productivity/shop-timings/page.tsx` | `shop-timings/shop-timing-form.tsx` |
| 31 | Settings | ✅ Client + UI | `settings.ts`, `configurations.ts` | `(authenticated)/settings/company/page.tsx`, `(authenticated)/settings/configurations/preferences/*/page.tsx` | `settings/company/settings-form.tsx`, `settings/configurations/*-form.tsx` |
---
@@ -63,13 +67,13 @@ These resources have no foreign key references. They are the foundation.
These depend only on Level 0 resources.
| # | Resource | Status | Depends On | Implementation Details |
|---|----------|--------|------------|----------------------|
| 32 | States | 🔧 API Client Only | Countries | Client: `GeoClient.states()` · Module: none |
| 33 | Inventory Categories | ✅ Client + UI Module | Shop Types | Client: `InventoryClient.listCategories()` · Module: `services/inline-forms/inventory-category-inline-form.tsx` |
| 34 | Vendor Addresses | 🔧 API Client Only | Vendors, Countries, States | Client: `VendorsClient.createAddress()` / `getAddress()` · Module: none |
| 35 | Holidays | ⬜ Not Started | Holiday Years | Client: none dedicated · Module: none (`HolidayYearForm` covers years only) |
| 36 | Make and Models | ⬜ Not Started | Shop Types, Body Types, Fuel Types, Transmissions | Client: none dedicated · Module: none (vehicle form uses plain make/model fields) |
| # | Resource | Status | Depends On | Client | Page | Module |
|---|----------|--------|------------|--------|------|--------|
| 32 | States | 🔧 Client Only | Countries | `geo.ts` | — | — |
| 33 | Inventory Categories | ✅ Client + UI | Shop Types | `inventory-categories.ts` | — | `expense-items/inventory-category-form.tsx`, `expense-items/inventory-category-crud-dialog.tsx`, `services/inline-forms/inventory-category-inline-form.tsx` |
| 34 | Vendor Addresses | 🔧 Client Only | Vendors, Countries, States | `vendors.ts` | — | — |
| 35 | Holidays | 🔧 Client Only | Holiday Years | `holidays.ts` | — | — |
| 36 | Make and Models | ✅ Client + UI | Shop Types, Body Types, Fuel Types, Transmissions | `make-and-models.ts` | `(authenticated)/settings/make-and-models/page.tsx` | `settings/make-and-models/make-and-model-form.tsx` |
---
@@ -77,11 +81,11 @@ These depend only on Level 0 resources.
These depend on Level 0 + Level 1 resources and are used by many higher-level features.
| # | Resource | Status | Depends On | Implementation Details |
|---|----------|--------|------------|----------------------|
| 37 | Customers | ✅ Client + UI Module | Customer Types, Referral Sources, Payment Terms, Countries, States | Client: `CustomersClient` · Module: `customers/customer-form.tsx` |
| 38 | Vehicles | ✅ Client + UI Module | Shop Types, Body Types, Fuel Types, Transmissions, Colors | Client: `VehiclesClient` · Module: `vehicles/vehicle-form.tsx` |
| 39 | Expense Items | 🔧 API Client Only | Inventory Categories, Unit Types, Departments | Client: `ExpensesClient.listItems()` / `createItem()` · Module: none |
| # | Resource | Status | Depends On | Client | Page | Module |
|---|----------|--------|------------|--------|------|--------|
| 37 | Customers | ✅ Client + UI | Customer Types, Referral Sources, Payment Terms, Countries, States | `customers.ts` | `(authenticated)/sales/customers/page.tsx` | `customers/customer-form.tsx` |
| 38 | Vehicles | ✅ Client + UI | Shop Types, Body Types, Fuel Types, Transmissions, Colors | `vehicles.ts` | `(authenticated)/sales/vehicles/page.tsx` | `vehicles/vehicle-form.tsx` |
| 39 | Expense Items | ✅ Client + UI | Inventory Categories, Unit Types, Departments | `expense-items.ts` | `(authenticated)/items/expense-item/page.tsx` | `expense-items/expense-item-form.tsx` |
---
@@ -89,15 +93,15 @@ These depend on Level 0 + Level 1 resources and are used by many higher-level fe
These depend on Level 0–2 resources.
| # | Resource | Status | Depends On | Implementation Details |
|---|----------|--------|------------|----------------------|
| 40 | Employees | ✅ Client + UI Module | Departments, Shop Calendars, Shop Timings | Client: `EmployeesClient` · Module: `employees/employee-form.tsx` |
| 41 | Parts | ✅ Client + UI Module | Shop Types, Inventory Categories, Unit Types, Departments, Vendors | Client: `PartsClient` · Module: `parts/part-form.tsx` |
| 42 | Services | ✅ Client + UI Module | Shop Types, Inventory Categories, Unit Types, Departments | Client: `ServicesClient` · Module: `services/service-form.tsx` |
| 43 | Vehicle Documents | ✅ Client + UI Module | Vehicles, Document Types | Client: `VehicleDocumentsClient.listDocuments()` / `createDocument()` · Module: `vehicles/vehicle-document-form.tsx` |
| 44 | Vehicle Mileage | ✅ Client + UI Module | Vehicles | Client: `VehicleDocumentsClient.listMileage()` / `createMileage()` · Module: `vehicles/mileage-form.tsx` |
| 45 | Time Sheets | ⬜ Not Started | Employees | Client: none found · Module: none |
| 46 | Invoice Sequences | ⬜ Not Started | Departments | Client: none found · Module: none |
| # | Resource | Status | Depends On | Client | Page | Module |
|---|----------|--------|------------|--------|------|--------|
| 40 | Employees | ✅ Client + UI | Departments, Shop Calendars, Shop Timings | `employees.ts` | `(authenticated)/productivity/employees/page.tsx` | `employees/employee-form.tsx` |
| 41 | Parts | ✅ Client + UI | Shop Types, Inventory Categories, Unit Types, Departments, Vendors | `parts.ts` | `(authenticated)/items/parts/page.tsx` | `parts/part-form.tsx` |
| 42 | Services | ✅ Client + UI | Shop Types, Inventory Categories, Unit Types, Departments | `services.ts` | `(authenticated)/items/services/page.tsx` | `services/service-form.tsx` |
| 43 | Vehicle Documents | ✅ Client + UI | Vehicles, Document Types | `vehicle-documents.ts` | `(authenticated)/sales/vehicles/[id]/documents/page.tsx` | `vehicles/vehicle-document-form.tsx` |
| 44 | Vehicle Mileage | ✅ Client + UI | Vehicles | `vehicle-documents.ts` | `(authenticated)/sales/vehicles/[id]/mileage/page.tsx` | `vehicles/mileage-form.tsx` |
| 45 | Time Sheets | 🔧 Client Only | Employees | `time-sheets.ts` | — | — |
| 46 | Invoice Sequences | 🔧 Client Only | Departments | `invoice-sequences.ts` | — | — |
---
@@ -105,13 +109,13 @@ These depend on Level 0–2 resources.
These depend on Level 0–3 resources.
| # | Resource | Status | Depends On | Implementation Details |
|---|----------|--------|------------|----------------------|
| 47 | Service Groups | ✅ Client + UI Module | Shop Types, Inventory Categories, Unit Types, Departments | Client: `ServiceGroupsClient` · Module: `service-groups/service-group-form.tsx` |
| 48 | Service Group Includes | ⬜ Not Started | Service Groups | Client: none dedicated in `ServiceGroupsClient` · Module: none |
| 49 | Service Group Services | ⬜ Not Started | Service Groups, Services, Labor Rates, Taxes | Client: none dedicated in `ServiceGroupsClient` · Module: none |
| 50 | Service Group Parts | ⬜ Not Started | Service Groups, Parts, Taxes | Client: none dedicated in `ServiceGroupsClient` · Module: none |
| 51 | Service Group Pricings | ⬜ Not Started | Service Groups, Shop Types, Labor Rates, Fuel Types, Body Types | Client: none dedicated in `ServiceGroupsClient` · Module: none |
| # | Resource | Status | Depends On | Client | Page | Module |
|---|----------|--------|------------|--------|------|--------|
| 47 | Service Groups | ✅ Client + UI | Shop Types, Inventory Categories, Unit Types, Departments | `service-groups.ts` | `(authenticated)/items/service-group/page.tsx` | `service-groups/service-group-form.tsx` |
| 48 | Service Group Includes | 🔧 Client Only | Service Groups | `service-group-includes.ts` | — | — |
| 49 | Service Group Services | 🔧 Client Only | Service Groups, Services, Labor Rates, Taxes | `service-group-services.ts` | — | — |
| 50 | Service Group Parts | 🔧 Client Only | Service Groups, Parts, Taxes | `service-group-parts.ts` | — | — |
| 51 | Service Group Pricings | 🔧 Client Only | Service Groups, Shop Types, Labor Rates, Fuel Types, Body Types | `service-group-pricings.ts` | — | — |
---
@@ -119,12 +123,12 @@ These depend on Level 0–3 resources.
These are core garage workflow features depending on customers, vehicles, employees, etc.
| # | Resource | Status | Depends On | Implementation Details |
|---|----------|--------|------------|----------------------|
| 52 | Inspections | ✅ Client + UI Module | Customers, Vehicles, Departments, Inspection Categories, Employees | Client: `InspectionsClient` · Module: `inspections/inspection-form.tsx` |
| 53 | Inspection Check Points | 🔧 API Client Only | Inspections, Check Point Labels | Client: `InspectionsClient.listCheckpoints()` / `createCheckpoint()` · Module: none |
| 54 | Estimates | ✅ Client + UI Module | Customers, Vehicles, Departments, Labels | Client: `EstimatesClient` · Module: `estimates/estimate-form.tsx` |
| 55 | Job Cards | ✅ Client + UI Module | Customers, Vehicles, Departments, Labels, Employees | Client: `JobCardsClient` · Module: `job-cards/job-card-form.tsx` + remark/recommendation subforms |
| # | Resource | Status | Depends On | Client | Page | Module |
|---|----------|--------|------------|--------|------|--------|
| 52 | Inspections | ✅ Client + UI | Customers, Vehicles, Departments, Inspection Categories, Employees | `inspections.ts` | `(authenticated)/sales/inspections/page.tsx` | `inspections/inspection-form.tsx` |
| 53 | Inspection Check Points | ✅ Client + UI | Inspections, Check Point Labels | `inspections.ts` | `(authenticated)/sales/inspections/[id]/checkpoints/page.tsx` | — |
| 54 | Estimates | ✅ Client + UI | Customers, Vehicles, Departments, Labels | `estimates.ts` | `(authenticated)/sales/estimates/page.tsx` | `estimates/estimate-form.tsx` |
| 55 | Job Cards | ✅ Client + UI | Customers, Vehicles, Departments, Labels, Employees | `job-cards.ts` | `(authenticated)/sales/job-cards/page.tsx` | `job-cards/job-card-form.tsx` + related subforms |
---
@@ -132,15 +136,15 @@ These are core garage workflow features depending on customers, vehicles, employ
These depend on Job Cards and other Level 5 resources.
| # | Resource | Status | Depends On | Implementation Details |
|---|----------|--------|------------|----------------------|
| 56 | Appointments | ✅ Client + UI Module | Customers, Vehicles, Departments, Job Cards, Employees, Labels | Client: `AppointmentsClient` · Module: `appointments/appointment-form.tsx` |
| 57 | Tasks | 🔧 API Client Only | Task Types, Task Sections, Job Cards, Employees, Departments | Client: `TasksClient` · Module: none |
| 58 | Purchase Orders | 🔧 API Client Only | Job Cards, Vendors, Departments, Labels, Parts | Client: `PurchaseOrdersClient` · Module: none |
| 59 | Bills | 🔧 API Client Only | Job Cards, Vendors, Vendor Addresses, Payment Terms, Departments, Labels, Parts | Client: `ExpensesClient.listBills()` / `createBill()` · Module: none |
| 60 | Expenses | ✅ Client + UI Module | Job Cards, Expense Items, Vendors, Departments, Labels | Client: `ExpensesClient.listExpenses()` / `createExpense()` · Module: `expenses/expense-form.tsx` |
| 61 | Payment Received | ✅ Client + UI Module | Job Cards, Payment Modes, Customers | Client: `PaymentsClient.listReceived()` / `createReceived()` · Module: `payment-received/payment-received-form.tsx` |
| 62 | Inventory Adjustments | ⬜ Not Started | Parts, Job Cards, Invoices, Reasons | Client: none found · Module: none |
| # | Resource | Status | Depends On | Client | Page | Module |
|---|----------|--------|------------|--------|------|--------|
| 56 | Appointments | ✅ Client + UI | Customers, Vehicles, Departments, Job Cards, Employees, Labels | `appointments.ts` | `(authenticated)/calendar/appointment/list/page.tsx` | `appointments/appointment-form.tsx` |
| 57 | Tasks | ✅ Client + UI | Task Types, Task Sections, Job Cards, Employees, Departments | `tasks.ts` | `(authenticated)/productivity/tasks/page.tsx` | `tasks/task-form.tsx` |
| 58 | Purchase Orders | ✅ Client + UI | Job Cards, Vendors, Departments, Labels, Parts | `purchase-orders.ts` | `(authenticated)/purchase/purchase-order/page.tsx` | `purchase-orders/purchase-order-form.tsx` |
| 59 | Bills | ✅ Client + UI | Job Cards, Vendors, Vendor Addresses, Payment Terms, Departments, Labels, Parts | `bills.ts` | `(authenticated)/purchase/bill/page.tsx` | `bills/bill-form.tsx` |
| 60 | Expenses | ✅ Client + UI | Job Cards, Expense Items, Vendors, Departments, Labels | `expenses.ts` | `(authenticated)/purchase/expense/page.tsx` | `expenses/expense-form.tsx` |
| 61 | Payment Received | ✅ Client + UI | Job Cards, Payment Modes, Customers | `payment-received.ts` | `(authenticated)/sales/payment-received/page.tsx` | `payment-received/payment-received-form.tsx` |
| 62 | Inventory Adjustments | ✅ Client + UI | Parts, Job Cards, Invoices, Reasons | `inventory-adjustments.ts` | `(authenticated)/items/adjustment/page.tsx` | `inventory-adjustments/inventory-adjustment-form.tsx` |
---
@@ -148,14 +152,14 @@ These depend on Job Cards and other Level 5 resources.
These are the most complex resources with the deepest dependency chains.
| # | Resource | Status | Depends On | Implementation Details |
|---|----------|--------|------------|----------------------|
| 63 | Invoices | ✅ Client + UI Module | Customers, Vehicles, Departments, Invoice Sequences, Labels, Inspection Categories, Parts, Services, Expense Items, Service Groups | Client: `InvoicesClient` · Module: `invoices/invoice-form.tsx` |
| 64 | Invoice Documents | ✅ Client + UI Module | Invoices, Customers, Vehicles, Document Types | Client: `InvoicesClient.listDocuments()` / `createDocument()` · Module: `invoices/invoice-document-form.tsx` |
| 65 | Invoice Notes | ✅ Client + UI Module | Invoices | Client: `InvoicesClient.listNotes()` / `createNote()` · Module: `invoices/invoice-note-form.tsx` |
| 66 | Credit Notes | ⬜ Not Started | Customers, Parts, Services, Expenses, Inspection Categories, Labels | Client: none found · Module: none |
| 67 | Payment Mades | ⬜ Not Started | Vendors, Employees, Bills, Expenses, Payment Modes | Client: none found · Module: none |
| 68 | Vendor Credits | ⬜ Not Started | Vendors, Departments, Parts, Services, Expenses, Labels | Client: none found · Module: none |
| # | Resource | Status | Depends On | Client | Page | Module |
|---|----------|--------|------------|--------|------|--------|
| 63 | Invoices | ✅ Client + UI | Customers, Vehicles, Departments, Invoice Sequences, Labels, Inspection Categories, Parts, Services, Expense Items, Service Groups | `invoices.ts` | `(authenticated)/sales/invoice/page.tsx` | `invoices/invoice-form.tsx` |
| 64 | Invoice Documents | ✅ Client + UI | Invoices, Customers, Vehicles, Document Types | `invoices.ts` | `(authenticated)/sales/invoice/[id]/documents/page.tsx` | `invoices/invoice-document-form.tsx` |
| 65 | Invoice Notes | ✅ Client + UI | Invoices | `invoices.ts` | `(authenticated)/sales/invoice/[id]/notes/page.tsx` | `invoices/invoice-note-form.tsx` |
| 66 | Credit Notes | ✅ Client + UI | Customers, Parts, Services, Expenses, Inspection Categories, Labels | `credit-notes.ts` | `(authenticated)/sales/credit-notes/page.tsx` | `credit-notes/credit-note-form.tsx` + document/note subforms |
| 67 | Payment Mades | ✅ Client + UI | Vendors, Employees, Bills, Expenses, Payment Modes | `payment-mades.ts` | `(authenticated)/purchase/payments-made/page.tsx` | `payment-mades/payment-made-form.tsx` |
| 68 | Vendor Credits | ✅ Client + UI | Vendors, Departments, Parts, Services, Expenses, Labels | `vendor-credits.ts` | `(authenticated)/purchase/vendor-credit/page.tsx` | `vendor-credits/vendor-credit-form.tsx` |
---
@@ -165,52 +169,63 @@ These are the most complex resources with the deepest dependency chains.
| Status | Count | Percentage |
|--------|-------|------------|
| ✅ Client + UI Module | 33 | 48.5% |
| 🔧 API Client Only | 21 | 30.9% |
| 🧩 UI Module Only | 0 | 0.0% |
| ⬜ Not Started | 14 | 20.6% |
| ✅ Client + UI | 47 | 69.1% |
| 🔧 Client Only | 21 | 30.9% |
| 🧩 UI Only | 0 | 0.0% |
| ⬜ Not Started | 0 | 0.0% |
No UI-only resources were found under the current `packages/api/src/clients` and `apps/dashboard/modules` source-of-truth rules.
No UI-only resources were found under the current `packages/api/src/clients`, `apps/dashboard/app`, and `apps/dashboard/modules` source-of-truth rules.
### Implementation Progress
| Category | Total | ✅ Client + UI Module | 🔧 API Client Only | 🧩 UI Module Only | ⬜ Not Started |
|----------|-------|-----------------------|--------------------|------------------|----------------|
| Level 0 — Standalone | 31 | 15 | 14 | 0 | 2 |
| Level 1 — Single Dep | 5 | 1 | 2 | 0 | 2 |
| Level 2 — Core Entities | 3 | 2 | 1 | 0 | 0 |
| Level 3 — Operational | 7 | 5 | 0 | 0 | 2 |
| Level 4 — Composite | 5 | 1 | 0 | 0 | 4 |
| Level 5 — Workflows | 4 | 3 | 1 | 0 | 0 |
| Level 6 — Financial | 7 | 3 | 3 | 0 | 1 |
| Level 7 — Invoicing | 6 | 3 | 0 | 0 | 3 |
| **Total** | **68** | **33** | **21** | **0** | **14** |
| Category | Total | ✅ Client + UI | 🔧 Client Only | 🧩 UI Only | ⬜ Not Started |
|----------|-------|----------------|----------------|-----------|----------------|
| Level 0 — Standalone | 31 | 19 | 12 | 0 | 0 |
| Level 1 — Single Dep | 5 | 2 | 3 | 0 | 0 |
| Level 2 — Core Entities | 3 | 3 | 0 | 0 | 0 |
| Level 3 — Operational | 7 | 5 | 2 | 0 | 0 |
| Level 4 — Composite | 5 | 1 | 4 | 0 | 0 |
| Level 5 — Workflows | 4 | 4 | 0 | 0 | 0 |
| Level 6 — Financial | 7 | 7 | 0 | 0 | 0 |
| Level 7 — Invoicing | 6 | 6 | 0 | 0 | 0 |
| **Total** | **68** | **47** | **21** | **0** | **0** |
### Resources with Client + UI Module (33 total)
### UI Coverage Shape
- Top-level modules (20): Auth, Shop Types, Holiday Years, Taxes, Vendors, Shop Calendars, Shop Timings, Customers, Vehicles, Employees, Parts, Services, Service Groups, Inspections, Estimates, Job Cards, Appointments, Expenses, Payment Received, Invoices
- Inline modules (9): Vehicle Body Types, Vehicle Fuel Types, Vehicle Transmissions, Vehicle Colors, Document Types, Unit Types, Inspection Categories, Departments, Inventory Categories
- Detail subforms (4): Vehicle Documents, Vehicle Mileage, Invoice Documents, Invoice Notes
| Coverage Shape | Count |
|----------------|-------|
| Client + Page + Module | 36 |
| Client + Module Only | 10 |
| Client + Page Only | 1 |
### API Clients Without UI Modules (21 total)
The single page-only resource is **Inspection Check Points**, which is implemented directly in its route page without a dedicated module file.
- Master data and reference resources: Countries, Customer Types, Referral Sources, Payment Terms, Payment Modes, Labels, Insurance Types, Check Point Labels, Quick Remarks, Quick Notes, Task Types, Task Sections, Invoice Labels, Labor Rates, States, Vendor Addresses
- Workflow and transactional resources: Expense Items, Inspection Check Points, Tasks, Purchase Orders, Bills
### Status Changes Since April 3, 2026
### Not Started (14 total)
- Moved to **✅ Client + UI**: Insurance Types, Task Types, Task Sections, Settings, Make and Models, Expense Items, Inspection Check Points, Tasks, Purchase Orders, Bills, Inventory Adjustments, Credit Notes, Payment Mades, Vendor Credits
- Moved to **🔧 Client Only** from **⬜ Not Started**: Reasons, Holidays, Time Sheets, Invoice Sequences, Service Group Includes, Service Group Services, Service Group Parts, Service Group Pricings
- Reasons, Settings, Holidays, Make and Models, Time Sheets, Invoice Sequences, Service Group Includes, Service Group Services, Service Group Parts, Service Group Pricings, Inventory Adjustments, Credit Notes, Payment Mades, Vendor Credits
### Resources with Client + UI Coverage (47 total)
### API Clients Without UI Modules — Priority Recommendations
- Page + module coverage (36): Auth, Shop Types, Insurance Types, Holiday Years, Taxes, Departments, Vendors, Shop Calendars, Shop Timings, Settings, Make and Models, Customers, Vehicles, Expense Items, Employees, Parts, Services, Vehicle Documents, Vehicle Mileage, Service Groups, Inspections, Estimates, Job Cards, Appointments, Tasks, Purchase Orders, Bills, Expenses, Payment Received, Inventory Adjustments, Invoices, Invoice Documents, Invoice Notes, Credit Notes, Payment Mades, Vendor Credits
- Module-only coverage (10): Vehicle Body Types, Vehicle Fuel Types, Vehicle Transmissions, Vehicle Colors, Document Types, Unit Types, Inspection Categories, Task Types, Task Sections, Inventory Categories
- Page-only coverage (1): Inspection Check Points
Based on current implementation depth and operational value, the highest-leverage missing UI modules are:
### API Clients Without UI Coverage (21 total)
1. **Purchase Orders** — existing client, central purchasing workflow
2. **Bills** — existing client, complements Vendors and Expenses
3. **Tasks** — existing client, operational workflow layer is in place but no module exists
4. **Expense Items** — existing client, currently blocks full expense master-data management
5. **Payment Modes / Payment Terms** — existing clients, important finance reference data
6. **Referral Sources / Customer Types** — existing clients, useful master-data UI for sales flows
- Master data and reference resources: Countries, Customer Types, Referral Sources, Payment Terms, Payment Modes, Labels, Check Point Labels, Quick Remarks, Quick Notes, Reasons, Invoice Labels, Labor Rates, States
- Operational and nested resources: Vendor Addresses, Holidays, Time Sheets, Invoice Sequences, Service Group Includes, Service Group Services, Service Group Parts, Service Group Pricings
### API Clients Without UI Coverage — Priority Recommendations
Based on current implementation depth and dependency weight, the highest-leverage missing UI coverage is:
1. **Service Group Includes / Services / Parts / Pricings** — the client layer exists, but the service-group composition workflow is still missing from the dashboard
2. **Invoice Sequences** — invoices are implemented, but their setup dependency still has no route or module
3. **Holidays** — the current `productivity/holidays` route manages Holiday Years, not Holiday entries
4. **Payment Modes / Payment Terms** — still important finance reference data with no dedicated UI
5. **Referral Sources / Customer Types / Reasons / Labels** — useful master-data UI for sales and workflow flows
6. **Time Sheets / Vendor Addresses** — operational subresources still have API support only
---
+147
View File
@@ -0,0 +1,147 @@
# Phase 1 Comparison
Date: 2026-04-11
This document compares the current dashboard implementation against Phase 1, Garage Operations (Sellable MVP).
## How This Was Evaluated
- Source of truth for resource coverage: `docs/dashboard/feature-checklist.md`
- Validation method: direct inspection of current pages, modules, and API clients
- `Ready` means the feature is clearly exposed in the current UI and backed by implementation
- `Missing or Partial` means the workflow is absent, incomplete, or not clearly surfaced in the current UI
## Ready Features
### Dashboard
- Operational dashboard overview is present
- Work orders by status are present
- Today or upcoming appointments are present
- Revenue and financial snapshot widgets are present
- Customer, vehicle, item, and sales or purchase summary cards are present
### Customers and Vehicles
- Customer management is implemented
- Customer notes are implemented
- Customer vehicle linking is implemented
- Vehicle profile management is implemented
- Vehicle mileage tracking is implemented
- Vehicle documents are implemented
### Services, Parts, and Inventory Basics
- Service catalog is implemented
- Service groups are implemented
- Service pricing is implemented
- Parts catalog is implemented
- SKU support is implemented for parts
- Inventory adjustments are implemented
### Suppliers and Purchasing Basics
- Vendor management is implemented
- Purchase orders are implemented
- Bills are implemented
- Vendor credits are implemented
- Payments made are implemented
### Appointments and Inspections
- Appointment list and detail flow is implemented
- Appointment status handling is implemented
- Technician assignment on appointments is implemented
- Inspection creation and detail flow is implemented
- Inspection checkpoints are implemented
- Inspection notes are implemented
- Inspection photo and file attachments are implemented
### Estimates and Job Cards
- Estimate create, edit, and detail flow is implemented at a basic level
- Job card creation and detail flow is implemented
- Technician assignment on job cards is implemented
- Service writer assignment on job cards is implemented
- Job card parts flow is implemented
- Job card services flow is implemented
- Job card attachments are implemented
- Job card inspections, expenses, tasks, appointments, bills, and purchase order tabs are implemented
- Job card status progression is implemented through draft, check-in, in progress, on hold, ready to delivery, and delivered
### Employees, Permissions, and Settings
- Employee management is implemented
- Employee attendance-related fields exist
- Per-employee permissions management is implemented
- Company profile settings are implemented
- Tax settings are implemented
- Sales and purchase tax or discount preference forms are implemented
## Missing or Partial Features
### Dashboard Gaps
- Technician workload is not clearly implemented as a dashboard widget
- A dedicated active repairs workload view by technician is not clearly implemented
### Customer and Vehicle Gaps
- Fleet customer workflow is not clearly implemented
- Insurance customer workflow is not clearly implemented as a full customer segment workflow
- Customer service history view is not clearly implemented
- Vehicle service history view is not clearly implemented
- Vehicle purchase history view is not clearly implemented
### Services, Parts, and Inventory Gaps
- Service duration is not clearly implemented
- Barcode support for parts is not clearly implemented
- On-hand stock visibility is not clearly implemented in the UI
- Low-stock alerts are not clearly implemented
- Reorder alert workflow is not clearly implemented
### Supplier Gaps
- Supplier purchase history is not clearly implemented as a vendor-level detail workflow
### Appointment Gaps
- A true appointment calendar or scheduler view is not clearly implemented
- The current appointment area is list and detail oriented, not a full calendar board
### Inspection Gaps
- Inspection report generation is not clearly implemented
- Inspection print, export, or PDF output is not clearly implemented
### Estimate Gaps
- Estimate approval workflow is not clearly implemented
- Customer approval flow for estimates is not clearly implemented
- Estimate line items for services and parts are not clearly surfaced in the current detail UI
- Estimate totals or summary calculations are not clearly surfaced in the current detail UI
### Job Card Gaps
- A `Closed` status is not clearly implemented in the visible job card status flow
- Full digital authorisation workflow is only partially represented by settings fields and flags
- Parts issuing workflow appears partially represented by settings flags, but not clearly surfaced as a complete operational flow
### Employees and Access Control Gaps
- Time clock UI is not implemented
- Clock in or clock out screens are not implemented
- Technician hours tracking UI is not clearly implemented
- Named role management for Admin, Manager, Service Advisor, and Technician is not clearly implemented as a dedicated role system
### Settings Gaps
- Currency configuration is not clearly implemented
- Email system configuration is not clearly implemented beyond company email fields
## Overall Assessment
Phase 1 is not fully complete yet.
The project already covers most of the core CRUD and workshop operations foundation, especially around customers, vehicles, appointments, inspections, job cards, and purchasing resources. The largest remaining gaps are in deeper operational workflows: history views, estimate approval and totals, stock intelligence, technician time tracking, calendar-style scheduling, inspection reporting, and role-based access structure.
@@ -0,0 +1,237 @@
# Phase 1 Backend and Frontend Gap Report
Date: 2026-04-11
This report answers the two deliverables requested for Phase 1:
1. Backend todos, measured against the Phase 1 roadmap using the Swagger contract in `packages/api/types/index.ts`
2. Frontend todos, measured by comparing the domain client layer in `packages/api/src/clients` and `packages/api/src/api.ts` against real dashboard usage
The frontend section still uses the contract -> client -> usage audit. The backend section has been remapped to the business roadmap instead of treating missing client wrappers as missing backend work.
## Rules Used
- Backend ready = the Phase 1 capability is clearly represented by an endpoint or response shape in `packages/api/types/index.ts`
- Backend todo = the Phase 1 workflow is missing from Swagger, or only partially represented by base CRUD without the required workflow depth
- Frontend implemented = any client method is used somewhere in dashboard source
- Shared CRUD usage counts as implementation:
- `getClient={(api) => api.foo}` on `ResourcePage` or `CrudResource` counts as `list` and `destroy`
- explicit `api.foo.bar()` calls count as direct method usage
- Generated output under `.next` was excluded
## Executive Summary
Backend contract coverage is stronger than the earlier UI-only Phase 1 comparison suggested. The API already covers the main CRUD and operational foundation for dashboard metrics, customers, vehicles, services, parts, vendors, appointments, inspections, job cards, employees, permissions, roles, time sheets, and workshop settings.
The remaining backend work is concentrated in a smaller set of deeper workflows: history and reporting views, estimate approval and estimate line-item depth, stock intelligence such as low-stock or reorder alerts, technician-specific workload data, a visible final `closed` job-card state, and clearer system email or currency configuration.
Frontend audit counts:
- Swagger paths found: 260
- Distinct client route strings found: 232
- Swagger paths with no client wrapper: 28
- Clients exposed by `createApi()`: 57
- Clients used somewhere in dashboard source: 50
- Completely unused clients: 7
- Partially used clients: 44
- Fully wired clients under the current rule: 6
## Backend Todos
These are the Phase 1 backend todos after checking the roadmap against the actual Swagger contract.
### Already ready in backend contract
- Dashboard `/api/home` already returns financial charts, work-order status cards, appointment KPIs, upcoming appointments, inventory counts, customer segmentation counts, and vehicle breakdowns.
- Customers already support CRUD, customer types, notes, `company_name`, and insurance-related fields.
- Vehicles already support CRUD, make/model/year, VIN, plate, mileage, owner linking, documents, and mileage logs.
- Services already expose duration-related data through `labor_hours`.
- Parts and inventory already expose SKU, opening stock, and min/max stock, plus inventory-adjustment resources.
- Vendors, purchase orders, bills, vendor credits, and payment flows already exist in the contract.
- Appointments already support CRUD, status changes, and job-card unlinking.
- Inspections already support CRUD, checkpoints, labels, media, and attachments.
- Job cards already support technician and service-writer assignment, parts, services, expense items, attachments, check-in, delivery, digital-authorisation flags, and parts-issuing flags.
- Employees already support CRUD, per-employee permissions, and attendance or time-sheet related fields.
- Roles already exist in Swagger through `/api/roles` and `/api/roles/{id}`.
- Time tracking already exists in Swagger through `/api/time-sheets`, `/api/time-sheet/clock-in`, and `/api/time-sheet/clock-out`.
- Workshop settings and operational configuration already exist through `/api/settings` and `/api/configurations...`.
### Real backend todos by Phase 1 area
| Phase 1 area | Contract status | Backend todo |
|---|---|---|
| Dashboard workload | Partial | `/api/home` covers generic work-order KPIs, but there is no clear technician-workload or active-repairs-by-technician feed. |
| Customer, vehicle, and supplier history | Missing | No dedicated customer service-history, vehicle service-history, vehicle purchase-history, or vendor purchase-history routes were found. |
| Estimates | Partial | Swagger only exposes `/api/estimates` and `/api/estimates/{id}`. The `{id}` route has no `GET` in schema, and there are no approval, customer-authorisation, service-line, part-line, or totals-specific routes. |
| Inspection reporting | Missing | No inspection report, print, export, or PDF endpoints were found. |
| Inventory intelligence | Partial | Parts expose `opening_stock`, `min_stock`, and `max_stock`, but there is no barcode field and no low-stock, reorder, or alert workflow in the contract. |
| Job card final closure | Partial | Contract evidence shows `draft`, `check_in`, `in_progress`, `on_hold`, `ready_to_delivery`, and `delivered`, but no visible `closed` status. |
| System email and currency config | Partial | Settings and configuration endpoints cover workshop profile, tax or discount behavior, digital authorisation, and parts-issuing flags, but there is no clear email-delivery configuration endpoint and no clear currency-setting field even though currency is returned in dashboard responses. |
### Not backend todos anymore
These Phase 1 items are already represented in Swagger and should be treated as client or frontend work instead of backend work:
- fleet, company, and insurer customer segmentation
- service duration
- roles and permissions
- time clock, clock-in, and clock-out data layer
- digital authorisation and parts-issuing configuration flags
- appointment calendar or scheduler presentation, which looks more like a frontend presentation gap than a contract gap
### Client-layer Gaps Against Existing Swagger
These are not missing backend capabilities. They are existing Swagger routes that still do not have matching domain-client wrappers.
#### 1. Entire backend resources missing from the client layer
| Area | Missing Swagger routes | Notes |
|---|---|---|
| Roles | `/api/roles`, `/api/roles/{id}` | Swagger exposes role CRUD, but there is no `RolesClient` and no `api.roles` entry. |
#### 2. Existing client families with missing route coverage
| Area | Missing Swagger routes | Notes |
|---|---|---|
| Configurations | `/api/configurations` | `ConfigurationsClient` only wraps the specialized subroutes, not the aggregate base route. Review whether the base GET is required. |
| Make and Models | `/api/get-makes`, `/api/get-models`, `/api/toggle-make-and-model-status` | `MakeAndModelsClient` currently wraps only CRUD. Helper lookups and the status toggle are missing. |
| Invoice Sequences | `/api/remove-default-invoice-sequence`, `/api/set-default-invoice-sequence` | `InvoiceSequencesClient` currently wraps only CRUD. Default-sequence workflow is missing. |
#### 3. Inspection routes missing from `InspectionsClient`
- `/api/inspections/{id}/add-attachment`
- `/api/inspections/{id}/add-label`
- `/api/inspections/{id}/delete-attachment`
- `/api/inspections/{id}/delete-label`
- `/api/inspections/{id}/get-attachment`
Current `InspectionsClient` wraps checkpoint-level attachment and media helpers, but not these inspection-level attachment and label routes.
#### 4. Job card routes missing from `JobCardsClient`
- `/api/job-cards/{id}/add-expense-item`
- `/api/job-cards/{id}/add-expense-item-attachment`
- `/api/job-cards/{id}/add-internal-note`
- `/api/job-cards/{id}/add-part-attachment`
- `/api/job-cards/{id}/delete-expense-item`
- `/api/job-cards/{id}/delete-expense-item-attachment`
- `/api/job-cards/{id}/delete-internal-note`
- `/api/job-cards/{id}/delete-part-attachment`
- `/api/job-cards/{id}/edit-internal-note`
- `/api/job-cards/{id}/get-expense-item-attachment`
- `/api/job-cards/{id}/get-expense-items`
- `/api/job-cards/{id}/get-internal-notes`
- `/api/job-cards/{id}/get-part-attachment`
- `/api/job-cards/{id}/get-service-attachment`
- `/api/job-cards/{id}/update-expense-item`
Current `JobCardsClient` already covers remarks, recommendations, parts, services, and service attachments, but it does not wrap expense-item subresources, part attachments, internal notes, or attachment retrieval endpoints.
## Frontend Todos
These are client capabilities that are already available in the API layer, but are still missing or only partially wired in dashboard source.
### 1. Completely unused clients
These clients have zero usage anywhere in `apps/dashboard/app`, `apps/dashboard/modules`, or `apps/dashboard/shared`.
| Client | Gap |
|---|---|
| `holidays` | Entire client unused |
| `invoiceSequences` | Entire client unused |
| `serviceGroupIncludes` | Entire client unused, including `changeArrangement` |
| `serviceGroupParts` | Entire client unused |
| `serviceGroupPricings` | Entire client unused |
| `serviceGroupServices` | Entire client unused |
| `timeSheets` | Entire client unused, including `clockIn` and `clockOut` |
### 2. High-signal partial clients
These clients are used, but important workflows are still not wired in the frontend.
| Client | Already used | Still missing in frontend |
|---|---|---|
| `auth` | `login` | `logout`, `profile` |
| `expenses` | base CRUD plus `listItems` | bill subflow, expense-item subflow, item status toggle |
| `inspections` | base CRUD, categories, checkpoints, checkpoint media | inspection-level attachments, inspection-level labels, checkpoint label management |
| `inventory` | category and unit-type create/list, labor-rate list | labor-rate CRUD/defaults, category and unit-type update/destroy/defaulting |
| `invoices` | base CRUD, documents, notes | label CRUD/list, attachment helpers, document or note update helpers not used |
| `jobCards` | base CRUD, date/status flow, check-in, delivery, parts, services, attachments, remarks, recommendations | service-attachment UI flow, edit remark path, edit recommendation path, import/export |
| `labels` | `list`, `create` | `update`, `destroy`, `show`, import/export |
| `paymentModes` | `list` | create, update, delete, show, import/export |
| `paymentTerms` | `list` | create, update, delete, show, default-setting, import/export |
| `referralSources` | `list` | create, update, delete, show, default-setting, import/export |
| `reasons` | `list` | create, update, delete, show, import/export |
| `serviceGroups` | base CRUD | label workflows, status toggle, show, import/export |
| `shopCalendars` | `list`, `create`, `destroy` | `setDefault`, `removeDefault`, `updateDayType` |
| `tasks` | base CRUD | `complete` |
| `taskSections` | base CRUD | arrangement change, default toggles, `show`, import/export |
| `taskTypes` | base CRUD | default toggles, `show`, import/export |
| `vehicleAttributes` | create/list for body type, fuel type, transmission, color | update and destroy for all lookup records |
| `vehicleDocuments` | document and mileage flows, document-type create/list | document-type update and destroy |
| `vendors` | base CRUD | vendor address workflows, status toggle, `show`, import/export |
| `vendorCredits` | base CRUD | attachments and internal notes |
### 3. Lower-priority partials
These clients are already functionally present, but still miss mostly generic `show`, import, export, or default-toggle wiring.
- `appointments`: missing `show`, `importData`, `exportData`
- `bills`: missing `show`, `importData`, `exportData`
- `creditNotes`: missing `editInternalNote`, `importData`, `exportData`
- `customers`: the UI uses inherited `importData` and `exportData`, but the direct `import()` and `export()` alias methods are unused
- `departments`: missing `show`, `importData`, `exportData`
- `employees`: missing `importData`, `exportData`
- `estimates`: missing `show`, `importData`, `exportData`
- `expenseItems`: missing `importData`, `exportData`
- `insuranceTypes`: missing `show`, `importData`, `exportData`
- `inventoryAdjustments`: missing `show`, `importData`, `exportData`
- `inventoryCategories`: missing `show`, `importData`, `exportData`
- `makeAndModels`: missing `importData`, `exportData`
- `parts`: missing `show`, `toggleStatus`
- `paymentMades`: missing `show`, `importData`, `exportData`
- `paymentReceived`: missing `show`, `importData`, `exportData`
- `purchaseOrders`: missing `show`, `importData`, `exportData`
- `quickNotes`: missing `show`, `importData`, `exportData`
- `quickRemarks`: missing `show`, `importData`, `exportData`
- `services`: missing `show`
- `shopRecommendations`: missing `show`, `importData`, `exportData`
- `shopTimings`: missing `setDefault`, `removeDefault`, `importData`, `exportData`
- `shopTypes`: missing `show`, `importData`, `exportData`
- `taxes`: missing `show`, `importData`, `exportData`
- `vehicles`: the UI uses inherited `importData` and `exportData`, but the direct `import()` and `export()` alias methods are unused
## Corrections Versus `feature-checklist.md`
Under the stricter checklist rule, lookup-only usage did not count as UI coverage. Under the user rule for this audit, it does.
That changes the outcome materially:
- The old checklist had 21 `Client Only` resources
- The actual zero-usage client list under the current rule is 7 clients
Previously marked as `Client Only`, but already exercised somewhere in dashboard source under this rule:
- countries and states through `geo`
- customer types through `customers.listCustomerTypes`
- referral sources
- payment terms
- payment modes
- labels
- quick notes
- quick remarks
- reasons
- labor rates through `inventory.listLaborRates`
The remaining true zero-usage areas are concentrated in:
- holidays
- invoice sequences
- time sheets
- service-group includes, parts, pricings, and services
## Recommended Order
1. Close the real backend Phase 1 gaps first: estimate workflow depth, history or reporting endpoints, stock intelligence, technician-workload feeds, visible job-card closure, and missing email or currency configuration.
2. Close the client-layer omissions against existing Swagger: roles, invoice-sequence defaults, make/model helper routes, inspection-level attachment or label routes, and job-card expense or internal-note routes.
3. Build UI coverage for the 7 completely unused clients, then finish the high-signal partial workflows, especially expenses, inspections, inventory, job cards, vendors, service groups, shop calendars, and tasks.