PHPackages                             samhk222/sinacor-parser - 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. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. samhk222/sinacor-parser

ActiveLibrary[Parsing &amp; Serialization](/categories/parsing)

samhk222/sinacor-parser
=======================

Parser de notas de corretagem no padrão SINACOR (B3) para PHP

v1.1.0(1mo ago)011↓80%MITPHPPHP ^8.1

Since Jun 10Pushed 1mo agoCompare

[ Source](https://github.com/samhk222/sinacor-parser)[ Packagist](https://packagist.org/packages/samhk222/sinacor-parser)[ RSS](/packages/samhk222-sinacor-parser/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (12)Versions (5)Used By (0)

sinacor-parser
==============

[](#sinacor-parser)

Parser de **notas de corretagem** no padrão **SINACOR (B3)** para PHP 8.2+.

Extrai notas, movimentações, ativos e resumo financeiro de PDFs de corretoras brasileiras.

---

Instalação
----------

[](#instalação)

```
composer require samhk222/sinacor-parser
```

> Requer `pdftotext` instalado no sistema (pacote `poppler-utils`):
>
> ```
> sudo apt install poppler-utils   # Ubuntu/Debian
> brew install poppler             # macOS
> ```

---

Uso básico
----------

[](#uso-básico)

```
use Samhk222\SinacorParser\NubankParser;

$parser = new NubankParser();

// Todas as movimentações
$movements = $parser->movements('/caminho/para/nota.pdf');

foreach ($movements as $m) {
    echo $m->brokerAsset . ' | ' . $m->operation->value . ' | ' . $m->quantity;
}
```

---

Mapeamento de ativos
--------------------

[](#mapeamento-de-ativos)

O nome do ativo na nota (`ISHARE SP500 CI`) difere do ticker oficial (`IVVB11`).
Use um **resolver** para fazer esse mapeamento:

### Via array PHP

[](#via-array-php)

```
use Samhk222\SinacorParser\NubankParser;
use Samhk222\SinacorParser\Resolvers\ConfigAssetResolver;

$resolver = new ConfigAssetResolver([
    'ISHARE SP500 CI' => ['ticker' => 'IVVB11', 'type' => 'ETF'],
    'IT NOW IDIV'     => ['ticker' => 'IDIV11', 'type' => 'ETF'],
    'GARE REND'       => ['ticker' => 'GARE11', 'type' => 'FII'],
]);

$parser = new NubankParser($resolver);
```

### Via CSV

[](#via-csv)

```
use Samhk222\SinacorParser\Resolvers\CsvAssetResolver;

$resolver = new CsvAssetResolver(__DIR__ . '/assets.csv');
$parser   = new NubankParser($resolver);
```

Formato do CSV (`broker_asset,ticker,type`):

```
broker_asset,ticker,type
ISHARE SP500 CI,IVVB11,ETF
GARE REND,GARE11,FII
```

### Encadeando resolvers

[](#encadeando-resolvers)

```
use Samhk222\SinacorParser\Resolvers\ChainAssetResolver;

$resolver = new ChainAssetResolver(
    new ConfigAssetResolver($myMap),       // tenta primeiro
    new CsvAssetResolver('assets.csv'),    // fallback
);
```

---

Métodos disponíveis
-------------------

[](#métodos-disponíveis)

```
$parser->notes($pdf);           // BrokerageNote[]
$parser->movements($pdf);       // Movement[]
$parser->assets($pdf);          // string[] — tickers únicos
$parser->unmappedAssets($pdf);  // string[] — ativos sem ticker
$parser->summary($pdf);         // ImportSummary
```

---

Exemplo de retorno — `movements()`
----------------------------------

[](#exemplo-de-retorno--movements)

```
[
    [
        'movement_hash'  => 'abc123...',
        'broker'         => 'NUBANK',
        'note_number'    => '25090',
        'trade_date'     => '2025-06-10',
        'broker_asset'   => 'ISHARE SP500 CI',
        'ticker'         => 'IVVB11',
        'ticker_mapped'  => true,
        'mapping_source' => 'config',
        'asset_type'     => 'ETF',
        'operation'      => 'BUY',
        'quantity'       => 2,
        'unit_price'     => 376.10,
        'gross_amount'   => 752.20,
    ],
]
```

---

Exemplo de retorno — `summary()`
--------------------------------

[](#exemplo-de-retorno--summary)

```
[
    'total_notes'     => 1,
    'total_movements' => 3,
    'total_unmapped'  => 0,
    'unmapped_assets' => [],
]
```

---

Corretoras suportadas
---------------------

[](#corretoras-suportadas)

CorretoraStatusNubank✅ v0.1XP🔜 v0.2Rico🔜 v0.2Clear🔜 v0.2BTG🔜 v0.3Inter🔜 v0.3Todas seguem o padrão SINACOR — cerca de 80% da lógica é compartilhada.
Contribuições são bem-vindas!

---

Adicionando uma nova corretora
------------------------------

[](#adicionando-uma-nova-corretora)

Crie uma classe que estende `AbstractSinacorParser` e implemente:

```
class XPParser extends AbstractSinacorParser
{
    public const BROKER = 'XP';

    protected function parseNote(string $content): BrokerageNote { ... }
    protected function extractHeader(string $content): array     { ... }
    protected function extractTrades(string $content): array     { ... }
    protected function extractSummary(string $content): array    { ... }
}
```

---

Desenvolvimento
---------------

[](#desenvolvimento)

```
composer install
composer test    # Pest
composer stan    # PHPStan level 8
composer check   # stan + test
```

---

Licença
-------

[](#licença)

MIT © [Samuel Ferreira](https://github.com/samhk222)

###  Health Score

40

—

FairBetter than 86% of packages

Maintenance92

Actively maintained with recent releases

Popularity7

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity45

Maturing project, gaining track record

 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 ~3 days

Total

3

Last Release

39d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/0f2f92b9e6c3764e3db1ca240f1b39adce81a90d8e178261a1f842c74d80daa4?d=identicon)[samhk222](/maintainers/samhk222)

---

Top Contributors

[![samuca-renewed](https://avatars.githubusercontent.com/u/143011168?v=4)](https://github.com/samuca-renewed "samuca-renewed (4 commits)")

---

Tags

b3notasinacorcorretagembovespanubankinvestimentos

###  Code Quality

TestsPest

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/samhk222-sinacor-parser/health.svg)

```
[![Health](https://phpackages.com/badges/samhk222-sinacor-parser/health.svg)](https://phpackages.com/packages/samhk222-sinacor-parser)
```

###  Alternatives

[spatie/laravel-sitemap

Create and generate sitemaps with ease

2.6k16.6M151](/packages/spatie-laravel-sitemap)[statamic/cms

The Statamic CMS Core Package

4.8k3.6M1.0k](/packages/statamic-cms)[bitrix24/b24phpsdk

An official PHP library for the Bitrix24 REST API

10244.2k5](/packages/bitrix24-b24phpsdk)[pimcore/studio-backend-bundle

Pimcore Studio Backend Bundle

20203.9k22](/packages/pimcore-studio-backend-bundle)[lion/bundle

Lion-framework configuration and initialization package

122.4k4](/packages/lion-bundle)[japanese-date/japanese-date

日本の暦、祝日を取り扱うライブラリ

1610.0k](/packages/japanese-date-japanese-date)

PHPackages © 2026

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