מדריך API - מערכת סריקת מסמכים

תיעוד מלא של כל נקודות הקצה (API Endpoints) של המערכת

מבוא

ה-API של מערכת סריקת המסמכים מספק גישה מלאה לכל הפונקציונליות של המערכת דרך בקשות HTTP תקניות. כל נקודות הקצה מחזירות תשובות בפורמט JSON.

טיפ: כל ה-API endpoints דורשים אימות (למעט /health). השתמש בעוגיות (cookies) של Flask או tokens לאימות.

כתובת בסיס (Base URL)

https://labs.levor.io/api/email-scanning

אימות והרשאות

המערכת משתמשת באימות מבוסס-סשן של Flask. כדי להשתמש ב-API, עליך להיות מחובר למערכת.

דרכי אימות:

  • Cookie-based: התחבר דרך /auth/login והשתמש בעוגיית הסשן
  • Authorization Header: העבר את ה-session cookie בכל בקשה

דוגמה לאימות:

// JavaScript - Using fetch with credentials
fetch('https://labs.levor.io/api/email-scanning/documents', {
    method: 'GET',
    credentials: 'include',  // Include cookies
    headers: {
        'Content-Type': 'application/json'
    }
})
.then(response => response.json())
.then(data => console.log(data));
# cURL - Using cookie file
curl -X GET \
  -b cookies.txt \
  https://labs.levor.io/api/email-scanning/documents

פורמט תשובות

כל נקודות הקצה מחזירות תשובות בפורמט JSON סטנדרטי:

תשובה מוצלחת:

{
    "success": true,
    "message": "Success",
    "data": {
        // נתונים מבוקשים
    }
}

תשובת שגיאה:

{
    "success": false,
    "error": "הודעת שגיאה מפורטת"
}
חשוב: ב-JavaScript, יש לחלץ את הנתונים מתוך response.data ולא מ-response ישירות.

API מסמכים

GET /api/email-scanning/documents נדרש אימות

תיאור: קבלת רשימת מסמכים עם תמיכה בעימוד, חיפוש וסינון

פרמטרים (Query Parameters):
שם סוג תיאור ברירת מחדל
page Integer מספר עמוד 1
per_page Integer מספר פריטים בעמוד 20
category_id Integer סינון לפי קטגוריה -
search String חיפוש טקסט חופשי -
status String סינון לפי סטטוס -
דוגמת בקשה:
GET /api/email-scanning/documents?page=1&per_page=20&category_id=5
דוגמת תשובה:
{
    "success": true,
    "message": "Success",
    "data": {
        "documents": [
            {
                "id": 123,
                "filename": "invoice_001.pdf",
                "original_filename": "חשבונית_מס.pdf",
                "upload_date": "2025-11-23T10:30:00",
                "file_size": 245678,
                "category_id": 5,
                "category_name": "חשבוניות",
                "status": "processed",
                "ocr_status": "completed",
                "extracted_text": "...",
                "supplier_name": "ספק בע\"מ",
                "invoice_number": "INV-2025-001",
                "total_amount": 1500.00,
                "currency": "ILS",
                "invoice_date": "2025-11-20"
            }
        ],
        "total": 150,
        "pages": 8,
        "current_page": 1,
        "per_page": 20
    }
}
קודי סטטוס:

200 הצלחה 401 לא מאומת 500 שגיאת שרת

GET /api/email-scanning/documents/:id נדרש אימות

תיאור: קבלת פרטי מסמך בודד

