承接 kowts/efatura-cv 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

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

kowts/efatura-cv

Composer 安装命令:

composer require kowts/efatura-cv

包简介

Biblioteca PHP para validação e emissão de documentos fiscais electrónicos e-Fatura de Cabo Verde.

README 文档

README

Testes PHP Licença Packagist

Biblioteca PHP independente de frameworks para validar documentos fiscais, gerar XML DFE v11, validar com os XSD oficiais, assinar com XAdES-BES, criar pacotes ZIP e comunicar com serviços e-Fatura de Cabo Verde.

Important

Este projecto não é oficial da DNRE. A utilização em produção exige homologação do software, credenciais válidas e testes nos ambientes oficiais.

Funcionalidades

  • nove tipos de documento: FTE, FRE, TVE, RCE, NCE, NDE, DTE, DVE e NLE;
  • geração, validação e interpretação de IUD;
  • validação de NIF, entidades, linhas, impostos e reconciliação de totais;
  • emissão online e em contingência;
  • geração de XML compacto DFE v11;
  • ciclo de eventos FDC e UDN, incluindo XML, ZIP e submissão;
  • validação com os XSD oficiais de 27 de Maio de 2024;
  • assinatura XAdES-BES com RSA-SHA256;
  • validação de certificados e correspondência da chave privada;
  • pacotes ZIP Deflate com nomes {IUD}.xml;
  • sequências e idempotência em memória ou transaccionais por PDO;
  • submissão por middleware e directamente à plataforma;
  • consultas fiscais, repetição segura e reconciliação através de PSR-18;
  • cálculos monetários com representação decimal exacta;
  • DFA em PDF com QR Code;
  • DTOs imutáveis e tipados, sem retirar a API por arrays;
  • integrações opcionais com Laravel, Symfony e Yii2;
  • CLI para inspeccionar IUDs e validar XML;
  • respostas JSON/XML normalizadas;
  • nenhuma dependência de Laravel, Symfony ou outro framework.

Requisitos

  • PHP 8.1 ou superior;
  • extensões curl, dom, json, libxml, openssl e zip.

Instalação

composer require kowts/efatura-cv

Para instalar directamente do ramo de desenvolvimento, pode declarar o repositório Git:

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/Kowts/efatura-cv-php"
        }
    ],
    "require": {
        "kowts/efatura-cv": "dev-main"
    }
}

Utilização rápida

<?php

use Kowts\Efatura\Config\EfaturaConfig;
use Kowts\Efatura\Domain\DocumentType;
use Kowts\Efatura\Domain\Environment;
use Kowts\Efatura\Efatura;

$efatura = new Efatura(new EfaturaConfig(
    transmitterNif: '123456789',
    transmitterLed: '001',
    softwareCode: 'MEUSOFT',
    softwareName: 'Meu Software',
    softwareVersion: '1.0.0',
    middlewareBaseUrl: 'https://middleware.exemplo.cv',
    transmitterKey: getenv('EFATURA_TRANSMITTER_KEY') ?: null,
    defaultSerie: 'SER-F',
    emitter: [
        'taxId' => ['countryCode' => 'CV', 'value' => '123456789'],
        'name' => 'Empresa, Lda.',
        'address' => ['countryCode' => 'CV', 'addressDetail' => 'Praia'],
        'contacts' => ['email' => 'facturacao@exemplo.cv', 'telephone' => '2600000'],
    ],
    environment: Environment::Test
));

$invoice = $efatura->document()
    ->type(DocumentType::ElectronicInvoice)
    ->issueDate('2026-07-08')
    ->issueTime('10:30:00')
    ->receiver([
        'taxId' => ['countryCode' => 'CV', 'value' => '987654321'],
        'name' => 'Cliente',
    ])
    ->line([
        'quantity' => ['value' => 1, 'unitCode' => 'UN'],
        'price' => 1000,
        'priceExtension' => 1000,
        'netTotal' => 1000,
        'taxes' => [[
            'taxTypeCode' => 'IVA',
            'taxPercentage' => 15,
            'taxTotal' => 150,
        ]],
        'item' => [
            'description' => 'Serviço',
            'emitterIdentification' => 'SERV-1',
        ],
    ])
    ->totals([
        'priceExtensionTotalAmount' => 1000,
        'netTotalAmount' => 1000,
        'taxTotalAmount' => 150,
        'payableAmount' => 1150,
    ])
    ->validate();

