Guia completo para configurar e utilizar o sistema de faturação Ryakeza
O Ryakeza é um sistema de faturação completo desenvolvido especificamente para o mercado angolano, com suporte nativo para o formato SAF-T AO.
Siga estes passos para instalar o Ryakeza no seu servidor.
| Componente | Versão Mínima | Recomendado |
|---|---|---|
| PHP | 8.0 | 8.1 ou superior |
| MySQL | 5.7 | 8.0 |
| Apache | 2.4 | 2.4 com mod_rewrite |
| Espaço em disco | 500MB | 1GB ou mais |
Para uma instalação rápida, utilize o script de instalação:
# Baixar o instalador
curl -O https://ryakeza.ao/installer.sh
# Executar o instalador
chmod +x installer.sh
./installer.sh
Para instalação manual, siga estes passos:
# 1. Extrair os ficheiros
tar -xzf ryakeza-v2.1.3.tar.gz
# 2. Mover para o diretório web
sudo mv ryakeza /var/www/html/
# 3. Configurar permissões
sudo chown -R www-data:www-data /var/www/html/ryakeza
sudo chmod -R 755 /var/www/html/ryakeza/storage
# 4. Criar base de dados MySQL
mysql -u root -p -e "CREATE DATABASE ryakeza;"
mysql -u root -p -e "CREATE USER 'ryakeza_user'@'localhost' IDENTIFIED BY 'senha_segura';"
mysql -u root -p -e "GRANT ALL PRIVILEGES ON ryakeza.* TO 'ryakeza_user'@'localhost';"
mysql -u root -p -e "FLUSH PRIVILEGES;"
Após a instalação, siga este guia para configurar o sistema.
https://seu-dominio.ao/ryakeza
Exemplo de configuração via API:
'Minha Empresa Lda',
'nif' => '5000123456',
'endereco' => 'Rua Comercial, 123',
'municipio' => 'Luanda',
'telefone' => '+244 222 123 456'
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.ryakeza.ao/v1/empresa');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($empresa));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $token
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
const empresa = {
nome: 'Minha Empresa Lda',
nif: '5000123456',
endereco: 'Rua Comercial, 123',
municipio: 'Luanda',
telefone: '+244 222 123 456'
};
fetch('https://api.ryakeza.ao/v1/empresa', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify(empresa)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Erro:', error));
curl -X POST \
https://api.ryakeza.ao/v1/empresa \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-d '{
"nome": "Minha Empresa Lda",
"nif": "5000123456",
"endereco": "Rua Comercial, 123",
"municipio": "Luanda",
"telefone": "+244 222 123 456"
}'
A API do Ryakeza utiliza autenticação baseada em tokens JWT.
curl -X POST \
https://api.ryakeza.ao/v1/auth/login \
-H 'Content-Type: application/json' \
-d '{
"email": "seu-email@empresa.ao",
"password": "sua-senha"
}'
{
"success": true,
"data": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
"expires_in": 3600,
"user": {
"id": 1,
"name": "João Silva",
"email": "joao@empresa.ao"
}
}
}
Aprenda a criar, editar e gerir faturas no sistema Ryakeza.
Siga estes passos para criar sua primeira fatura:
Para empresas com NIF angolano, o número de fatura segue automaticamente a sequência configurada.
1. Clique em "Adicionar Item"
2. Pesquise pelo produto/serviço
3. Insira quantidade e preço unitário
4. O sistema calcula automaticamente:
- Total do item
- Impostos aplicáveis
- Descontos configurados
| Campo | Descrição | Exemplo |
|---|---|---|
| Método de Pagamento | Forma como será pago | Transferência, Dinheiro, Cartão |
| Data de Vencimento | Prazo para pagamento | 30 dias após emissão |
| Referência | Para controle interno | PED-2025-001 |
Para editar uma fatura já emitida:
Os recibos são documentos de recebimento que comprovam o pagamento de uma fatura ou serviço.
| Característica | Fatura | Recibo |
|---|---|---|
| Finalidade | Documento de venda | Comprovativo de pagamento |
| Crédito | Permite venda a crédito | Pagamento à vista |
| Prazo | Tem data de vencimento | Pagamento imediato |
| IVA | Declarável no SAF-T | IVA imediato |
| Numeração | Série própria (FT) | Série própria (RC) |
Para criar um recibo quando uma fatura é paga:
1. Acesse a fatura pendente
2. Clique em "Registrar Pagamento"
3. Selecione método de pagamento
4. Insira valor pago
5. Sistema pergunta: "Emitir recibo?"
6. Clique em SIM para gerar recibo automático
O SAF-T (Standard Audit File for Tax) é um formato obrigatório para envio de informações fiscais à AGT.
| Tipo de Empresa | Periodicidade | Prazo |
|---|---|---|
| Grande Porte | Mensal | Até dia 25 do mês seguinte |
| Médio Porte | Trimestral | Até 45 dias após trimestre |
| Pequeno Porte | Anual | Até 31 de Janeiro |
Siga este passo-a-passo:
Antes do envio, valide seu ficheiro:
# Validar estrutura XML
xmllint --schema SAFT-AO.xsd seu-ficheiro.xml
# Validar assinatura digital
openssl smime -verify -in seu-ficheiro.xml -noverify
# Verificar hash
sha256sum seu-ficheiro.xml
Personalize o Ryakeza conforme as necessidades da sua empresa.
Acesse Sistema > Configurações para configurar:
O sistema possui 4 níveis de licença com diferentes funcionalidades:
| Funcionalidade | Básico | Médio | Avançado | Completo |
|---|---|---|---|---|
| Faturação | ✅ | ✅ | ✅ | ✅ |
| Inventário | ❌ | ✅ | ✅ | ✅ |
| Contabilidade | ❌ | ❌ | ✅ | ✅ |
| Recursos Humanos | ❌ | ❌ | ✅ | ✅ |
| CRM | ❌ | ❌ | ❌ | ✅ |
| API REST | ❌ | ❌ | ✅ Limitada | ✅ Completa |
Para ativar módulos adicionais:
1. Acesse Configurações > Módulos
2. Selecione o módulo desejado:
- Contabilidade
- Tesouraria
- Inventário
- RH
- CRM
3. Clique em "Ativar"
4. O sistema verifica a licença
5. Se autorizado, o módulo fica disponível
Controle quem acede ao sistema e o que cada utilizador pode fazer.
Acesso total ao sistema, incluindo configurações e gestão de utilizadores.
Acesso à gestão operacional, sem permissões de administração.
Acesso limitado a funções específicas conforme necessidade.
Para controlar permissões específicas:
Módulo: Faturação
☑ Criar faturas
☑ Editar faturas
☐ Anular faturas
☑ Ver todas as faturas
☐ Exportar faturas
Módulo: Clientes
☑ Ver clientes
☑ Adicionar clientes
☑ Editar clientes
☐ Excluir clientes
☐ Ver dados sensíveis
Módulo: Relatórios
☑ Relatórios de vendas
☑ Relatórios de stock
☐ Relatórios financeiros
☐ Exportar SAF-T
Domine todas as funcionalidades de faturação do Ryakeza.
O sistema oferece várias formas de selecionar clientes:
Para clientes já cadastrados:
Para criar um cliente rapidamente:
Para clientes sem NIF (consumidor final):
Faturas podem ser editadas em diferentes estados:
| Estado da Fatura | O que pode editar | Restrições |
|---|---|---|
| Rascunho | Todos os dados | Nenhuma |
| Emitida | Observações, condições de pagamento | Dados fiscais não podem ser alterados |
| Paga | Apenas dados de contacto | Para alterações fiscais, crie nota de crédito |
| Anulada | Nenhuma edição | Apenas visualização |
Para anular uma fatura já emitida:
Use notas de crédito para:
| Aspecto | Fatura | Recibo |
|---|---|---|
| Natureza Jurídica | Documento de venda | Comprovativo de pagamento |
| IVA | Líquido ou diferido | Imediato |
| Crédito Fiscal | Sim (para o cliente) | Não |
| Numeração | Série FT/FS | Série RC |
| SAF-T AO | Registo em vendas | Registo em recebimentos |
Para criar um recibo sem faturas associadas:
1. Menu: Faturação & Vendas → Recibos
2. Clique em "Novo Recibo"
3. Selecione o cliente
4. Adicione os itens/serviços
5. Informe método de pagamento
6. Emita o recibo
7. O sistema gera PDF automaticamente
Antes do envio, valide o ficheiro SAF-T:
# 1. Validar estrutura XML
xmllint --noout --schema SAFT-AO.xsd seu-ficheiro.xml
# 2. Validar assinatura
openssl smime -verify -in seu-ficheiro.xml -noverify -inform DER
# 3. Verificar hash SHA-256
sha256sum seu-ficheiro.xml
# 4. Validar contra DTD (opcional)
xmllint --valid --noout seu-ficheiro.xml
Baseado no código PHP fornecido, o sistema gerencia:
empresa.nome - Nome comercialempresa.nif - NIF fiscalempresa.endereco - Endereço completoempresa.email - Email principalempresa.telefone - Contacto telefónicofaturacao.prefixo_fatura - Prefixo FTfaturacao.prefixo_recibo - Prefixo RCfaturacao.numero_inicial - Sequência inicialfaturacao.modelo_pdf - Template de PDFfaturacao.auto_numero - Numeração automáticaO Ryakeza possui 4 níveis de licença:
| Funcionalidade | Básico | Médio | Avançado | Completo |
|---|---|---|---|---|
| Faturação Básica | ||||
| Inventário | ||||
| Contabilidade | ||||
| Recursos Humanos | ||||
| CRM | ||||
| API REST Completa | Limitada | Completa | ||
| Suporte Prioritário | 24/7 |
// Exemplo de configurações disponíveis no sistema
const configuracoesDisponiveis = {
// Configurações da Empresa
'empresa.nome': { descricao: 'Nome comercial da empresa', categoria: 'empresa' },
'empresa.nif': { descricao: 'NIF fiscal da empresa', categoria: 'empresa' },
'empresa.contabilidade': { descricao: 'Ativar módulo de Contabilidade?', categoria: 'empresa' },
'empresa.rh': { descricao: 'Ativar módulo de RH?', categoria: 'empresa' },
// Configurações Financeiras
'financeiro.moeda_padrao': { descricao: 'Moeda padrão (AOA)', categoria: 'financeiro' },
'financeiro.banco': { descricao: 'Banco padrão', categoria: 'financeiro' },
'financeiro.iban': { descricao: 'IBAN da empresa', categoria: 'financeiro' },
// Configurações de Faturação
'faturacao.prefixo_fatura': { descricao: 'Prefixo para faturas (FT)', categoria: 'faturacao' },
'faturacao.envio_automatico_email': { descricao: 'Enviar email automático?', categoria: 'faturacao' },
// Configurações de Email
'email.host': { descricao: 'Servidor SMTP', categoria: 'email' },
'email.porta': { descricao: 'Porta SMTP', categoria: 'email' },
// Configurações SAF-T
'saft.versao': { descricao: 'Versão do SAF-T', categoria: 'saft' }
};
// Verificação de licença para módulos
class GerenciadorLicencas {
static modulosComLicenca = [
'empresa.contabilidade',
'empresa.tesouraria',
'empresa.inventario',
'empresa.rh',
'empresa.crm'
];
static async validarAcessoModulo(modulo) {
// Verifica se o módulo requer licença específica
if (!this.modulosComLicenca.includes(modulo)) {
return true;
}
// Consulta API para verificar licença
const response = await fetch('api/licenca/verificar');
const data = await response.json();
return data.modulos_permitidos.includes(modulo);
}
}
O Ryakeza é um sistema modular que permite ativar funcionalidades conforme a licença e necessidades da sua empresa.
Sistema contabilístico completo integrado com a faturação, permitindo gestão financeira detalhada e conformidade fiscal.
1. Acesse: Configurações → Módulos
2. Localize "Contabilidade"
3. Clique em "Ativar"
4. Configure:
- Plano de contas padrão
- Contas de resultado
- Período contabilístico
5. Importe saldos iniciais (se aplicável)
// Quando uma fatura é emitida, gera lançamentos contábeis
public function gerarLancamentosContabeis($fatura_id) {
$fatura = $this->getFatura($fatura_id);
// Lançamento de débito (Cliente)
$lancamento1 = [
'conta_debito_id' => $this->getContaId('Clientes'),
'conta_credito_id' => $this->getContaId('Vendas'),
'descricao' => "Fatura {$fatura['numero']} - {$fatura['cliente_nome']}",
'valor' => $fatura['total_sem_imposto'],
'documento_id' => $fatura_id
];
// Lançamento de IVA
if ($fatura['iva_valor'] > 0) {
$lancamento2 = [
'conta_debito_id' => $this->getContaId('Clientes'),
'conta_credito_id' => $this->getContaId('IVA a Liquidar'),
'descricao' => "IVA Fatura {$fatura['numero']}",
'valor' => $fatura['iva_valor'],
'documento_id' => $fatura_id
];
}
// Salva os lançamentos
$this->salvarLancamentos([$lancamento1, $lancamento2]);
}
Sistema completo de gestão de stocks com controlo de entradas, saídas, transferências e inventário físico.
1. Cliente seleciona produtos
2. Sistema verifica disponibilidade
3. Se stock insuficiente → alerta
4. Se stock suficiente → reserva automática
5. Emissão da fatura
6. Baixa automática do stock
7. Atualização de custos
8. Geração de alertas (se necessário)
empresa.inventario = "SIM"financeiro.stock - Limite mínimoitens.limite_venda - Bloqueia venda sem stock// Verificar disponibilidade de stock
async function verificarStock(item_id, quantidade, armazem_id = null) {
const response = await fetch('/api/v1/inventario/stock', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
item_id: item_id,
quantidade: quantidade,
armazem_id: armazem_id
})
});
const data = await response.json();
if (data.success) {
return {
disponivel: data.disponivel,
stock_atual: data.stock_atual,
armazens: data.armazens,
pode_vender: data.disponivel >= quantidade
};
}
throw new Error(data.message);
}
// Exemplo de uso
const stockInfo = await verificarStock(123, 10);
if (!stockInfo.pode_vender) {
alert(`Stock insuficiente. Disponível: ${stockInfo.stock_atual}`);
}
Sistema completo de gestão de recursos humanos com controlo de presenças, salários, contratos e benefícios.
empresa.rh = "SIM"funcionarios - Dados pessoaiscontratos - Informações contratuaispresencas - Controlo de assiduidadefolhas_salario - Histórico salarialferias - Gestão de fériasjustificativas_faltas - JustificaçõesFuncionalidades disponíveis:
public function calcularSalario($funcionario_id, $mes, $ano) {
// Obter dados do funcionário
$funcionario = $this->getFuncionario($funcionario_id);
$contrato = $this->getContratoAtual($funcionario_id);
// Cálculo base
$salario_base = $contrato['salario'];
$dias_trabalhados = $this->getDiasTrabalhados($funcionario_id, $mes, $ano);
// Horas extras
$horas_extras = $this->getHorasExtras($funcionario_id, $mes, $ano);
$valor_horas_extras = $horas_extras * ($salario_base / 160) * 1.5;
// Benefícios
$beneficios = $this->getBeneficios($funcionario_id, $mes, $ano);
// Descontos
$descontos = $this->calcularDescontos(
$salario_base + $valor_horas_extras + $beneficios,
$funcionario['nif']
);
// Total líquido
$salario_liquido = ($salario_base + $valor_horas_extras + $beneficios) - $descontos;
return [
'bruto' => $salario_base,
'horas_extras' => $valor_horas_extras,
'beneficios' => $beneficios,
'descontos' => $descontos,
'liquido' => $salario_liquido,
'dias_trabalhados' => $dias_trabalhados
];
}
Gestão completa de fluxo de caixa, contas bancárias, conciliações e tesouraria.
Configurações necessárias:
1. financeiro.banco = "Nome do Banco"
2. financeiro.count = "Número da Conta"
3. financeiro.nome = "Titular da Conta"
4. financeiro.iban = "AO06 0005 0000 1234 5678 9012 3"
5. financeiro.swift = "BICACOLUXXX"
6. Saldo inicial: Definir data de abertura
Processo automático:
{
"event": "transferencia.recebida",
"data": {
"banco_origem": "BFA",
"conta_origem": "123456789",
"nome_origem": "Cliente Exemplo Lda",
"conta_destino": "0005000012345678",
"valor": 150000.00,
"moeda": "AOA",
"referencia": "FT202501001",
"data_operacao": "2025-01-15",
"descricao": "Pagamento Fatura FT202501001"
},
"timestamp": "2025-01-15T10:30:00Z",
"signature": "sha256=..."
}
// Processamento no Ryakeza
public function processarTransferencia($dados) {
// 1. Verificar se é fatura
$fatura = $this->buscarFaturaPorReferencia($dados['referencia']);
if ($fatura) {
// 2. Registrar pagamento
$this->registrarPagamentoFatura(
$fatura['id'],
$dados['valor'],
'transferencia',
$dados['data_operacao']
);
// 3. Atualizar movimento bancário
$this->registrarMovimentoBancario(
$dados['conta_destino'],
'credito',
$dados['valor'],
"Pagamento: {$dados['referencia']}"
);
// 4. Notificar cliente
$this->enviarConfirmacaoPagamento($fatura['cliente_email']);
}
}
Sistema de Gestão de Relacionamento com o Cliente integrado com faturação e vendas.
1. Lead/Prospecção → Identificação
2. Qualificação → Necessidades definidas
3. Proposta → Orçamento enviado
4. Negociação → Discussão de termos
5. Fecho → Ganho ou Perdido
6. Pós-venda → Implementação
Estados possíveis:
- Novo (0%)
- Em contacto (25%)
- Proposta enviada (50%)
- Negociação (75%)
- Ganho (100%)
- Perdido (0%)
Exemplos de workflows:
// Criar nova oportunidade
async function criarOportunidade(dados) {
const response = await fetch('/api/v1/crm/oportunidades', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
},
body: JSON.stringify({
cliente_id: dados.cliente_id,
titulo: dados.titulo,
descricao: dados.descricao,
valor_estimado: dados.valor,
estado: 'novo',
probabilidade: 25,
data_fecho_esperada: dados.data_fecho,
responsavel_id: dados.responsavel_id,
origem: 'website', // website, telefone, indicacao, etc.
tags: dados.tags || []
})
});
const result = await response.json();
if (result.success) {
// Criar tarefa automática
await criarTarefa({
oportunidade_id: result.data.id,
titulo: 'Contactar cliente',
descricao: 'Fazer primeiro contacto',
data_limite: new Date(Date.now() + 24 * 60 * 60 * 1000), // Amanhã
prioridade: 'alta'
});
return result.data;
}
throw new Error(result.message);
}
// Uso
const oportunidade = await criarOportunidade({
cliente_id: 456,
titulo: 'Implementação ERP',
valor: 2500000,
data_fecho: '2025-03-31'
});
Certifique-se que sua licença permite o módulo desejado:
Menu: Configurações → Módulos ou Configurações do Sistema
1. Faça login como administrador (nível 1)
2. Vá para: Configurações do Sistema
3. Role até a seção "Módulos"
4. Encontre o módulo desejado
5. Altere o valor para "SIM" ou "NÃO"
Após ativar, configure o módulo:
Capacite os utilizadores:
| Módulo | Configuração | Valor Padrão | Dependências |
|---|---|---|---|
| Contabilidade | empresa.contabilidade |
NÃO | Faturação ativa |
| Inventário | empresa.inventario |
NÃO | Produtos cadastrados |
| Recursos Humanos | empresa.rh |
NÃO | Nenhuma |
| Tesouraria | empresa.tesouraria |
NÃO | Contas bancárias |
| CRM | empresa.crm |
NÃO | Clientes cadastrados |
Baseado no código sidebar fornecido, o sistema possui 3 níveis de acesso:
Acesso total ao sistema.
Acesso à gestão operacional.
Acesso limitado a funções específicas.
Apenas administradores podem criar novos utilizadores:
{
"usuario_id": 123,
"permissões": {
"faturacao": {
"criar": true,
"editar": true,
"anular": false,
"exportar": true,
"ver_todas": true
},
"clientes": {
"ver": true,
"criar": true,
"editar": true,
"excluir": false,
"ver_sensivel": false
},
"relatorios": {
"vendas": true,
"financeiro": false,
"saft": false,
"exportar": true
},
"configuracoes": {
"empresa": false,
"sistema": false,
"backup": false
}
}
}
Funcionalidades disponíveis para funcionários:
// Exemplo de consulta de salários via API
async function carregarSalarios() {
try {
const response = await fetch(
'../../database/controlls/funcionarios/api_funcionarios.php?action=salarios',
{
method: 'GET',
headers: {
'Authorization': `Bearer ${localStorage.getItem('token')}`
}
}
);
const data = await response.json();
if (data.success) {
// Processar dados
data.salarios.forEach(salario => {
console.log(`Mês: ${salario.mes}/${salario.ano}`);
console.log(`Líquido: ${salario.salario_liquido}`);
console.log(`Bruto: ${salario.salario_bruto}`);
console.log(`Descontos: ${salario.descontos}`);
});
}
} catch (error) {
console.error('Erro:', error);
}
}
// Download de recibo
function baixarRecibo(salarioId) {
window.open(
`../../database/controlls/funcionarios/api_funcionarios.php?action=baixar_recibo&id=${salarioId}`,
'_blank'
);
}
Funcionários podem justificar faltas através do portal:
Para dar acesso a um cliente ao portal:
// Configurar webhook para receber notificações
{
"url": "https://suaempresa.ao/api/webhooks/pagamentos",
"events": [
"pagamento.recebido",
"pagamento.confirmado",
"pagamento.recusado"
],
"secret": "seu_secreto_aqui"
}
// Exemplo de payload recebido
{
"event": "pagamento.recebido",
"data": {
"fatura_id": "FT202501001",
"cliente_id": 456,
"valor": 150000.00,
"metodo": "multicaixa",
"referencia": "REF123456789",
"data_pagamento": "2025-01-15 14:30:00"
},
"timestamp": "2025-01-15T14:30:00Z",
"signature": "sha256=..."
}
chmod 755 storage/
chmod 644 config/database.php
tail -f /var/log/apache2/error.log
https://seudominio.ao/ryakeza/limpar-cachetelnet smtp.gmail.com 587
tail -f logs/email.log
df -h
chmod 777 backup/
mysqldump -u usuario -p ryakeza > backup_teste.sql
# Adicione ao crontab
0 2 * * * /usr/bin/php /var/www/html/ryakeza/cron/backup.php
mysqlcheck -o ryakeza
tail -f logs/slow_queries.log
; php.ini
memory_limit = 256M
max_execution_time = 300
opcache.enable = 1
Localização dos principais ficheiros de log:
| Log | Localização | O que monitorizar |
|---|---|---|
| Erros da Aplicação | storage/logs/application.log |
Erros PHP, exceptions |
| Erros de Email | storage/logs/email.log |
Falhas no envio de emails |
| Logs de Acesso | storage/logs/access.log |
Login/logout, tentativas falhadas |
| SAF-T Logs | storage/logs/saft.log |
Exportações SAF-T, erros de validação |
| Logs da Base de Dados | /var/log/mysql/error.log |
Erros MySQL, queries lentas |
Se o problema persistir:
Quando contactar o suporte, forneça:
Integre o Ryakeza com outros sistemas através da API REST.
curl -X GET \
https://seu-dominio.com/api/v1/clientes \
-H 'Authorization: Bearer SEU_TOKEN_JWT' \
-H 'Content-Type: application/json'
curl -X POST \
https://seu-dominio.com/api/v1/clientes \
-H 'Authorization: Bearer SEU_TOKEN_JWT' \
-H 'Content-Type: application/json' \
-d '{
"nome": "Cliente Exemplo Lda",
"nif": "5000123456",
"email": "cliente@empresa.ao",
"telefone": "+244 923 456 789",
"tipo": "cliente",
"endereco": "Rua Comercial, 123",
"cidade": "Luanda"
}'
curl -X PUT \
https://seu-dominio.com/api/v1/clientes/123 \
-H 'Authorization: Bearer SEU_TOKEN_JWT' \
-H 'Content-Type: application/json' \
-d '{
"telefone": "+244 923 999 999",
"email": "novo-email@empresa.ao"
}'
Crie e gerencie faturas programaticamente através da API.
const fatura = {
cliente_id: 456,
data_emissao: "2024-12-01",
data_vencimento: "2024-12-31",
metodo_pagamento: "transferencia",
itens: [
{
item_id: 789,
descricao: "Serviço de Consultoria",
quantidade: 10,
preco_unitario: 15000.00,
imposto_id: 1
},
{
item_id: 790,
descricao: "Produto Exemplo",
quantidade: 2,
preco_unitario: 25000.00,
imposto_id: 2
}
],
observacoes: "Fatura gerada automaticamente via API"
};
fetch('https://seu-dominio.com/api/v1/faturas', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(fatura)
})
.then(response => response.json())
.then(data => console.log(data));
# Baixar PDF da fatura
curl -X GET \
https://seu-dominio.com/api/v1/faturas/789/pdf \
-H 'Authorization: Bearer SEU_TOKEN_JWT' \
--output fatura-789.pdf
curl -X POST \
https://seu-dominio.com/api/v1/faturas/789/enviar-email \
-H 'Authorization: Bearer SEU_TOKEN_JWT' \
-H 'Content-Type: application/json' \
-d '{
"email_destino": "cliente@empresa.ao",
"assunto": "Sua Fatura #FT2024120001",
"mensagem": "Prezado cliente, em anexo sua fatura.",
"enviar_copia": true,
"copia_para": "contabilidade@empresa.ao"
}'
Sua opinião ajuda a melhorar a documentação para todos os utilizadores.