{"id":13879967,"url":"https://github.com/ledermann/keepr","last_synced_at":"2025-05-16T07:05:11.603Z","repository":{"id":11015929,"uuid":"13343696","full_name":"ledermann/keepr","owner":"ledermann","description":"Double entry bookkeeping with Ruby on Rails","archived":false,"fork":false,"pushed_at":"2024-12-29T10:07:44.000Z","size":230,"stargazers_count":112,"open_issues_count":2,"forks_count":25,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-05-14T11:11:21.474Z","etag":null,"topics":["accounting","rails","ruby"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ledermann.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-10-05T10:44:45.000Z","updated_at":"2025-05-01T05:05:36.000Z","dependencies_parsed_at":"2023-02-14T16:15:47.268Z","dependency_job_id":"48f505e4-b101-428f-a467-b1dfaf77038e","html_url":"https://github.com/ledermann/keepr","commit_stats":{"total_commits":227,"total_committers":5,"mean_commits":45.4,"dds":0.05726872246696035,"last_synced_commit":"78cf6273eda935769300e5ba2b22ee030ee41e54"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ledermann%2Fkeepr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ledermann%2Fkeepr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ledermann%2Fkeepr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ledermann%2Fkeepr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ledermann","download_url":"https://codeload.github.com/ledermann/keepr/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254485056,"owners_count":22078767,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["accounting","rails","ruby"],"created_at":"2024-08-06T08:02:41.251Z","updated_at":"2025-05-16T07:05:06.586Z","avatar_url":"https://github.com/ledermann.png","language":"Ruby","readme":"# Keepr\n\nThis 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.\n\n[![Build Status](https://github.com/ledermann/keepr/workflows/Test/badge.svg?branch=master)](https://github.com/ledermann/keepr/actions)\n[![Code Climate](https://codeclimate.com/github/ledermann/keepr/badges/gpa.svg)](https://codeclimate.com/github/ledermann/keepr)\n[![Coverage Status](https://coveralls.io/repos/github/ledermann/keepr/badge.svg?branch=master)](https://coveralls.io/github/ledermann/keepr?branch=master)\n\n## Features\n\n* Journal entries with two or more postings follow the [Double Entry](https://www.accountingcoach.com/blog/what-is-the-double-entry-system) principle\n* Accounts (including subaccounts and groups)\n* Taxes\n* Cost centers\n* Balance sheets\n* Profit and loss statements\n* DATEV exports\n\n\n## Dependencies\n\n* Ruby 3.1+\n* Rails 6.1+ (including Rails 8.0)\n\n## Installation\n\nAdd this line to your application's Gemfile:\n\n    gem 'keepr'\n\nAnd then execute:\n\n    $ bundle\n\nOr install it yourself as:\n\n    $ gem install keepr\n\n\n## Getting started\n\nAfter installation run the following:\n\n\trails g keepr:migration\n\trails db:migrate\n\nThis will create the database migration files and add new models.\n\n## Usage\n### Account\nAll accounting entries are stored inside \"accounts\", per standard accounting\nprinciples. To create an account, use the following format:\n\n\tKeepr::Account.create!(number: 27, name: 'Software', kind: :asset)\n\n\"kind\" is one of following values:\n\n\t[asset liability revenue expense forward debtor creditor]\n\nAccounts can have \"child\" accounts. All entries posted in a child account will\nbe shown in the \"parent\" account as well. To create a child account:\n\n\taccount_1400 = Keepr::Account.create!(number: 1400, name: 'Software', kind: :expense)\n\taccount_14001 = Keepr::Account.create!(number: 14001, name: 'Rails', parent: account_1400 , kind: :expense)\n\nAccounts can be organised inside of groups:\n\n\tgroup = Keepr::Group.create!(is_result: true, target: :liability, name: 'foo')\n\tKeepr::Account.create!(number: 100, name: 'Trade payable', kind: :liability, keepr_group: group)\n\nGroups also allow a parent/child hierarchy:\n\n\tparent_group = Keepr::Group.create!(is_result: true, target: :liability, name: 'foo')\n\tchild_group = parent_group.children.create! name: 'Bar'\n\n### Journal\n\n\nSimple journal:\n\n    simple_journal = Keepr::Journal.create keepr_postings_attributes: [\n      { keepr_account: account_1000, amount: 100.99, side: 'debit' },\n      { keepr_account: account_1200, amount: 100.99, side: 'credit' }\n    ]\n\n\nComplex journal:\n\n    complex_journal = Keepr::Journal.create keepr_postings_attributes: [\n      { keepr_account: account_4920, amount: 8.40, side: 'debit' },\n      { keepr_account: account_1576, amount: 1.60, side: 'debit' },\n      { keepr_account: account_1600, amount: 10.00, side: 'credit' }\n    ]\n\nEntries can be locked for changing data:\n\n\tsimple_journal.update! permanent: true\n\n\n### Account balance\nWe can get an account balance as follows:\n\n\taccount_1000.balance\n\n\taccount_1000.balance(Date.today)\n\n\taccount_1000.balance(Date.yesterday...Date.today)\n\n### Tax account\n\n\t// Create Tax account\n\tKeepr::Account.create! number: 1776, name: 'Umsatzsteuer 19%', kind: :asset\n\n\ttax = Keepr::Tax.create! name: 'USt19',\n\t                       description: 'Umsatzsteuer 19%',\n\t                       value: 19.0,\n\t                       keepr_account: tax_account\n\n\t// Create a sale account that links to the tax account\n\taccount = Keepr::Account.new number: 8400,\n                                 name: 'Erlöse 19% USt',\n                                 kind: :revenue,\n                                 keepr_tax: tax\n\n\n\n\n## Contributing\n\n1. Fork it\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create new Pull Request\n\n\n## Similar projects\n\n* https://github.com/mbulat/plutus\n* https://github.com/betterplace/acts_as_account\n* https://github.com/steveluscher/bookkeeper\n* https://github.com/mstrauss/double-entry-accounting\n* https://github.com/logicleague/double_booked\n* https://github.com/telent/pacioli\n* https://github.com/astrails/deb\n* https://github.com/bigfleet/accountable\n\n\nCopyright (c) 2013-2024 [Georg Ledermann](https://ledermann.dev), released under the MIT license\n","funding_links":[],"categories":["Ruby"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fledermann%2Fkeepr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fledermann%2Fkeepr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fledermann%2Fkeepr/lists"}