forked from aiolabs/libra
Full identifier rename: module path lnbits.extensions.castle →
lnbits.extensions.libra, DB ext_castle → ext_libra, URL prefix
/castle/ → /libra/, manifest id castle → libra, fava ledger slug
default castle-ledger → libra-ledger, Beancount source metadata
castle-api → libra-api and link prefixes castle-{entry,tx}- →
libra-{entry,tx}-, column castle_wallet_id → libra_wallet_id, all
Python/JS/HTML identifiers (castle_ext, CastleSettings,
castle_reference, castleWalletConfigured, etc.).
Display name "Castle Accounting" → "Libra" (the scales/balance
metaphor — fits double-entry bookkeeping).
No backward compat: production hosts will be force-updated. Old
castle-prefixed Beancount metadata in existing Fava ledgers is
historical; new entries use libra-* prefixes going forward.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
93 lines
2.6 KiB
Markdown
93 lines
2.6 KiB
Markdown
# Libra Extension for LNbits
|
|
|
|
A full-featured double-entry accounting system for collective projects, integrated with LNbits Lightning payments.
|
|
|
|
## Overview
|
|
|
|
Libra enables collectives like co-living spaces, makerspaces, and community projects to:
|
|
- Track expenses and revenue with proper accounting
|
|
- Manage individual member balances
|
|
- Record contributions as equity or reimbursable expenses
|
|
- Track accounts receivable (what members owe)
|
|
- Generate Lightning invoices for settlements
|
|
|
|
## Installation
|
|
|
|
This extension is designed to be installed in the `lnbits/extensions/` directory.
|
|
|
|
```bash
|
|
cd lnbits/extensions/
|
|
# Copy or clone the libra directory here
|
|
```
|
|
|
|
Enable the extension through the LNbits admin interface or by adding it to your configuration.
|
|
|
|
## Usage
|
|
|
|
### For Members
|
|
|
|
1. **Add an Expense**: Record money you spent on behalf of the collective
|
|
- Choose "Liability" if you want reimbursement
|
|
- Choose "Equity" if it's a contribution
|
|
|
|
2. **View Your Balance**: See if the Libra owes you money or vice versa
|
|
|
|
3. **Pay Outstanding Balance**: Generate a Lightning invoice to settle what you owe
|
|
|
|
### For Admins
|
|
|
|
1. **Create Accounts Receivable**: Record when someone owes the collective money
|
|
|
|
2. **Record Revenue**: Track income received by the collective
|
|
|
|
3. **View All Transactions**: See complete accounting history
|
|
|
|
4. **Make Payments**: Record payments to members
|
|
|
|
## Architecture
|
|
|
|
### Data Models
|
|
|
|
- **Account**: Individual accounts in the chart of accounts
|
|
- **JournalEntry**: Transaction header with description and date
|
|
- **EntryLine**: Individual debit/credit lines (always balanced)
|
|
|
|
### Account Types
|
|
|
|
- **Assets**: Things the Libra owns (Cash, Bank, Accounts Receivable)
|
|
- **Liabilities**: What the Libra owes (Accounts Payable to members)
|
|
- **Equity**: Member contributions and retained earnings
|
|
- **Revenue**: Income streams
|
|
- **Expenses**: Operating costs
|
|
|
|
### Database Schema
|
|
|
|
The extension creates three tables:
|
|
- `libra.accounts` - Chart of accounts
|
|
- `libra.journal_entries` - Transaction headers
|
|
- `libra.entry_lines` - Debit/credit lines
|
|
|
|
## API Reference
|
|
|
|
See [description.md](description.md) for full API documentation.
|
|
|
|
## Development
|
|
|
|
To modify this extension:
|
|
|
|
1. Edit models in `models.py`
|
|
2. Add database migrations in `migrations.py`
|
|
3. Implement business logic in `crud.py`
|
|
4. Create API endpoints in `views_api.py`
|
|
5. Update UI in `templates/libra/index.html`
|
|
|
|
## Contributing
|
|
|
|
Contributions welcome! Please ensure:
|
|
- Journal entries always balance
|
|
- User permissions are properly checked
|
|
- Database transactions are atomic
|
|
|
|
## License
|
|
|
|
MIT License - feel free to use and modify for your collective!
|