438 lines
4.4 KiB
Markdown
438 lines
4.4 KiB
Markdown
# Task D.7.4 – CSV Preview Validation Engine
|
||
|
||
## Objective
|
||
|
||
Implement a reusable, non-destructive CSV Preview Validation Engine for ALLA OS.
|
||
|
||
This engine must validate uploaded CSV files against the official template pack and return a complete preview report without modifying any database records.
|
||
|
||
The preview engine becomes the shared foundation for D.7.5 (CSV Commit Import Engine), Setup Wizard, and future bulk import features.
|
||
|
||
No database writes, seed execution, or reset operations are allowed in this task.
|
||
|
||
---
|
||
|
||
## Review Before Implementation
|
||
|
||
Review:
|
||
|
||
- AGENTS.md
|
||
- plans/task-d.7.md
|
||
- plans/task-d.7.1.md
|
||
- plans/task-d.7.2.md
|
||
- plans/task-d.7.3.md
|
||
- docs/setup/seed-matrix.md
|
||
- docs/setup/csv-template-spec.md
|
||
- docs/setup/import-mapping.md
|
||
- docs/setup/setup-wizard-blueprint.md
|
||
- docs/setup/verification-matrix.md
|
||
- setup/templates/*
|
||
- setup/templates/templates.json
|
||
|
||
Treat templates.json as the runtime source of truth.
|
||
|
||
---
|
||
|
||
## Implementation Scope
|
||
|
||
Create:
|
||
|
||
src/features/setup/server/csv-preview.service.ts
|
||
|
||
Supporting modules
|
||
|
||
src/features/setup/server/csv/
|
||
parser.ts
|
||
validator.ts
|
||
dependency-resolver.ts
|
||
header-validator.ts
|
||
value-validator.ts
|
||
preview-builder.ts
|
||
template-registry.ts
|
||
|
||
Create API
|
||
|
||
POST /api/setup/import/preview
|
||
|
||
---
|
||
|
||
## Input
|
||
|
||
Accept one or more CSV files.
|
||
|
||
Each file must match one registered template.
|
||
|
||
Files may be uploaded in any order.
|
||
|
||
Engine must automatically resolve dependency order.
|
||
|
||
---
|
||
|
||
## Validation Stages
|
||
|
||
Stage 1
|
||
|
||
Template Detection
|
||
|
||
- Match filename
|
||
- Match template registry
|
||
- Match supported template
|
||
|
||
Reject unknown templates.
|
||
|
||
---
|
||
|
||
Stage 2
|
||
|
||
Schema Validation
|
||
|
||
Validate
|
||
|
||
- header names
|
||
- header order
|
||
- duplicated columns
|
||
- missing columns
|
||
- extra columns
|
||
- template version (if available)
|
||
|
||
---
|
||
|
||
Stage 3
|
||
|
||
CSV Validation
|
||
|
||
Validate
|
||
|
||
- encoding
|
||
- delimiter
|
||
- empty rows
|
||
- duplicated rows
|
||
- inconsistent column counts
|
||
|
||
---
|
||
|
||
Stage 4
|
||
|
||
Value Validation
|
||
|
||
Validate
|
||
|
||
Required fields
|
||
|
||
Email
|
||
|
||
Boolean
|
||
|
||
Integer
|
||
|
||
Decimal
|
||
|
||
Date (YYYY-MM-DD)
|
||
|
||
Enum
|
||
|
||
Length
|
||
|
||
Regex
|
||
|
||
Custom validators
|
||
|
||
---
|
||
|
||
Stage 5
|
||
|
||
Relationship Resolution
|
||
|
||
Resolve
|
||
|
||
organization
|
||
|
||
branch
|
||
|
||
product type
|
||
|
||
users
|
||
|
||
memberships
|
||
|
||
CRM role
|
||
|
||
customer
|
||
|
||
contact
|
||
|
||
lead
|
||
|
||
opportunity
|
||
|
||
quotation
|
||
|
||
master options
|
||
|
||
Return
|
||
|
||
Resolved
|
||
|
||
Missing
|
||
|
||
Ambiguous
|
||
|
||
---
|
||
|
||
Stage 6
|
||
|
||
Dependency Validation
|
||
|
||
Read
|
||
|
||
templates.json
|
||
|
||
Validate
|
||
|
||
dependsOn
|
||
|
||
Detect
|
||
|
||
Missing parent files
|
||
|
||
Circular dependency
|
||
|
||
Invalid import order
|
||
|
||
---
|
||
|
||
Stage 7
|
||
|
||
Duplicate Detection
|
||
|
||
Classify
|
||
|
||
New
|
||
|
||
Existing
|
||
|
||
Update
|
||
|
||
Conflict
|
||
|
||
Duplicate inside CSV
|
||
|
||
---
|
||
|
||
Stage 8
|
||
|
||
Preview Report
|
||
|
||
Return
|
||
|
||
Imported
|
||
|
||
Updated
|
||
|
||
Skipped
|
||
|
||
Warnings
|
||
|
||
Errors
|
||
|
||
Grouped by file.
|
||
|
||
---
|
||
|
||
## Report Contract
|
||
|
||
```ts
|
||
type PreviewResult = {
|
||
fileName: string;
|
||
|
||
template: string;
|
||
|
||
status:
|
||
| "PASS"
|
||
| "WARNING"
|
||
| "FAIL";
|
||
|
||
summary: {
|
||
|
||
rows:number;
|
||
|
||
valid:number;
|
||
|
||
warning:number;
|
||
|
||
error:number;
|
||
|
||
};
|
||
|
||
rows:[];
|
||
}
|
||
```
|
||
|
||
Overall response
|
||
|
||
```ts
|
||
{
|
||
summary,
|
||
|
||
files:[],
|
||
|
||
generatedAt,
|
||
|
||
previewHash
|
||
}
|
||
```
|
||
|
||
previewHash will be required by D.7.5.
|
||
|
||
---
|
||
|
||
## Rules
|
||
|
||
Do not
|
||
|
||
Insert
|
||
|
||
Update
|
||
|
||
Delete
|
||
|
||
Commit
|
||
|
||
Seed
|
||
|
||
Generate IDs
|
||
|
||
Generate document numbers
|
||
|
||
Trigger approval
|
||
|
||
Generate PDFs
|
||
|
||
Only preview.
|
||
|
||
---
|
||
|
||
## Error Contract
|
||
|
||
Every error
|
||
|
||
Must contain
|
||
|
||
File
|
||
|
||
Row
|
||
|
||
Column
|
||
|
||
Code
|
||
|
||
Message
|
||
|
||
Suggested Fix
|
||
|
||
Example
|
||
|
||
```json
|
||
{
|
||
"file":"customers.csv",
|
||
|
||
"row":12,
|
||
|
||
"column":"customer_type",
|
||
|
||
"code":"UNKNOWN_OPTION",
|
||
|
||
"message":"Customer type not found.",
|
||
|
||
"suggestedFix":"Import master-options.csv first."
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## Reuse Rules
|
||
|
||
Reuse existing
|
||
|
||
Master Option services
|
||
|
||
Organization services
|
||
|
||
CRM services
|
||
|
||
Validation helpers
|
||
|
||
Document sequence helpers
|
||
|
||
Do not duplicate logic.
|
||
|
||
---
|
||
|
||
## Deliverables
|
||
|
||
src/features/setup/server/csv-preview.service.ts
|
||
|
||
src/features/setup/server/csv/
|
||
|
||
POST /api/setup/import/preview
|
||
|
||
Shared validation utilities
|
||
|
||
Structured preview response
|
||
|
||
previewHash generator
|
||
|
||
---
|
||
|
||
## Acceptance Criteria
|
||
|
||
✓ Preview never writes database.
|
||
|
||
✓ Multiple CSVs supported.
|
||
|
||
✓ Dependency order resolved automatically.
|
||
|
||
✓ Unknown templates rejected.
|
||
|
||
✓ Header validation implemented.
|
||
|
||
✓ Data validation implemented.
|
||
|
||
✓ Relationship resolution implemented.
|
||
|
||
✓ Duplicate detection implemented.
|
||
|
||
✓ Structured report returned.
|
||
|
||
✓ previewHash generated.
|
||
|
||
✓ Uses templates.json as runtime registry.
|
||
|
||
✓ Typecheck passes.
|
||
|
||
---
|
||
|
||
## Future
|
||
|
||
D.7.5
|
||
|
||
Commit Import Engine
|
||
|
||
Uses
|
||
|
||
previewHash
|
||
|
||
↓
|
||
|
||
Transaction
|
||
|
||
↓
|
||
|
||
Upsert
|
||
|
||
↓
|
||
|
||
Import Report
|
||
|
||
No validation logic should be duplicated between D.7.4 and D.7.5.
|