צד ההוצאות של הספר, ב-API. מעלים צילום קבלה ומקבלים טיוטה עם ספק, סכום ומע"מ. מאשרים, והרישום קפוא עם מספר רשומה, כמו כל מסמך.
POST /expenses/ocr מקבל את הבייטים של התמונה או ה-PDF, מחלץ את השדות עם ראייה ממוחשבת, שומר את הקובץ המקורי ומחזיר טיוטה ממולאת. תמיד טיוטה: מע"מ שנקרא לא נכון הוא עניין של מס, אז המשתמש מאשר לפני הרישום.
אותו מחזור חיים כמו מסמך: הטיוטה ניתנת לעריכה, הרישום קפוא, והתיקון הוא רשומה נגדית.
מהסריקה, או ידנית עם השדות שאתם כבר מחזיקים. PATCH לתיקונים.
curl -X POST $BASE/businesses/$BID/expenses/ocr -H "X-Api-Key: $KEY" \ -H "Content-Type: image/jpeg" -H "Idempotency-Key: receipt-scan-991" --data-binary @receipt.jpg → 201 { "expense": { "id": "exp_88a1…", "status": "draft", "supplierName": "פז", "amountIncVat": 11800, "vatAmount": 1800 }, "extracted": { "confidence": "high", … } }
POST /record הופך את השורה לקבועה עם מספר רשומה רציף. מכאן היא לא ניתנת לעריכה, גם לא על ידינו.
→ 200 { "expense": { "status": "recorded", "recordNumber": 217, "amountIncVat": 11800 } }
// webhook: expense.recordedטעות ברשומה שנרשמה? POST /correction פותח רשומה נגדית מקושרת שמאפסת אותה, לפי הוראה 23. המקור נשאר.
{ "reason": "נרשם פעמיים" }
→ 201 { "expense": { "recordNumber": 218, "amountIncVat": -11800, "correctsId": "exp_88a1…" } }חשבונית בדולר נרשמת בשקלים לפי השער היציג של יום המסמך, או לפי מה שהכרטיס באמת חויב. השער והתאריך נשארים על הרשומה כראיה.
מע"מ מודפס נשמר תמיד. מע"מ שלא מודפס הוא אפס אמיתי, לא ניחוש של 18%: קבלה של עוסק פטור לא מזכה בתשומות.
הצילום שהועלה נשמר לצד הרשומה, לשבע שנים, ונכלל בגיבוי היזום. מה שהמבקר מבקש לראות, יש.