Agent skill
checkpoint-from-receipt
Create checkpoints from receipt photos using QR scanning, e-Kasa API, and GPS extraction (10-40s)
Install this agent skill to your Project
npx add-skill https://github.com/ceo-whyd-it/car-log/tree/main/claude_skills/checkpoint-from-receipt
SKILL.md
Checkpoint from Receipt Skill
Purpose
Automatically create checkpoints from receipt photos using QR scanning, e-Kasa API, and GPS extraction.
When to Activate
- User pastes image (auto-detect)
- Keywords: "refuel", "fill up", "got gas", "checkpoint", "receipt"
- File extensions: .jpg, .png, .pdf
Instructions
Workflow: 3-Stage Orchestration
QR scan (2-5s) → e-Kasa API (5-30s) → GPS extraction (2-5s) → Checkpoint creation → Gap detection
Total time: 10-40 seconds typically
Stage 1: QR Code Scanning
- When image pasted: "📷 Receipt detected. Scanning QR code..."
- Call:
ekasa-api.scan_qr_code(multi-scale: 1x, 2x, 3x) - Progress:
- "Trying 1x scale..."
- "Trying 2x scale... Found!"
- Extract: receipt_id (e.g., "O-123456789ABC")
If QR not found:
- "QR code not detected. Try better lighting or different angle."
- Fallback: "What's the e-Kasa receipt ID? (starts with O-)"
Stage 2: e-Kasa API (SLOW - Show Progress!)
- Start: "🔄 Fetching from e-Kasa API... (may take up to 60s)"
- Call:
ekasa-api.fetch_receipt_data - Progress updates:
- 15s: "Still fetching... (15s elapsed)"
- 30s: "Almost there... (30s elapsed)"
- 45s: "Taking longer than usual... (45s elapsed)"
If timeout (60s):
- "⏱️ e-Kasa timed out. Options:"
- "1) Retry"
- "2) Manual entry (fuel type, liters, price)"
If success:
- Parse fuel items using Slovak patterns:
- "Diesel", "Nafta", "Motorová nafta"
- "Natural 95", "BA 95", "Benzín 95"
- "Natural 98", "BA 98", "Benzín 98"
- "LPG", "Autoplyn"
- Show: "✅ 52.3L Diesel @ €1.45/L = €75.84"
If multiple fuel items:
- List all items
- Ask: "Which fuel was for your vehicle?"
Stage 3: Dashboard Photo GPS
- Ask: "📸 Now paste dashboard photo for GPS location"
- Call:
dashboard-ocr.extract_metadata - Extract:
- GPS coordinates (latitude, longitude) from EXIF
- Timestamp from EXIF
- Odometer reading (OCR with confidence > 80%)
If GPS found:
- "📍 Location: 48.1486, 17.1077 (Bratislava)"
- Optional: Reverse geocode to show address
If no GPS:
- "📍 No GPS data found. Options:"
- "1) Enable location services and retake photo"
- "2) Enter GPS coordinates manually"
- "3) Enter address (I'll geocode it)"
If OCR odometer found:
- "📊 Detected odometer: 125,340 km (confidence: 92%)"
- "Is this correct? (yes/no)"
If OCR fails or low confidence:
- "What's the current odometer reading in kilometers?"
Stage 4: Create Checkpoint & Detect Gap
-
Combine data:
- Receipt: fuel_type, fuel_liters, price, vendor, receipt_id
- GPS: latitude, longitude, address (optional)
- Datetime: from receipt or dashboard photo
- Odometer: from OCR or user input
-
Slovak compliance check:
- Ask for driver name if missing
- Separate refuel timing from trip timing
- Note: Refuel location may differ from trip start/end
-
Call:
car-log-core.create_checkpoint -
Success: "✅ Checkpoint created at 125,340 km!"
-
Auto-detect gap:
- Call:
car-log-core.detect_gap - If gap > 100km: "⚠️ Gap detected: 820 km over 7 days. Reconstruct trips?"
- If gap detected → Auto-trigger trip-reconstruction skill
- Call:
Timing Breakdown
- QR scan: 2-5 seconds
- e-Kasa API: 5-30 seconds (show progress!)
- GPS extraction: 1-2 seconds
- Checkpoint creation: 1 second
- Gap detection: 1 second
- Total: 10-40 seconds typically
Error Handling
QR Scan Failed
- Try multi-scale (1x, 2x, 3x)
- If all fail: Manual receipt ID entry
e-Kasa Timeout
- Show elapsed time
- Offer retry or manual entry
- Cache successful responses
No GPS
- Fallback to address geocoding
- Manual GPS entry
- Continue without location (warn about compliance)
Multiple Fuel Items
- List all items with prices
- Ask user to select correct one
Ambiguous Geocoding
- Show alternatives with confidence
- Ask user to select correct location
Slovak Compliance
Critical Requirements
- Driver name: Mandatory for tax deduction
- Refuel timing: Separate from trip start/end timing
- Location: Refuel station may differ from trip origin/destination
- L/100km format: Always use European standard
Data Storage
- Store
refuel_datetimeseparately from trip timing - Store
refuel_locationseparately from trip endpoints - Link checkpoint to trips via gap detection
Related Skills
Auto-triggers
- trip-reconstruction: If gap > 100km detected
- data-validation: Automatic validation after checkpoint creation
Links to
- vehicle-setup: If no vehicle registered
- report-generation: After sufficient checkpoints collected
For detailed examples: See GUIDE.md For MCP tools: See REFERENCE.md For timeout troubleshooting: See ../TROUBLESHOOTING.md
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
trip-reconstruction
Fill gaps between checkpoints using hybrid GPS (70%) + address (30%) template matching with high confidence
template-creation
Create recurring trip templates with mandatory GPS coordinates for 90%+ accuracy automatic matching
vehicle-setup
Guide users through Slovak VAT Act 2025 compliant vehicle registration with VIN validation
report-generation
Generate Slovak VAT Act 2025 compliant reports for business trip tax deductions with automatic validation
edit-article
Edit and improve articles by restructuring sections, improving clarity, and tightening prose. Use when user wants to edit, revise, or improve an article draft.
handoff
Compact the current conversation into a handoff document for another agent to pick up.
Didn't find tool you were looking for?