sea-dev 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/tasks/README.md +89 -0
- package/.cursor/rules/commits.mdc +31 -0
- package/.cursor/rules/general.mdc +84 -0
- package/.github/workflows/ci-cd.yml +141 -0
- package/CLAUDE.md +337 -0
- package/README.md +129 -0
- package/apps/api/.prettierignore +6 -0
- package/apps/api/.prettierrc.js +3 -0
- package/apps/api/dotenvx-safe.sh +11 -0
- package/apps/api/eslint.config.mjs +3 -0
- package/apps/api/package.json +58 -0
- package/apps/api/src/clients/posthog.ts +25 -0
- package/apps/api/src/dal/submission.ts +59 -0
- package/apps/api/src/errors.ts +55 -0
- package/apps/api/src/index.ts +21 -0
- package/apps/api/src/lib/channel.ts +28 -0
- package/apps/api/src/lib/config.ts +9 -0
- package/apps/api/src/lib/fmt.test.ts +9 -0
- package/apps/api/src/lib/fmt.ts +62 -0
- package/apps/api/src/lib/invariant.ts +23 -0
- package/apps/api/src/middleware/auth.ts +66 -0
- package/apps/api/src/routes/index.ts +20 -0
- package/apps/api/src/routes/v2/chat/handlers.ts +693 -0
- package/apps/api/src/routes/v2/chat/index.ts +257 -0
- package/apps/api/src/routes/v2/chat/schemas.ts +43 -0
- package/apps/api/src/routes/v2/deals/handlers.ts +64 -0
- package/apps/api/src/routes/v2/deals/index.ts +88 -0
- package/apps/api/src/routes/v2/deals/schemas.ts +38 -0
- package/apps/api/src/routes/v2/forms/handlers.ts +415 -0
- package/apps/api/src/routes/v2/forms/index.ts +382 -0
- package/apps/api/src/routes/v2/forms/schemas.ts +243 -0
- package/apps/api/src/routes/v2/index.ts +19 -0
- package/apps/api/src/routes/v2/pipelines/handlers.ts +261 -0
- package/apps/api/src/routes/v2/pipelines/index.ts +224 -0
- package/apps/api/src/routes/v2/pipelines/schemas.ts +173 -0
- package/apps/api/src/routes/v2/submissions/handlers.ts +555 -0
- package/apps/api/src/routes/v2/submissions/index.ts +366 -0
- package/apps/api/src/routes/v2/submissions/schemas.ts +233 -0
- package/apps/api/src/routes/v2/workflows/handlers.ts +81 -0
- package/apps/api/src/routes/v2/workflows/index.ts +88 -0
- package/apps/api/src/routes/v2/workflows/schemas.ts +40 -0
- package/apps/api/src/server.ts +146 -0
- package/apps/api/src/static/favicon.ico +0 -0
- package/apps/api/src/types/api.ts +14 -0
- package/apps/api/src/types/result.ts +3 -0
- package/apps/api/tsconfig.json +22 -0
- package/apps/api/vite.config.ts +28 -0
- package/apps/api/vitest.config.ts +14 -0
- package/apps/conversion-worker/Dockerfile +59 -0
- package/apps/conversion-worker/package.json +31 -0
- package/apps/conversion-worker/src/lib/config.ts +7 -0
- package/apps/conversion-worker/src/main.ts +22 -0
- package/apps/conversion-worker/src/workflows/convert-pptx.ts +116 -0
- package/apps/conversion-worker/tsconfig.json +27 -0
- package/apps/conversion-worker/vite.config.ts +33 -0
- package/apps/main/.prettierignore +6 -0
- package/apps/main/.prettierrc.js +3 -0
- package/apps/main/CLAUDE.md +245 -0
- package/apps/main/Procfile +1 -0
- package/apps/main/README.md +193 -0
- package/apps/main/db-tests.jsonl +116 -0
- package/apps/main/dotenvx-safe.sh +11 -0
- package/apps/main/drizzle/meta/_journal.json +1 -0
- package/apps/main/drizzle.config.ts +25 -0
- package/apps/main/eslint.config.mjs +3 -0
- package/apps/main/generate-routes.mjs +5 -0
- package/apps/main/package.json +131 -0
- package/apps/main/playwright.config.ts +23 -0
- package/apps/main/postcss.config.ts +5 -0
- package/apps/main/public/bg-dark.svg +10 -0
- package/apps/main/public/bg.svg +10 -0
- package/apps/main/public/favicon.ico +0 -0
- package/apps/main/run.sh +146 -0
- package/apps/main/scripts/browser.ts +14 -0
- package/apps/main/scripts/db-test-cov.ts +277 -0
- package/apps/main/scripts/login.ts +78 -0
- package/apps/main/scripts/repl.ts +61 -0
- package/apps/main/src/_foo.ts +31 -0
- package/apps/main/src/_tests/db.test.ts +19 -0
- package/apps/main/src/_tests/mock-db.ts +60 -0
- package/apps/main/src/client.tsx +13 -0
- package/apps/main/src/clients/loops.ts +13 -0
- package/apps/main/src/clients/polar.ts +12 -0
- package/apps/main/src/clients/posthog.ts +12 -0
- package/apps/main/src/components/chat/chat-context.tsx +99 -0
- package/apps/main/src/components/chat/chat-messages.tsx +184 -0
- package/apps/main/src/components/chat/chat-status.tsx +140 -0
- package/apps/main/src/components/chat/chat.tsx +458 -0
- package/apps/main/src/components/chat/citation-modal.tsx +54 -0
- package/apps/main/src/components/cta.tsx +21 -0
- package/apps/main/src/components/data-display/derived.tsx +40 -0
- package/apps/main/src/components/data-display/group-single.tsx +57 -0
- package/apps/main/src/components/data-display/group-table.tsx +165 -0
- package/apps/main/src/components/data-display/group-wrapper.tsx +54 -0
- package/apps/main/src/components/data-display/item.tsx +678 -0
- package/apps/main/src/components/error.tsx +45 -0
- package/apps/main/src/components/forms/error.tsx +22 -0
- package/apps/main/src/components/grid.tsx +7 -0
- package/apps/main/src/components/header/container.tsx +73 -0
- package/apps/main/src/components/header/header-bar.tsx +102 -0
- package/apps/main/src/components/modals/copy-display.tsx +37 -0
- package/apps/main/src/components/modals/copy-form.tsx +152 -0
- package/apps/main/src/components/modals/duplicate-workflow.tsx +89 -0
- package/apps/main/src/components/modals/field-correction.tsx +323 -0
- package/apps/main/src/components/modals/form-viewer.tsx +126 -0
- package/apps/main/src/components/modals/modals.tsx +44 -0
- package/apps/main/src/components/modals/new-deal.tsx +78 -0
- package/apps/main/src/components/modals/new-form.tsx +133 -0
- package/apps/main/src/components/modals/new-pipeline.tsx +70 -0
- package/apps/main/src/components/modals/new-submission.tsx +321 -0
- package/apps/main/src/components/modals/new-workflow.tsx +342 -0
- package/apps/main/src/components/modals/transformation-sources-modal.tsx +157 -0
- package/apps/main/src/components/modals/view-report.tsx +193 -0
- package/apps/main/src/components/not-found.tsx +14 -0
- package/apps/main/src/components/search/search-bar.tsx +178 -0
- package/apps/main/src/components/sheet-selector.tsx +135 -0
- package/apps/main/src/components/side-panel/doc-list.tsx +480 -0
- package/apps/main/src/components/sidebar/admin-sidebar.tsx +75 -0
- package/apps/main/src/components/sidebar/app-sidebar.tsx +417 -0
- package/apps/main/src/components/sidebar/model-select.tsx +134 -0
- package/apps/main/src/components/sidebar/settings-sidebar.tsx +132 -0
- package/apps/main/src/components/sidebar/sidebar-right.tsx +22 -0
- package/apps/main/src/components/sidebar/stop-impersonate.tsx +21 -0
- package/apps/main/src/components/svg/loading.tsx +33 -0
- package/apps/main/src/components/theme-selector.tsx +43 -0
- package/apps/main/src/components/unsaved-badge.tsx +19 -0
- package/apps/main/src/components/upload/file-upload.tsx +354 -0
- package/apps/main/src/fns/submission-groups.ts +28 -0
- package/apps/main/src/fns/submission-items.ts +11 -0
- package/apps/main/src/global-middleware.ts +16 -0
- package/apps/main/src/hooks/use-update-state.ts +18 -0
- package/apps/main/src/lib/auth-client.ts +16 -0
- package/apps/main/src/lib/auth.test.ts +359 -0
- package/apps/main/src/lib/auth.ts +144 -0
- package/apps/main/src/lib/billing.ts +23 -0
- package/apps/main/src/lib/config-iso.ts +76 -0
- package/apps/main/src/lib/config.ts +61 -0
- package/apps/main/src/lib/excel.ts +16 -0
- package/apps/main/src/lib/feedback-cache.ts +70 -0
- package/apps/main/src/lib/logger.ts +44 -0
- package/apps/main/src/lib/models.ts +22 -0
- package/apps/main/src/lib/not-found.ts +17 -0
- package/apps/main/src/lib/pdf.ts +16 -0
- package/apps/main/src/lib/tabularize.ts +54 -0
- package/apps/main/src/lib/utils.ts +10 -0
- package/apps/main/src/lib/zfd.ts +217 -0
- package/apps/main/src/middleware.ts +55 -0
- package/apps/main/src/routeTree.gen.ts +1255 -0
- package/apps/main/src/router.tsx +24 -0
- package/apps/main/src/routes/__root.tsx +92 -0
- package/apps/main/src/routes/_authed/_app/(dashboard)/index.tsx +227 -0
- package/apps/main/src/routes/_authed/_app/agents/$agentId/config.tsx +224 -0
- package/apps/main/src/routes/_authed/_app/agents/$agentId/index.tsx +206 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-actions-menu.tsx +94 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-artifacts.tsx +153 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-chat.tsx +220 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-history-menu.tsx +81 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-model-select.tsx +84 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-relevant-items.tsx +226 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/agent-upload-button.tsx +298 -0
- package/apps/main/src/routes/_authed/_app/agents/-components/context-modal.tsx +187 -0
- package/apps/main/src/routes/_authed/_app/agents/-fns.ts +560 -0
- package/apps/main/src/routes/_authed/_app/agents/index.tsx +65 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/$subId/-components/citation-tree.tsx +268 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/$subId.tsx +655 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/doc-loading.tsx +37 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/share-link.tsx +42 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/submission-card.tsx +89 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/submission-filter.tsx +193 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/submissions.tsx +36 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/summary.tsx +82 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-components/upload-doc.tsx +120 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/-fns.ts +653 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/index.tsx +259 -0
- package/apps/main/src/routes/_authed/_app/deals/$dealId/route.tsx +29 -0
- package/apps/main/src/routes/_authed/_app/deals/index.tsx +104 -0
- package/apps/main/src/routes/_authed/_app/feedback/index.tsx +639 -0
- package/apps/main/src/routes/_authed/_app/feedback/insights.tsx +250 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/blockers-panel.tsx +260 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/manual-input-panel.tsx +301 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/submission-selector-modal.tsx +143 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/-components/upload-doc.tsx +120 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/$runId/index.tsx +1485 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/-components/dag-view.tsx +296 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/-components/step-config-modal.tsx +634 -0
- package/apps/main/src/routes/_authed/_app/pipelines/$pipelineId/index.tsx +911 -0
- package/apps/main/src/routes/_authed/_app/pipelines/-fns.ts +510 -0
- package/apps/main/src/routes/_authed/_app/pipelines/index.tsx +103 -0
- package/apps/main/src/routes/_authed/_app/reports/$reportId.tsx +397 -0
- package/apps/main/src/routes/_authed/_app/reports/-fns.ts +11 -0
- package/apps/main/src/routes/_authed/_app/reports/index.tsx +22 -0
- package/apps/main/src/routes/_authed/_app/route.tsx +48 -0
- package/apps/main/src/routes/_authed/_app/submissions/-columns.tsx +161 -0
- package/apps/main/src/routes/_authed/_app/submissions/-fns.ts +128 -0
- package/apps/main/src/routes/_authed/_app/submissions/index.tsx +190 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/$formId.tsx +542 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/-components/derived.tsx +154 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/-components/field.tsx +369 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/-components/group.tsx +475 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/index.tsx +263 -0
- package/apps/main/src/routes/_authed/_app/workflows/$wfSlug/route.tsx +33 -0
- package/apps/main/src/routes/_authed/_app/workflows/-components/form-card.tsx +315 -0
- package/apps/main/src/routes/_authed/_app/workflows/index.tsx +86 -0
- package/apps/main/src/routes/_authed/admin/index.tsx +12 -0
- package/apps/main/src/routes/_authed/admin/route.tsx +42 -0
- package/apps/main/src/routes/_authed/admin/users/-columns.tsx +124 -0
- package/apps/main/src/routes/_authed/admin/users/-fns.ts +30 -0
- package/apps/main/src/routes/_authed/admin/users/index.tsx +29 -0
- package/apps/main/src/routes/_authed/catchNotFound.tsx +114 -0
- package/apps/main/src/routes/_authed/redirects/forms.$id.tsx +29 -0
- package/apps/main/src/routes/_authed/redirects/submissions.$id.tsx +27 -0
- package/apps/main/src/routes/_authed/redirects/workflows.$id.tsx +27 -0
- package/apps/main/src/routes/_authed/route.tsx +51 -0
- package/apps/main/src/routes/_authed/settings/-components/new-api-key.tsx +85 -0
- package/apps/main/src/routes/_authed/settings/-components/new-invite.tsx +100 -0
- package/apps/main/src/routes/_authed/settings/analytics.tsx +1710 -0
- package/apps/main/src/routes/_authed/settings/billing/-components/price-table.tsx +129 -0
- package/apps/main/src/routes/_authed/settings/billing/-fns.ts +76 -0
- package/apps/main/src/routes/_authed/settings/billing/index.tsx +119 -0
- package/apps/main/src/routes/_authed/settings/embed.tsx +337 -0
- package/apps/main/src/routes/_authed/settings/index.tsx +12 -0
- package/apps/main/src/routes/_authed/settings/keys.tsx +157 -0
- package/apps/main/src/routes/_authed/settings/members.tsx +276 -0
- package/apps/main/src/routes/_authed/settings/route.tsx +22 -0
- package/apps/main/src/routes/_authed/settings/user.tsx +87 -0
- package/apps/main/src/routes/_authed/settings/workspace.tsx +206 -0
- package/apps/main/src/routes/_public/-components/sign-in-up.tsx +96 -0
- package/apps/main/src/routes/_public/embedded.tsx +57 -0
- package/apps/main/src/routes/_public/invite.$inviteId.tsx +143 -0
- package/apps/main/src/routes/_public/no-access.tsx +38 -0
- package/apps/main/src/routes/_public/no-invite.tsx +39 -0
- package/apps/main/src/routes/_public/otp.tsx +103 -0
- package/apps/main/src/routes/_public/route.tsx +15 -0
- package/apps/main/src/routes/_public/sign-in.tsx +111 -0
- package/apps/main/src/routes/_public/sign-up.tsx +114 -0
- package/apps/main/src/routes/api/auth/$.ts +11 -0
- package/apps/main/src/routes/api/billing/paid.ts +42 -0
- package/apps/main/src/routes/api/billing/webhooks.ts +70 -0
- package/apps/main/src/routes/api/chat/agent.ts +40 -0
- package/apps/main/src/routes/api/chat/key.ts +42 -0
- package/apps/main/src/routes/api/chat/member.ts +35 -0
- package/apps/main/src/routes/api/test/index.ts +19 -0
- package/apps/main/src/server.tsx +6 -0
- package/apps/main/src/styles/app.css +23 -0
- package/apps/main/src/vite-env.d.ts +7 -0
- package/apps/main/test.http +6 -0
- package/apps/main/tsconfig.json +17 -0
- package/apps/main/vite.config.ts +24 -0
- package/apps/main/vitest.config.js +17 -0
- package/apps/mcp/README.md +171 -0
- package/apps/mcp/eslint.config.mjs +3 -0
- package/apps/mcp/package.json +37 -0
- package/apps/mcp/src/index.ts +414 -0
- package/apps/mcp/tsconfig.json +19 -0
- package/apps/mcp/vite.config.ts +22 -0
- package/apps/posthog-proxy/index.html +9 -0
- package/apps/workers/.prettierignore +7 -0
- package/apps/workers/.prettierrc.js +3 -0
- package/apps/workers/dotenvx-safe.sh +11 -0
- package/apps/workers/eslint.config.mjs +3 -0
- package/apps/workers/package.json +65 -0
- package/apps/workers/src/lib/config.ts +7 -0
- package/apps/workers/src/lib/messages.ts +0 -0
- package/apps/workers/src/lib/posthog.ts +25 -0
- package/apps/workers/src/main.ts +58 -0
- package/apps/workers/src/workflows/extraction.ts +866 -0
- package/apps/workers/src/workflows/index.ts +3 -0
- package/apps/workers/src/workflows/pipeline-dag.ts +210 -0
- package/apps/workers/src/workflows/pipeline-steps.ts +1393 -0
- package/apps/workers/tsconfig.json +16 -0
- package/apps/workers/vite.config.ts +35 -0
- package/docs/CHANGELOG.md +84 -0
- package/docs/agent-templates-and-runs.md +859 -0
- package/docs/aws-migration-plan.md +267 -0
- package/docs/impl-p0-form-builder-improvements.md +683 -0
- package/docs/on-prem-deployment-spec.docx +0 -0
- package/docs/on-prem-deployment-spec.md +378 -0
- package/docs/prd-form-builder-strategy.md +1120 -0
- package/docs/widget-ng-apf-packaging-spec.md +43 -0
- package/infra/k8s/charts/seadotdev/Chart.yaml +6 -0
- package/infra/k8s/charts/seadotdev/templates/_helpers.tpl +27 -0
- package/infra/k8s/charts/seadotdev/templates/api-v2.yaml +105 -0
- package/infra/k8s/charts/seadotdev/templates/external-secrets.yaml +83 -0
- package/infra/k8s/charts/seadotdev/templates/ingress.yaml +54 -0
- package/infra/k8s/charts/seadotdev/templates/main-app.yaml +104 -0
- package/infra/k8s/charts/seadotdev/templates/workers.yaml +182 -0
- package/infra/k8s/charts/seadotdev/values.yaml +143 -0
- package/infra/terraform/main.tf +399 -0
- package/libs/ai/.prettierignore +2 -0
- package/libs/ai/.prettierrc.js +5 -0
- package/libs/ai/README.md +139 -0
- package/libs/ai/eslint.config.mjs +3 -0
- package/libs/ai/package.json +42 -0
- package/libs/ai/src/index.ts +5 -0
- package/libs/ai/src/models.ts +19 -0
- package/libs/ai/src/rag/index.ts +1 -0
- package/libs/ai/src/rag/rag.test.ts +99 -0
- package/libs/ai/src/rag/rag.ts +510 -0
- package/libs/ai/tsconfig.json +21 -0
- package/libs/ai/vite.config.ts +38 -0
- package/libs/cache/.prettierignore +2 -0
- package/libs/cache/eslint.config.mjs +3 -0
- package/libs/cache/package.json +35 -0
- package/libs/cache/src/feedback.ts +77 -0
- package/libs/cache/src/index.ts +2 -0
- package/libs/cache/tsconfig.json +19 -0
- package/libs/cache/vite.config.ts +36 -0
- package/libs/clients/.prettierignore +6 -0
- package/libs/clients/eslint.config.mjs +3 -0
- package/libs/clients/package.json +59 -0
- package/libs/clients/src/azure.ts +249 -0
- package/libs/clients/src/gcp.ts +220 -0
- package/libs/clients/src/hatchet.ts +86 -0
- package/libs/clients/src/index.ts +8 -0
- package/libs/clients/src/loops.ts +86 -0
- package/libs/clients/src/polar.ts +77 -0
- package/libs/clients/src/posthog.ts +55 -0
- package/libs/clients/tsconfig.json +19 -0
- package/libs/clients/vite.config.ts +35 -0
- package/libs/config/.prettierignore +6 -0
- package/libs/config/.prettierrc.js +12 -0
- package/libs/config/eslint.config.mjs +3 -0
- package/libs/config/package.json +50 -0
- package/libs/config/src/azure.ts +54 -0
- package/libs/config/src/db.ts +18 -0
- package/libs/config/src/gcp.ts +53 -0
- package/libs/config/src/google.ts +17 -0
- package/libs/config/src/hatchet.ts +20 -0
- package/libs/config/src/index.ts +108 -0
- package/libs/config/src/llm.ts +17 -0
- package/libs/config/src/polar.ts +24 -0
- package/libs/config/src/util.ts +8 -0
- package/libs/config/src/vercel.ts +26 -0
- package/libs/config/tsconfig.json +19 -0
- package/libs/config/vite.config.ts +34 -0
- package/libs/core/.prettierignore +2 -0
- package/libs/core/eslint.config.mjs +3 -0
- package/libs/core/package.json +59 -0
- package/libs/core/src/chat/derived.ts +97 -0
- package/libs/core/src/chat/feedback.ts +293 -0
- package/libs/core/src/chat/index.ts +6 -0
- package/libs/core/src/chat/model.ts +92 -0
- package/libs/core/src/chat/prepare-tools.ts +286 -0
- package/libs/core/src/chat/prompts.ts +623 -0
- package/libs/core/src/chat/stream.ts +311 -0
- package/libs/core/src/chat/summarize.ts +168 -0
- package/libs/core/src/chat/tools/agent.ts +403 -0
- package/libs/core/src/chat/tools/chart-agent.ts +526 -0
- package/libs/core/src/chat/tools/chart-helpers/sandbox.ts +47 -0
- package/libs/core/src/chat/tools/chart.ts +86 -0
- package/libs/core/src/chat/tools/credit-agent.ts +1383 -0
- package/libs/core/src/chat/tools/credit.ts +1435 -0
- package/libs/core/src/chat/tools/deep-dive-agent.ts +100 -0
- package/libs/core/src/chat/tools/deep-dive.ts +141 -0
- package/libs/core/src/chat/tools/form.ts +449 -0
- package/libs/core/src/chat/tools/helpers.ts +91 -0
- package/libs/core/src/chat/tools/index.ts +42 -0
- package/libs/core/src/chat/tools/pipeline-artifact.ts +76 -0
- package/libs/core/src/chat/tools/report.ts +40 -0
- package/libs/core/src/chat/tools/search.ts +390 -0
- package/libs/core/src/chat/tools/submission.ts +227 -0
- package/libs/core/src/chat/tools/workflow.ts +684 -0
- package/libs/core/src/chat/types.ts +3 -0
- package/libs/core/src/data-extraction/classification/azure.ts +168 -0
- package/libs/core/src/data-extraction/classification/index.ts +1 -0
- package/libs/core/src/data-extraction/dal.ts +246 -0
- package/libs/core/src/data-extraction/form-structure-extractor.ts +294 -0
- package/libs/core/src/data-extraction/index.ts +4 -0
- package/libs/core/src/data-extraction/layout/azure.ts +730 -0
- package/libs/core/src/data-extraction/layout/excel.ts +180 -0
- package/libs/core/src/data-extraction/layout/gcp.ts +1071 -0
- package/libs/core/src/data-extraction/layout/index.ts +266 -0
- package/libs/core/src/data-extraction/layout/plaintext.ts +45 -0
- package/libs/core/src/data-extraction/models.ts +38 -0
- package/libs/core/src/data-extraction/pdf-utils.ts +96 -0
- package/libs/core/src/data-extraction/structuring/bank-statement.ts +1182 -0
- package/libs/core/src/data-extraction/structuring/custom.ts +495 -0
- package/libs/core/src/data-extraction/structuring/index.ts +290 -0
- package/libs/core/src/data-extraction/structuring/prompts.ts +69 -0
- package/libs/core/src/data-extraction/type-guards.ts +110 -0
- package/libs/core/src/data-extraction/types.ts +84 -0
- package/libs/core/src/data-extraction/utils.ts +31 -0
- package/libs/core/src/data-extraction/validation/bank-statement.ts +127 -0
- package/libs/core/src/deals.ts +17 -0
- package/libs/core/src/documents.ts +152 -0
- package/libs/core/src/index.ts +5 -0
- package/libs/core/src/pipelines/display.ts +678 -0
- package/libs/core/src/pipelines/execute.ts +2342 -0
- package/libs/core/src/pipelines/index.ts +4 -0
- package/libs/core/src/pipelines/list.ts +12 -0
- package/libs/core/src/pipelines/runs.ts +53 -0
- package/libs/core/tsconfig.json +20 -0
- package/libs/core/vite.config.ts +56 -0
- package/libs/dal/.prettierignore +6 -0
- package/libs/dal/.prettierrc.js +12 -0
- package/libs/dal/eslint.config.mjs +3 -0
- package/libs/dal/package.json +57 -0
- package/libs/dal/src/_tests/db.test.ts +19 -0
- package/libs/dal/src/_tests/mock-db.ts +60 -0
- package/libs/dal/src/api-key.test.ts +397 -0
- package/libs/dal/src/api-key.ts +110 -0
- package/libs/dal/src/billing.ts +23 -0
- package/libs/dal/src/conversation.test.ts +655 -0
- package/libs/dal/src/conversation.ts +532 -0
- package/libs/dal/src/deal.test.ts +45 -0
- package/libs/dal/src/deal.ts +87 -0
- package/libs/dal/src/defaults-consumer-lending-uk.ts +33 -0
- package/libs/dal/src/defaults-consumer-lending-us.ts +33 -0
- package/libs/dal/src/defaults-private-credit.ts +57 -0
- package/libs/dal/src/defaults-private-equity.ts +51 -0
- package/libs/dal/src/defaults-smb-lending-us.ts +1569 -0
- package/libs/dal/src/defaults-sme-lending-uk-express.ts +1527 -0
- package/libs/dal/src/defaults-sme-lending-uk.ts +1669 -0
- package/libs/dal/src/defaults-types.ts +23 -0
- package/libs/dal/src/defaults.ts +550 -0
- package/libs/dal/src/document.test.ts +70 -0
- package/libs/dal/src/document.ts +192 -0
- package/libs/dal/src/feedback.ts +255 -0
- package/libs/dal/src/form.test.ts +637 -0
- package/libs/dal/src/form.ts +1165 -0
- package/libs/dal/src/index.ts +20 -0
- package/libs/dal/src/invitation.test.ts +746 -0
- package/libs/dal/src/invitation.ts +207 -0
- package/libs/dal/src/member.test.ts +185 -0
- package/libs/dal/src/member.ts +80 -0
- package/libs/dal/src/organization.ts +116 -0
- package/libs/dal/src/permission.ts +25 -0
- package/libs/dal/src/pipeline.test.ts +388 -0
- package/libs/dal/src/pipeline.ts +4222 -0
- package/libs/dal/src/report.ts +199 -0
- package/libs/dal/src/result.ts +16 -0
- package/libs/dal/src/search.ts +172 -0
- package/libs/dal/src/session.test.ts +110 -0
- package/libs/dal/src/session.ts +31 -0
- package/libs/dal/src/submission.test.ts +1304 -0
- package/libs/dal/src/submission.ts +1396 -0
- package/libs/dal/src/tool.ts +159 -0
- package/libs/dal/src/user.ts +16 -0
- package/libs/dal/src/workflow.test.ts +89 -0
- package/libs/dal/src/workflow.ts +262 -0
- package/libs/dal/tsconfig.build.json +4 -0
- package/libs/dal/tsconfig.json +22 -0
- package/libs/dal/vite.config.ts +34 -0
- package/libs/db/.prettierignore +6 -0
- package/libs/db/.prettierrc.js +12 -0
- package/libs/db/eslint.config.mjs +3 -0
- package/libs/db/package.json +52 -0
- package/libs/db/src/index.ts +24 -0
- package/libs/db/src/relations.ts +549 -0
- package/libs/db/src/schema.ts +2 -0
- package/libs/db/src/schemas/api.ts +35 -0
- package/libs/db/src/schemas/conversations.ts +175 -0
- package/libs/db/src/schemas/core.ts +359 -0
- package/libs/db/src/schemas/documents.ts +181 -0
- package/libs/db/src/schemas/feedback.ts +40 -0
- package/libs/db/src/schemas/index.ts +26 -0
- package/libs/db/src/schemas/organisations.ts +97 -0
- package/libs/db/src/schemas/pipelines.ts +440 -0
- package/libs/db/src/schemas/users.ts +95 -0
- package/libs/db/src/types.ts +190 -0
- package/libs/db/src/utils.ts +14 -0
- package/libs/db/tsconfig.json +19 -0
- package/libs/db/vite.config.ts +31 -0
- package/libs/lint/.prettierignore +6 -0
- package/libs/lint/eslint.config.mjs +61 -0
- package/libs/lint/package.json +29 -0
- package/libs/lint/prettier.config.js +12 -0
- package/libs/schemas/.prettierignore +6 -0
- package/libs/schemas/.prettierrc.js +12 -0
- package/libs/schemas/README.md +15 -0
- package/libs/schemas/eslint.config.mjs +3 -0
- package/libs/schemas/package.json +67 -0
- package/libs/schemas/src/core/chat.ts +67 -0
- package/libs/schemas/src/core/core-result.ts +15 -0
- package/libs/schemas/src/core/data-extraction.ts +184 -0
- package/libs/schemas/src/core/layout.ts +478 -0
- package/libs/schemas/src/core/pipeline.ts +128 -0
- package/libs/schemas/src/core/submission.ts +97 -0
- package/libs/schemas/src/db/account.ts +57 -0
- package/libs/schemas/src/db/apiKey.ts +57 -0
- package/libs/schemas/src/db/context.ts +33 -0
- package/libs/schemas/src/db/conversation.ts +65 -0
- package/libs/schemas/src/db/deal.ts +42 -0
- package/libs/schemas/src/db/document.ts +103 -0
- package/libs/schemas/src/db/documentCitation.ts +58 -0
- package/libs/schemas/src/db/documentExtraction.ts +69 -0
- package/libs/schemas/src/db/fieldCorrection.ts +85 -0
- package/libs/schemas/src/db/form.ts +45 -0
- package/libs/schemas/src/db/formField.ts +59 -0
- package/libs/schemas/src/db/formGroup.ts +42 -0
- package/libs/schemas/src/db/impersonation.ts +39 -0
- package/libs/schemas/src/db/index.ts +25 -0
- package/libs/schemas/src/db/invitation.ts +42 -0
- package/libs/schemas/src/db/member.ts +36 -0
- package/libs/schemas/src/db/message.ts +58 -0
- package/libs/schemas/src/db/organization.ts +62 -0
- package/libs/schemas/src/db/session.ts +48 -0
- package/libs/schemas/src/db/submission.ts +54 -0
- package/libs/schemas/src/db/submissionGroup.ts +36 -0
- package/libs/schemas/src/db/submissionItem.ts +33 -0
- package/libs/schemas/src/db/submissionItemVersion.ts +70 -0
- package/libs/schemas/src/db/user.ts +51 -0
- package/libs/schemas/src/db/utils.ts +3 -0
- package/libs/schemas/src/db/verification.ts +36 -0
- package/libs/schemas/src/db/workflow.ts +42 -0
- package/libs/schemas/src/index.ts +10 -0
- package/libs/schemas/tsconfig.json +21 -0
- package/libs/schemas/vite.config.ts +38 -0
- package/libs/ui/.prettierignore +6 -0
- package/libs/ui/.prettierrc.js +12 -0
- package/libs/ui/components.json +24 -0
- package/libs/ui/eslint.config.mjs +3 -0
- package/libs/ui/package.json +142 -0
- package/libs/ui/src/components/chart-viz/chart.tsx +255 -0
- package/libs/ui/src/components/chart-viz/converters.ts +474 -0
- package/libs/ui/src/components/chart-viz/dashboard.tsx +146 -0
- package/libs/ui/src/components/chart-viz/index.ts +37 -0
- package/libs/ui/src/components/chart-viz/markdown.tsx +344 -0
- package/libs/ui/src/components/chart-viz/table.tsx +446 -0
- package/libs/ui/src/components/chart-viz/theme-context.tsx +70 -0
- package/libs/ui/src/components/chart-viz/themes/dark.ts +98 -0
- package/libs/ui/src/components/chart-viz/themes/index.ts +69 -0
- package/libs/ui/src/components/chart-viz/themes/light.ts +98 -0
- package/libs/ui/src/components/chart-viz/themes/tailwind.ts +326 -0
- package/libs/ui/src/components/chart-viz/themes/types.ts +99 -0
- package/libs/ui/src/components/chart-viz/tool-display.tsx +150 -0
- package/libs/ui/src/components/chart-viz/types.ts +95 -0
- package/libs/ui/src/components/doc-viewers/excel/index.tsx +431 -0
- package/libs/ui/src/components/doc-viewers/excel/themes.ts +160 -0
- package/libs/ui/src/components/doc-viewers/image/index.tsx +410 -0
- package/libs/ui/src/components/doc-viewers/pdf/index.tsx +258 -0
- package/libs/ui/src/components/doc-viewers/pdf/virtualized-pdf.tsx +556 -0
- package/libs/ui/src/components/misc/rel-date.tsx +52 -0
- package/libs/ui/src/components/misc/styled-link.tsx +2 -0
- package/libs/ui/src/components/table/data-table.tsx +546 -0
- package/libs/ui/src/components/table/report-table.tsx +305 -0
- package/libs/ui/src/components/table/sortable-column.tsx +34 -0
- package/libs/ui/src/components/ui/accordion.tsx +62 -0
- package/libs/ui/src/components/ui/alert-dialog.tsx +142 -0
- package/libs/ui/src/components/ui/alert.tsx +62 -0
- package/libs/ui/src/components/ui/artifact.tsx +118 -0
- package/libs/ui/src/components/ui/attachments.tsx +388 -0
- package/libs/ui/src/components/ui/avatar.tsx +39 -0
- package/libs/ui/src/components/ui/badge.tsx +43 -0
- package/libs/ui/src/components/ui/breadcrumb.tsx +102 -0
- package/libs/ui/src/components/ui/button-group.tsx +78 -0
- package/libs/ui/src/components/ui/button.tsx +79 -0
- package/libs/ui/src/components/ui/card.tsx +32 -0
- package/libs/ui/src/components/ui/carousel.tsx +228 -0
- package/libs/ui/src/components/ui/chain-of-thought.tsx +198 -0
- package/libs/ui/src/components/ui/checkbox.tsx +27 -0
- package/libs/ui/src/components/ui/citation.tsx +34 -0
- package/libs/ui/src/components/ui/code-block.tsx +500 -0
- package/libs/ui/src/components/ui/collapsible.tsx +19 -0
- package/libs/ui/src/components/ui/command.tsx +161 -0
- package/libs/ui/src/components/ui/conversation.tsx +90 -0
- package/libs/ui/src/components/ui/dialog.tsx +142 -0
- package/libs/ui/src/components/ui/dropdown-menu.tsx +246 -0
- package/libs/ui/src/components/ui/highlight.tsx +3 -0
- package/libs/ui/src/components/ui/hover-card.tsx +36 -0
- package/libs/ui/src/components/ui/inline-citation.tsx +251 -0
- package/libs/ui/src/components/ui/input-group.tsx +156 -0
- package/libs/ui/src/components/ui/input-otp.tsx +78 -0
- package/libs/ui/src/components/ui/input.tsx +21 -0
- package/libs/ui/src/components/ui/label.tsx +19 -0
- package/libs/ui/src/components/ui/model-selector.tsx +174 -0
- package/libs/ui/src/components/ui/multisidebar.tsx +750 -0
- package/libs/ui/src/components/ui/popover.tsx +43 -0
- package/libs/ui/src/components/ui/progress.tsx +28 -0
- package/libs/ui/src/components/ui/reasoning.tsx +178 -0
- package/libs/ui/src/components/ui/resizable.tsx +49 -0
- package/libs/ui/src/components/ui/scroll-area.tsx +54 -0
- package/libs/ui/src/components/ui/select.tsx +171 -0
- package/libs/ui/src/components/ui/separator.tsx +26 -0
- package/libs/ui/src/components/ui/sheet.tsx +128 -0
- package/libs/ui/src/components/ui/shimmer.tsx +53 -0
- package/libs/ui/src/components/ui/skeleton.tsx +13 -0
- package/libs/ui/src/components/ui/sonner.tsx +23 -0
- package/libs/ui/src/components/ui/switch.tsx +26 -0
- package/libs/ui/src/components/ui/table.tsx +96 -0
- package/libs/ui/src/components/ui/tabs.tsx +52 -0
- package/libs/ui/src/components/ui/textarea.tsx +41 -0
- package/libs/ui/src/components/ui/tool.tsx +209 -0
- package/libs/ui/src/components/ui/tooltip.tsx +58 -0
- package/libs/ui/src/components/ui/typography.tsx +113 -0
- package/libs/ui/src/fonts/manrope-v15-latin-300.woff2 +0 -0
- package/libs/ui/src/fonts/manrope-v15-latin-400.woff2 +0 -0
- package/libs/ui/src/fonts/manrope-v15-latin-500.woff2 +0 -0
- package/libs/ui/src/fonts/manrope-v15-latin-600.woff2 +0 -0
- package/libs/ui/src/hooks/use-mobile.ts +19 -0
- package/libs/ui/src/lib/utils.ts +6 -0
- package/libs/ui/src/styles/fonts.css +35 -0
- package/libs/ui/src/styles/style.css +218 -0
- package/libs/ui/tsconfig.json +21 -0
- package/libs/ui/vite.config.ts +80 -0
- package/libs/ui-lit/README.md +245 -0
- package/libs/ui-lit/TESTING_GUIDE.md +296 -0
- package/libs/ui-lit/eslint.config.mjs +3 -0
- package/libs/ui-lit/package.json +41 -0
- package/libs/ui-lit/scripts/build-css.js +43 -0
- package/libs/ui-lit/src/components/sea-alert.ts +132 -0
- package/libs/ui-lit/src/components/sea-button.ts +95 -0
- package/libs/ui-lit/src/components/sea-card.ts +113 -0
- package/libs/ui-lit/src/components/sea-input.ts +184 -0
- package/libs/ui-lit/src/components/sea-spinner.ts +65 -0
- package/libs/ui-lit/src/index.ts +15 -0
- package/libs/ui-lit/src/lib/utils.ts +6 -0
- package/libs/ui-lit/src/styles/tailwind.css +76 -0
- package/libs/ui-lit/src/theme.css +66 -0
- package/libs/ui-lit/src/theme.ts +79 -0
- package/libs/ui-lit/src/vite-env.d.ts +6 -0
- package/libs/ui-lit/tailwind.config.ts +50 -0
- package/libs/ui-lit/test.html +289 -0
- package/libs/ui-lit/tsconfig.json +23 -0
- package/libs/ui-lit/vite.config.ts +31 -0
- package/libs/ui-lit/vite.css.config.ts +20 -0
- package/libs/util/.prettierignore +6 -0
- package/libs/util/.prettierrc.js +12 -0
- package/libs/util/eslint.config.mjs +3 -0
- package/libs/util/package.json +45 -0
- package/libs/util/src/billing.ts +10 -0
- package/libs/util/src/data-transform.ts +19 -0
- package/libs/util/src/encryption.ts +45 -0
- package/libs/util/src/fmt.test.ts +9 -0
- package/libs/util/src/fmt.ts +71 -0
- package/libs/util/src/fuzzy.ts +47 -0
- package/libs/util/src/id.ts +24 -0
- package/libs/util/src/invariant.ts +31 -0
- package/libs/util/src/sub-name.ts +7 -0
- package/libs/util/tsconfig.json +19 -0
- package/libs/util/vite.config.ts +34 -0
- package/package.json +28 -0
- package/packages/widget/.prettierignore +6 -0
- package/packages/widget/.prettierrc.js +12 -0
- package/packages/widget/README.md +95 -0
- package/packages/widget/eslint.config.mjs +11 -0
- package/packages/widget/openapi-ts.config.ts +8 -0
- package/packages/widget/package.json +89 -0
- package/packages/widget/postcss.config.mjs +10 -0
- package/packages/widget/src/clients/api/client/client.ts +187 -0
- package/packages/widget/src/clients/api/client/index.ts +22 -0
- package/packages/widget/src/clients/api/client/types.ts +192 -0
- package/packages/widget/src/clients/api/client/utils.ts +394 -0
- package/packages/widget/src/clients/api/client.gen.ts +18 -0
- package/packages/widget/src/clients/api/core/auth.ts +39 -0
- package/packages/widget/src/clients/api/core/bodySerializer.ts +74 -0
- package/packages/widget/src/clients/api/core/params.ts +132 -0
- package/packages/widget/src/clients/api/core/pathSerializer.ts +169 -0
- package/packages/widget/src/clients/api/core/types.ts +80 -0
- package/packages/widget/src/clients/api/index.ts +3 -0
- package/packages/widget/src/clients/api/sdk.gen.ts +805 -0
- package/packages/widget/src/clients/api/types.gen.ts +2085 -0
- package/packages/widget/src/components/container.tsx +42 -0
- package/packages/widget/src/components/data-display.tsx +384 -0
- package/packages/widget/src/components/data-viewer.tsx +311 -0
- package/packages/widget/src/components/doc-list.tsx +102 -0
- package/packages/widget/src/components/field-correction-modal.tsx +265 -0
- package/packages/widget/src/components/header.tsx +71 -0
- package/packages/widget/src/components/new-submission.tsx +290 -0
- package/packages/widget/src/components/sidebar-right.tsx +19 -0
- package/packages/widget/src/components/submission-card.tsx +66 -0
- package/packages/widget/src/components/submission-page.tsx +75 -0
- package/packages/widget/src/components/upload-doc.tsx +241 -0
- package/packages/widget/src/components/widget.tsx +101 -0
- package/packages/widget/src/index.tsx +167 -0
- package/packages/widget/src/lib/config.ts +2 -0
- package/packages/widget/src/lib/util.ts +40 -0
- package/packages/widget/src/styles/index.css +5 -0
- package/packages/widget/src/styles/tw-properties.css +337 -0
- package/packages/widget/src/vite-env.d.ts +3 -0
- package/packages/widget/tsconfig.app.json +35 -0
- package/packages/widget/tsconfig.json +4 -0
- package/packages/widget/tsconfig.node.json +24 -0
- package/packages/widget/vite.config.ts +116 -0
- package/packages/widget-lit/BOTTLENECKS.md +250 -0
- package/packages/widget-lit/IMPLEMENTATION_SUMMARY.md +295 -0
- package/packages/widget-lit/README.md +232 -0
- package/packages/widget-lit/eslint.config.mjs +3 -0
- package/packages/widget-lit/package.json +52 -0
- package/packages/widget-lit/src/api-client.ts +230 -0
- package/packages/widget-lit/src/api-client.ts.backup +218 -0
- package/packages/widget-lit/src/components/sea-chat.ts +382 -0
- package/packages/widget-lit/src/components/sea-submission-viewer.ts +267 -0
- package/packages/widget-lit/src/components/sea-widget.ts +317 -0
- package/packages/widget-lit/src/index.ts +48 -0
- package/packages/widget-lit/src/react.ts +58 -0
- package/packages/widget-lit/src/style.css +47 -0
- package/packages/widget-lit/tsconfig.json +24 -0
- package/packages/widget-lit/vite.config.ts +29 -0
- package/packages/widget-ng/DEVELOPMENT.md +74 -0
- package/packages/widget-ng/README.md +657 -0
- package/packages/widget-ng/dev.sh +14 -0
- package/packages/widget-ng/eslint.config.mjs +24 -0
- package/packages/widget-ng/ng-package.json +9 -0
- package/packages/widget-ng/package.json +85 -0
- package/packages/widget-ng/src/index.ts +45 -0
- package/packages/widget-ng/src/lib/components/sea-chat.component.ts +737 -0
- package/packages/widget-ng/src/lib/components/sea-data-viewer.component.ts +2240 -0
- package/packages/widget-ng/src/lib/components/sea-deal-form-modal.component.ts +702 -0
- package/packages/widget-ng/src/lib/components/sea-document-list.component.ts +350 -0
- package/packages/widget-ng/src/lib/components/sea-feedback-modal.component.ts +461 -0
- package/packages/widget-ng/src/lib/components/sea-file-upload.component.ts +655 -0
- package/packages/widget-ng/src/lib/components/sea-model-selection-modal.component.ts +367 -0
- package/packages/widget-ng/src/lib/components/sea-new-submission-modal.component.ts +414 -0
- package/packages/widget-ng/src/lib/components/sea-pdf-viewer.component.ts +869 -0
- package/packages/widget-ng/src/lib/components/sea-submission-card.component.ts +251 -0
- package/packages/widget-ng/src/lib/components/sea-widget.component.ts +684 -0
- package/packages/widget-ng/src/lib/models/submission.model.ts +170 -0
- package/packages/widget-ng/src/lib/pipes/markdown.pipe.ts +57 -0
- package/packages/widget-ng/src/lib/services/api-client.service.ts +715 -0
- package/packages/widget-ng/src/lib/services/chat.service.ts +330 -0
- package/packages/widget-ng/src/lib/services/config.service.ts +107 -0
- package/packages/widget-ng/src/web-component.ts +56 -0
- package/packages/widget-ng/tsconfig.json +25 -0
- package/packages/widget-ng/tsconfig.lib.json +9 -0
- package/packages/widget-ng/vite.config.elements.ts +26 -0
- package/packages/widget-ng/vitest.config.ts +19 -0
- package/packages/widget-ng/vitest.setup.ts +13 -0
- package/pnpm-workspace.yaml +18 -0
- package/render.yaml +136 -0
- package/scripts/README.md +57 -0
- package/scripts/package.json +22 -0
- package/scripts/python/.python-version +1 -0
- package/scripts/python/README.md +3 -0
- package/scripts/python/export-org-data.py +693 -0
- package/scripts/python/pyproject.toml +29 -0
- package/scripts/python/requirements-dev.lock +36 -0
- package/scripts/python/requirements.lock +36 -0
- package/scripts/python/src/gen.py +297 -0
- package/scripts/python/test.py +34 -0
- package/scripts/src/fix-storage-provider-mismatch.ts +239 -0
- package/scripts/src/sync-render-yaml.ts +290 -0
- package/scripts/src/test-chat-stream.ts +300 -0
- package/scripts/src/test-reconciliation.ts +230 -0
- package/scripts/tsconfig.json +15 -0
- package/tests/angular-test-app/.vscode/extensions.json +4 -0
- package/tests/angular-test-app/.vscode/launch.json +13 -0
- package/tests/angular-test-app/.vscode/tasks.json +24 -0
- package/tests/angular-test-app/README.md +59 -0
- package/tests/angular-test-app/angular.json +111 -0
- package/tests/angular-test-app/clean-start.sh +14 -0
- package/tests/angular-test-app/package.json +36 -0
- package/tests/angular-test-app/public/favicon.ico +0 -0
- package/tests/angular-test-app/src/app/app.component.ts +220 -0
- package/tests/angular-test-app/src/app/app.config.ts +5 -0
- package/tests/angular-test-app/src/env.d.ts +13 -0
- package/tests/angular-test-app/src/index.html +13 -0
- package/tests/angular-test-app/src/main.ts +6 -0
- package/tests/angular-test-app/src/styles.css +8 -0
- package/tests/angular-test-app/tsconfig.app.json +15 -0
- package/tests/angular-test-app/tsconfig.json +27 -0
- package/tests/crm-viewer-app/API_INTEGRATION_SUMMARY.md +295 -0
- package/tests/crm-viewer-app/CURRENT_ASSETS_FIELDS.md +148 -0
- package/tests/crm-viewer-app/FIELD_ID_MAPPING.md +206 -0
- package/tests/crm-viewer-app/INTEGRATION_GUIDE.md +309 -0
- package/tests/crm-viewer-app/README.md +174 -0
- package/tests/crm-viewer-app/REAL_API_INTEGRATION.md +240 -0
- package/tests/crm-viewer-app/UPDATED_IMPLEMENTATION.md +279 -0
- package/tests/crm-viewer-app/angular.json +114 -0
- package/tests/crm-viewer-app/package.json +35 -0
- package/tests/crm-viewer-app/src/app/app.component.ts +534 -0
- package/tests/crm-viewer-app/src/app/citation.service.ts +316 -0
- package/tests/crm-viewer-app/src/env.d.ts +16 -0
- package/tests/crm-viewer-app/src/index.html +19 -0
- package/tests/crm-viewer-app/src/main.ts +7 -0
- package/tests/crm-viewer-app/src/styles.css +409 -0
- package/tests/crm-viewer-app/src/template.html +2678 -0
- package/tests/crm-viewer-app/tsconfig.app.json +15 -0
- package/tests/crm-viewer-app/tsconfig.json +27 -0
- package/tests/e2e/package.json +17 -0
- package/tests/e2e/playwright.config.ts +75 -0
- package/tests/e2e/tests/api/health.spec.ts +10 -0
- package/tests/e2e/tests/app/example.spec.ts +10 -0
- package/tests/widget-test-app/.prettierignore +6 -0
- package/tests/widget-test-app/README.md +48 -0
- package/tests/widget-test-app/index.html +12 -0
- package/tests/widget-test-app/package.json +24 -0
- package/tests/widget-test-app/src/App.css +192 -0
- package/tests/widget-test-app/src/App.tsx +80 -0
- package/tests/widget-test-app/src/main.tsx +9 -0
- package/tests/widget-test-app/src/vite-env.d.ts +4 -0
- package/tests/widget-test-app/tsconfig.json +25 -0
- package/tests/widget-test-app/tsconfig.node.json +11 -0
- package/tests/widget-test-app/vite.config.ts +14 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { UseCase as DbUseCase, FormFieldType } from "@sea/db/schema";
|
|
2
|
+
|
|
3
|
+
export type DenormField = { name: string; type: FormFieldType; hint?: string; order: number };
|
|
4
|
+
export type DenormGroup = {
|
|
5
|
+
name: string;
|
|
6
|
+
hint?: string;
|
|
7
|
+
order: number;
|
|
8
|
+
multi?: boolean;
|
|
9
|
+
fields?: DenormField[];
|
|
10
|
+
};
|
|
11
|
+
export type DenormForm = { name: string; hint: string; groups?: DenormGroup[] };
|
|
12
|
+
export type DenormWorkflow = { name: string; slug: string; hint: string; forms?: DenormForm[] };
|
|
13
|
+
|
|
14
|
+
export const defaultDeals = [
|
|
15
|
+
{
|
|
16
|
+
name: "Test Deal",
|
|
17
|
+
},
|
|
18
|
+
] as const;
|
|
19
|
+
|
|
20
|
+
export const unnamedField = "<Unnamed field>";
|
|
21
|
+
|
|
22
|
+
// NOTE: This type must stay in sync with `UseCase` in `@sea/db/schema`.
|
|
23
|
+
export type UseCase = DbUseCase | null;
|
|
@@ -0,0 +1,550 @@
|
|
|
1
|
+
export { defaultDeals, unnamedField } from "./defaults-types";
|
|
2
|
+
export type { DenormField, DenormForm, DenormWorkflow, UseCase } from "./defaults-types";
|
|
3
|
+
|
|
4
|
+
import { defaultWorkflows as consumerLendingUkWorkflows } from "./defaults-consumer-lending-uk";
|
|
5
|
+
import { defaultWorkflows as consumerLendingUsWorkflows } from "./defaults-consumer-lending-us";
|
|
6
|
+
import { defaultWorkflows as privateCreditWorkflows } from "./defaults-private-credit";
|
|
7
|
+
import { defaultWorkflows as privateEquityWorkflows } from "./defaults-private-equity";
|
|
8
|
+
import { defaultWorkflows as smbLendingUsWorkflows } from "./defaults-smb-lending-us";
|
|
9
|
+
import { defaultWorkflows as smeLendingUkWorkflows } from "./defaults-sme-lending-uk";
|
|
10
|
+
import { defaultWorkflows as smeLendingUkExpressWorkflows } from "./defaults-sme-lending-uk-express";
|
|
11
|
+
import type { DenormWorkflow, UseCase } from "./defaults-types";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* ================================================================================================
|
|
15
|
+
* DEFAULT WORKFLOW STRUCTURE GUIDE
|
|
16
|
+
* ================================================================================================
|
|
17
|
+
*
|
|
18
|
+
* This guide explains how to structure workflow templates for document extraction and data capture.
|
|
19
|
+
* The templates define what data to extract from documents and how to organize it.
|
|
20
|
+
*
|
|
21
|
+
* ================================================================================================
|
|
22
|
+
* CORE CONCEPTS
|
|
23
|
+
* ================================================================================================
|
|
24
|
+
*
|
|
25
|
+
* 1. WORKFLOW - Top level container (e.g., "Origination", "Underwriting", "Monitoring")
|
|
26
|
+
* - Represents a business process stage
|
|
27
|
+
* - Contains multiple FORMS
|
|
28
|
+
*
|
|
29
|
+
* 2. FORM - Document type or data category (e.g., "Bank Statement", "Income Statement")
|
|
30
|
+
* - Represents a specific document or data collection point
|
|
31
|
+
* - Contains multiple GROUPS
|
|
32
|
+
*
|
|
33
|
+
* 3. GROUP - Logical section within a form (e.g., "Account Information", "Transactions")
|
|
34
|
+
* - Organizes related fields together
|
|
35
|
+
* - Can be marked as `multi: true` to allow multiple instances (collections)
|
|
36
|
+
* - Contains multiple FIELDS
|
|
37
|
+
*
|
|
38
|
+
* 4. FIELD - Individual data point (e.g., "BankName", "Revenue", "TransactionDate")
|
|
39
|
+
* - Has a type: "string", "money", "number", "date", "string-long"
|
|
40
|
+
* - Should always have a descriptive hint
|
|
41
|
+
*
|
|
42
|
+
* ================================================================================================
|
|
43
|
+
* MULTI-PERIOD DATA BEST PRACTICES
|
|
44
|
+
* ================================================================================================
|
|
45
|
+
*
|
|
46
|
+
* When capturing financial data or time-series information, use the MULTI-GROUP pattern:
|
|
47
|
+
*
|
|
48
|
+
* ✅ CORRECT PATTERN - Separate static info from repeating periods:
|
|
49
|
+
*
|
|
50
|
+
* Form: "Income Statement"
|
|
51
|
+
* Group: "Company Information" (order: 0, multi: false)
|
|
52
|
+
* - CompanyName
|
|
53
|
+
* - CompaniesHouseNumber
|
|
54
|
+
* Group: "Financial Periods" (order: 1, multi: true) ← Multiple periods
|
|
55
|
+
* - FinancialPeriodEnd
|
|
56
|
+
* - Revenue
|
|
57
|
+
* - Expenses
|
|
58
|
+
* - Net Income
|
|
59
|
+
*
|
|
60
|
+
* ❌ INCORRECT PATTERN - Don't capture only one period:
|
|
61
|
+
*
|
|
62
|
+
* Form: "Income Statement"
|
|
63
|
+
* Group: "Financial Data" (order: 0)
|
|
64
|
+
* - FinancialPeriodEnd ← Only captures ONE period
|
|
65
|
+
* - Revenue
|
|
66
|
+
* - Expenses
|
|
67
|
+
*
|
|
68
|
+
* WHY? Multi-period capture enables:
|
|
69
|
+
* - Trend analysis (compare Q1 vs Q2 vs Q3)
|
|
70
|
+
* - Growth calculations
|
|
71
|
+
* - Anomaly detection
|
|
72
|
+
* - Better underwriting decisions
|
|
73
|
+
*
|
|
74
|
+
* USE MULTI-GROUP FOR:
|
|
75
|
+
* ✓ Financial statements (P&L, Balance Sheet, Cash Flow) - capture multiple quarters/years
|
|
76
|
+
* ✓ Bank statements - capture multiple statement periods
|
|
77
|
+
* ✓ Transactions - capture all transactions within a statement
|
|
78
|
+
* ✓ Directors/Officers - capture all directors in a company
|
|
79
|
+
* ✓ Invoices (Debtors/Creditors ledger) - capture all outstanding invoices
|
|
80
|
+
* ✓ CCJs/Legal judgements - capture all judgements
|
|
81
|
+
* ✓ Covenants - capture all covenant tests
|
|
82
|
+
* ✓ Any time you might have MORE THAN ONE instance of the same data structure
|
|
83
|
+
*
|
|
84
|
+
* ================================================================================================
|
|
85
|
+
* HINT GUIDELINES
|
|
86
|
+
* ================================================================================================
|
|
87
|
+
*
|
|
88
|
+
* EVERY field should have a hint. Good hints:
|
|
89
|
+
*
|
|
90
|
+
* 1. EXPLAIN WHAT TO EXTRACT
|
|
91
|
+
* ✅ "Total sales revenue for the period (UK term: Turnover)"
|
|
92
|
+
* ❌ "Revenue"
|
|
93
|
+
*
|
|
94
|
+
* 2. PROVIDE EXAMPLES WHERE HELPFUL
|
|
95
|
+
* ✅ "UK bank sort code (e.g., 12-34-56)"
|
|
96
|
+
* ✅ "Period covered (e.g., January 2024, Q1 2024, YTD 2024)"
|
|
97
|
+
* ❌ "Sort code"
|
|
98
|
+
*
|
|
99
|
+
* 3. CLARIFY REGIONAL/DOMAIN TERMINOLOGY
|
|
100
|
+
* ✅ "Accounts Payable (UK term: Creditors)"
|
|
101
|
+
* ✅ "Inventory (UK term: Stock)"
|
|
102
|
+
* ❌ "AP"
|
|
103
|
+
*
|
|
104
|
+
* 4. EXPLAIN CALCULATIONS OR RELATIONSHIPS
|
|
105
|
+
* ✅ "Gross Profit = Revenue - Cost of Sales"
|
|
106
|
+
* ✅ "Leave blank if this is a deposit (not a withdrawal)"
|
|
107
|
+
* ❌ "Gross profit"
|
|
108
|
+
*
|
|
109
|
+
* 5. PROVIDE BUSINESS CONTEXT FOR METRICS
|
|
110
|
+
* ✅ "Cash Conversion Cycle (CCC) - measures days between paying suppliers and collecting from customers. Lower is better."
|
|
111
|
+
* ❌ "CCC"
|
|
112
|
+
*
|
|
113
|
+
* ================================================================================================
|
|
114
|
+
* FIELD NAMING CONVENTIONS
|
|
115
|
+
* ================================================================================================
|
|
116
|
+
*
|
|
117
|
+
* - Use PascalCase for field names: "CompanyName", "DateOfBirth", "TotalRevenue"
|
|
118
|
+
* - Be descriptive but concise: "StatementPeriodStart" not "Start"
|
|
119
|
+
* - Use standard terminology: "Revenue" not "Sales" (unless region-specific like UK "Turnover")
|
|
120
|
+
* - Be consistent across forms: if you use "CompaniesHouseNumber" in one form, use it everywhere
|
|
121
|
+
*
|
|
122
|
+
* ================================================================================================
|
|
123
|
+
* ORDERING
|
|
124
|
+
* ================================================================================================
|
|
125
|
+
*
|
|
126
|
+
* - Groups should be ordered logically: static info first, then collections
|
|
127
|
+
* Example: "Company Information" (order: 0), then "Financial Periods" (order: 1)
|
|
128
|
+
*
|
|
129
|
+
* - Fields should be ordered by importance and logical flow:
|
|
130
|
+
* Example in a Bank Statement:
|
|
131
|
+
* 1. BankName
|
|
132
|
+
* 2. AccountNumber
|
|
133
|
+
* 3. StatementPeriodStart
|
|
134
|
+
* 4. StatementPeriodEnd
|
|
135
|
+
* 5. OpeningBalance
|
|
136
|
+
* 6. ClosingBalance
|
|
137
|
+
*
|
|
138
|
+
* ================================================================================================
|
|
139
|
+
* EXAMPLE - SIMPLE DEFAULT WORKFLOW
|
|
140
|
+
* ================================================================================================
|
|
141
|
+
*
|
|
142
|
+
* The workflow below demonstrates these principles with two common forms:
|
|
143
|
+
* 1. Income Statement - showing multi-period financial data capture
|
|
144
|
+
* 2. Bank Statement - showing both static account info and repeating transactions
|
|
145
|
+
*/
|
|
146
|
+
|
|
147
|
+
// Simple default workflow for when useCase is null (skip case)
|
|
148
|
+
const simpleDefaultWorkflows: DenormWorkflow[] = [
|
|
149
|
+
{
|
|
150
|
+
// WORKFLOW LEVEL
|
|
151
|
+
name: "Origination",
|
|
152
|
+
slug: "origination",
|
|
153
|
+
hint: "Extract applicant details, loan amounts, business information, contact data",
|
|
154
|
+
forms: [
|
|
155
|
+
// FORM 1: Income Statement
|
|
156
|
+
// Demonstrates: Multi-period financial data capture pattern
|
|
157
|
+
{
|
|
158
|
+
name: "Income Statement",
|
|
159
|
+
hint: "Capture income statement results across reporting periods for financial imports",
|
|
160
|
+
groups: [
|
|
161
|
+
// GROUP 1: Static company information (captured once)
|
|
162
|
+
{
|
|
163
|
+
name: "General Information",
|
|
164
|
+
order: 0,
|
|
165
|
+
// Note: multi is NOT set here - we only need company info once
|
|
166
|
+
fields: [
|
|
167
|
+
{
|
|
168
|
+
name: "CompanyName",
|
|
169
|
+
type: "string",
|
|
170
|
+
hint: "Name of the company for which the financials are reported.",
|
|
171
|
+
order: 0,
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
},
|
|
175
|
+
// GROUP 2: Financial periods (can capture multiple periods for trend analysis)
|
|
176
|
+
{
|
|
177
|
+
name: "Income Statement",
|
|
178
|
+
order: 1,
|
|
179
|
+
multi: true, // ← IMPORTANT: Allows capturing multiple financial periods (Q1, Q2, Q3, etc.)
|
|
180
|
+
fields: [
|
|
181
|
+
{
|
|
182
|
+
name: "FinancialPeriod",
|
|
183
|
+
type: "date",
|
|
184
|
+
hint: "The relevant financial period end date. Provide the date in UTC (YYYY-MM-DD).",
|
|
185
|
+
order: 0,
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
name: "Revenue",
|
|
189
|
+
type: "money",
|
|
190
|
+
hint: "Total income generated from normal business operations. Often referred to as total sales, total income, or turnover.",
|
|
191
|
+
order: 1,
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
name: "COGS",
|
|
195
|
+
type: "money",
|
|
196
|
+
hint: "Direct costs of producing goods sold; includes materials and labor. Also called cost of sales.",
|
|
197
|
+
order: 2,
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
name: "Gross Profit",
|
|
201
|
+
type: "money",
|
|
202
|
+
hint: "Derived as Revenue − COGS (cost of goods sold). If Revenue and COGS are provided, this can be left blank.",
|
|
203
|
+
order: 3,
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
name: "SG&A",
|
|
207
|
+
type: "money",
|
|
208
|
+
hint: "Overhead and operating expenses not tied to production. Can be referred to as overheads, SG&A or Selling, General and Administrative expenses.",
|
|
209
|
+
order: 4,
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
name: "EBIT",
|
|
213
|
+
type: "money",
|
|
214
|
+
hint: "Earnings before interest and taxes. Often called operating profit. If not provided, it can be approximated as (Revenue - COGS - SG&A) or (Gross Profit - SG&A).",
|
|
215
|
+
order: 5,
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
name: "EBITDA",
|
|
219
|
+
type: "money",
|
|
220
|
+
hint: "Earnings before interest, taxes, depreciation, and amortisation. This shows a company's profitability before non-cash and financing costs. If the value isn't given explicitly, this can be calculated by taking EBIT and adding depreciation and amortisation.",
|
|
221
|
+
order: 6,
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
name: "Net Income",
|
|
225
|
+
type: "money",
|
|
226
|
+
hint: "Total profit of the company after all expenses and taxes have been deducted from revenue. Also known as net profit, net earnings, or net result.",
|
|
227
|
+
order: 7,
|
|
228
|
+
},
|
|
229
|
+
],
|
|
230
|
+
},
|
|
231
|
+
],
|
|
232
|
+
},
|
|
233
|
+
// FORM 2: Bank Statement
|
|
234
|
+
// Demonstrates: Two-level collection pattern (account info + transactions)
|
|
235
|
+
{
|
|
236
|
+
name: "Bank Statement",
|
|
237
|
+
hint: "Extract account balances, transactions, deposits, withdrawals, and cash flow patterns",
|
|
238
|
+
groups: [
|
|
239
|
+
// GROUP 1: Static account information (captured once per statement)
|
|
240
|
+
{
|
|
241
|
+
name: "Bank Statement",
|
|
242
|
+
order: 0,
|
|
243
|
+
// Note: In a more advanced implementation, this could be split into:
|
|
244
|
+
// - "Account Information" (order: 0, multi: false) for BankName, AccountNumber, etc.
|
|
245
|
+
// - "Statement Periods" (order: 1, multi: true) for period-specific data
|
|
246
|
+
// See defaults-sme-lending-uk.ts for an example of this pattern
|
|
247
|
+
fields: [
|
|
248
|
+
{
|
|
249
|
+
name: "BankName",
|
|
250
|
+
type: "string",
|
|
251
|
+
order: 0,
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
name: "AccountNumber",
|
|
255
|
+
type: "string",
|
|
256
|
+
order: 1,
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
name: "AccountType",
|
|
260
|
+
type: "string",
|
|
261
|
+
order: 2,
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
name: "AccountHolderName",
|
|
265
|
+
type: "string",
|
|
266
|
+
order: 3,
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
name: "StatementPeriodStart",
|
|
270
|
+
type: "date",
|
|
271
|
+
order: 4,
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
name: "StatementPeriodEnd",
|
|
275
|
+
type: "date",
|
|
276
|
+
order: 5,
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
name: "OpeningBalance",
|
|
280
|
+
type: "money",
|
|
281
|
+
order: 6,
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
name: "ClosingBalance",
|
|
285
|
+
type: "money",
|
|
286
|
+
order: 7,
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
name: "IBAN",
|
|
290
|
+
type: "string",
|
|
291
|
+
order: 8,
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
name: "Currency",
|
|
295
|
+
type: "string",
|
|
296
|
+
order: 9,
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
name: "SortCode",
|
|
300
|
+
type: "string",
|
|
301
|
+
order: 10,
|
|
302
|
+
},
|
|
303
|
+
],
|
|
304
|
+
},
|
|
305
|
+
// GROUP 2: Transactions (can have many transactions per statement)
|
|
306
|
+
{
|
|
307
|
+
name: "Transactions",
|
|
308
|
+
multi: true, // ← IMPORTANT: Each bank statement has multiple transactions
|
|
309
|
+
order: 1,
|
|
310
|
+
fields: [
|
|
311
|
+
{
|
|
312
|
+
name: "Date",
|
|
313
|
+
type: "date",
|
|
314
|
+
order: 0,
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
name: "Description",
|
|
318
|
+
type: "string",
|
|
319
|
+
order: 1,
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
name: "DepositAmount",
|
|
323
|
+
type: "money",
|
|
324
|
+
order: 2,
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
name: "WithdrawalAmount",
|
|
328
|
+
type: "money",
|
|
329
|
+
order: 3,
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
name: "Balance",
|
|
333
|
+
type: "money",
|
|
334
|
+
order: 4,
|
|
335
|
+
},
|
|
336
|
+
],
|
|
337
|
+
},
|
|
338
|
+
],
|
|
339
|
+
},
|
|
340
|
+
],
|
|
341
|
+
},
|
|
342
|
+
];
|
|
343
|
+
|
|
344
|
+
// Legacy export for backward compatibility - returns simple default workflows
|
|
345
|
+
export const defaultWorkflows: DenormWorkflow[] = simpleDefaultWorkflows;
|
|
346
|
+
|
|
347
|
+
// Get workflows for a specific use case
|
|
348
|
+
export function getWorkflowsForUseCase(useCase: UseCase | null): DenormWorkflow[] {
|
|
349
|
+
if (!useCase) {
|
|
350
|
+
return simpleDefaultWorkflows;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
switch (useCase) {
|
|
354
|
+
case "sme_lending_uk":
|
|
355
|
+
return smeLendingUkWorkflows;
|
|
356
|
+
case "sme_lending_uk_express":
|
|
357
|
+
return smeLendingUkExpressWorkflows;
|
|
358
|
+
case "smb_lending_us":
|
|
359
|
+
return smbLendingUsWorkflows;
|
|
360
|
+
case "consumer_lending_uk":
|
|
361
|
+
return consumerLendingUkWorkflows;
|
|
362
|
+
case "consumer_lending_us":
|
|
363
|
+
return consumerLendingUsWorkflows;
|
|
364
|
+
case "private_equity":
|
|
365
|
+
return privateEquityWorkflows;
|
|
366
|
+
case "private_credit":
|
|
367
|
+
return privateCreditWorkflows;
|
|
368
|
+
default:
|
|
369
|
+
return simpleDefaultWorkflows;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// Form mapping for use cases (updated to match new structure without lending-ratios)
|
|
374
|
+
export type UseCaseFormMap = {
|
|
375
|
+
[key in Exclude<UseCase, null>]?: {
|
|
376
|
+
[workflowSlug: string]: string[];
|
|
377
|
+
};
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
export const useCaseFormMap: UseCaseFormMap = {
|
|
381
|
+
sme_lending_uk: {
|
|
382
|
+
origination: [
|
|
383
|
+
"Investment Memo",
|
|
384
|
+
"UK P&L",
|
|
385
|
+
"UK Balance Sheet",
|
|
386
|
+
"Bank Statement",
|
|
387
|
+
"Directors & Officers",
|
|
388
|
+
"Debtors Ledger",
|
|
389
|
+
"Creditors Ledger",
|
|
390
|
+
"Cash Flow Statement",
|
|
391
|
+
],
|
|
392
|
+
underwriting: [
|
|
393
|
+
"UK P&L",
|
|
394
|
+
"UK Balance Sheet",
|
|
395
|
+
"Cash Flow Statement",
|
|
396
|
+
"Debtors Ledger",
|
|
397
|
+
"Creditors Ledger",
|
|
398
|
+
"UK Credit Check",
|
|
399
|
+
"Security & Collateral",
|
|
400
|
+
"Cash Conversion Ratios",
|
|
401
|
+
],
|
|
402
|
+
monitoring: [
|
|
403
|
+
"Investment Memo",
|
|
404
|
+
"Bank Statement",
|
|
405
|
+
"Directors & Officers",
|
|
406
|
+
"Covenant Compliance",
|
|
407
|
+
],
|
|
408
|
+
},
|
|
409
|
+
smb_lending_us: {
|
|
410
|
+
origination: ["Investment Memo", "Bank Statement", "Principal Owners"],
|
|
411
|
+
underwriting: [
|
|
412
|
+
"Income Statement",
|
|
413
|
+
"Balance Sheet",
|
|
414
|
+
"Tax Returns",
|
|
415
|
+
"Credit Bureau",
|
|
416
|
+
"UCC Filings & Business Registration",
|
|
417
|
+
"Security & Collateral",
|
|
418
|
+
"Cash Conversion Ratios",
|
|
419
|
+
],
|
|
420
|
+
monitoring: ["Investment Memo", "Bank Statement", "Principal Owners", "Covenant Compliance"],
|
|
421
|
+
},
|
|
422
|
+
consumer_lending_uk: {
|
|
423
|
+
origination: [
|
|
424
|
+
"Credit Application",
|
|
425
|
+
"Personal Financial Statement",
|
|
426
|
+
"Employment Verification",
|
|
427
|
+
"Bank Statement",
|
|
428
|
+
],
|
|
429
|
+
underwriting: ["Personal Credit Report", "Security & Collateral"],
|
|
430
|
+
monitoring: [],
|
|
431
|
+
},
|
|
432
|
+
consumer_lending_us: {
|
|
433
|
+
origination: [
|
|
434
|
+
"Credit Application",
|
|
435
|
+
"Personal Financial Statement",
|
|
436
|
+
"Employment Verification",
|
|
437
|
+
"Bank Statement",
|
|
438
|
+
],
|
|
439
|
+
underwriting: ["Personal Credit Report", "Security & Collateral"],
|
|
440
|
+
monitoring: [],
|
|
441
|
+
},
|
|
442
|
+
private_equity: {
|
|
443
|
+
origination: [
|
|
444
|
+
"Investment Memo",
|
|
445
|
+
"Income Statement",
|
|
446
|
+
"Balance Sheet",
|
|
447
|
+
"Cash Flow Statement",
|
|
448
|
+
"Sponsor Information",
|
|
449
|
+
],
|
|
450
|
+
monitoring: ["Covenant Compliance"],
|
|
451
|
+
},
|
|
452
|
+
private_credit: {
|
|
453
|
+
origination: [
|
|
454
|
+
"Investment Memo",
|
|
455
|
+
"Income Statement",
|
|
456
|
+
"Balance Sheet",
|
|
457
|
+
"Cash Flow Statement",
|
|
458
|
+
"Sponsor Information",
|
|
459
|
+
"Intercreditor Agreement",
|
|
460
|
+
"Security & Collateral",
|
|
461
|
+
],
|
|
462
|
+
monitoring: ["Covenant Compliance"],
|
|
463
|
+
},
|
|
464
|
+
};
|
|
465
|
+
|
|
466
|
+
// Clone a DenormWorkflow by deeply copying its nested collections (forms → groups → fields).
|
|
467
|
+
// Top-level properties like name/slug/hint are primitives and are safe to spread.
|
|
468
|
+
// If DenormWorkflow gains additional reference-type properties in future, update this helper.
|
|
469
|
+
function cloneWorkflow(workflow: DenormWorkflow): DenormWorkflow {
|
|
470
|
+
return {
|
|
471
|
+
...workflow,
|
|
472
|
+
forms: workflow.forms?.map((form) => ({
|
|
473
|
+
...form,
|
|
474
|
+
groups: form.groups?.map((group) => ({
|
|
475
|
+
...group,
|
|
476
|
+
fields: group.fields?.map((field) => ({ ...field })),
|
|
477
|
+
})),
|
|
478
|
+
})),
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
// Filter forms based on use case
|
|
483
|
+
export function filterFormsForUseCase(workflow: DenormWorkflow, useCase: UseCase): DenormWorkflow {
|
|
484
|
+
if (!useCase) {
|
|
485
|
+
return workflow;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
const formMap = useCaseFormMap[useCase];
|
|
489
|
+
if (!formMap || !workflow.slug) {
|
|
490
|
+
return workflow;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
const allowedForms = formMap[workflow.slug];
|
|
494
|
+
if (!allowedForms) {
|
|
495
|
+
// If no mapping exists for this workflow slug, return all forms
|
|
496
|
+
return workflow;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
// Deep clone to avoid mutating the original
|
|
500
|
+
const filteredWorkflow = cloneWorkflow(workflow);
|
|
501
|
+
|
|
502
|
+
if (filteredWorkflow.forms) {
|
|
503
|
+
filteredWorkflow.forms = filteredWorkflow.forms.filter((form) =>
|
|
504
|
+
allowedForms.includes(form.name),
|
|
505
|
+
);
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
return filteredWorkflow;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
// Field customization functions
|
|
512
|
+
export function customizeFieldsForUseCase(
|
|
513
|
+
workflow: DenormWorkflow,
|
|
514
|
+
useCase: UseCase,
|
|
515
|
+
): DenormWorkflow {
|
|
516
|
+
if (!useCase) {
|
|
517
|
+
return workflow;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
// Deep clone to avoid mutating the original
|
|
521
|
+
const customizedWorkflow = cloneWorkflow(workflow);
|
|
522
|
+
|
|
523
|
+
if (useCase === "sme_lending_uk" && customizedWorkflow.slug === "origination") {
|
|
524
|
+
const investmentMemoForm = customizedWorkflow.forms?.find((f) => f.name === "Investment Memo");
|
|
525
|
+
const borrowerGroup = investmentMemoForm?.groups?.find((g) => g.name === "Borrower Profile");
|
|
526
|
+
if (borrowerGroup?.fields) {
|
|
527
|
+
borrowerGroup.fields.push({
|
|
528
|
+
name: "Companies House Number",
|
|
529
|
+
type: "string",
|
|
530
|
+
hint: "Company registration number",
|
|
531
|
+
order: borrowerGroup.fields.length,
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
if (useCase === "smb_lending_us" && customizedWorkflow.slug === "origination") {
|
|
537
|
+
const investmentMemoForm = customizedWorkflow.forms?.find((f) => f.name === "Investment Memo");
|
|
538
|
+
const borrowerGroup = investmentMemoForm?.groups?.find((g) => g.name === "Borrower Profile");
|
|
539
|
+
if (borrowerGroup?.fields) {
|
|
540
|
+
borrowerGroup.fields.push({
|
|
541
|
+
name: "EIN",
|
|
542
|
+
type: "string",
|
|
543
|
+
hint: "Employer Identification Number",
|
|
544
|
+
order: borrowerGroup.fields.length,
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
return customizedWorkflow;
|
|
550
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { resetTestDb } from "@/_tests/mock-db"; // Must always be the first import
|
|
2
|
+
|
|
3
|
+
import { db, schema } from "@sea/db";
|
|
4
|
+
import type { Member } from "@sea/db/types";
|
|
5
|
+
import { beforeEach, describe, expect, it } from "vitest";
|
|
6
|
+
import { getDocument } from "./document";
|
|
7
|
+
|
|
8
|
+
describe("dbtest: getDocument", () => {
|
|
9
|
+
beforeEach(async () => {
|
|
10
|
+
await resetTestDb();
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it("prevents access to documents from other organizations", async () => {
|
|
14
|
+
// Create two organizations
|
|
15
|
+
const [org1, org2] = await db
|
|
16
|
+
.insert(schema.organization)
|
|
17
|
+
.values([{ name: "Org 1" }, { name: "Org 2" }])
|
|
18
|
+
.returning();
|
|
19
|
+
|
|
20
|
+
// Create deals for both organizations
|
|
21
|
+
const [deal1, deal2] = await db
|
|
22
|
+
.insert(schema.deal)
|
|
23
|
+
.values([
|
|
24
|
+
{ organizationId: org1!.id, name: "Deal 1 - Org 1" },
|
|
25
|
+
{ organizationId: org2!.id, name: "Deal 1 - Org 2" },
|
|
26
|
+
])
|
|
27
|
+
.returning();
|
|
28
|
+
|
|
29
|
+
// Create documents for both workflows
|
|
30
|
+
const [document1, document2] = await db
|
|
31
|
+
.insert(schema.document)
|
|
32
|
+
.values([
|
|
33
|
+
{
|
|
34
|
+
dealId: deal1!.id,
|
|
35
|
+
name: "Document 1",
|
|
36
|
+
contentType: "application/pdf",
|
|
37
|
+
blobKey: "key1",
|
|
38
|
+
blobUrl: "https://example.com/doc1.pdf",
|
|
39
|
+
blobUrlExpiry: new Date(Date.now() + 3600000), // 1 hour from now
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
dealId: deal2!.id,
|
|
43
|
+
name: "Document 2",
|
|
44
|
+
contentType: "application/pdf",
|
|
45
|
+
blobKey: "key2",
|
|
46
|
+
blobUrl: "https://example.com/doc2.pdf",
|
|
47
|
+
blobUrlExpiry: new Date(Date.now() + 3600000), // 1 hour from now
|
|
48
|
+
},
|
|
49
|
+
])
|
|
50
|
+
.returning();
|
|
51
|
+
|
|
52
|
+
// Create member for org1
|
|
53
|
+
const member: Member = {
|
|
54
|
+
id: "member-1",
|
|
55
|
+
organizationId: org1!.id,
|
|
56
|
+
userId: "user-1",
|
|
57
|
+
role: "member",
|
|
58
|
+
createdAt: new Date(),
|
|
59
|
+
updatedAt: new Date(),
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// Should be able to access document from same organization
|
|
63
|
+
const result = await getDocument({ member, documentId: document1!.id });
|
|
64
|
+
expect(result.id).toBe(document1!.id);
|
|
65
|
+
expect(result.name).toBe("Document 1");
|
|
66
|
+
|
|
67
|
+
// Should NOT be able to access document from different organization
|
|
68
|
+
await expect(getDocument({ member, documentId: document2!.id })).rejects.toThrow();
|
|
69
|
+
});
|
|
70
|
+
});
|