דוגמת בקשה:
GET /api/email-scanning/documents/123
דוגמת תשובה:
{
    "success": true,
    "message": "Success",
    "data": {
        "id": 123,
        "filename": "invoice_001.pdf",
        "original_filename": "חשבונית_מס.pdf",
        "upload_date": "2025-11-23T10:30:00",
        "file_size": 245678,
        "file_path": "/uploads/documents/invoice_001.pdf",
        "category_id": 5,
        "category_name": "חשבוניות",
        "status": "processed",
        "ocr_status": "completed",
        "ocr_confidence": 0.95,
        "extracted_text": "טקסט מלא שחולץ מהמסמך...",
        "supplier_name": "ספק בע\"מ",
        "supplier_tax_id": "123456789",
        "invoice_number": "INV-2025-001",
        "total_amount": 1500.00,
        "currency": "ILS",
        "invoice_date": "2025-11-20",
        "due_date": "2025-12-20",
        "line_items": [
            {
                "description": "מוצר א",
                "quantity": 10,
                "unit_price": 100.00,
                "total": 1000.00
            }
        ],
        "tags": ["urgent", "paid"],
        "notes": "הערות נוספות",
        "created_at": "2025-11-23T10:30:00",
        "updated_at": "2025-11-23T10:35:00"
    }
}
POST /api/email-scanning/documents/upload נדרש אימות

תיאור: העלאת מסמך חדש למערכת

Content-Type:
multipart/form-data
שדות (Form Fields):
שם סוג חובה תיאור
file File כן קובץ PDF/JPG/PNG (עד 10MB)
category_id Integer לא מזהה קטגוריה
auto_process Boolean לא האם להפעיל OCR אוטומטית
דוגמת בקשה (JavaScript):
const formData = new FormData();
formData.append('file', fileInput.files[0]);
formData.append('category_id', '5');
formData.append('auto_process', 'true');

fetch('/api/email-scanning/documents/upload', {
    method: 'POST',
    credentials: 'include',
    body: formData
})
.then(response => response.json())
.then(data => {
    const document = data.data;
    console.log('Uploaded:', document.id);
});
דוגמת תשובה:
{
    "success": true,
    "message": "המסמך הועלה בהצלחה",
    "data": {
        "id": 456,
        "filename": "invoice_new.pdf",
        "status": "processing",
        "ocr_job_id": 789
    }
}
PUT /api/email-scanning/documents/:id נדרש אימות

תיאור: עדכון פרטי מסמך קיים

Body (JSON):
{
    "category_id": 5,
    "supplier_name": "ספק חדש בע\"מ",
    "invoice_number": "INV-2025-002",
    "total_amount": 2000.00,
    "notes": "הערות מעודכנות",
    "tags": ["paid", "archived"]
}
דוגמת תשובה:
{
    "success": true,
    "message": "המסמך עודכן בהצלחה",
    "data": {
        "id": 123,
        "updated_at": "2025-11-23T11:00:00"
    }
}
DELETE /api/email-scanning/documents/:id נדרש אימות

תיאור: מחיקת מסמך (soft delete)

דוגמת בקשה:
DELETE /api/email-scanning/documents/123
דוגמת תשובה:
{
    "success": true,
    "message": "המסמך נמחק בהצלחה"
}

API קטגוריות

GET /api/email-scanning/categories נדרש אימות

תיאור: קבלת רשימת כל הקטגוריות

דוגמת תשובה:
{
    "success": true,
    "message": "Success",
    "data": {
        "categories": [
            {
                "id": 1,
                "name": "חשבוניות",
                "description": "חשבוניות מס ותעודות משלוח",
                "color": "#ff6b6b",
                "icon": "receipt",
                "document_count": 45,
                "auto_categorize": true,
                "keywords": ["חשבונית", "invoice", "חשבונית מס"]
            },
            {
                "id": 2,
                "name": "הזמנות רכש",
                "description": "הזמנות רכש וציטוטים",
                "color": "#4ecdc4",
                "icon": "cart",
                "document_count": 23,
                "auto_categorize": true,
                "keywords": ["הזמנה", "purchase order", "PO"]
            }
        ],
        "total": 10
    }
}
POST /api/email-scanning/categories נדרש אימות

תיאור: יצירת קטגוריה חדשה

