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,174 @@
|
|
|
1
|
+
# CRM Viewer App - Sea.dev Integration Demo
|
|
2
|
+
|
|
3
|
+
This Angular application demonstrates how to integrate the Sea.dev PDF viewer widget with a CRM-like interface, featuring citation-aware form fields that link to source documents.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Citation-Aware Form Fields**: Form fields with `data-sea-field` attributes that link to specific citations in PDF documents
|
|
8
|
+
- **Interactive PDF Viewer**: Click on any field to view its source citation in an overlay PDF viewer
|
|
9
|
+
- **Bi-directional Navigation**: Click citations in the PDF to highlight corresponding fields in the form
|
|
10
|
+
- **Real-time Citation Tracking**: Visual indicators show which fields have citation support
|
|
11
|
+
|
|
12
|
+
## Getting Started
|
|
13
|
+
|
|
14
|
+
### Prerequisites
|
|
15
|
+
|
|
16
|
+
- Node.js 18+ and pnpm
|
|
17
|
+
- The parent workspace should already have dependencies installed
|
|
18
|
+
|
|
19
|
+
### Installation
|
|
20
|
+
|
|
21
|
+
From this directory:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
pnpm install
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Running the App
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
pnpm start
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The app will be available at [http://localhost:4201](http://localhost:4201)
|
|
34
|
+
|
|
35
|
+
## Architecture
|
|
36
|
+
|
|
37
|
+
### Key Components
|
|
38
|
+
|
|
39
|
+
1. **AppComponent** (`src/app/app.component.ts`)
|
|
40
|
+
- Main application component
|
|
41
|
+
- Displays the CRM interface with clickable form fields
|
|
42
|
+
- Manages PDF viewer overlay state
|
|
43
|
+
|
|
44
|
+
2. **CitationService** (`src/app/citation.service.ts`)
|
|
45
|
+
- Manages field-to-citation mappings
|
|
46
|
+
- Tracks selected citations
|
|
47
|
+
- Controls PDF viewer visibility
|
|
48
|
+
- Provides API for activating citations
|
|
49
|
+
|
|
50
|
+
3. **SeaPdfViewerComponent** (from `@sea-dev/widget-ng`)
|
|
51
|
+
- Displays PDF documents with citation overlays
|
|
52
|
+
- Highlights selected citations
|
|
53
|
+
- Emits events when citations are clicked
|
|
54
|
+
|
|
55
|
+
### Data Flow
|
|
56
|
+
|
|
57
|
+
1. User clicks a field with `data-sea-field="field-id"` attribute
|
|
58
|
+
2. `onFieldClick(fieldId)` is called
|
|
59
|
+
3. `CitationService.activateCitation(fieldId)` looks up the citation
|
|
60
|
+
4. PDF viewer is shown with the document and citation highlighted
|
|
61
|
+
5. User can click citations in PDF to see which field they correspond to
|
|
62
|
+
|
|
63
|
+
## Customizing Citation Mappings
|
|
64
|
+
|
|
65
|
+
Edit `src/app/citation.service.ts` to customize the field-to-citation mappings:
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
this.registerCitation({
|
|
69
|
+
fieldId: 'your-field-id', // Must match data-sea-field attribute
|
|
70
|
+
citationId: 'citation-123', // ID from your document
|
|
71
|
+
documentId: 'doc-456', // Document containing the citation
|
|
72
|
+
pageNumber: 1, // Page where citation appears
|
|
73
|
+
});
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Adding Citation Support to Fields
|
|
77
|
+
|
|
78
|
+
To make a field citation-aware, add the `data-sea-field` attribute and click handler:
|
|
79
|
+
|
|
80
|
+
```html
|
|
81
|
+
<input
|
|
82
|
+
type="text"
|
|
83
|
+
data-sea-field="revenue"
|
|
84
|
+
(click)="onFieldClick('revenue')"
|
|
85
|
+
placeholder="Enter revenue"
|
|
86
|
+
/>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Or for display-only fields:
|
|
90
|
+
|
|
91
|
+
```html
|
|
92
|
+
<div
|
|
93
|
+
class="sf-field-value"
|
|
94
|
+
data-sea-field="annual-revenue"
|
|
95
|
+
(click)="onFieldClick('annual-revenue')"
|
|
96
|
+
>
|
|
97
|
+
$45,000,000
|
|
98
|
+
</div>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Integration with Real Data
|
|
102
|
+
|
|
103
|
+
To integrate with real Sea.dev data:
|
|
104
|
+
|
|
105
|
+
1. Replace placeholder citations in `CitationService.initializePlaceholderCitations()` with actual data from your API
|
|
106
|
+
2. Update `activeDocument.set()` to use real document URLs from your submission
|
|
107
|
+
3. Add document loading logic to fetch actual PDF URLs
|
|
108
|
+
4. Update citation bounding regions with real coordinates from document processing
|
|
109
|
+
|
|
110
|
+
Example:
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
// Fetch submission data
|
|
114
|
+
this.api.getSubmission(submissionId).subscribe(submission => {
|
|
115
|
+
submission.fields.forEach(field => {
|
|
116
|
+
if (field.citation) {
|
|
117
|
+
this.registerCitation({
|
|
118
|
+
fieldId: field.id,
|
|
119
|
+
citationId: field.citation.id,
|
|
120
|
+
documentId: field.citation.documentId,
|
|
121
|
+
pageNumber: field.citation.pageNumber,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Styling
|
|
129
|
+
|
|
130
|
+
The app uses Salesforce-inspired styling defined in `src/styles.css`. Key classes:
|
|
131
|
+
|
|
132
|
+
- `.sf-field-value[data-sea-field]` - Clickable fields with citation support
|
|
133
|
+
- `.pdf-viewer-container` - Overlay container for PDF viewer
|
|
134
|
+
- `.pdf-viewer-overlay` - Background overlay when PDF is open
|
|
135
|
+
|
|
136
|
+
## Development
|
|
137
|
+
|
|
138
|
+
### Project Structure
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
crm-viewer-app/
|
|
142
|
+
├── src/
|
|
143
|
+
│ ├── app/
|
|
144
|
+
│ │ ├── app.component.ts # Main component
|
|
145
|
+
│ │ └── citation.service.ts # Citation management service
|
|
146
|
+
│ ├── styles.css # Global styles
|
|
147
|
+
│ ├── index.html # App entry point
|
|
148
|
+
│ └── main.ts # Bootstrap file
|
|
149
|
+
├── angular.json # Angular config
|
|
150
|
+
├── package.json # Dependencies
|
|
151
|
+
└── README.md # This file
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Building for Production
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
pnpm build
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Output will be in `dist/crm-viewer-app/`.
|
|
161
|
+
|
|
162
|
+
## Next Steps
|
|
163
|
+
|
|
164
|
+
- [ ] Connect to real Sea.dev API endpoints
|
|
165
|
+
- [ ] Add authentication with API keys
|
|
166
|
+
- [ ] Implement full form submission workflow
|
|
167
|
+
- [ ] Add validation and error handling
|
|
168
|
+
- [ ] Support multiple document types
|
|
169
|
+
- [ ] Add keyboard navigation for citations
|
|
170
|
+
- [ ] Implement citation search/filtering
|
|
171
|
+
|
|
172
|
+
## License
|
|
173
|
+
|
|
174
|
+
MIT
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# Real API Integration Guide
|
|
2
|
+
|
|
3
|
+
This document explains how the CRM viewer app integrates with the real Sea.dev API to load citation data for submission `txlrja5bnij8vzrj2sb5s`.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The app now loads real citation data from the Sea.dev API using the submission ID `txlrja5bnij8vzrj2sb5s`. When a form field is clicked, it displays the actual PDF document with real bounding regions highlighted.
|
|
8
|
+
|
|
9
|
+
## Setup
|
|
10
|
+
|
|
11
|
+
### 1. Get Your API Key
|
|
12
|
+
|
|
13
|
+
1. Go to [https://app.sea.dev/settings](https://app.sea.dev/settings)
|
|
14
|
+
2. Copy your API key (starts with `sk-sea-`)
|
|
15
|
+
|
|
16
|
+
### 2. Configure Environment
|
|
17
|
+
|
|
18
|
+
Create a `.env` file in the `crm-viewer-app` directory:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
cp .env.example .env
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Edit `.env` and add your API key:
|
|
25
|
+
|
|
26
|
+
```env
|
|
27
|
+
NG_APP_SEA_API_KEY=sk-sea-YOUR_ACTUAL_API_KEY
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 3. Run the App
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
pnpm start
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The app will be available at [http://localhost:4201](http://localhost:4201)
|
|
37
|
+
|
|
38
|
+
## How It Works
|
|
39
|
+
|
|
40
|
+
### 1. API Integration
|
|
41
|
+
|
|
42
|
+
The app uses the `SeaApiClientService` from `@sea-dev/widget-ng` to fetch submission data:
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
// app.component.ts
|
|
46
|
+
this.apiClient.getSubmissionData(this.SUBMISSION_ID).subscribe({
|
|
47
|
+
next: (data) => {
|
|
48
|
+
this.processCitations(data);
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 2. Citation Processing
|
|
54
|
+
|
|
55
|
+
When submission data is loaded, the app:
|
|
56
|
+
|
|
57
|
+
1. Clears any placeholder citations
|
|
58
|
+
2. Iterates through all form groups and fields
|
|
59
|
+
3. Registers citations for fields that have them
|
|
60
|
+
4. Stores document data with citations
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
// From processCitations()
|
|
64
|
+
data.formGroups?.forEach((group) => {
|
|
65
|
+
group.fields?.forEach((field) => {
|
|
66
|
+
if (field.citation) {
|
|
67
|
+
this.citationService.registerCitation({
|
|
68
|
+
fieldId: field.name,
|
|
69
|
+
citationId: field.citation.id,
|
|
70
|
+
documentId: field.citation.documentId,
|
|
71
|
+
pageNumber: field.citation.pageNumber,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 3. Document Loading
|
|
79
|
+
|
|
80
|
+
When a field is clicked, the citation service:
|
|
81
|
+
|
|
82
|
+
1. Looks up the citation for that field
|
|
83
|
+
2. Finds the corresponding document from the stored documents
|
|
84
|
+
3. Loads the real PDF URL with actual citation bounding regions
|
|
85
|
+
4. Displays the PDF with highlighted regions
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
// From activateCitationWithDocument()
|
|
89
|
+
const document = this.getDocument(citation.documentId);
|
|
90
|
+
if (document) {
|
|
91
|
+
this.activeDocument.set({
|
|
92
|
+
id: document.id,
|
|
93
|
+
name: document.name,
|
|
94
|
+
url: document.url, // Real signed PDF URL
|
|
95
|
+
citations: document.citations, // Real bounding regions
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Data Flow
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
1. App starts → Load submission data via API
|
|
104
|
+
↓
|
|
105
|
+
2. API returns submission with formGroups[], documents[]
|
|
106
|
+
↓
|
|
107
|
+
3. Process citations → Register field-to-citation mappings
|
|
108
|
+
↓
|
|
109
|
+
4. User clicks field → activateCitationWithDocument()
|
|
110
|
+
↓
|
|
111
|
+
5. Lookup document → Find by documentId
|
|
112
|
+
↓
|
|
113
|
+
6. Display PDF → Show real document with real citations highlighted
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## API Response Structure
|
|
117
|
+
|
|
118
|
+
The API returns data in this format:
|
|
119
|
+
|
|
120
|
+
```json
|
|
121
|
+
{
|
|
122
|
+
"submissionId": "txlrja5bnij8vzrj2sb5s",
|
|
123
|
+
"formId": "...",
|
|
124
|
+
"formGroups": [
|
|
125
|
+
{
|
|
126
|
+
"id": "current-assets",
|
|
127
|
+
"name": "Current Assets",
|
|
128
|
+
"fields": [
|
|
129
|
+
{
|
|
130
|
+
"id": "field-123",
|
|
131
|
+
"name": "cash",
|
|
132
|
+
"label": "Cash",
|
|
133
|
+
"value": 50000,
|
|
134
|
+
"type": "money",
|
|
135
|
+
"citation": {
|
|
136
|
+
"id": "citation-abc",
|
|
137
|
+
"documentId": "doc-xyz",
|
|
138
|
+
"pageNumber": 1,
|
|
139
|
+
"confidence": 0.95
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
],
|
|
145
|
+
"documents": [
|
|
146
|
+
{
|
|
147
|
+
"id": "doc-xyz",
|
|
148
|
+
"name": "Balance Sheet.pdf",
|
|
149
|
+
"url": "https://signed-url.com/document.pdf",
|
|
150
|
+
"citations": [
|
|
151
|
+
{
|
|
152
|
+
"id": "citation-abc",
|
|
153
|
+
"path": "current_assets.cash",
|
|
154
|
+
"text": "$50,000",
|
|
155
|
+
"boundingRegions": {
|
|
156
|
+
"cash": [
|
|
157
|
+
{
|
|
158
|
+
"pageNumber": 1,
|
|
159
|
+
"polygon": [0.1, 0.2, 0.3, 0.2, 0.3, 0.25, 0.1, 0.25]
|
|
160
|
+
}
|
|
161
|
+
]
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
]
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Field Mapping
|
|
171
|
+
|
|
172
|
+
The app maps form fields to citations using the field's `name` attribute:
|
|
173
|
+
|
|
174
|
+
| HTML Field | data-sea-field | Maps to API field name |
|
|
175
|
+
|-----------|----------------|------------------------|
|
|
176
|
+
| Cash | `cash` | `cash` |
|
|
177
|
+
| Certificate of Deposit | `certificate-of-deposit` | `certificate_of_deposit` |
|
|
178
|
+
| Marketable Securities | `marketable-securities` | `marketable_securities` |
|
|
179
|
+
| Accounts Receivable | `accounts-receivable` | `accounts_receivable` |
|
|
180
|
+
| Notes Receivable | `notes-receivable-current` | `notes_receivable_current` |
|
|
181
|
+
| Inventory - Raw Materials | `inventory-raw-materials` | `inventory_raw_materials` |
|
|
182
|
+
| Inventory - WIP | `inventory-work-in-progress` | `inventory_work_in_progress` |
|
|
183
|
+
| Inventory - Finished | `inventory-finished-goods` | `inventory_finished_goods` |
|
|
184
|
+
| Prepaid Expenses | `prepaid-expenses` | `prepaid_expenses` |
|
|
185
|
+
| Other Current Assets | `other-current-assets` | `other_current_assets` |
|
|
186
|
+
|
|
187
|
+
## Troubleshooting
|
|
188
|
+
|
|
189
|
+
### No citations loading
|
|
190
|
+
|
|
191
|
+
1. Check that your API key is set correctly in `.env`
|
|
192
|
+
2. Check browser console for errors
|
|
193
|
+
3. Verify the submission ID `txlrja5bnij8vzrj2sb5s` exists and has data
|
|
194
|
+
4. Check network tab for API requests to `https://app.sea.dev/v2/submissions/...`
|
|
195
|
+
|
|
196
|
+
### PDF not displaying
|
|
197
|
+
|
|
198
|
+
1. Check that documents have valid `url` properties
|
|
199
|
+
2. Check for CORS errors in console
|
|
200
|
+
3. Verify the signed URL hasn't expired
|
|
201
|
+
4. Check that the PDF URL is accessible
|
|
202
|
+
|
|
203
|
+
### Citations not highlighting
|
|
204
|
+
|
|
205
|
+
1. Verify `boundingRegions` data is present in the document
|
|
206
|
+
2. Check that polygon coordinates are valid
|
|
207
|
+
3. Ensure `pageNumber` matches the citation's page
|
|
208
|
+
4. Check browser console for PDF viewer errors
|
|
209
|
+
|
|
210
|
+
## Development Tips
|
|
211
|
+
|
|
212
|
+
### Testing with Different Submissions
|
|
213
|
+
|
|
214
|
+
To test with a different submission, update the `SUBMISSION_ID` constant:
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
// app.component.ts
|
|
218
|
+
private readonly SUBMISSION_ID = 'your-submission-id-here';
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Debugging Citation Data
|
|
222
|
+
|
|
223
|
+
Enable debug logging by checking the browser console. The app logs:
|
|
224
|
+
|
|
225
|
+
- `[CRM Viewer]` - App-level events
|
|
226
|
+
- `[CitationService]` - Citation management events
|
|
227
|
+
- `[SeaAPI]` - API calls and responses (if using custom service)
|
|
228
|
+
|
|
229
|
+
### Fallback Behavior
|
|
230
|
+
|
|
231
|
+
If the API fails to load, the app falls back to placeholder citations so the UI remains functional for development and testing.
|
|
232
|
+
|
|
233
|
+
## Next Steps
|
|
234
|
+
|
|
235
|
+
- [ ] Add loading indicators while fetching submission data
|
|
236
|
+
- [ ] Display field values from API in the form
|
|
237
|
+
- [ ] Add error handling UI for API failures
|
|
238
|
+
- [ ] Support multiple submission IDs
|
|
239
|
+
- [ ] Add citation confidence scores to UI
|
|
240
|
+
- [ ] Implement citation editing/verification
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
# Updated Implementation - Using Real Document Citations
|
|
2
|
+
|
|
3
|
+
## ✅ Latest Changes
|
|
4
|
+
|
|
5
|
+
The app now correctly processes the submission data structure and uses the **actual PDF documents and citations** from the API response.
|
|
6
|
+
|
|
7
|
+
## Key Improvements
|
|
8
|
+
|
|
9
|
+
### 1. Correct Data Structure Processing
|
|
10
|
+
|
|
11
|
+
The implementation now properly processes the **`groups`** array (not `formGroups`) which contains the actual data items with citations:
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
// OLD (incorrect):
|
|
15
|
+
data.formGroups?.forEach((group) => {
|
|
16
|
+
group.fields?.forEach((field) => {
|
|
17
|
+
// This doesn't have citation data!
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
// NEW (correct):
|
|
22
|
+
data.groups?.forEach((group) => {
|
|
23
|
+
group.items?.forEach((item) => {
|
|
24
|
+
// item has documentCitationId and documentExtractionId
|
|
25
|
+
if (item.documentCitationId && item.formField) {
|
|
26
|
+
// Process citation...
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. Document Linking via documentExtractionId
|
|
33
|
+
|
|
34
|
+
Citations are now properly linked to documents using `documentExtractionId`:
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
const document = data.documents?.find((doc) =>
|
|
38
|
+
doc.documentExtractionId === item.documentExtractionId
|
|
39
|
+
);
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 3. Real Citation Bounding Regions
|
|
43
|
+
|
|
44
|
+
The app now uses the actual bounding regions from the document's citations:
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
const citation = document.citations?.find(
|
|
48
|
+
(cit) => cit.id === item.documentCitationId
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
// citation.boundingRegions contains the actual polygon coordinates
|
|
52
|
+
// that will be highlighted in the PDF viewer
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Data Flow
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
1. API Response
|
|
59
|
+
├── documents[]
|
|
60
|
+
│ ├── id
|
|
61
|
+
│ ├── documentExtractionId (links to groups.items)
|
|
62
|
+
│ ├── url (real PDF URL)
|
|
63
|
+
│ └── citations[]
|
|
64
|
+
│ ├── id (links to groups.items.documentCitationId)
|
|
65
|
+
│ ├── path
|
|
66
|
+
│ ├── text
|
|
67
|
+
│ └── boundingRegions (actual coordinates to highlight)
|
|
68
|
+
│
|
|
69
|
+
└── groups[]
|
|
70
|
+
└── items[]
|
|
71
|
+
├── formField.name (field identifier)
|
|
72
|
+
├── documentCitationId (links to documents.citations)
|
|
73
|
+
├── documentExtractionId (links to documents)
|
|
74
|
+
└── value (extracted value)
|
|
75
|
+
|
|
76
|
+
2. Processing
|
|
77
|
+
├── Store all documents with their citations
|
|
78
|
+
├── For each data item:
|
|
79
|
+
│ ├── Find document by documentExtractionId
|
|
80
|
+
│ ├── Find citation in document by documentCitationId
|
|
81
|
+
│ └── Register: fieldName → documentId + citationId
|
|
82
|
+
│
|
|
83
|
+
3. When field clicked
|
|
84
|
+
├── Lookup citation by fieldName
|
|
85
|
+
├── Find document by documentId
|
|
86
|
+
├── Load PDF with document.url
|
|
87
|
+
└── Highlight regions using citation.boundingRegions
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## API Response Structure
|
|
91
|
+
|
|
92
|
+
```json
|
|
93
|
+
{
|
|
94
|
+
"submissionId": "txlrja5bnij8vzrj2sb5s",
|
|
95
|
+
"formId": "...",
|
|
96
|
+
"dealId": "...",
|
|
97
|
+
"status": "completed",
|
|
98
|
+
|
|
99
|
+
"formGroups": [
|
|
100
|
+
{
|
|
101
|
+
"id": "current-assets",
|
|
102
|
+
"name": "Current Assets",
|
|
103
|
+
"fields": [
|
|
104
|
+
{
|
|
105
|
+
"id": "field-123",
|
|
106
|
+
"name": "cash",
|
|
107
|
+
"label": "Cash",
|
|
108
|
+
"hint": "Money on hand..."
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
],
|
|
113
|
+
|
|
114
|
+
"groups": [
|
|
115
|
+
{
|
|
116
|
+
"id": "group-abc",
|
|
117
|
+
"formGroupId": "current-assets",
|
|
118
|
+
"items": [
|
|
119
|
+
{
|
|
120
|
+
"id": "item-xyz",
|
|
121
|
+
"formField": {
|
|
122
|
+
"id": "field-123",
|
|
123
|
+
"name": "cash",
|
|
124
|
+
"label": "Cash"
|
|
125
|
+
},
|
|
126
|
+
"value": 50000,
|
|
127
|
+
"documentCitationId": "citation-123",
|
|
128
|
+
"documentExtractionId": "extraction-456"
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
}
|
|
132
|
+
],
|
|
133
|
+
|
|
134
|
+
"documents": [
|
|
135
|
+
{
|
|
136
|
+
"id": "doc-789",
|
|
137
|
+
"documentExtractionId": "extraction-456",
|
|
138
|
+
"name": "Balance Sheet - June 2024.pdf",
|
|
139
|
+
"url": "https://signed-url.example.com/doc.pdf",
|
|
140
|
+
"citations": [
|
|
141
|
+
{
|
|
142
|
+
"id": "citation-123",
|
|
143
|
+
"path": "current_assets.cash",
|
|
144
|
+
"text": "$50,000",
|
|
145
|
+
"boundingRegions": {
|
|
146
|
+
"cash": [
|
|
147
|
+
{
|
|
148
|
+
"pageNumber": 1,
|
|
149
|
+
"polygon": [0.12, 0.35, 0.28, 0.35, 0.28, 0.38, 0.12, 0.38]
|
|
150
|
+
}
|
|
151
|
+
]
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
]
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Code Changes
|
|
161
|
+
|
|
162
|
+
### app.component.ts - processCitations()
|
|
163
|
+
|
|
164
|
+
**Before:**
|
|
165
|
+
- Iterated through `formGroups` (metadata only)
|
|
166
|
+
- Looked for `field.citation` (doesn't exist in API response)
|
|
167
|
+
- Had no link to actual documents
|
|
168
|
+
|
|
169
|
+
**After:**
|
|
170
|
+
- Iterates through `groups` (actual data)
|
|
171
|
+
- Uses `item.documentCitationId` and `item.documentExtractionId`
|
|
172
|
+
- Links fields → citations → documents correctly
|
|
173
|
+
- Extracts page numbers from bounding regions
|
|
174
|
+
|
|
175
|
+
### citation.service.ts - activateCitationWithDocument()
|
|
176
|
+
|
|
177
|
+
**Unchanged but now works correctly:**
|
|
178
|
+
- Receives correct `documentId` from registered citations
|
|
179
|
+
- Finds the right document with real PDF URL
|
|
180
|
+
- Uses document's embedded `citations[]` array
|
|
181
|
+
- All bounding regions are real from the API
|
|
182
|
+
|
|
183
|
+
## Testing
|
|
184
|
+
|
|
185
|
+
### With Real API Key
|
|
186
|
+
|
|
187
|
+
1. **Set API key in `.env`:**
|
|
188
|
+
```env
|
|
189
|
+
NG_APP_SEA_API_KEY=your-actual-api-key
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
2. **Start the app:**
|
|
193
|
+
```bash
|
|
194
|
+
pnpm start
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
3. **Check console logs:**
|
|
198
|
+
```
|
|
199
|
+
[CRM Viewer] Loading submission data: txlrja5bnij8vzrj2sb5s
|
|
200
|
+
[CRM Viewer] Submission data loaded: {...}
|
|
201
|
+
[CRM Viewer] Processing citations from submission data
|
|
202
|
+
[CRM Viewer] Storing documents: 2
|
|
203
|
+
[CRM Viewer] Processing data group: current-assets
|
|
204
|
+
[CRM Viewer] Found citation for field: {fieldName: "cash", citationId: "...", ...}
|
|
205
|
+
[CRM Viewer] Registered citation: {fieldId: "cash", documentId: "...", documentName: "...", pageNumber: 1}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
4. **Click a field:**
|
|
209
|
+
- PDF viewer opens
|
|
210
|
+
- Real PDF document loads
|
|
211
|
+
- Exact region is highlighted based on polygon coordinates
|
|
212
|
+
- Citation matches the extracted value
|
|
213
|
+
|
|
214
|
+
### Verifying Correct Implementation
|
|
215
|
+
|
|
216
|
+
✅ Console shows "Processing data group" (not "Processing form group")
|
|
217
|
+
✅ Console shows documentCitationId and documentExtractionId
|
|
218
|
+
✅ Console shows actual document name from API
|
|
219
|
+
✅ PDF URL is a real signed URL (not placeholder)
|
|
220
|
+
✅ Highlighted regions match the text in the PDF
|
|
221
|
+
✅ Page numbers are correct
|
|
222
|
+
|
|
223
|
+
## Field Name Mapping
|
|
224
|
+
|
|
225
|
+
The app matches HTML fields to API fields using the field name:
|
|
226
|
+
|
|
227
|
+
| HTML `data-sea-field` | API `formField.name` | Must Match |
|
|
228
|
+
|-----------------------|---------------------|------------|
|
|
229
|
+
| `cash` | `cash` | ✅ |
|
|
230
|
+
| `certificate-of-deposit` | `certificate_of_deposit` | Need to check API |
|
|
231
|
+
| `accounts-receivable` | `accounts_receivable` | Need to check API |
|
|
232
|
+
|
|
233
|
+
**Important:** If field names don't match, citations won't be registered. Check the console logs to see which fields are being processed from the API.
|
|
234
|
+
|
|
235
|
+
## Debugging
|
|
236
|
+
|
|
237
|
+
### No citations loading
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
# Check console for:
|
|
241
|
+
[CRM Viewer] Processing data group: ...
|
|
242
|
+
[CRM Viewer] Found citation for field: ...
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
If you don't see "Found citation for field", the API response may:
|
|
246
|
+
- Not have data in the `groups` array
|
|
247
|
+
- Have different field names than expected
|
|
248
|
+
- Not have `documentCitationId` set for those fields
|
|
249
|
+
|
|
250
|
+
### PDF not displaying
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
# Check console for:
|
|
254
|
+
[CitationService] Loading real document: Balance Sheet.pdf
|
|
255
|
+
[CitationService] Document not found: doc-xyz
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
If document is not found:
|
|
259
|
+
- Check that `documentExtractionId` matches between items and documents
|
|
260
|
+
- Verify documents array is not empty
|
|
261
|
+
- Check that documents have valid URLs
|
|
262
|
+
|
|
263
|
+
### Wrong regions highlighted
|
|
264
|
+
|
|
265
|
+
- Verify `boundingRegions` in API response
|
|
266
|
+
- Check polygon coordinates are correct (8 values: x1,y1,x2,y2,x3,y3,x4,y4)
|
|
267
|
+
- Ensure coordinates are normalized (0-1) or in points
|
|
268
|
+
- Check pageNumber matches
|
|
269
|
+
|
|
270
|
+
## Summary
|
|
271
|
+
|
|
272
|
+
✅ Uses real submission data structure (`groups`, not `formGroups`)
|
|
273
|
+
✅ Links fields to citations via `documentCitationId`
|
|
274
|
+
✅ Links citations to documents via `documentExtractionId`
|
|
275
|
+
✅ Displays real PDFs with real bounding regions
|
|
276
|
+
✅ Properly logs all processing steps for debugging
|
|
277
|
+
✅ Falls back gracefully if data is missing
|
|
278
|
+
|
|
279
|
+
The implementation now correctly processes the full data flow from API to PDF viewer!
|