billingyard


Namebillingyard JSON
Version 1.1.0 PyPI version JSON
download
home_pagehttps://github.com/MartinVondrak/billing-yard
SummaryCLI invoice generator for business entities in the Czech republic
upload_time2024-05-01 16:18:29
maintainerNone
docs_urlNone
authorMartin Vondrák
requires_python>=3.9
licenseNone
keywords invoice cli generator
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Billing Yard

Billing Yard is an open source CLI tool written in Python 3 for generating invoices from [JSON](https://www.json.org)
for business entities in the Czech republic. It supports invoices for both VAT payers and non VAT payers.

If you like this software, please [buy me a coffee](https://www.buymeacoffee.com/martinvondrak).

## Installation

First, please note that the software has [WeasyPrint](https://weasyprint.org) as a dependency and WeasyPrint needs some
external third party libraries for correct functioning. The way to install these libraries will differ based on your
operating system. So first you need to install these dependencies according to the manual below, then you can install
Billing Yard itself.

The installation manual below expects you to know and understand how to work with [pip](https://pip.pypa.io)
and [Virtual Environment](https://docs.python.org/3/tutorial/venv.html).

### Linux

Below, you can find how to install external third party libraries on different Linux distributions.

#### Debian

Debian 11 Bullseye or newer

```shell
apt install python3-pip libpango-1.0-0 libpangoft2-1.0-0 libjpeg-dev libopenjp2-7-dev libffi-dev
```

#### Ubuntu

Ubuntu 20.04 Focal Fossa or newer

```shell
apt install python3-pip libpango-1.0-0 libharfbuzz0b libpangoft2-1.0-0 libffi-dev libjpeg-dev libopenjp2-7-dev
```

#### Fedora

Fedora 34 or newer

```shell
dnf install python3-pip pango gcc python3-devel gcc-c++ zlib-devel libjpeg-devel openjpeg2-devel libffi-devel
```

#### Archlinux

```shell
pacman -S python-pip pango gcc libjpeg-turbo openjpeg2
```

#### Alpine

Alpine Linux 3.14 or newer

```shell
apk add py3-pip gcc musl-dev python3-dev pango zlib-dev jpeg-dev openjpeg-dev g++ libffi-dev
```

### macOS

Installation on macOS is recommended via [Homebrew](https://brew.sh).

```shell
brew install python3 pango libffi
```

### Windows and further support

For installation on Windows or further support, please see the
official [WeasyPrint installation guide](https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#windows). But
please keep in mind that WeasyPrint must be installed as a dependency of Billing Yard and not directly using your OS
package manager.

### Installing Billing Yard

First you need to decide whether you want to use Virtual Environment or install Billing Yard globally. But note that
installing in Virtual Environment is always preferred way. Then just make sure you are using Python 3.9 or newer and
run following command, and you are done.

```shell
pip install billingyard
```

## Basic usage

First step is to create configuration and data source files for generating an invoice. All configuration and data
sources for an invoice are stored in JSON files. There are three schemas of JSON files, one for business entity (sender,
receiver), one for an invoice without VAT and one for an invoice with VAT. Then you can generate the invoice itself.

### Business entity

We create two business entities, sender (entity which issues the invoice) and receiver (entity which pays the invoice).

```json
{
  "company": "Company s.r.o.",
  "street": "Ulice 38",
  "city": "Praha",
  "zip_code": "100 00",
  "country": "Česká republika",
  "company_id": "00011000",
  "vat_id": "CZ00011000"
}
```

* **company** - the business name of the business entity
* **street** - the street in the address of the business entity
* **city** - the city in the address of the business entity
* **zip_code** - the zip code in the address of the business entity
* **country** - the country in the address of the business entity
* **company** - the identifier given by Czech authority of the business entity
* **vat_id** - the identifier for VAT purpose of the business entity
    * optional if business entity is not a VAT payer

### Invoice for a non VAT payer

Below you can find the self explaining example of a non VAT payer invoice with further description.

```json
{
  "invoice_number": "2021001",
  "issue_date": "01. 01. 2021",
  "due_date": "31. 01. 2021",
  "currency": "Kč",
  "bank": "Bank a.s.",
  "bank_account": "1234567890/1234",
  "payment_method": "bank transfer",
  "register_info": "Fyzická osoba zapsaná v živnostenském rejstříku.",
  "invoice_lines": [
    {
      "description": "software development",
      "unit": "hr",
      "quantity": 20,
      "unit_price": 1500
    }
  ]
}
```

* **invoice_number** - a unique identifier of the invoice
    * completely up to you, but keep in mind local policies from government
* **issue_date** - the date of issue of the invoice
    * optional, if not set current date is used
* **due_date** - the last day, when the invoice must be paid
* **currency** - the currency in which is the invoice issued
* **bank** - the bank of the sender business entity
* **bank_account** - the bank account number of the sender business entity
* **payment_method** - the agreed instrument to pay the invoice
    * e.g. bank transfer, cash, credit card
    * this text is directly rendered in the invoice
* **register_info** - the info about record in government registers of the sender business entity
    * the typical examples in Czech are "Fyzická osoba zapsaná v živnostenském rejstříku." or "Společnost je zapsána v
      obchodním rejstříku vedeném u Městského soudu v Praze, oddílu C, vložce 2396."
* **invoice_lines** - the list of items that are invoiced

Each invoice line consists of following properties.

* **description** - the name or more exhaustive description of the invoiced item
* **unit** - the unit which we can use to count the invoiced item
    * e.g. hour, piece, meter, square meter etc
* **quantity** - the amount of invoiced items in previously specified unit
* **unit_price** - the price of the invoiced item for one unit

All dates have `DD. MM. YYYY` format.

### Invoice for a VAT payer

Below you can find the self explaining example of a VAT payer invoice with further description.

```json
{
  "invoice_number": "2021001",
  "issue_date": "01. 01. 2021",
  "supply_date": "01. 01. 2021",
  "due_date": "31. 01. 2021",
  "currency": "Kč",
  "bank": "Bank a.s.",
  "bank_account": "1234567890/1234",
  "payment_method": "bank transfer",
  "register_info": "Fyzická osoba zapsaná v živnostenském rejstříku.",
  "invoice_lines": [
    {
      "description": "software development",
      "unit": "hr",
      "quantity": 20,
      "unit_price": 1500,
      "vat_rate": 0.21
    }
  ]
}
```

* **invoice_number** - a unique identifier of the invoice
    * completely up to you, but keep in mind local policies from government
* **issue_date** - the date of issue of the invoice
    * optional, if not set current date is used
* **supply_date** - the date of taxable supply
    * optional, if not set current date is used
* **due_date** - the last day, when the invoice must be paid
* **currency** - the currency in which is the invoice issued
* **bank** - the bank of the sender business entity
* **bank_account** - the bank account number of the sender business entity
* **payment_method** - the agreed instrument to pay the invoice
    * e.g. bank transfer, cash, credit card
    * this text is directly rendered in the invoice
* **register_info** - the info about record in government registers of the sender business entity
    * the typical examples in Czech are "Fyzická osoba zapsaná v živnostenském rejstříku." or "Společnost je zapsána v
      obchodním rejstříku vedeném u Městského soudu v Praze, oddílu C, vložce 2396."
* **invoice_lines** - the list of items that are invoiced

Each invoice line consists of following properties.

* **description** - the name or more exhaustive description of the invoiced item
* **unit** - the unit which we can use to count the invoiced item
    * e.g. hour, piece, meter, square meter etc
* **quantity** - the amount of invoiced items in previously specified unit
* **unit_price** - the price of the invoiced item for one unit without VAT
* **vat_rate** - the rate of VAT for this invoiced item

All dates have `DD. MM. YYYY` format.

### Generating an invoice

If you installed Billing Yard using Virtual Environment, just activate this environment and run one of the following
commands, depending on whether you are a VAT payer or not. If you installed Billing Yard globally, just run one of the
commands.

```shell
billingyard -s sender.json issue-invoice -i invoice.json -r receiver.json
```

The option `-s` expects path to JSON data file with information about a sender business entity. It can be omitted, if
its name is `sender.json` and it is located in the same directory from which is the command executed.

The option `-i` expects path to JSON data file with the invoice data.

The option `-r` expects path to JSON data file with information about a sender business entity.

```shell
billingyard -s sender.json issue-invoice -i invoice_vat.json -r receiver.json --vat
```

The option `--vat` is used to generate an invoice for a VAT payer sender business entity. Please do not forget, that in
this case, you have to also provide correct invoice JSON data file with all needed attributes.

## License

This software is released under MIT License and use other third party software.

* [Click](https://github.com/pallets/click/blob/main/LICENSE.txt)
* [Jinja2](https://github.com/pallets/jinja/blob/main/LICENSE.txt)
* [WeasyPrint](https://github.com/Kozea/WeasyPrint/blob/master/LICENSE)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/MartinVondrak/billing-yard",
    "name": "billingyard",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "invoice, cli, generator",
    "author": "Martin Vondr\u00e1k",
    "author_email": "martin@martinvondrak.cz",
    "download_url": "https://files.pythonhosted.org/packages/09/24/c3640385e49c513c4a5da29fdcde339d958685b4c5b51f1b32a525bfcfb3/billingyard-1.1.0.tar.gz",
    "platform": null,
    "description": "# Billing Yard\n\nBilling Yard is an open source CLI tool written in Python 3 for generating invoices from [JSON](https://www.json.org)\nfor business entities in the Czech republic. It supports invoices for both VAT payers and non VAT payers.\n\nIf you like this software, please [buy me a coffee](https://www.buymeacoffee.com/martinvondrak).\n\n## Installation\n\nFirst, please note that the software has [WeasyPrint](https://weasyprint.org) as a dependency and WeasyPrint needs some\nexternal third party libraries for correct functioning. The way to install these libraries will differ based on your\noperating system. So first you need to install these dependencies according to the manual below, then you can install\nBilling Yard itself.\n\nThe installation manual below expects you to know and understand how to work with [pip](https://pip.pypa.io)\nand [Virtual Environment](https://docs.python.org/3/tutorial/venv.html).\n\n### Linux\n\nBelow, you can find how to install external third party libraries on different Linux distributions.\n\n#### Debian\n\nDebian 11 Bullseye or newer\n\n```shell\napt install python3-pip libpango-1.0-0 libpangoft2-1.0-0 libjpeg-dev libopenjp2-7-dev libffi-dev\n```\n\n#### Ubuntu\n\nUbuntu 20.04 Focal Fossa or newer\n\n```shell\napt install python3-pip libpango-1.0-0 libharfbuzz0b libpangoft2-1.0-0 libffi-dev libjpeg-dev libopenjp2-7-dev\n```\n\n#### Fedora\n\nFedora 34 or newer\n\n```shell\ndnf install python3-pip pango gcc python3-devel gcc-c++ zlib-devel libjpeg-devel openjpeg2-devel libffi-devel\n```\n\n#### Archlinux\n\n```shell\npacman -S python-pip pango gcc libjpeg-turbo openjpeg2\n```\n\n#### Alpine\n\nAlpine Linux 3.14 or newer\n\n```shell\napk add py3-pip gcc musl-dev python3-dev pango zlib-dev jpeg-dev openjpeg-dev g++ libffi-dev\n```\n\n### macOS\n\nInstallation on macOS is recommended via [Homebrew](https://brew.sh).\n\n```shell\nbrew install python3 pango libffi\n```\n\n### Windows and further support\n\nFor installation on Windows or further support, please see the\nofficial [WeasyPrint installation guide](https://doc.courtbouillon.org/weasyprint/stable/first_steps.html#windows). But\nplease keep in mind that WeasyPrint must be installed as a dependency of Billing Yard and not directly using your OS\npackage manager.\n\n### Installing Billing Yard\n\nFirst you need to decide whether you want to use Virtual Environment or install Billing Yard globally. But note that\ninstalling in Virtual Environment is always preferred way. Then just make sure you are using Python 3.9 or newer and\nrun following command, and you are done.\n\n```shell\npip install billingyard\n```\n\n## Basic usage\n\nFirst step is to create configuration and data source files for generating an invoice. All configuration and data\nsources for an invoice are stored in JSON files. There are three schemas of JSON files, one for business entity (sender,\nreceiver), one for an invoice without VAT and one for an invoice with VAT. Then you can generate the invoice itself.\n\n### Business entity\n\nWe create two business entities, sender (entity which issues the invoice) and receiver (entity which pays the invoice).\n\n```json\n{\n  \"company\": \"Company s.r.o.\",\n  \"street\": \"Ulice 38\",\n  \"city\": \"Praha\",\n  \"zip_code\": \"100 00\",\n  \"country\": \"\u010cesk\u00e1 republika\",\n  \"company_id\": \"00011000\",\n  \"vat_id\": \"CZ00011000\"\n}\n```\n\n* **company** - the business name of the business entity\n* **street** - the street in the address of the business entity\n* **city** - the city in the address of the business entity\n* **zip_code** - the zip code in the address of the business entity\n* **country** - the country in the address of the business entity\n* **company** - the identifier given by Czech authority of the business entity\n* **vat_id** - the identifier for VAT purpose of the business entity\n    * optional if business entity is not a VAT payer\n\n### Invoice for a non VAT payer\n\nBelow you can find the self explaining example of a non VAT payer invoice with further description.\n\n```json\n{\n  \"invoice_number\": \"2021001\",\n  \"issue_date\": \"01. 01. 2021\",\n  \"due_date\": \"31. 01. 2021\",\n  \"currency\": \"K\u010d\",\n  \"bank\": \"Bank a.s.\",\n  \"bank_account\": \"1234567890/1234\",\n  \"payment_method\": \"bank transfer\",\n  \"register_info\": \"Fyzick\u00e1 osoba zapsan\u00e1 v \u017eivnostensk\u00e9m rejst\u0159\u00edku.\",\n  \"invoice_lines\": [\n    {\n      \"description\": \"software development\",\n      \"unit\": \"hr\",\n      \"quantity\": 20,\n      \"unit_price\": 1500\n    }\n  ]\n}\n```\n\n* **invoice_number** - a unique identifier of the invoice\n    * completely up to you, but keep in mind local policies from government\n* **issue_date** - the date of issue of the invoice\n    * optional, if not set current date is used\n* **due_date** - the last day, when the invoice must be paid\n* **currency** - the currency in which is the invoice issued\n* **bank** - the bank of the sender business entity\n* **bank_account** - the bank account number of the sender business entity\n* **payment_method** - the agreed instrument to pay the invoice\n    * e.g. bank transfer, cash, credit card\n    * this text is directly rendered in the invoice\n* **register_info** - the info about record in government registers of the sender business entity\n    * the typical examples in Czech are \"Fyzick\u00e1 osoba zapsan\u00e1 v \u017eivnostensk\u00e9m rejst\u0159\u00edku.\" or \"Spole\u010dnost je zaps\u00e1na v\n      obchodn\u00edm rejst\u0159\u00edku veden\u00e9m u M\u011bstsk\u00e9ho soudu v Praze, odd\u00edlu C, vlo\u017ece 2396.\"\n* **invoice_lines** - the list of items that are invoiced\n\nEach invoice line consists of following properties.\n\n* **description** - the name or more exhaustive description of the invoiced item\n* **unit** - the unit which we can use to count the invoiced item\n    * e.g. hour, piece, meter, square meter etc\n* **quantity** - the amount of invoiced items in previously specified unit\n* **unit_price** - the price of the invoiced item for one unit\n\nAll dates have `DD. MM. YYYY` format.\n\n### Invoice for a VAT payer\n\nBelow you can find the self explaining example of a VAT payer invoice with further description.\n\n```json\n{\n  \"invoice_number\": \"2021001\",\n  \"issue_date\": \"01. 01. 2021\",\n  \"supply_date\": \"01. 01. 2021\",\n  \"due_date\": \"31. 01. 2021\",\n  \"currency\": \"K\u010d\",\n  \"bank\": \"Bank a.s.\",\n  \"bank_account\": \"1234567890/1234\",\n  \"payment_method\": \"bank transfer\",\n  \"register_info\": \"Fyzick\u00e1 osoba zapsan\u00e1 v \u017eivnostensk\u00e9m rejst\u0159\u00edku.\",\n  \"invoice_lines\": [\n    {\n      \"description\": \"software development\",\n      \"unit\": \"hr\",\n      \"quantity\": 20,\n      \"unit_price\": 1500,\n      \"vat_rate\": 0.21\n    }\n  ]\n}\n```\n\n* **invoice_number** - a unique identifier of the invoice\n    * completely up to you, but keep in mind local policies from government\n* **issue_date** - the date of issue of the invoice\n    * optional, if not set current date is used\n* **supply_date** - the date of taxable supply\n    * optional, if not set current date is used\n* **due_date** - the last day, when the invoice must be paid\n* **currency** - the currency in which is the invoice issued\n* **bank** - the bank of the sender business entity\n* **bank_account** - the bank account number of the sender business entity\n* **payment_method** - the agreed instrument to pay the invoice\n    * e.g. bank transfer, cash, credit card\n    * this text is directly rendered in the invoice\n* **register_info** - the info about record in government registers of the sender business entity\n    * the typical examples in Czech are \"Fyzick\u00e1 osoba zapsan\u00e1 v \u017eivnostensk\u00e9m rejst\u0159\u00edku.\" or \"Spole\u010dnost je zaps\u00e1na v\n      obchodn\u00edm rejst\u0159\u00edku veden\u00e9m u M\u011bstsk\u00e9ho soudu v Praze, odd\u00edlu C, vlo\u017ece 2396.\"\n* **invoice_lines** - the list of items that are invoiced\n\nEach invoice line consists of following properties.\n\n* **description** - the name or more exhaustive description of the invoiced item\n* **unit** - the unit which we can use to count the invoiced item\n    * e.g. hour, piece, meter, square meter etc\n* **quantity** - the amount of invoiced items in previously specified unit\n* **unit_price** - the price of the invoiced item for one unit without VAT\n* **vat_rate** - the rate of VAT for this invoiced item\n\nAll dates have `DD. MM. YYYY` format.\n\n### Generating an invoice\n\nIf you installed Billing Yard using Virtual Environment, just activate this environment and run one of the following\ncommands, depending on whether you are a VAT payer or not. If you installed Billing Yard globally, just run one of the\ncommands.\n\n```shell\nbillingyard -s sender.json issue-invoice -i invoice.json -r receiver.json\n```\n\nThe option `-s` expects path to JSON data file with information about a sender business entity. It can be omitted, if\nits name is `sender.json` and it is located in the same directory from which is the command executed.\n\nThe option `-i` expects path to JSON data file with the invoice data.\n\nThe option `-r` expects path to JSON data file with information about a sender business entity.\n\n```shell\nbillingyard -s sender.json issue-invoice -i invoice_vat.json -r receiver.json --vat\n```\n\nThe option `--vat` is used to generate an invoice for a VAT payer sender business entity. Please do not forget, that in\nthis case, you have to also provide correct invoice JSON data file with all needed attributes.\n\n## License\n\nThis software is released under MIT License and use other third party software.\n\n* [Click](https://github.com/pallets/click/blob/main/LICENSE.txt)\n* [Jinja2](https://github.com/pallets/jinja/blob/main/LICENSE.txt)\n* [WeasyPrint](https://github.com/Kozea/WeasyPrint/blob/master/LICENSE)\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "CLI invoice generator for business entities in the Czech republic",
    "version": "1.1.0",
    "project_urls": {
        "Homepage": "https://github.com/MartinVondrak/billing-yard"
    },
    "split_keywords": [
        "invoice",
        " cli",
        " generator"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "449f8c747e34f3a581d0b261c1050a62b16da49931f69757bf1a11a4d539a569",
                "md5": "4e1486b28215a953d29c6509455ff3b3",
                "sha256": "baaa7a988c163fe26ba3d2e40ecd3a6546634f8b5acfcda043f4de68b094a993"
            },
            "downloads": -1,
            "filename": "billingyard-1.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "4e1486b28215a953d29c6509455ff3b3",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 12739,
            "upload_time": "2024-05-01T16:18:26",
            "upload_time_iso_8601": "2024-05-01T16:18:26.584835Z",
            "url": "https://files.pythonhosted.org/packages/44/9f/8c747e34f3a581d0b261c1050a62b16da49931f69757bf1a11a4d539a569/billingyard-1.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0924c3640385e49c513c4a5da29fdcde339d958685b4c5b51f1b32a525bfcfb3",
                "md5": "332d4952f04f052bc14fa4df1c14e5f8",
                "sha256": "1e535c941389641b1a717abb19cf47f74f3487d8c62ed3aff9c22a103ef8d661"
            },
            "downloads": -1,
            "filename": "billingyard-1.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "332d4952f04f052bc14fa4df1c14e5f8",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 13165,
            "upload_time": "2024-05-01T16:18:29",
            "upload_time_iso_8601": "2024-05-01T16:18:29.276584Z",
            "url": "https://files.pythonhosted.org/packages/09/24/c3640385e49c513c4a5da29fdcde339d958685b4c5b51f1b32a525bfcfb3/billingyard-1.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-01 16:18:29",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "MartinVondrak",
    "github_project": "billing-yard",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "billingyard"
}
        
Elapsed time: 0.23555s