Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Vinabike ERP is a modular back-office platform for bicycle workshops built with Flutter and Supabase. The application covers sales, purchases, inventory, CRM, accounting, and POS workflows while targeting desktop, web, and mobile deployments.
The app now supports Optical Character Recognition (OCR) to automatically extract data from purchase invoices and receipts. Simply photograph an invoice with your device camera or select an existing image, and the system automatically extracts:README 전문 보기 ↗Vinabike ERP is a modular back-office platform for bicycle workshops built with Flutter and Supabase. The application covers sales, purchases, inventory, CRM, accounting, and POS workflows while targeting desktop, web, and mobile deployments.
The app now supports Optical Character Recognition (OCR) to automatically extract data from purchase invoices and receipts. Simply photograph an invoice with your device camera or select an existing image, and the system automatically extracts:
How to use:
Technology: Google ML Kit Text Recognition v2 (free, offline on mobile, optimized for Chilean invoices)
Documentation:
docs/guides/OCR_USER_GUIDE.mddocs/guides/OCR_IMPLEMENTATION_GUIDE.mddocs/guides/OCR_QUICK_REFERENCE.mdPlatforms: Android, iOS, Web (Desktop support coming soon)
The sales module now mirrors the Zoho Books lifecycle: invoices move from borrador → enviado → pagado, supporting partial and full payments. A dedicated payments list keeps all receipts in sync with their source invoices.
sales_payments.sales_invoices.paid_amount and sales_invoices.balance.pagado when total paid ≥ total invoice; otherwise it remains enviado (or overdue if already vencida).The Supabase schema (supabase/sql/core_schema.sql) now includes:
paid_amount and balance columns on sales_invoices (back-filled via ALTER TABLE).recalculate_sales_invoice_payments(invoice_id) — idempotent helper that aggregates payments, refreshes balances, and normalises status transitions.create_sales_payment_journal_entry(payment) and delete_sales_payment_journal_entry(payment_id) — bookkeeping helpers that post or remove the double-entry accounting lines bound to the payment id.trg_sales_payments_change wired to handle_sales_payment_change() to recalc invoices and manage journal entries after INSERT, UPDATE, or DELETE events.Deployment: follow
docs/development/SUPABASE_WORKFLOW.md. Agents apply only the reviewed idempotent forward migration through the guarded database wrapper, verify it, and then register its history. Never pastecore_schema.sqlor fragments into the SQL Editor.
Invoice now exposes paidAmount and balance; Payment remains the payment entity.SalesService orchestrates invoices and payments, subscribes to Supabase realtime changes, recalculates invoice caches after each payment, and exposes helper queries for the UI.InvoiceListPage shows totals, paid amounts, and quick access to the detail view.InvoiceFormPage is the canonical routed invoice detail/editor; SalesInvoiceEditor is its embedded counterpart, and shared workflow actions must be used by both.PaymentForm provides validation, method selection, reference fields, and balance safeguards.PaymentsPage lists all receipts with search and deep links back to the originating invoice.Supabase realtime channels keep invoice and payment views in sync without manual refreshes. All actions share the shared widget system (MainLayout, buttons, search) to maintain UI consistency.
docs/development/SETUP_MACOS.md or docs/development/SETUP_WINDOWS.md.just doctor and resolve any reported blocker..env when needed. Private Supabase values use the
platform credential store described in
docs/development/SUPABASE_WORKFLOW.md.just verify-fast, then start the pinned SDK with scripts/dev/flutter.sh run.The canonical commands and versions are documented in docs/development/TOOLCHAIN.md.
Follow the project guidelines described in .github/copilot-instructions.md. When adding modules, remember to register their routes in lib/shared/routes/app_router.dart and expose entry points in the main navigation drawer.