bmc_hub/docs/TEMPLATE_CREATION_FLOW.md

316 lines
7.8 KiB
Markdown
Raw Normal View History

# Perfect Template Creation Flow - BMC Hub
## 🎯 Workflow Overview
```
Upload Invoice
No Template Match? → AI Extracts (10s)
"Opret Template" knap vises
Click → Auto-creates template
Next invoice: 0.1s (100x faster!)
```
## 📋 Step-by-Step Guide
### Method 1: From Upload (Recommended for First-Time)
1. **Upload faktura** via `/billing/supplier-invoices`
2. If no template matches:
- AI extracts data (10s)
- **"🪄 Opret Template" knap** vises
3. Click "Opret Template"
- System AI-analyzes PDF
- Converts to template format
- Creates template automatically
4. **Redirect to Template Builder** for fine-tuning (optional)
**Benefits:**
- ✅ One-click from upload success
- ✅ Uses real invoice data
- ✅ Automatic field mapping
- ✅ Ready to use immediately
### Method 2: Template Builder Manual
1. Go to `/billing/template-builder`
2. **Step 1:** Select PDF file
3. **Step 2:** Choose vendor + name template
4. **Step 3:** Click **"🤖 AI Auto-generer Template"**
- AI analyzes PDF
- Auto-fills all patterns
- Shows detection confidence
5. **Step 4:** Test & Save
**Benefits:**
- ✅ More control
- ✅ Preview before saving
- ✅ Can edit patterns manually
- ✅ Test against PDF first
### Method 3: Templates List (Batch)
1. Go to `/billing/templates`
2. View existing templates
3. Click "Test" to validate
4. Create new from scratch
## 🔄 Complete User Journey
### First Invoice from New Vendor
```
User uploads ALSO invoice #1
System: "Ingen template match"
AI extracts in 10s
Shows: "✅ Faktura uploadet!"
"⚠️ Ingen template - næste gang vil være langsom"
[🪄 Opret Template knap]
User clicks "Opret Template"
System creates template automatically
"✅ Template oprettet! Næste faktura vil være 100x hurtigere"
```
### Second Invoice from Same Vendor
```
User uploads ALSO invoice #2
Template matches (0.1s) ⚡
"✅ Faktura uploadet - auto-matched template!"
NO template creation button (already exists)
```
## 🎨 UI/UX Details
### Upload Success Message (No Template Match)
```html
✅ Faktura Uploadet & Analyseret!
AI Udtrækning: [Vendor Badge] [Confidence Badge]
Leverandør: ALSO A/S
CVR: 17630903
Fakturanr: 974733485
Beløb: 5.165,61 DKK
⚠️ Ingen template match - fremtidige uploads vil være langsomme
[👁️ Vis Faktura] [🪄 Opret Template] [✅ Luk]
```
### After Template Creation
```html
✅ Template Oprettet!
Næste gang en faktura fra denne leverandør uploades, vil den blive
behandlet automatisk på 0.1 sekunder i stedet for 10 sekunder!
Template ID: 42
Fields: vendor_cvr, invoice_number, invoice_date, total_amount
Detection patterns: 3
[✏️ Rediger Template] [📋 Se Alle Templates] [✅ Luk]
```
## 🚀 Performance Metrics
| Scenario | Processing Time | User Action |
|----------|----------------|-------------|
| **No Template** | 10s (AI) | Manual → "Opret Template" |
| **Template Match** | 0.1s (Regex) | None - automatic |
| **Template Creation** | 15s total | One-click |
**ROI Example:**
- 100 invoices from same vendor
- Without template: 100 × 10s = **16.7 minutes**
- With template: 1 × 15s + 99 × 0.1s = **~25 seconds**
- **Time saved: 16 minutes!**
## 🧠 AI Auto-Generate Details
### Input
```javascript
{
pdf_text: "ALSO A/S\nNummer 974733485\n...",
vendor_id: 1
}
```
### AI Output (qwen2.5:3b - 10s)
```json
{
"vendor_cvr": "17630903",
"invoice_number": "974733485",
"invoice_date": "30.06.2025",
"total_amount": "5165.61",
"detection_patterns": ["ALSO A/S", "Mårkærvej 2", "Faktura"],
"lines_start": "Position Varenr. Beskrivelse",
"lines_end": "Subtotal"
}
```
### Converted to Template Format
```json
{
"vendor_id": 1,
"template_name": "Auto-generated 2025-12-07",
"detection_patterns": [
{"type": "text", "pattern": "ALSO A/S", "weight": 0.5},
{"type": "text", "pattern": "Mårkærvej 2", "weight": 0.3}
],
"field_mappings": {
"vendor_cvr": {"pattern": "DK\\s*(\\d{8})", "group": 1},
"invoice_number": {"pattern": "Nummer\\s*(\\d+)", "group": 1},
"invoice_date": {"pattern": "Dato\\s*(\\d{1,2}[\\/.-]\\d{1,2}[\\/.-]\\d{4})", "group": 1},
"total_amount": {"pattern": "Total\\s*([\\d.,]+)", "group": 1},
"lines_start": {"pattern": "Position Varenr\\. Beskrivelse"},
"lines_end": {"pattern": "Subtotal"}
}
}
```
## ✨ Smart Features
### 1. Auto-Detection of Template Need
```javascript
if (!result.template_matched && result.vendor_id) {
showButton("Opret Template"); // Only if vendor exists
}
```
### 2. One-Click Creation
- Fetches PDF text
- AI analyzes
- Converts format
- Saves template
- Shows success with edit link
### 3. Field Mapping Intelligence
```javascript
// Handles both nested and flat AI responses
const cvrValue = aiData.vendor_cvr?.value || aiData.vendor_cvr || aiData.cvr;
```
### 4. Multi-line Item Support
- NO line_pattern in template
- Uses smart multi-line extraction
- Combines description + price lines automatically
## 🔧 Technical Implementation
### Frontend Flow
```javascript
async function createTemplateFromInvoice(invoiceId, vendorId) {
// 1. Get PDF text
const pdfData = await reprocess(invoiceId);
// 2. AI analyze
const aiData = await aiAnalyze(pdfData.pdf_text, vendorId);
// 3. Convert to template format
const template = convertAiToTemplate(aiData, vendorId);
// 4. Save
await createTemplate(template);
// 5. Show success + edit link
showSuccess(template.template_id);
}
```
### Backend Endpoints
```
POST /api/v1/supplier-invoices/reprocess/{id}
→ Returns: {pdf_text, ...}
POST /api/v1/supplier-invoices/ai-analyze
→ Input: {pdf_text, vendor_id}
→ Returns: AI extracted fields
POST /api/v1/supplier-invoices/templates
→ Input: {vendor_id, template_name, detection_patterns, field_mappings}
→ Returns: {template_id, ...}
```
## 📊 Success Metrics
Track these in template_usage_log:
```sql
SELECT
template_id,
COUNT(*) as uses,
AVG(CASE WHEN matched THEN 1 ELSE 0 END) as success_rate,
AVG(confidence) as avg_confidence
FROM template_usage_log
GROUP BY template_id
```
## 🎯 Best Practices
### For Users
1. **Always create template** after first invoice from new vendor
2. **Test template** with 2-3 invoices before trusting
3. **Edit patterns** if confidence < 80%
4. **Use descriptive names**: "ALSO Standard", "ALSO Email Format"
### For Admins
1. Review auto-generated templates weekly
2. Merge duplicate templates (same vendor, similar patterns)
3. Disable low-performing templates (success_rate < 0.7)
4. Keep AI model updated (qwen2.5:3b or better)
## 🚨 Edge Cases Handled
### Vendor Not Found
- AI extracts CVR but vendor doesn't exist in DB
- Shows warning: "Du skal oprette leverandør først"
- No template creation button (needs vendor_id)
### AI Returns Incomplete Data
- Template created with available fields only
- Missing fields can be added manually later
- Template still speeds up future processing
### Duplicate Templates
- System allows multiple templates per vendor
- Each can target different invoice formats
- Detection patterns differentiate them
## 🎓 Training Users
### Quick Start Tutorial
```
1. Upload en faktura
2. Klik "Opret Template" når den vises
3. Næste gang = automatisk!
```
### Power User Tips
```
- Brug Template Builder for bedre kontrol
- Test templates før production
- Kombiner AI + manual editing
- Gennemgå templates månedligt
```
## 📈 Future Enhancements
1. **Batch Template Creation**: Upload 10 PDFs → Create 10 templates
2. **Template Suggestions**: "Found similar template - use this instead?"
3. **Auto-Merge**: Detect duplicate templates and suggest merge
4. **Confidence Tracking**: Dashboard showing template performance
5. **A/B Testing**: Test pattern variations automatically