Body (JSON):
{
    "name": "קבלות",
    "description": "קבלות וחשבוניות זעירות",
    "color": "#95e1d3",
    "icon": "receipt-cutoff",
    "auto_categorize": true,
    "keywords": ["קבלה", "receipt"]
}
דוגמת תשובה:
{
    "success": true,
    "message": "הקטגוריה נוצרה בהצלחה",
    "data": {
        "id": 11,
        "name": "קבלות",
        "created_at": "2025-11-23T11:30:00"
    }
}

API סטטיסטיקות

GET /api/email-scanning/statistics נדרש אימות

תיאור: קבלת סטטיסטיקות כלליות של המערכת

דוגמת תשובה:
{
    "success": true,
    "message": "Success",
    "data": {
        "total_documents": 1247,
        "processed_documents": 1150,
        "pending_documents": 97,
        "total_size_mb": 5420.5,
        "categories_count": 12,
        "avg_processing_time": 15.3,
        "ocr_accuracy": 0.94,
        "documents_today": 45,
        "documents_this_week": 234,
        "documents_this_month": 892,
        "top_categories": [
            {"name": "חשבוניות", "count": 450},
            {"name": "הזמנות רכש", "count": 234},
            {"name": "תעודות משלוח", "count": 198}
        ],
        "recent_activity": [
            {
                "type": "upload",
                "document_id": 1247,
                "timestamp": "2025-11-23T11:45:00",
                "user": "admin@techlab.co.il"
            }
        ]
    }
}
GET /api/email-scanning/dashboard/realtime נדרש אימות

תיאור: קבלת נתוני דשבורד בזמן אמת

דוגמת תשובה:
{
    "success": true,
    "data": {
        "processing_queue": 5,
        "active_ocr_jobs": 3,
        "pending_approvals": 12,
        "unread_notifications": 8,
        "system_health": "healthy",
        "last_update": "2025-11-23T12:00:00"
    }
}

API אינטגרציית אימייל

GET /api/email-integration/accounts נדרש אימות

תיאור: קבלת רשימת חשבונות אימייל מחוברים

דוגמת תשובה:
{
    "success": true,
    "data": [
        {
            "id": 1,
            "email": "invoices@company.com",
            "provider": "gmail",
            "status": "active",
            "last_fetch": "2025-11-23T11:30:00",
            "total_messages": 1234,
            "unprocessed_messages": 5,
            "auto_fetch_enabled": true
        }
    ]
}
POST /api/email-integration/accounts נדרש אימות

תיאור: הוספת חשבון אימייל חדש

Body (JSON) - Gmail:
{
    "provider": "gmail",
    "email": "invoices@company.com",
    "credentials": {
        "access_token": "ya29...",
        "refresh_token": "1//...",
        "token_uri": "https://oauth2.googleapis.com/token",
        "client_id": "...",
        "client_secret": "..."
    },
    "auto_fetch": true,
    "fetch_interval": 300
}
Body (JSON) - IMAP:
{
    "provider": "imap",
    "email": "docs@company.com",
    "imap_server": "mail.company.com",
    "imap_port": 993,
    "imap_username": "docs@company.com",
    "imap_password": "encrypted_password",
    "use_ssl": true,
    "auto_fetch": true,
    "fetch_interval": 600
}
GET /api/email-integration/messages נדרש אימות

תיאור: קבלת רשימת הודעות אימייל

פרמטרים:
שם תיאור
account_id סינון לפי חשבון
processed true/false - האם עובד
has_attachments true/false - עם קבצים מצורפים

API זיהוי הונאות

GET /api/email-scanning/fraud/alerts נדרש אימות

תיאור: קבלת התראות הונאה פעילות

