navidocs/YACHT_ACCOUNTING_RESEARCH.md
Danny Stocker af0f38af80 Add receipt/invoice upload + multi-user accounting module (Spliit fork)
Agent 6 (Session 2) Updated:
- Receipt/invoice photo upload with OCR (Tesseract + Google Vision)
- Auto-extract: amount, vendor, date, VAT, category
- Multi-user expense tracking:
  - Owner: cash, card, bank (marina fees, insurance, major upgrades)
  - Captain: boat card, boat cash, personal cash to reimburse
  - Reimbursement workflow: submit → OCR → owner approve → mark paid
- Open-source accounting module research:
  - Spliit (MIT, 2.3K stars) - receipt scanning, expense splitting, PWA
  - SplitPro (MIT, 916 stars) - BigInt precision, multi-currency
  - Medici (MIT, 330 stars) - double-entry GL, hierarchical accounts
- WhatsApp integration: '@NaviDocs log expense €45 fuel' → AI creates entry
- IF.TTT compliance: SHA-256 hash + ed25519 signature for receipts
- Export to Excel/CSV for accountant (tax deduction reports)

Research Report: YACHT_ACCOUNTING_RESEARCH.md (15+ repos analyzed)

Recommended: Fork Spliit (MIT) + customize for boat workflows
- Boat card vs personal cash tracking
- Captain reimbursement approval flow
- Multi-currency (€, $, £)
- Mobile-first PWA

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-13 02:27:32 +01:00

20 KiB

Open-Source Accounting Modules for Yacht/Boat Expense Tracking

Research Report - Multi-User Owner + Captain Expenditure Tracking

Report Date: November 13, 2025 Research Scope: Open-source accounting libraries suitable for NaviDocs integration Target Stack: Node.js/Express.js/JavaScript backend


Executive Summary

After comprehensive research of 15+ open-source accounting projects, no dedicated boat/yacht accounting system exists in the open-source ecosystem. However, three specialized solutions offer strong foundations:

  1. Spliit (MIT) - Best for owner/captain split expense tracking
  2. SplitPro (MIT) - Most robust multi-currency reimbursement system
  3. Medici (MIT) - Lightweight double-entry accounting library for custom integration

For a full-featured standalone system, BigCapital (AGPL-3.0) offers the most comprehensive accounting foundation but requires AGPL compliance.


1. SPLIIT - Expense Splitting App

GitHub: https://github.com/spliit-app/spliit License: MIT Last Updated: November 9, 2025 (v1.19.0) Stars: 2,300+ | Forks: 347

Technology Stack

  • Frontend: Next.js, React, TailwindCSS, shadcn/UI
  • Backend: Next.js API Routes
  • Database: PostgreSQL (Prisma ORM)
  • Languages: 97.9% TypeScript, 1.1% JavaScript

Key Features

  • Group-based expense tracking with balance calculations
  • Receipt scanning & image attachments
  • Uneven cost splitting (itemized, percentage-based, exact amounts)
  • Expense categorization
  • Multi-user collaborative groups
  • Optional AWS S3 storage for receipts
  • Optional GPT-4 Vision integration for receipt OCR
  • OpenAI auto-categorization

Suitability for Yacht/Boat Tracking

Rating: 8/10

  • Excellent: Perfect for owner↔captain expense splits
  • Good: Receipt upload with optional AI categorization
  • Good: Multi-currency support (potentially via Prisma)
  • Limited: No dedicated reimbursement workflow
  • Limited: No crew expense tracking hierarchy

Integration Notes

  • Well-suited for NaviDocs as separate microservice
  • Could adapt API for captain expense submission → owner approval
  • Receipt scanning aligns with NaviDocs photo management
  • May require customization for reimbursement workflows

Advantages

Most actively maintained (2025 release) MIT license - no GPL compliance concerns Modern tech stack (Next.js, Prisma) Built-in receipt scanning support PWA-capable for mobile crew access

Disadvantages

No dedicated approval workflow Designed for group expense splitting, not employee reimbursement Limited accounting (no GL, balance sheet, P&L reports)


2. SPLITPRO - Splitwise Alternative

GitHub: https://github.com/oss-apps/split-pro License: MIT Last Updated: November 11, 2025 (v1.5.8) Stars: 916 | Forks: 109

