定制 onsoftadilsonjose/agt 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

onsoftadilsonjose/agt

Composer 安装命令:

composer require onsoftadilsonjose/agt

包简介

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

README 文档

README

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

Desenvolvedor: Adilson Miguel Email: adilson2012jose@gmail.com Telefone: 2068417074

Instalação

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

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

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)

// 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; // <embed id="visor" />

Formato do PDF por Configuração

O sistema lê automaticamente a tabela invoice_print_configs:

Configuração Comportamento
Sem registo na BD A4 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

Código Nome Comportamento
FT Fatura CreditAmount nas linhas
FR Fatura-Recibo Deve estar totalmente pago
FS Fatura Simplificada Sem NIF do cliente
NC Nota de Crédito DebitAmount, gerada automaticamente ao cancelar FR
ND Nota de Débito CreditAmount
RC Recibo Sem assinatura AGT

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

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

Método URI Descriçã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

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
  • InvoicePrintConfig da tabela invoice_print_configs

Onsoft AGT v1.0.0 — Adilson Miguel — adilson2012jose@gmail.com

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 2
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-06-18

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固