Files
policy-ui/docs/CODEBASE_BUNDLE.md
Jordan Weingarten 67482f6629 WIP jordan
2026-04-16 11:11:44 -05:00

156 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# policy-ui — codebase bundle (for LLMs / handoff)
Single-document summary of the **policy-ui** Nuxt app: stack, API wiring, layout, main routes, composables, and data. Paste this into Perplexity, ChatGPT, or another tool when you need context without the full repo.
---
## Product intent (short)
Brokerage / agency management **workstation UI** (Central America / Colombiaoriented domain): quotes, sales pipeline, onboarding (solicitud, emissions), cartera (customers, policies, book), customer service (support, claims, collections, renewals), workstations, AI tools, settings. **Admin-first** structure; many areas use **mock data** until backends are connected.
---
## Stack
| Piece | Notes |
|--------|--------|
| **Nuxt** | `^4.3.1` (`compatibilityDate: 2026-02-25`) |
| **Vue** | `^3.5.28` |
| **@nuxt/ui** | `^4.5.0` (Nuxt UI 4) |
| **Tailwind** | `^4.2.1` (`app/assets/css/main.css`) |
| **nuxt-open-fetch** | `^0.13.8` — typed API clients from OpenAPI |
| **jspdf** | PDF generation |
| **zod** | validation |
**Scripts:** `dev`, `build`, `generate`, `preview`, `postinstall``nuxt prepare`.
**Dev server:** port **3737**, host `localhost` ([`nuxt.config.ts`](../nuxt.config.ts)).
---
## API clients (`nuxt-open-fetch`)
| Client | Base URL | Schema URL |
|--------|-----------|------------|
| `customer` | `http://localhost:4000/api/v1` | `http://localhost:4000/api/openapi` |
| `policy` | `http://localhost:4001/api/v1` | `http://localhost:4001/api/openapi` |
| `providers` | `http://localhost:4002/api/v1` | `http://localhost:4002/api/openapi` |
| `tasks` | `http://localhost:8080/api/v1` | `http://localhost:8080/openapi3.json` |
Usage: `useNuxtApp().$customer`, `$policy`, `$providers`, `$tasks` (generated from schemas when services run).
---
## Entry & layout
- [`app/app.vue`](../app/app.vue): wraps app in **`UApp`** → `NuxtLayout``NuxtPage`.
- Default layout [`app/layouts/default.vue`](../app/layouts/default.vue): **top bar** (`LayoutAppTopBar`), **collapsible sidebar** (Sales, Operations, optional Workstations/AI), main content area. Sidebar groups/feature flags via [`useSidebarFeatures`](../app/composables/useSidebarFeatures.ts) (localStorage: workstations, AI tools, leads hub).
---
## Directory map (`app/`)
| Path | Role |
|------|------|
| `pages/` | File-based routes (~73 Vue pages) |
| `components/` | UI including `layout/`, `quotes/`, etc. |
| `composables/` | Shared logic (~30 composables) |
| `layouts/` | `default.vue` shell |
| `assets/css/` | Global styles / Tailwind |
| `types/` | TS types (form catalog, quotes, branding, roles, …) |
| `data/` | JSON catalogs, mocks, seed data |
| `utils/` | Helpers (e.g. `useLocalStorageRef`) |
| `middleware/` | Route middleware if present |
| `plugins/` | Client/server plugins |
**Public:** `public/` including `public/forms/` for static PDF assets referenced by the forms catalog.
---
## Routes (by area)
Paths are under `app/pages/` unless noted.
- **Home / shell:** `/` (`index.vue` — large role-configurable dashboard), `home2.vue`, `calendar.vue`, `account.vue`
- **Quotes:** `/quotes` (mission-control style hub), `/quotes/mission-control`, `/quotes/new`, `/quotes/compare`, line flows: `/quotes/life`, `/quotes/health`, `/quotes/auto`, `/quotes/general-risk`, `/quotes/custom`
- **Sales / onboarding:** `/onboarding` (pipeline), `/sales/quick-lead`, `/sales/leads`, `/registration/client`, `/registration/policy`, `/onboarding/solicitud`, `/onboarding/emissions`, `/onboarding/policy-upload/new`, potential/active leads under `onboarding/`
- **Cartera:** `/customers`, `/customers/new`, `/customers/[id]`, `/policies`, `/policies/new`, `/policies/[id]`, `/policies/groups`, `/policies/book`, `/policies/app/[application_id]`
- **Customer service:** `/support`, `/support/[id]`, `/support/collectivos`, `/claims`, `/claims/[id]`, `/claims/intake/[token]` (standalone layout), `/claims/settings`, `/collections`, `/renewals`, `/renewals/[id]`
- **Workstation:** `/workstation/*` (collectivos, collections, claims, renewals, customer-service, facturacion)
- **AI tools:** `/ai-tools/*` (sales-factory, policy-comparator, email-writer, case-assistant)
- **Providers:** `/providers`, `/providers/new`, `/providers/[provider_id]`
- **Tasks:** `/tasks`, `/tasks/[id]`
- **Analysis:** `/analysis`
- **Settings:** `/settings` and children (organization, agents, providers, permissions, forms library, quote-requests, support-routing, customer-attention, profile-layouts, alerts, appearance, personalization, referral-channels)
Many pages set `definePageMeta({ ssr: false })` where client-only state or APIs are assumed.
---
## Composables (inventory)
| Composable | Purpose (brief) |
|------------|-----------------|
| `useAppShellLayout` | Sidebar collapse / layout |
| `useAppTheme` | Theme switching |
| `useBrokerageBranding` | Tenant branding in chrome |
| `useSidebarFeatures` | Toggle sidebar sections (workstations, AI, leads) |
| `useSuperAdmin` | Superadmin gate for org settings |
| `usePageTitle` | Document title |
| `useFormsCatalog` | Filter form catalog JSON, field groups, indexes |
| `useEmissionsQueue` | Local queue for emissions review |
| `useQuoteSession` | Comparative quote view model / session |
| `useSalesPipeline` | Deal pipeline stages for quote/onboarding flows |
| `useCustomerProfileVault` | Local profile / KYC-oriented draft |
| `usePdfFieldMappings` | PDF field mapping JSON |
| `useProviderContactEmails` | Carrier outbound email roles |
| `useClientRegistrationModel` / `usePolicyRegistrationModel` | Registration payloads |
| `useLifeQuoteDraft` / `useHealthQuoteDraft` / `useAutoQuoteDraft` | Line-specific quote drafts |
| `useDashboardHomeWidgets` | Home dashboard widgets + role presets |
| `useWelcomeDashboard` | Welcome KPIs / home content |
| `useSupportTickets` | Support ticket mock/state |
| `useCustomerAttention` | Customer attention tiers |
| `useProfileLayouts` | Profile section layouts |
| `useReferralChannels` | Referral sources |
| `useQuickLeads` | Quick lead capture |
| `useClientFavorites` | Starred clients |
| `useColectivos` | Collectivos data/helpers |
| `useAnalytics` | Analytics helpers |
| `useAlertConfig` | Alert configuration |
| `useQuoteRequestEmailEnabled` | Quote-request email toggle |
---
## Data & catalogs
- **`forms-catalog.json`** — PDF/form rows (insurer, sub-ramo, persona, paths).
- **`form-field-groups.json`** — Field groups linked to catalog matching.
- **`pdf-field-mappings.json`** — PDF field name mappings.
- **`taxonomy.ts`** — Slugs / taxonomy for routing.
- **`roles-seguros.ts`** — Seed roles for permissions UI.
- **Mocks:** `mock-customers`, `mock-claims`, `mock-support`, `mock-renewals`, `quotes-overview.mock`, `mock-analytics`, etc.
---
## Scripts (repo)
- [`scripts/import-forms.mjs`](../scripts/import-forms.mjs) — pipeline to generate/refresh form catalog from sources (when used).
---
## Conventions worth knowing
- **i18n:** UI copy is largely **English** in chrome; **Spanish** appears in some flows and labels; full translation is planned.
- **Mock vs API:** Several list views try API then fall back to mocks (e.g. policies); others are mock-only.
- **OpenAPI:** Clients expect **local** services on the ports above; without them, calls fail unless mocked.
---
## Files this bundle was generated from
- [`package.json`](../package.json)
- [`nuxt.config.ts`](../nuxt.config.ts)
- Glob: `app/pages`, `app/composables`, `app/types`, `app/data`
Regenerate or extend this file when architecture changes significantly.