Technology Stack

  • Frontend: NextJS, Tailwind CSS, ShadcnUI
  • Backend/API: tRPC, NextAuth
  • Database: PostgreSQL with Prisma ORM
  • Infrastructure: Docker, GitHub Container Registry

Key Features

  • Multi-currency support with rate conversion
  • Bill/receipt upload and management
  • Flexible splitting (shares, percentages, exact amounts)
  • Splitwise data import capability
  • PWA (Progressive Web App)
  • Push notifications
  • Data export functionality
  • Numeric precision: Uses BigInt to prevent rounding errors
  • Docker deployment support

Suitability for Yacht/Boat Tracking

Rating: 8.5/10

  • Excellent: Multi-currency (critical for international yachts)
  • Excellent: Numeric precision prevents floating-point errors in financial tracking
  • Good: Receipt upload with bill management
  • Good: Multiple splitting options for crew/captain scenarios
  • Limited: No GL or financial reporting

Integration Notes

  • Self-hosted only (community instance no longer available)
  • Requires: Node.js ≥22.x, PostgreSQL, pnpm
  • Docker support simplifies NaviDocs integration
  • BigInt implementation critical for accurate financial calculations

Advantages

MIT license Excellent numeric precision (BigInt-based) Multi-currency with live rate conversion Modern framework (tRPC for type-safe APIs) Active development (November 2025 release) Docker/containerization ready

Disadvantages

Requires PostgreSQL (vs MongoDB in IDURAR) No built-in receipt OCR (upload only) Limited to expense splitting, not full accounting Node.js 22.x requirement (verify NaviDocs compatibility)


3. MEDICI - Double-Entry Accounting Library

GitHub: https://github.com/flash-oss/medici License: MIT Last Updated: December 2024 Stars: 330 | Forks: 97

Technology Stack

  • Framework: Node.js library
  • ORM: Mongoose (MongoDB)
  • Database: MongoDB
  • Language: JavaScript
  • Features: ACID transactions via MongoDB sessions

Key Features

  • Pure double-entry accounting system
  • Hierarchical accounts (colon-separated: Assets:Cash:Captain)
  • Journal entry creation with debit/credit transactions
  • Account balance queries with date-range filtering
  • Transaction ledger retrieval
  • Journal entry voiding with audit trails
  • Custom metadata on transactions
  • Configurable precision (default 8 decimals)
  • Balance snapshot caching (48-hour TTL)
  • MongoDB read concern customization

Suitability for Yacht/Boat Tracking

Rating: 9/10 (as library component)

  • Excellent: Proper GL accounting foundation
  • Excellent: MongoDB integration (matches NaviDocs tech)
  • Excellent: Hierarchical accounts (Captain:Meals, Owner:Fuel, etc.)
  • Good: ACID transaction support
  • Good: Audit trails (voiding)
  • Requires Work: UI/API layer needed (library only)

Integration Notes

  • Library, not a complete app - requires custom frontend/API
  • Best used as backend accounting engine in NaviDocs
  • Perfect for building custom owner+captain hierarchy
  • Can track individual crew members as sub-accounts
  • Supports metadata (can store captain ID, trip ID, etc.)

Example Account Structure for Yacht

Owner:Assets:Cash:Personal
Owner:Assets:Cash:OnBoard
Owner:Expenses:Fuel
Owner:Expenses:Provisions
Owner:Expenses:Marina
Captain:Expenses:Meals
Captain:Expenses:Crew
Captain:Reimbursement:Pending
Captain:Reimbursement:Paid

Advantages

MIT license Pure double-entry accounting (proper GL) MongoDB native (matches NaviDocs) Lightweight library (easy to integrate) ACID transaction support Audit trail capability (voiding)

Disadvantages

Library only - requires significant custom development No UI (must build frontend) No receipt OCR No multi-currency support Must implement reimbursement workflows


4. BIGCAPITAL - Full Accounting System

GitHub: https://github.com/bigcapitalhq/bigcapital License: AGPL-3.0 (GNU Affero) Last Updated: December 9, 2024 (v0.22.0) Stars: 3,400+ | Forks: 350

Technology Stack

  • Language: TypeScript (96.8%)
  • Architecture: Monorepo (Lerna + pnpm workspaces)
  • Testing: Playwright E2E
  • Deployment: Docker, Docker Compose, Gitpod
  • Database: (Typical for AGPL accounting: PostgreSQL/MySQL)

