PHPackages                             onsoftadilsonjose/agt - 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. [Payment Processing](/categories/payments)
4. /
5. onsoftadilsonjose/agt

ActiveLibrary[Payment Processing](/categories/payments)

onsoftadilsonjose/agt
=====================

Pacote AGT de Faturação Eletrónica para Angola — Laravel 10/11/12 — compatível com multi-tenant

00PHP

Since Jun 18Pushed todayCompare

[ Source](https://github.com/onsoftAdilsonjose/onsoft-agt)[ Packagist](https://packagist.org/packages/onsoftadilsonjose/agt)[ RSS](/packages/onsoftadilsonjose-agt/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

Onsoft AGT — Faturação Eletrónica Angola
========================================

[](#onsoft-agt--faturação-eletrónica-angola)

**Pacote Laravel 10/11/12 para integração com o sistema AGT de Angola**

> Desenvolvedor: **Adilson Miguel**Email: Telefone: 2068417074

---

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

[](#instalação)

```
composer require onsoft/agt
php artisan onsoft-agt:instalar
```

---

Variáveis de Ambiente (.env)
----------------------------

[](#variáveis-de-ambiente-env)

```
AGT_AMBIENTE=sandbox          # sandbox | producao
AGT_MULTI_TENANT=true         # true para multi-organização
AGT_NOME_SOFTWARE=MeuSistema
AGT_VERSAO_SOFTWARE=1.0.0
AGT_MOEDA_PADRAO=AOA
AGT_TAXA_IVA_PADRAO=14
```

---

Utilização
----------

[](#utilização)

### Criar Fatura (com múltiplos pagamentos e estudantes)

[](#criar-fatura-com-múltiplos-pagamentos-e-estudantes)

```
use Onsoft\Agt\Servicos\ServicoFatura;

$fatura = app(ServicoFatura::class)->criar([
    'document_type'  => 'FR',           // FT | FR | FS | NC | ND | RC
    'customer_nif'   => '500123456',    // ou null → Consumidor Final
    'customer_name'  => 'João Silva',
    'encarregadoId'  => 42,

    // Múltiplos itens com diferentes estudantes
    'items' => [
        [
            'description'    => 'Propina — Outubro 2026',
            'quantity'       => 1,
            'unit_price'     => 50000,
            'tax_code'       => 'ISE',   // isento
            'tax_percentage' => 0,
            'alunoId'        => 101,     // estudante A
        ],
        [
            'description'    => 'Material Escolar',
            'quantity'       => 2,
            'unit_price'     => 5000,
            'tax_code'       => 'IVA',
            'tax_percentage' => 14,
            'alunoId'        => 102,     // estudante B
        ],
    ],

    // Múltiplos meios de pagamento
    'payments' => [
        [
            'method_code' => 'NU',       // Numerário
            'amount'      => 40000,
        ],
        [
            'method_code' => 'wallet',   // Carteira do encarregado
            'amount'      => 20000,
        ],
    ],
    // Troco (60000 - 60000 = 0) ou crédito se totalPago > grossTotal
], $organizacaoId);
```

### Gerar PDF em Memória (nunca guardado em disco)

[](#gerar-pdf-em-memória-nunca-guardado-em-disco)

```
// Stream directo para o browser
Route::get('/faturas/{id}/pdf', function($id, ServicoPdf $pdf) {
    $fatura = Invoice::findOrFail($id);
    return $pdf->gerarStream($fatura); // application/pdf inline
});

// Base-64 para o frontend
Route::get('/faturas/{id}/pdf-base64', function($id, ServicoPdf $pdf) {
    $fatura = Invoice::findOrFail($id);
    return response()->json($pdf->gerarBase64($fatura));
});
```

**No frontend React/Vue:**

```
// Receber base64 e abrir sem guardar
const { base64, nome_ficheiro } = await api.get(`/faturas/${id}/pdf-base64`).then(r => r.data.dados);
const url = `data:application/pdf;base64,${base64}`;
window.open(url); // abre no browser sem guardar
// ou
document.getElementById('visor').src = url; //
```

### Formato do PDF por Configuração

[](#formato-do-pdf-por-configuração)

O sistema lê automaticamente a tabela `invoice_print_configs`:

ConfiguraçãoComportamentoSem registo na BDA4 por defeito`paper_size = 'A4'`Layout A4 completo com logo, tabelas, QR`paper_size = '88mm'`Layout térmico 88mm (largura)`paper_size = '58mm'`Layout térmico 58mm (estreito)`show_logo = false`Sem logótipo`show_qr_code = true`Com QR Code AGT---

Tipos de Documento
------------------

[](#tipos-de-documento)

CódigoNomeComportamento`FT`FaturaCreditAmount nas linhas`FR`Fatura-ReciboDeve estar totalmente pago`FS`Fatura SimplificadaSem NIF do cliente`NC`Nota de CréditoDebitAmount, gerada automaticamente ao cancelar FR`ND`Nota de DébitoCreditAmount`RC`ReciboSem assinatura AGT---

Regras AGT Implementadas (Decreto Executivo Angola)
---------------------------------------------------

[](#regras-agt-implementadas-decreto-executivo-angola)

✅ Hash RSA-SHA1: `InvoiceDate;SystemEntryDate;InvoiceNo;GrossTotal;HashAnterior`✅ Hash Control: posições 1.ª, 11.ª, 21.ª, 31.ª do hash impresso na fatura ✅ Linha impressa: `XxXx-Processado por programa validado nº 0000/AGT`✅ RC (Recibo): `Emitido por programa validado nº 0000/AGT`✅ Numeração sequencial e contínua por série e ano fiscal ✅ NC usa DebitAmount; FT/FR/FS/ND usam CreditAmount ✅ Documentos sem valor de IVA exibem "Isento" com código de isenção ✅ Consumidor Final impresso quando NIF não fornecido ✅ PDF sem valores negativos (NC com DebitAmount) ✅ Multi-tenant: chaves encriptadas com `APP_KEY` via `Crypt`

---

Comandos Artisan
----------------

[](#comandos-artisan)

```
php artisan onsoft-agt:instalar           # Instalação inicial
php artisan onsoft-agt:estado             # Estado de todas as organizações
php artisan onsoft-agt:sincronizar-series # Sincronizar séries da AGT
php artisan onsoft-agt:retentar-falhas    # Retentar faturas com falha
```

---

Rotas Incluídas
---------------

[](#rotas-incluídas)

MétodoURIDescrição`POST``/onsoft-agt/faturas`Criar fatura`POST``/onsoft-agt/faturas/pre-visualizar`Pré-visualizar totais`GET``/onsoft-agt/faturas/{id}/pdf`PDF stream`GET``/onsoft-agt/faturas/{id}/pdf-base64`PDF base64`POST``/onsoft-agt/faturas/{id}/submeter`Submeter à AGT`POST``/onsoft-agt/faturas/{id}/cancelar`Cancelar fatura`GET``/onsoft-agt/faturas/{id}/estado`Estado na AGT`POST``/onsoft-agt/series/sincronizar`Sincronizar séries`GET``/onsoft-agt/configuracao/validar`Validar configuração---

Compatibilidade com o Projecto V-TEST
-------------------------------------

[](#compatibilidade-com-o-projecto-v-test)

Este pacote é 100% compatível com a estrutura do projecto:

- Usa os modelos existentes: `Invoice`, `InvoiceItem`, `InvoiceItemTax`, `InvoicePayment`, `AgtSeries`, `OrganizationAgtConfig`
- Usa as tabelas existentes (não cria duplicados)
- Mantém a API pública do `AgtSeriesService` (compatível com `ensureFiscalYearSeries`, `nextDocumentNumber`)
- Usa o `BelongsToOrganization` global scope automaticamente
- Usa o `SubmitInvoiceToAgtJob` existente
- Lê `InvoicePrintConfig` da tabela `invoice_print_configs`

---

*Onsoft AGT v1.0.0 — Adilson Miguel — *

###  Health Score

20

—

LowBetter than 13% of packages

Maintenance65

Regular maintenance activity

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 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.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/70519246?v=4)[Adilson Jose Miguel](/maintainers/onsoftAdilsonjose)[@onsoftAdilsonjose](https://github.com/onsoftAdilsonjose)

---

Top Contributors

[![onsoftAdilsonjose](https://avatars.githubusercontent.com/u/70519246?v=4)](https://github.com/onsoftAdilsonjose "onsoftAdilsonjose (2 commits)")

### Embed Badge

![Health badge](/badges/onsoftadilsonjose-agt/health.svg)

```
[![Health](https://phpackages.com/badges/onsoftadilsonjose-agt/health.svg)](https://phpackages.com/packages/onsoftadilsonjose-agt)
```

###  Alternatives

[omnipay/coinbase

Coinbase driver for the Omnipay payment processing library

18570.2k1](/packages/omnipay-coinbase)[oxid-esales/amazon-pay-module

AmazonPay module for OXID

1824.3k](/packages/oxid-esales-amazon-pay-module)[yenepay/php-sdk

YenePay SDK for PHP

112.7k](/packages/yenepay-php-sdk)

PHPackages © 2026

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