Skip to content

s-mcdonald/LucaAccounts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Luca // Accounting

Source Source

Luca Accounting is a Double Entry Accounting system that can easily be implemented into your application. It validates and sorts transactions prior to committing them to your Database.

        // Create a Transaction
        $txn = new Transaction( $date , 'Capital Contribution', 
            [
                new TransactionLine($cash_account_1, 100.00,  00.00),
                new TransactionLine($eqty_account_2,  00.00, 100.00),                
            ]
        );

        // Process the Transaction
        $system->transact($txn);

Documentation

Features

  1. Follows Double Entry based accounting rules.
  2. Built-in validation of transactions.
  3. Sorts transaction (Dr|Cr) entries automatically prior to committing to the db.
  4. Separate Debit and Credit entries.

Installation

Via Composer. Run the following command from your project's root.

composer require s-mcdonald/luca-accounts

Dependencies

  • Php 8.1

Quick-Start

  1. Extend the abstract AccountSystem class and then Implement the AccountInterface to your Account model or entity.
      // Your\App\AccountSystem.php
      class AccountSystem extends \SamMcDonald\LucaAccounts\AbstractAccountSystem {
        ...
      }

      // Your\App\Account.php
      class Account implements \SamMcDonald\LucaAccounts\Contracts\AccountInterface {
        ...
      }

Example

<?php 

namespace Your\App;

use Your\App\AccountSystem;
use SamMcDonald\LucaAccounts\Components\Transaction;
use SamMcDonald\LucaAccounts\Components\TransactionLine;

class YourAccountingProgram
{
    public static function simpleTransaction() 
    {
        // Get a new instance of the Accounting System
        $system = new AccountSystem();

        // Register the transact function
        $system->register('transact', static function(Transaction $txn) {
             // Your logic to commit the transaction to DB
        });

        /*
         * Load the accounts you want to use in the Transaction.
         * This will most likely be a Model or Entity object.
         */
        $acc1 = Account::fetch('cash-account'); 
        $acc2 = Account::fetch('acc-rec-account'); 
        $acc3 = Account::fetch('inventory-account'); 

        /*
         * Make a purchase of stock request
         */
        $txn = new Transaction( new DateTimeImmutable('now') , 'Purchase of inventory', 
            [
                new TransactionLine($acc1, 000.00,  50.00),
                new TransactionLine($acc2, 000.00, 150.00),
                new TransactionLine($acc3, 200.00,   0.00),                 
            ]
        );

        /*
         * Perform the transaction
         */
        $system->transact($txn);
    } 
}

Files

s-mcdonald/luca-accounts/
            │    
            └ src/
              │    
              ├── Components/
              │   │
              │   ├── Transaction.php
              │   │            
              │   └── TransactionLine.php
              │            
              │            
              ├── Contracts/
              │   │
              │   ├── AccountInterface.php
              │   │            
              │   ├── TransactionInterface.php
              │   │
              │   └── TransactionLineInterface.php
              │            
              │  
              ├── Exceptions/
              │   │
              │   └── DoubleEntryException.php
              │   │
              │   └── InvalidTransactionLineEntryException.php
              │
              │
              ├── Enums/
              │   │
              │   └── AccountType.php 
              │    
              ├── Util/
              │   │
              │   └── EntryFormatter.php
              │
              │
              └── AbstractAccountSystem.php

License

Luca-Accounts is licensed under the terms of the MIT License (See LICENSE file for details).

Name of Luca

Luca-Accounting was named after Luca Pacioli (The father of Accounting). He popularized the DoubleEntry book-keeping system.