# Castle Accounting Extension for LNbits

A full-featured double-entry accounting system for collective projects, integrated with LNbits Lightning payments.

## Overview

Castle Accounting 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 castle 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 Castle 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 Castle owns (Cash, Bank, Accounts Receivable)
- **Liabilities**: What the Castle owes (Accounts Payable to members)
- **Equity**: Member contributions and retained earnings
- **Revenue**: Income streams
- **Expenses**: Operating costs

### Database Schema

The extension creates three tables:
- `castle.accounts` - Chart of accounts
- `castle.journal_entries` - Transaction headers
- `castle.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/castle/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!