$number = $efatura->nextDocumentNumber($invoice['issueDate'], $invoice['type']);
$iud = $efatura->buildIud($invoice['issueDate'], $invoice['type'], $number);
$xml = $efatura->buildDfeXml($iud, $invoice);

$xsd = $efatura->validateXml($xml);
if (!$xsd['valid']) {
    throw new RuntimeException(json_encode($xsd['errors'], JSON_THROW_ON_ERROR));
}

$signed = $efatura->signXml(
    $xml,
    file_get_contents('/segredos/certificado.pem'),
    file_get_contents('/segredos/chave-privada.pem'),
    getenv('EFATURA_KEY_PASSWORD') ?: null
);

$zip = $efatura->buildDfeZip([['iud' => $iud, 'xml' => $signed['xml']]]);
$result = $efatura->submitDfeZip($zip);

Integração com Yii2

Instale também o Yii2 na aplicação consumidora:

composer require yiisoft/yii2

Registe o componente na configuração da aplicação:

use Kowts\Efatura\Bridge\Yii2\EfaturaComponent;

return [
    'components' => [
        'efatura' => [
            'class' => EfaturaComponent::class,
            'config' => [
                'transmitter_nif' => '100200300',
                'transmitter_led' => '001',
                'software_code' => 'MEUSOFT',
                'software_name' => 'Meu Software',
                'software_version' => '1.0.0',
                'environment' => 'TEST',
            ],
        ],
    ],
];

Depois use a biblioteca sem duplicar regras fiscais:

use Kowts\Efatura\Domain\DocumentType;

$iud = Yii::$app->efatura->buildSequentialIud('2026-07-08', DocumentType::ElectronicInvoice);
$xml = Yii::$app->efatura->buildDfeXml($iud, $documento);

Sequências em produção

O armazenamento predefinido existe apenas em memória. Em produção, use uma base de dados para impedir números duplicados entre processos:

use Kowts\Efatura\Infrastructure\Sequence\PdoSequenceStore;

$pdo = new PDO('mysql:host=localhost;dbname=faturacao', 'utilizador', 'senha');
$sequences = new PdoSequenceStore($pdo);
$sequences->createTable(); // Execute uma vez, ou converta para uma migração.

$efatura = new Efatura($config, $sequences);

A sequência é independente por NIF transmissor, ano, LED e tipo documental. Guarde sempre o IUD, XML, ZIP e resposta de transporte. Uma falha de rede não autoriza a reutilização ou substituição automática do número fiscal.

Segurança

  • nunca envie chaves, certificados, tokens ou credenciais para o navegador;
  • não guarde segredos no repositório;
  • valide o certificado antes da emissão;
  • use TLS e armazenamento cifrado;
  • registe respostas técnicas sem expor dados pessoais ou segredos;
  • fixe uma versão exacta do pacote em sistemas de produção.

Consulte Assinatura e certificados e Segurança.

Documentação

Estado do projecto

O pacote está em desenvolvimento activo. Os XSD oficiais estão incluídos, mas não foram publicados vectores oficiais para comparar byte a byte IUD, ZIP e assinaturas. Os testes internos não devem ser confundidos com certificação oficial.

Créditos

O desenho foi inspirado por @akira-io/efatura, distribuído sob MIT/Apache-2.0. Os XSD incluídos são os artefactos do sistema e-Fatura de Cabo Verde.

Licença

MIT © 2026 Kowts.

统计信息

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

GitHub 信息

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

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-07-10

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固