Key Features

  • Double-entry accounting system
  • Invoice and bill management
  • Expense tracking with categorization
  • Financial reporting with intelligent dashboards
  • Inventory management
  • Headless API for integration
  • Multi-user support
  • Self-hosted or cloud (my.bigcapital.app)
  • Comprehensive documentation

Suitability for Yacht/Boat Tracking

Rating: 9/10 (most complete)

  • Excellent: Full GL, P&L, balance sheet reports
  • Excellent: Invoice/expense management
  • Excellent: Multi-user support
  • Good: Headless API for custom UI
  • Concern: AGPL license (open-source derivative requirement)

Integration Notes

  • AGPL License Implications:
    • If NaviDocs modifications are distributed, must open-source changes
    • Fine for internal/private use
    • Requires legal review for commercial products
    • Consider consulting with legal team before integration

Advantages

Most complete accounting foundation Double-entry GL + financial reporting Active development (December 2024) Docker deployment ready Headless API architecture Inventory management (useful for provisioning)

Disadvantages

AGPL-3.0 requires open-sourcing derivative works More complex than needed for pure expense tracking TypeScript monorepo (larger learning curve) Potential licensing conflicts if integrating into commercial product


5. IDURAR ERP/CRM

GitHub: https://github.com/idurar/idurar-erp-crm License: AGPL-3.0 (Fair-Code) Last Updated: September 27, 2024 (v4.1.0) Stars: 8,000+ | Forks: 2,800

Technology Stack

  • Frontend: React.js with Ant Design
  • Backend: Express.js (Node.js)
  • Database: MongoDB
  • Language: 94% JavaScript
  • ORM: (Typical: Mongoose)

Key Features

  • Invoice and quote management
  • Payment processing
  • Customer relationship management
  • Expense tracking
  • Multi-user support
  • Multi-tenant cloud capability
  • Full ERP/CRM functionality

Suitability for Yacht/Boat Tracking

Rating: 6/10

  • Good: MongoDB (NaviDocs match)
  • Good: Express.js backend (NaviDocs match)
  • Good: Invoice/expense management
  • Limited: CRM-focused, overkill for boat expenses
  • Concern: AGPL license

Disadvantages

AGPL license (same compliance issues as BigCapital) Too broad (CRM features not needed) Older last update (September 2024) Over-engineered for simple yacht expense tracking


Specialized Receipt OCR Solutions

Receipt Scanner (danschultzer)

GitHub: https://github.com/danschultzer/receipt-scanner License: MIT Stars: 301 | Last Update: Maintenance mode (2024)

Features

  • PDF and image receipt processing
  • OCR via Tesseract.js
  • Automatic date extraction
  • Amount detection with decimal guessing
  • Support for GraphicsMagick, ImageMagick, OpenCV3 preprocessing
  • CLI tool and programmatic API
  • Custom text parser support

Use Case

  • Excellent complementary tool for receipt processing
  • Can integrate with any accounting system
  • Already supports Tesseract (mentioned in NaviDocs)
  • MIT licensed for commercial use

Comparison Matrix

Feature Spliit SplitPro Medici BigCapital IDURAR
License MIT MIT MIT AGPL-3.0 AGPL-3.0
Stars 2.3k 916 330 3.4k 8k
Last Update Nov 2025 Nov 2025 Dec 2024 Dec 2024 Sept 2024
Tech Stack Next.js/Prisma Next.js/tRPC Node.js/Mongoose TypeScript Monorepo Express/React
Database PostgreSQL PostgreSQL MongoDB Varies MongoDB
Double-Entry GL
Receipt Scanning (GPT-4V) (Upload only)
Multi-Currency (Limited) (Full)
Multi-User
Reimbursement WF (Custom) (Custom) (Custom)
Financial Reports
Mobile-Friendly PWA PWA
Docker Support

Boat-Specific Considerations

Requirement Analysis

1. Owner vs Captain Expense Tracking

  • Spliit & SplitPro: Groups-based (adapt easily)
  • Medici: Hierarchical accounts (native support)
  • BigCapital/IDURAR: Multi-user (requires customization)

