PHPackages                             neam/php-sie - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. neam/php-sie

ActiveLibrary

neam/php-sie
============

PHP port of https://github.com/barsoom/sie

3.3.3.1(9y ago)9104.3k—0%3MITPHPPHP &gt;=5.6.5

Since Sep 21Pushed 8y ago2 watchersCompare

[ Source](https://github.com/neam/php-sie)[ Packagist](https://packagist.org/packages/neam/php-sie)[ Docs](https://github.com/neam/php-sie)[ RSS](/packages/neam-php-sie/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (2)Versions (4)Used By (0)

PHP Library: SIE
================

[](#php-library-sie)

Parser and generator for SIE files ().

PHP port of

Current implementation requires PHP 5.6.5 or greater.

Installation
------------

[](#installation)

Via composer:

```
composer require neam/php-sie

```

Generating a SIE file
---------------------

[](#generating-a-sie-file)

To generate a SIE document you first need to define a class that implements \\sie\\document\\IDataSource or extends abstract class \\sie\\document\\DataSource.

```
$mySieFileDataSource = new MySieFileDataSource($this);
$sieFileDocument = $mySieFileDataSource->generateSieDocument();
$sieFileContents = $sieFileDocument->render();
file_put_contents('sie_file.se', $sieFileContents);
```

Check the files in tests/unit/\*Test.php for more examples.

Parsing a SIE file
------------------

[](#parsing-a-sie-file)

You can parse sie data from anything that responds to `each_line` like a file or a string.

```
$file_contents = file_get_contents('sie_file.se');
$parser = new \sie\Parser();
$sie_file = $parser->parseSieFileContents($file_contents);
return $this->parse($data);

// The company name
puts sie_file.entries_with_label("fnamn").first.attributes["foretagsnamn"]

// The first account number
puts sie_file.entries_with_label("konto").first.attributes["kontonr"]
```

The parser expects file contents in CP437 encoding (the official encoding of the SIE file format). If you want to parse UTF8 strings, use the "parse" method:

```
$sie_file = $parser->parse($utf8_string);
```

By default the parser will raise an error if it encounters unknown entry types. Use the `lenient` option to avoid this:

```
$parser = new \sie\Parser(["lenient" => true]);
```

Check the files in tests/integration/\*Test.php for more examples.

Developing
----------

[](#developing)

First time setup:

```
composer install

```

Running tests:

```
vendor/bin/codecept build
vendor/bin/codecept run

```

Tests sample output:

```
# vendor/bin/codecept run --debug
Codeception PHP Testing Framework v2.2.4
Powered by PHPUnit 5.4.8 by Sebastian Bergmann and contributors.

Integration Tests (8) ----------------------------------------------------------------------------------------------
Modules: \Helper\Integration
--------------------------------------------------------------------------------------------------------------------
✔ FileParserTest: Parses a file (0.07s)
✔ FileParserTest: Parses a file with unknown entries using a lenient parser (0.01s)
✔ FileParserTest: Parses a file with unknown entries using a strict parser (0.05s)
✔ Fortnox21FileParserTest: Parses sie1 se file (0.09s)
✔ Fortnox21FileParserTest: Parses sie2 se file (0.25s)
✔ Fortnox21FileParserTest: Parses sie3 se file (0.27s)
✔ Fortnox21FileParserTest: Parses sie4 se file (0.51s)
✔ Fortnox21FileParserTest: Parses sie4 si file (0.29s)
--------------------------------------------------------------------------------------------------------------------

Unit Tests (39) ----------------------------------------------------------------------------------------------------
Modules: \Helper\Unit
--------------------------------------------------------------------------------------------------------------------
✔ BuildEntryTest: Call (0.05s)
✔ BuildEntryTest: Call with an unquoted zero string (0.00s)
✔ BuildEntryTest: Call with short dimensions array (0.00s)
✔ BuildEntryTest: Call with long dimensions array (0.00s)
✔ BuildEntryTest: Call with simple attribute (0.00s)
✔ BuildEntryTest: Call with an unexpected token at start of array (0.00s)
✔ DocumentTest: Adds a header (0.02s)
✔ DocumentTest: Has accounting years (0.01s)
✔ DocumentTest: Has accounts (0.01s)
✔ DocumentTest: Has dimensions (0.01s)
✔ DocumentTest: Has objects (0.01s)
✔ DocumentTest: Has balances brought forward (0.01s)
✔ DocumentTest: Has balances carried forward (0.01s)
✔ DocumentTest: Has closing account balances (0.01s)
✔ DocumentTest: Has vouchers (0.01s)
✔ DocumentTest: Truncates really long descriptions (0.01s)
✔ DocumentTest: Ensures there are at least two lines with a zeroed single voucher line (0.01s)
✔ DocumentTest: Reads the series from the voucher with a series defined (0.01s)
✔ ParserTest: Parses sie data that includes arrays (0.00s)
✔ ParserTest: Handles leading whitespace (0.00s)
✔ RendererTest: Replaces input of the wrong encoding with questionmark (0.00s)
✔ VoucherSeriesTest: Self for | #0 (0.00s)
✔ VoucherSeriesTest: Self for | #1 (0.00s)
✔ VoucherSeriesTest: Self for | #2 (0.00s)
✔ VoucherSeriesTest: Self for | #3 (0.00s)
✔ VoucherSeriesTest: Self for | #4 (0.00s)
✔ LineParserTest: It parses lines from a sie file (0.00s)
✔ LineParserTest: Using a lenient parser it raises no error when encountering unknown entries (0.00s)
✔ LineParserTest: Using a strict parser it raises error when encountering unknown entries (0.00s)
✔ TokenizerTest: Tokenizes the given line (0.00s)
✔ TokenizerTest: Can parse metadata arrays (0.00s)
✔ TokenizerTest: Handles escaped quotes in quoted strings (0.00s)
✔ TokenizerTest: Handles escaped quotes in non quoted strings (0.00s)
✔ TokenizerTest: Handles escaped backslash in strings (0.00s)
✔ TokenizerTest: Has reasonable behavior for consecutive escape characters (0.00s)
✔ TokenizerTest: Handles tab character as field separator (0.00s)
✔ TokenizerTest: Handles unquoted zeros (0.01s)
✔ TokenizerTest: Handles transaction with dimension array (0.00s)
✔ TokenizerTest: Rejects control characters (0.00s)
--------------------------------------------------------------------------------------------------------------------

Time: 2.84 seconds, Memory: 12.00MB

OK (47 tests, 133 assertions)

```

###  Health Score

36

—

LowBetter than 82% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity38

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~13 days

Total

2

Last Release

3503d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/d71e1dd8ef0c10991227f77fbc40e68504121455a0ec42e3ae7d05630f47605c?d=identicon)[motin](/maintainers/motin)

---

Top Contributors

[![motin](https://avatars.githubusercontent.com/u/793037?v=4)](https://github.com/motin "motin (26 commits)")

---

Tags

phpSIE

###  Code Quality

TestsCodeception

### Embed Badge

![Health badge](/badges/neam-php-sie/health.svg)

```
[![Health](https://phpackages.com/badges/neam-php-sie/health.svg)](https://phpackages.com/packages/neam-php-sie)
```

###  Alternatives

[pestphp/pest-plugin-stressless

Stressless plugin for Pest

67792.6k16](/packages/pestphp-pest-plugin-stressless)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
