Add Point of Sale system and tax rate lookup integration

POS System:
- Full POS interface with product grid, cart panel, and payment flow
- Product and category management with barcode scanning support
- Cash drawer operations and shift management
- Order history and receipt generation
- Thermal printer integration (ESC/POS protocol)
- Gift card support with purchase and redemption
- Inventory tracking with low stock alerts
- Customer selection and walk-in support

Tax Rate Integration:
- ZIP-to-state mapping for automatic state detection
- SST boundary data import for 24 member states
- Static rates for uniform-rate states (IN, MA, CT, etc.)
- Statewide jurisdiction fallback for simple lookups
- Tax rate suggestion in location editor with auto-apply
- Multiple data sources: SST, CDTFA, TX Comptroller, Avalara

UI Improvements:
- POS renders full-screen outside BusinessLayout
- Clear cart button prominently in cart header
- Tax rate limited to 2 decimal places
- Location tax rate field with suggestion UI

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-27 11:31:19 -05:00
parent da508da398
commit 1aa5b76e3b
156 changed files with 61604 additions and 4 deletions

View File

@@ -130,6 +130,8 @@ const PublicPage = React.lazy(() => import('./pages/PublicPage')); // Import Pub
const BookingFlow = React.lazy(() => import('./pages/BookingFlow')); // Import Booking Flow
const Locations = React.lazy(() => import('./pages/Locations')); // Import Locations management page
const MediaGalleryPage = React.lazy(() => import('./pages/MediaGalleryPage')); // Import Media Gallery page
const POS = React.lazy(() => import('./pages/POS')); // Import Point of Sale page
const Products = React.lazy(() => import('./pages/Products')); // Import Products management page
// Settings pages
const SettingsLayout = React.lazy(() => import('./layouts/SettingsLayout'));
@@ -765,6 +767,18 @@ const AppContent: React.FC = () => {
<Route path="/login" element={<Navigate to="/dashboard" replace />} />
<Route path="/sign/:token" element={<ContractSigning />} />
{/* Point of Sale - Full screen mode outside BusinessLayout */}
<Route
path="/dashboard/pos"
element={
canAccess('can_access_pos') ? (
<POS />
) : (
<Navigate to="/dashboard" />
)
}
/>
{/* Dashboard routes inside BusinessLayout */}
<Route
element={
@@ -989,6 +1003,17 @@ const AppContent: React.FC = () => {
)
}
/>
{/* Products Management */}
<Route
path="/dashboard/products"
element={
canAccess('can_access_pos') ? (
<Products />
) : (
<Navigate to="/dashboard" />
)
}
/>
{/* Settings Routes with Nested Layout */}
{/* Owners have full access, staff need can_access_settings permission */}
{canAccess('can_access_settings') ? (