2. Multi-Currency Support (International Yachts)

  • SplitPro: Best (BigInt precision + live rates)
  • Spliit: Basic support
  • Medici: Not supported (would require wrapper)
  • BigCapital: Yes, but unknown precision
  • IDURAR: Yes

3. Receipt Management & OCR

  • Spliit: Built-in GPT-4V receipt scanning
  • Receipt Scanner: Dedicated OCR tool (MIT)
  • Others: Can upload, limited OCR

4. Reimbursement Workflow (Captain → Owner payment)

  • BigCapital: Built-in
  • IDURAR: Built-in
  • SplitPro/Spliit: Must customize
  • Medici: Must build from scratch

5. Mobile Access (Captain at sea)

  • Spliit: PWA
  • SplitPro: PWA
  • Others: Web-based or custom mobile

6. Crew Expense Hierarchy

  • Medici: Native (hierarchical accounts)
  • Others: Custom development required

Use Spliit + Receipt Scanner

Approach:

  1. Fork Spliit for NaviDocs customization
  2. Create owner/captain groups
  3. Integrate Receipt Scanner for OCR
  4. Build approval workflow for captain→owner reimbursement
  5. Add trip/voyage tracking metadata
  6. Customize UI for yacht operations

Effort: 4-6 weeks Cost: Lower (MIT licensed) Complexity: Medium Maintainability: Good (active upstream project)

Modifications needed:

  • Add voyage/trip context
  • Captain expense approval workflow
  • Reimbursement calculation
  • Crew expense hierarchy
  • Integration with NaviDocs photo system

Option B: Best for Financial Rigor

Use Medici (Library) + Custom API Layer

Approach:

  1. Use Medici as accounting engine
  2. Build custom Express.js API layer
  3. Implement owner/captain account hierarchy
  4. Add reimbursement workflow
  5. Connect Receipt Scanner for OCR
  6. Build custom frontend or integrate with NaviDocs UI

Effort: 8-10 weeks Cost: Lower (MIT licensed) Complexity: High Advantage: Proper GL accounting, audit trails

Benefits:

  • Proper double-entry accounting
  • Account hierarchy matches crew structure
  • Audit trail (voiding records)
  • MongoDB native integration
  • Lightweight foundation

Option C: Enterprise-Grade

Use BigCapital (with legal review)

Approach:

  1. Self-host BigCapital
  2. Customize multi-user roles for yacht operations
  3. Add voyage tracking
  4. Integrate with NaviDocs
  5. Deploy via Docker

Effort: 6-8 weeks Cost: Medium (AGPL compliance review needed) Complexity: Medium Risk: AGPL licensing implications

Requires:

  • Legal review of AGPL compliance
  • Evaluate if open-sourcing NaviDocs changes is acceptable
  • Assess competitive impact

Decision Matrix

Priority Recommendation Rationale
Speed to Market Spliit + Receipt Scanner MIT licensed, active, receipt OCR built-in
Financial Accuracy Medici (custom) Proper GL, BigInt precision, MongoDB match
Feature Completeness BigCapital Full accounting, but AGPL concerns
Ease of Integration Spliit Next.js matches modern web patterns
Lowest Maintenance SplitPro MIT, PostgreSQL (industry standard), BigInt precision

Boat-Specific Accounting Workflow

Typical Yacht Expense Flow

1. Captain Expense Entry
   └─ Upload receipt (photo/scan)
   └─ Select category (Fuel, Meals, Crew, Marina, etc.)
   └─ Add crew members involved
   └─ Mark as "Pending Reimbursement"

2. Owner Review & Approval
   └─ Review captain's submitted expenses
   └─ Approve/reject with notes
   └─ Mark approved expenses as "Approved"

3. Reimbursement Tracking
   └─ Aggregate approved expenses
   └─ Calculate captain balance due
   └─ Generate reimbursement invoice
   └─ Track payment status

4. Financial Reporting
   └─ Trip/voyage-level cost summaries
   └─ Crew expense breakdowns
   └─ Fuel cost tracking
   └─ Marina/port cost analysis
   └─ Owner vs Captain liability reporting

5. Multi-Currency Handling (International)
   └─ Record expense in local currency
   └─ Convert to owner's base currency
   └─ Track FX differences
   └─ Generate multi-currency reports