דוגמת תשובה:
{
    "success": true,
    "data": {
        "alerts": [
            {
                "id": 42,
                "document_id": 789,
                "type": "duplicate_invoice",
                "severity": "high",
                "description": "חשבונית זהה נמצאה במערכת",
                "duplicate_document_id": 456,
                "similarity_score": 0.98,
                "created_at": "2025-11-23T09:15:00",
                "status": "pending"
            },
            {
                "id": 43,
                "document_id": 790,
                "type": "suspicious_amount",
                "severity": "medium",
                "description": "סכום חריג מהממוצע ב-500%",
                "amount": 50000.00,
                "average_amount": 10000.00,
                "created_at": "2025-11-23T10:20:00",
                "status": "pending"
            }
        ],
        "total_alerts": 15,
        "high_severity": 3,
        "medium_severity": 7,
        "low_severity": 5
    }
}
POST /api/email-scanning/fraud/alerts/:id/resolve נדרש אימות

תיאור: סגירת התראת הונאה

Body (JSON):
{
    "resolution": "false_positive",
    "notes": "אומת כחשבונית לגיטימית"
}

API מערכת אישורים

GET /api/email-scanning/approvals/pending נדרש אימות

תיאור: קבלת מסמכים הממתינים לאישור

דוגמת תשובה:
{
    "success": true,
    "data": {
        "pending_approvals": [
            {
                "id": 15,
                "document_id": 567,
                "document_name": "invoice_large.pdf",
                "approval_level": 2,
                "required_level": 3,
                "amount": 25000.00,
                "supplier": "ספק גדול בע\"מ",
                "submitted_by": "user@company.com",
                "submitted_at": "2025-11-22T14:00:00",
                "pending_approver": "manager@company.com"
            }
        ],
        "total": 8
    }
}
POST /api/email-scanning/approvals/:id/approve נדרש אימות

תיאור: אישור מסמך

Body (JSON):
{
    "notes": "מאושר לתשלום",
    "next_approver": "cfo@company.com"  // אופציונלי
}
POST /api/email-scanning/approvals/:id/reject נדרש אימות

תיאור: דחיית מסמך

Body (JSON):
{
    "reason": "סכום לא תואם להזמנת רכש"
}

API ייצוא נתונים

POST /api/email-scanning/export נדרש אימות

תיאור: ייצוא מסמכים לאקסל או CSV

Body (JSON):
{
    "format": "excel",  // או "csv"
    "filters": {
        "category_id": 5,
        "date_from": "2025-11-01",
        "date_to": "2025-11-30",
        "status": "processed"
    },
    "fields": [
        "filename",
        "upload_date",
        "category_name",
        "supplier_name",
        "invoice_number",
        "total_amount"
    ]
}
דוגמת תשובה:
{
    "success": true,
    "message": "קובץ נוצר בהצלחה",
    "data": {
        "download_url": "/downloads/export_20251123_120500.xlsx",
        "filename": "documents_export.xlsx",
        "records_count": 145,
        "file_size": 52480
    }
}

קודי שגיאה

קוד HTTP משמעות דוגמה
200 בקשה הצליחה נתונים הוחזרו בהצלחה
400 בקשה שגויה פרמטרים חסרים או לא תקינים
401 לא מאומת יש להתחבר למערכת
403 אין הרשאה המשתמש אינו מורשה לפעולה זו
404 לא נמצא המסמך או הנתיב לא קיים
500 שגיאת שרת שגיאה פנימית במערכת

דוגמאות לשגיאות נפוצות:

שגיאה 401 - לא מאומת
{
    "success": false,
    "error": "Authentication required. Please log in."
}
שגיאה 400 - קובץ לא תקין
{
    "success": false,
    "error": "סוג קובץ לא נתמך. רק PDF, JPG, PNG מותרים."
}
שגיאה 404 - מסמך לא נמצא
{
    "success": false,
    "error": "המסמך עם מזהה 999 לא נמצא"
}
זקוקים לעזרה?

לשאלות נוספות או בעיות טכניות, פנה לצוות התמיכה או עיין במדריך המשתמש המלא.