Skip to main content

A CLI tool that assists in preparing the PIT-8C declaration based on the annual tax reports from your broker

Project description

PIT-8C

pit8c is a command-line tool that assists you in preparing the Polish PIT-8C declaration for investment income. It transforms raw broker reports into tax-ready documents by handling complex calculations, currency conversions, and FIFO trade matching - all while adhering to Polish tax regulations.


Table of Contents


Example Use Case

Marta, a Polish investor, made 200+ stock trades in 2024 through Freedom24, including US and EU stocks. Since Freedom24 is based in Cyprus, it doesn't generate a PIT-8C declaration. So Marta needs to:

  1. Match each sale to its original purchase (including partial closures)
  2. Convert all foreign amounts to PLN using NBP rates from transaction dates
  3. Calculate total income/costs for tax declaration
  4. Manually fill the PIT-8C declaration

With pit8c, she simply runs:

pit8c freedom24 ./reports --year 2024

The tool automatically:

  • Reads one XLSX report or a directory with multiple annual reports
  • Matches sales with purchases using FIFO
  • Applies correct NBP exchange rates (even for weekend trades)
  • Generates ready-to-submit PIT-8C (.pdf file)
  • Creates audit-ready XLSX with all calculations

No more spreadsheet errors or manual rate lookups. 🚀


Installation

  • Python 3.11 or later is required.

Using pip (from PyPi)

  1. Install via pip:

    pip install pit8c
    
  2. Now you can use the pit8c command:

    pit8c --help
    

Using uv (only for developers)

  1. Clone this repository:

    git clone https://github.com/iyazerski/pit8c.git
    cd pit8c
    
  2. Install dependencies via uv:

    uv sync
    
  3. To run the CLI:

    uv run pit8c --help
    

Usage

Processing an Annual Report

To calculate PIT-8C for a given tax year, pass either:

  • a single annual report .xlsx, or
  • a directory containing multiple annual reports .xlsx (recommended, so FIFO can match prior-year buys).
pit8c <broker> <reports_path> --year <tax_year>
  • broker: the broker’s name (lowercase).
  • reports_path: path to a single XLSX report or a directory with multiple reports.
  • tax_year: the year for which PIT-8C should be calculated (only positions with sell date in that year are included).

The tool will:

  1. Read one or more broker XLSX files.
  2. Convert all trades (buy and sell) into an internal unified structure based on ISIN and currency.
  3. Apply FIFO matching across all provided years to determine partial closures.
  4. Select only positions closed (sold) in the requested tax year.
  5. Compute income and costs for selected positions.
  6. Generate PIT-8C PDF report and save it near the input path.
  7. Print D section of PIT-8C report to console.
  8. Write the closed positions near the input file (for audit).

Example:

pit8c freedom24 ./reports --year 2025

Testing

We use pytest for testing. Critical logic parts are covered (e.g. FIFO algorithm, trades parsing).

To run the tests:

uv run pytest

Contributing

Contributions are welcome! Please open an issue or create a pull request:

  1. Fork the repository
  2. Create a feature branch
  3. Commit your changes
  4. Open a pull request towards the main branch.

Be sure to include tests to cover new functionality or bug fixes.


License

This project is licensed under the MIT License. See the LICENSE file for details.


Disclaimer: This tool is provided as-is. The authors and contributors are not responsible for any inaccuracies or omissions in the tax calculations. Always consult a certified tax adviser or official resources to verify the correctness of your tax returns.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pit8c-0.0.5.tar.gz (16.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pit8c-0.0.5-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

File details

Details for the file pit8c-0.0.5.tar.gz.

File metadata

  • Download URL: pit8c-0.0.5.tar.gz
  • Upload date:
  • Size: 16.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pit8c-0.0.5.tar.gz
Algorithm Hash digest
SHA256 1a2ce52d9562498c5f57c93db331b7fede11c80f6d65c56953c706310406af20
MD5 734bb389229270363ca6a0d66df7eb97
BLAKE2b-256 1162421083f19ce3f8e394a3fc0d3e84fa9bb2754aab331d217ea2efeabd4180

See more details on using hashes here.

Provenance

The following attestation bundles were made for pit8c-0.0.5.tar.gz:

Publisher: release.yml on iyazerski/pit8c

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pit8c-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: pit8c-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 17.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pit8c-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 28ec62d01775382ea14be4dc3a9610b9d8ebb529f7eda605f641bfed117afdca
MD5 aad0d848ae5c82a762ce4fc49c279afd
BLAKE2b-256 8d266719e15837564ebaa1b5474abb6447e276597f5346e9b8e0c7c429fc3efe

See more details on using hashes here.

Provenance

The following attestation bundles were made for pit8c-0.0.5-py3-none-any.whl:

Publisher: release.yml on iyazerski/pit8c

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page