// Expense Document
{
  _id: ObjectId,
  voyageId: ObjectId,      // Link to voyage/trip
  timestamp: Date,
  submittedBy: "captain",   // User role
  paidBy: ObjectId,         // Who paid the actual money
  amount: Decimal128,       // Use Decimal for accuracy
  currency: "EUR",
  originalCurrency: "GBP",  // For tracking FX
  rate: 1.18,              // FX rate applied
  category: "Fuel",
  description: "Diesel fuel - Canary Islands",
  receipt: {
    imageUrl: "s3://...",
    scannedText: "...",     // From OCR
    vendor: "Marina ABC"
  },
  status: "approved",       // pending, approved, rejected, reimbursed
  crew: [ObjectId],         // Crew members involved
  approvedBy: ObjectId,     // Owner who approved
  approvedAt: Date,
  reimbursementId: ObjectId, // Link to reimbursement batch
  notes: "..."
}

// Reimbursement Batch
{
  _id: ObjectId,
  captain: ObjectId,
  voyageId: ObjectId,
  startDate: Date,
  endDate: Date,
  totalAmount: Decimal128,
  currency: "EUR",
  status: "pending",        // pending, paid, partial
  invoiceNumber: "RF-2025-001",
  paidDate: Date,
  notes: "..."
}

Comparison: Build vs. Buy Analysis

  • Development Cost: 4-6 weeks
  • License Cost: Free (MIT)
  • Maintenance: Low (upstream updates available)
  • Customization Effort: Medium
  • Time to Production: 2-3 months

Best for: Fast MVP, modern tech stack, crew mobile access


Option 2: Build Custom on Medici

  • Development Cost: 8-10 weeks
  • License Cost: Free (MIT)
  • Maintenance: High (full ownership)
  • Customization Effort: High
  • Time to Production: 3-4 months

Best for: Long-term, specific yacht domain needs, GL accounting requirement


Option 3: Deploy BigCapital (AGPL)

  • Development Cost: 6-8 weeks + legal review
  • License Cost: Free (AGPL)
  • Legal Risk: Moderate (open-source derivative requirement)
  • Maintenance: Medium (upstream + legal compliance)
  • Time to Production: 2-3 months

Best for: Full accounting features, willing to handle AGPL implications


Final Recommendation

For NaviDocs: Hybrid Approach

Phase 1 (MVP - 6-8 weeks):

  1. Integrate Spliit as forked customized service
  2. Add Receipt Scanner for OCR processing
  3. Build simple captain expense submission UI
  4. Implement owner approval workflow
  5. Connect to NaviDocs photo/document system

Phase 2 (v1.0 - 3-4 months):

  1. Evaluate migration to Medici for GL accounting
  2. Add financial reporting layer
  3. Implement multi-currency precision (BigInt)
  4. Build reimbursement batch processing
  5. Add crew expense hierarchy

Technology Stack:

  • Accounting: Spliit or Medici
  • OCR: Receipt Scanner
  • Database: MongoDB (NaviDocs native)
  • Backend: Express.js (NaviDocs native)
  • Frontend: Existing NaviDocs UI + mobile PWA

License Compliance:

  • Spliit: MIT (no restrictions)
  • Receipt Scanner: MIT (no restrictions)
  • Medici: MIT (no restrictions)
  • All choices compatible with commercial products

Repository References

Project Repository License Last Updated
Spliit https://github.com/spliit-app/spliit MIT Nov 2025
SplitPro https://github.com/oss-apps/split-pro MIT Nov 2025
Medici https://github.com/flash-oss/medici MIT Dec 2024
BigCapital https://github.com/bigcapitalhq/bigcapital AGPL-3.0 Dec 2024
IDURAR https://github.com/idurar/idurar-erp-crm AGPL-3.0 Sept 2024
Receipt Scanner https://github.com/danschultzer/receipt-scanner MIT 2024

Action Items

  • Evaluate Spliit vs SplitPro (PostgreSQL requirement)
  • Assess Medici complexity vs Spliit customization effort
  • Review AGPL implications with legal team
  • Prototype receipt scanning integration
  • Design yacht-specific data models
  • Evaluate multi-currency precision requirements
  • Plan captain approval workflow
  • Consider crew expense hierarchy needs

Report Prepared: November 13, 2025 Research Scope: GitHub, official documentation, live repositories Confidence Level: High (primary source verification)