107 lines
6.0 KiB
Markdown
107 lines
6.0 KiB
Markdown
# AI Integration Plan for Modules 1, 2, 3, 7, and 10
|
|
|
|
## Summary
|
|
- Goal: add AI assistance to M1, M2, M3, M7, and M10 while keeping deterministic scoring/compliance logic as the source of truth.
|
|
- Product mode selected: **Assist-only** (AI suggests; user explicitly accepts/applies).
|
|
- Model strategy selected: **Higher quality** (primary `gpt-4.1`, fallback `gpt-4.1-mini`).
|
|
- Persistence selected: **Structured traceability** (store request/response metadata, model, usage, warnings, and accept/dismiss events).
|
|
|
|
## Core Architecture Changes
|
|
- Add a shared AI service layer used by all 5 modules:
|
|
- `callOpenAiJsonSchema()` and `callOpenAiJsonObjectFallback()`.
|
|
- shared timeout/retry handling, prompt versioning, truncation guard, and safe JSON parsing.
|
|
- standardized output envelope: `engine`, `model`, `usage`, `warnings`, `confidence`.
|
|
- Add a shared persistence model for AI traces:
|
|
- New Prisma model `AiSuggestion` (or equivalent name), fields:
|
|
- `id`, `userId`, `moduleKey`, `featureKey`, `subjectType`, `subjectId`.
|
|
- `inputHash`, `requestJson`, `responseJson`, `confidence`.
|
|
- `engine`, `model`, `usageJson`, `warningsJson`, `promptVersion`.
|
|
- `status` (`GENERATED | ACCEPTED | DISMISSED | EXPIRED`), `actedAt`, `createdAt`, `updatedAt`.
|
|
- Purpose:
|
|
- deduplicate repeated requests by `inputHash`.
|
|
- preserve auditability and user decisions.
|
|
- Add shared decision endpoint:
|
|
- `POST /api/ai/suggestions/{id}/decision` with `{ decision: "accept" | "dismiss" }`.
|
|
- Keep deterministic engines untouched and authoritative:
|
|
- M1 scoring, M2 scoring, M3 deterministic match score, M7 rule alerts, M10 scoring remain unchanged.
|
|
|
|
## Public API and Type Additions
|
|
- `POST /api/diagnostic/ai/suggestions` (M1):
|
|
- Input: `moduleKey`, optional `questionId`.
|
|
- Output: list of suggestions with `questionId`, `suggestedAnswerOptionId`, `rationale`, `missingEvidence`, `confidence`, `suggestionId`.
|
|
- `POST /api/strategic-diagnostic/ai/insights` (M2):
|
|
- Input: current strategic form snapshot + evidence metadata.
|
|
- Output: `sectionGaps`, `priorityActions`, `suggestedEvidence`, `suggestedFieldValues`, `confidence`, `suggestionId`.
|
|
- `GET /api/licitations/ai/recommendations` (M3):
|
|
- Input: optional query (`top`, `profileId`), based on deterministic pre-ranked items.
|
|
- Output: deterministic score + AI score + blended score + `aiReasons`, `aiRisks`, `nextStep`, `suggestionId`.
|
|
- `POST /api/compliance/m7/ai/playbook` (M7):
|
|
- Input: current M7 dataset.
|
|
- Output: `predictedIncidents`, `priorityOrder`, `preventiveActions`, `escalationAdvice`, `confidence`, `suggestionId`.
|
|
- `POST /api/audits/ai/findings` (M10):
|
|
- Input: selected simulation + current institutional dossier.
|
|
- Output: `auditorLikelyFindings`, `missingEvidence`, `topRisks`, `remediationPlan`, `confidence`, `suggestionId`.
|
|
- Type updates:
|
|
- Extend view types to include optional AI sections per module (`aiSuggestion`, `aiInsights`, `aiFit`, `aiPlaybook`, `aiFindings`) with strict nullable typing.
|
|
- Add common `AiUsage`, `AiWarning`, `AiSuggestionStatus`, `AiDecision`.
|
|
|
|
## Module-by-Module Behavior
|
|
- M1:
|
|
- AI infers likely answers for unanswered questions based on answered responses and evidence notes.
|
|
- UI per question: “Sugerencia IA” card with `Apply` and `Dismiss`.
|
|
- Applying uses existing response save route so scoring pipeline is unchanged.
|
|
- M2:
|
|
- AI analyzes strategic data + evidence counts to propose prioritized actions and missing evidence by section.
|
|
- UI in each section + results tab: “Plan sugerido por IA”.
|
|
- Suggested field values are shown as explicit apply actions, never auto-written.
|
|
- M3:
|
|
- Keep deterministic scoring as base.
|
|
- AI re-ranks only top deterministic candidates to control latency/cost.
|
|
- UI shows three values: deterministic score, AI fit, blended score; reasons become semantic and more specific.
|
|
- M7:
|
|
- AI creates a prioritized compliance playbook from existing alerts/deadlines/checklist.
|
|
- UI adds “Plan IA” tab with incident predictions + actions with owner suggestion and target date.
|
|
- No severity/status changes are auto-applied.
|
|
- M10:
|
|
- AI simulates auditor perspective using latest simulation and dossier.
|
|
- UI adds “Dictamen IA” with likely findings, missing evidence, and remediation order.
|
|
- Deterministic section scores remain unchanged and visible alongside AI narrative.
|
|
|
|
## Test Plan
|
|
- Unit tests:
|
|
- AI parser/normalizer for each module schema.
|
|
- prompt truncation + fallback behavior.
|
|
- suggestion persistence lifecycle (`GENERATED -> ACCEPTED/DISMISSED`).
|
|
- Route tests:
|
|
- auth, validation, malformed JSON handling.
|
|
- OpenAI failure paths return structured fallback/empty-assist safely.
|
|
- Integration tests:
|
|
- M1 apply suggestion updates response but does not break scoring calculations.
|
|
- M2/M3/M7/M10 AI outputs render without changing deterministic KPIs/scores unless user explicitly applies where applicable.
|
|
- Regression tests:
|
|
- existing deterministic test suites for M1/M2/M3/M7/M10 continue passing unchanged.
|
|
- Acceptance scenarios:
|
|
- each module can produce at least one AI suggestion with trace metadata.
|
|
- user can accept/dismiss and decision is persisted.
|
|
- pages remain functional when AI is unavailable.
|
|
|
|
## Environment and Rollout Defaults
|
|
- New env vars:
|
|
- `OPENAI_SMART_MODEL=gpt-4.1`
|
|
- `OPENAI_SMART_FALLBACK_MODEL=gpt-4.1-mini`
|
|
- `OPENAI_SMART_TIMEOUT_MS=75000`
|
|
- `OPENAI_SMART_MAX_CHARS=55000`
|
|
- optional per-module overrides (`OPENAI_M1_MODEL`, `OPENAI_M2_MODEL`, etc.).
|
|
- Rollout:
|
|
- Phase 1: backend + trace model + M3 and M10 (highest visible value).
|
|
- Phase 2: M1 and M2 assist flows.
|
|
- Phase 3: M7 predictive playbook tuning.
|
|
- Documentation updates:
|
|
- add a new section in README for “AI Assist Modules (M1/M2/M3/M7/M10)” and env variables.
|
|
|
|
## Assumptions
|
|
- Current auth gating behavior remains unchanged in this scope.
|
|
- AI output language is Spanish for end-user text.
|
|
- No auto-application beyond explicit user action.
|
|
- Existing AI-enabled modules (M4/M5/M6/M8/M9) are not refactored in this effort.
|