wulf-pulse/docs/AUVIK_TENANT_MAPPING.md
root 6eee14f8af Add comprehensive admin features and multi-system integration
- Add admin dashboard with sync controls and data browser
- Implement RMM, Auvik, and Addigy organization mappings
- Add chunked ticket sync with progress tracking
- Implement entity sync service with rate limiting
- Add analytics engine and performance optimizer
- Create data browser for all PSA entities
- Add navigation components and UI improvements
- Implement background processing and sync services
- Add comprehensive documentation and migration scripts
- Update configuration items with multi-system support
- Enhance contact management and purchase history
- Add issue type assignment and LLM analyzer
- Improve error handling and logging utilities
2025-11-19 14:18:16 -05:00

121 lines
4.3 KiB
Markdown

# Auvik Tenant Mapping
## Overview
The Auvik Tenant Mapping feature allows administrators to manually map Auvik tenants to Autotask companies. This ensures accurate device matching when company names don't align between systems.
## Features
### 1. **Tenant Mapping Page** (`/auvik-mappings`)
- View all Auvik tenants (mapped and unmapped)
- Map tenants to Autotask companies via dropdown selection
- Search and filter tenants by status
- Real-time statistics dashboard
- Save/delete mappings with immediate feedback
### 2. **Database Storage**
- Mappings stored in `auvik_tenant_mappings` table
- Unique constraint on `auvik_tenant_id` (one tenant = one company)
- Automatic timestamp tracking (created_at, updated_at)
- Indexed for fast lookups
### 3. **API Endpoints**
#### GET `/api/auvik/tenant-mappings`
Fetch all tenant mappings
- Query param: `includeUnmapped=true` - includes unmapped tenants from Auvik API
- Returns: `{ mappings: AuvikTenantMapping[], totalMapped: number, totalUnmapped: number }`
#### POST `/api/auvik/tenant-mappings`
Create or update a tenant mapping
- Body: `{ auvikTenantId, auvikTenantName, autotaskCompanyId, autotaskCompanyName }`
- Returns: `{ mapping: AuvikTenantMapping }`
#### DELETE `/api/auvik/tenant-mappings?id={id}`
Delete a tenant mapping
- Query param: `id` - mapping ID to delete
- Returns: `{ success: true }`
### 4. **Integration with Device Matching**
The Auvik client now prioritizes database mappings over fuzzy matching:
1. **Primary**: Check database for explicit company ID → tenant mapping
2. **Fallback**: Use fuzzy name matching (existing logic)
This ensures:
- Accurate matching even when names differ significantly
- User control over tenant associations
- No breaking changes to existing functionality
## Usage
### Step 1: Access the Mapping Page
Navigate to: `https://pulse.wulfconsulting.cloud/auvik-mappings`
### Step 2: Map Tenants
1. Find an unmapped tenant (orange badge)
2. Click the dropdown in the "Autotask Company" column
3. Select the corresponding company
4. Click "Save"
### Step 3: Verify
- The status badge changes to green "Mapped"
- Stats update automatically
- Configuration items page will now use this mapping
### Step 4: View Devices
Go to `/configuration-items`, select the mapped company, and see Auvik devices appear in the Auvik column and tab.
## Database Schema
```sql
CREATE TABLE auvik_tenant_mappings (
id SERIAL PRIMARY KEY,
auvik_tenant_id VARCHAR(255) NOT NULL UNIQUE,
auvik_tenant_name VARCHAR(255) NOT NULL,
autotask_company_id INTEGER NOT NULL,
autotask_company_name VARCHAR(255) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
```
## Migration Applied
- **File**: `migrations/009_create_auvik_tenant_mappings.sql`
- **Status**: ✅ Applied to database
- **Command**: `docker exec pulse-postgres psql -U pulse_user -d pulse_autotask -f /docker-entrypoint-initdb.d/009_create_auvik_tenant_mappings.sql`
## Files Created/Modified
### New Files
- `/app/auvik-mappings/page.tsx` - Main mapping UI
- `/app/api/auvik/tenant-mappings/route.ts` - API endpoints
- `/migrations/009_create_auvik_tenant_mappings.sql` - Database schema
- `/lib/types/auvik.ts` - Added `AuvikTenantMapping` interface
### Modified Files
- `/lib/services/auvik-client.ts` - Added `findTenantByCompanyId()` method
- `/docker-compose.yml` - Added Auvik environment variables
## Next Steps
1. **Add Navigation Link**: Add a link to `/auvik-mappings` in the main navigation menu
2. **Enhance Toast**: Replace simple alert-based toast with a proper toast component library
3. **Bulk Import**: Add ability to import mappings from CSV
4. **Auto-Suggest**: Add AI-powered suggestions for likely company matches based on name similarity
5. **Audit Log**: Track who created/modified mappings and when
## Troubleshooting
### No Tenants Showing
- Check Auvik API credentials in `.env.local`
- Verify Auvik client initialization in logs: `docker logs pulse-app | grep -i auvik`
### Mapping Not Working
- Verify database migration was applied
- Check API endpoint response: `curl http://localhost:3100/api/auvik/tenant-mappings`
- Review console logs for errors
### Companies Not Loading
- Ensure Autotask API is accessible
- Check `/api/companies` endpoint returns data