Giter Site home page Giter Site logo

keepr's Introduction

Keepr

This Ruby gem provides a double entry accounting system for use in any Rails application. It stores all the data via ActiveRecord in the SQL database.

Build Status Code Climate Coverage Status

Features

  • Journal entries with two or more postings follow the Double Entry principle
  • Accounts (including subaccounts and groups)
  • Taxes
  • Cost centers
  • Balance sheets
  • Profit and loss statements
  • DATEV exports

Dependencies

  • Ruby 3.0+
  • Rails 6.1+ (including Rails 7.1)

Installation

Add this line to your application's Gemfile:

gem 'keepr'

And then execute:

$ bundle

Or install it yourself as:

$ gem install keepr

Getting started

After installation run the following:

rails g keepr:migration
rails db:migrate

This will create the database migration files and add new models.

Usage

Account

All accounting entries are stored inside "accounts", per standard accounting principles. To create an account, use the following format:

Keepr::Account.create!(number: 27, name: 'Software', kind: :asset)

"kind" is one of following values:

[asset liability revenue expense equity temporary]

Accounts can have "child" accounts. All entries posted in a child account will be shown in the "parent" account as well. To create a child account:

account_1400 = Keepr::Account.create!(number: 1400, name: 'Software', kind: :expense)
account_14001 = Keepr::Account.create!(number: 14001, name: 'Rails', parent: account_1400 , kind: :expense)

Accounts can be organised inside of groups:

group = Keepr::Group.create!(is_result: true, target: :liability, name: 'foo')
Keepr::Account.create!(number: 100, name: 'Trade payable', kind: :liability, keepr_group: group)

Groups also allow a parent/child hierarchy:

parent_group = Keepr::Group.create!(is_result: true, target: :liability, name: 'foo')
child_group = parent_group.children.create! name: 'Bar'

Journal

Simple journal:

simple_journal = Keepr::Journal.create keepr_postings_attributes: [
  { keepr_account: account_1000, amount: 100.99, side: 'debit' },
  { keepr_account: account_1200, amount: 100.99, side: 'credit' }
]

Complex journal:

complex_journal = Keepr::Journal.create keepr_postings_attributes: [
  { keepr_account: account_4920, amount: 8.40, side: 'debit' },
  { keepr_account: account_1576, amount: 1.60, side: 'debit' },
  { keepr_account: account_1600, amount: 10.00, side: 'credit' }
]

Entries can be locked for changing data:

simple_journal.update! permanent: true

Account balance

We can get an account balance as follows:

account_1000.balance

account_1000.balance(Date.today)

account_1000.balance(Date.yesterday...Date.today)

Tax account

// Create Tax account
Keepr::Account.create! number: 1776, name: 'Umsatzsteuer 19%', kind: :asset

tax = Keepr::Tax.create! name: 'USt19',
                       description: 'Umsatzsteuer 19%',
                       value: 19.0,
                       keepr_account: tax_account

// Create a sale account that links to the tax account
account = Keepr::Account.new number: 8400,
                             name: 'Erlöse 19% USt',
                             kind: :revenue,
                             keepr_tax: tax

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Similar projects

Copyright (c) 2013-2023 Georg Ledermann, released under the MIT license

keepr's People

Contributors

ledermann avatar aaroncraigie avatar apokalipto avatar martingerez avatar mdchaney avatar simonrentzke avatar hainam8x avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.