SSD Nodes Learn Hosting plans →
Guias Matt ConnorPor Matt Connor · Atualizado 2026-08-22

Comparativo de software de faturação self-hosted

Compare Invoice Ninja, InvoiceShelf, InvoicePlane, Kimai e ERPNext num VPS: faturação recorrente, impostos, portal do cliente, gateways e licenças.

Qual software de faturação self-hosted deve escolher?

O software de faturação self-hosted resume-se a cinco opções realistas num único VPS, e elas não são substitutos equivalentes. O Invoice Ninja é o produto mais completo: faturas recorrentes, um portal do cliente, gateways de pagamento e formatos de fatura eletrónica funcionam desde o momento da instalação. O InvoiceShelf é a opção totalmente open source mais leve. O InvoicePlane é uma aplicação PHP simples, sem nada para orquestrar. O Kimai fatura as horas registadas, em vez de itens de linha. O ERPNext é um sistema de contabilidade completo que também gera faturas.

Dois problemas comprometem uma instalação de faturação self-hosted com muito mais frequência do que a ausência de uma funcionalidade. O primeiro é o email. Uma fatura numa pasta de spam é uma fatura por pagar, e nada lhe indica que isso aconteceu. O segundo são as cópias de segurança. Esta é a única base de dados self-hosted cuja perda se transforma num problema fiscal, e não apenas num incómodo.

Leia a licença antes de consultar a lista de funcionalidades. Três destas cinco opções usam licenças copyleft, uma usa uma licença permissiva e uma disponibiliza o código-fonte com limites reais sobre o que pode fazer com ele.

As cinco opções e para quem se destina cada uma

Invoice Ninja

Uma aplicação Laravel, atualmente na linha v5. A instalação própria é gratuita e não impõe limitações: inclui faturas recorrentes, orçamentos, projetos, registo de horas, despesas, um portal do cliente e gateways de pagamento, incluindo Stripe e PayPal. O projeto descreve-se como "uma aplicação de faturas, orçamentos, projetos e registo de horas com código disponível, criada com Laravel". O único componente pago é a remoção da marca. Nas palavras do próprio projeto: "Disponibilizamos uma licença white-label por $40 por ano para remover a marca Invoice Ninja das áreas da aplicação visíveis para os clientes". Esse preço é válido em agosto de 2026.

Escolha-o se quiser o produto mais completo e aceitar executar a stack maior.

InvoiceShelf

Um fork do Crater, distribuído sob a GNU Affero General Public License version 3 (AGPL-3.0). Abrange faturas, estimativas, faturação recorrente, despesas, impostos, várias moedas, um portal do cliente e várias empresas. Os pagamentos e a remoção da marca estão disponíveis em repositórios oficiais de módulos separados, ambos sob AGPL-3.0 e ambos gratuitos. O pagamento com cartão é processado através do checkout do Stripe.

Escolha-o se quiser uma aplicação pequena e totalmente open source, e não precisar de trinta gateways.

InvoicePlane

Uma aplicação PHP baseada em CodeIgniter, distribuída sob a licença MIT, e a única opção desta lista que é instalada descompactando ficheiros num web root. Não usa Docker nem uma etapa de build do Node. Os PDFs são gerados com mPDF, pelo que os templates usam HTML e CSS. Os clientes recebem um guest link para consultar e pagar uma fatura.

A limitação está nos pagamentos. A documentação afirma claramente que o InvoicePlane 1.6 suporta apenas Stripe por predefinição e que os outros fornecedores foram removidos nessa versão. Os requisitos publicados para a linha 1.6 são PHP 8.0 a 8.1 com MySQL 5.5 ou a versão correspondente do MariaDB. Leia as notas da release que transferir, porque a linha 1.7 ainda está em desenvolvimento.

Escolha-o se usar shared hosting ou um VPS com 512 MB.

Kimai

Um sistema de registo de horas sob AGPL-3.0 que gera faturas a partir de folhas de horas. É a opção certa para quem fatura horas. Os templates de fatura são carregados como ficheiros DOCX, ODS ou XLSX, os únicos formatos aceites segundo a documentação, e convertidos para PDF ou HTML. Pode criar a estrutura da fatura num processador de texto em vez de escrever CSS, o que a maioria das pessoas considera mais simples.

O Kimai não tem portal do cliente nem gateway de pagamento, pelo que o PDF é enviado por email. A faturação eletrónica estruturada é disponibilizada por um plugin pago da loja, chamado E-Invoice Plus, listado por 99 EUR por ano, sem IVA, para uma instalação self-hosted em agosto de 2026. Inclui os perfis EN16931, XRechnung, ZUGFeRD, Factur-X e Peppol.

Escolha-o se a fatura for o resultado do registo de horas.

ERPNext

GPL-3.0 e uma categoria diferente de software. Uma fatura de venda é um tipo de documento dentro de um sistema de contabilidade completo, com plano de contas, lançamentos contabilísticos, stock e processamento salarial. É a opção certa quando a faturação deixa de ser a tarefa principal. Para um freelancer com oito clientes, é software a mais. Colocá-lo em funcionamento é um projeto próprio, explicado em executar o ERPNext num VPS.

As faturas recorrentes dependem de um agendador que não é visível

Invoice Ninja, InvoiceShelf, InvoicePlane e ERPNext geram faturas recorrentes. O Kimai não tem uma funcionalidade de faturas recorrentes no núcleo, porque uma fatura é criada a partir dos registos da folha de horas de um período.

O modo de falha é igual em todas as aplicações baseadas em Laravel e é silencioso. As faturas recorrentes são criadas por uma tarefa agendada, php artisan schedule:run, que tem de ser chamada a cada minuto por algo externo à aplicação. Se nada a chamar, a lista de faturas recorrentes continua a mostrar uma próxima data de envio, e essa data simplesmente passa. Nenhuma fatura aparece. Nenhum erro é registado, porque nenhum código foi executado.

Depois de criar a primeira fatura recorrente, defina a próxima data de envio para alguns minutos à frente e aguarde. Se nada chegar, o agendador não está a ser executado. Numa instalação Docker, isso normalmente significa que o serviço cron ou o serviço do agendador definido no ficheiro compose nunca arrancou ou terminou.

docker compose ps
docker compose logs --tail 50

Todos os serviços do ficheiro devem indicar running. Um serviço no estado exited é aquele cujos logs deve consultar.

Moedas e impostos: o que verificar antes de se comprometer

As listas de funcionalidades dizem "multi-moeda", mas podem referir-se a capacidades muito diferentes. Execute estas quatro verificações numa instância de demonstração, usando valores reais da sua empresa, porque um erro nesta área será detetado pelo seu contabilista, e não por si.

  1. A fatura guarda a taxa de câmbio aplicável na data de emissão? Tem de guardar. Se a aplicação recalcular os totais com base numa taxa atual, os relatórios do último trimestre mudam sempre que os abrir, e a contabilidade deixa de corresponder ao que já declarou.
  2. O imposto é aplicado por linha, por fatura ou de ambas as formas? Uma taxa única ao nível da fatura é suficiente até existir uma linha com taxa zero.
  3. Pode introduzir preços com imposto incluído e também sem imposto? Fazer a conversão posteriormente introduz diferenças de arredondamento de um cêntimo por linha, e esses cêntimos acumulam-se ao longo do ano.
  4. O que aparece no documento para um cliente de outro país que não deve IVA? A fatura tem de apresentar a menção de isenção, e não apenas um zero na coluna do imposto.

Invoice Ninja e ERPNext tratam dos quatro pontos. InvoiceShelf inclui impostos e multi-moeda na lista de funcionalidades. InvoicePlane e Kimai são mais simples, por isso teste-os com a sua fatura mais problemática, e não com a mais simples.

Portal do cliente e gateways de pagamento

Um portal do cliente é uma página onde o cliente consulta as suas faturas, descarrega o PDF e paga. Isto é mais importante do que parece, porque insistir no pagamento por email consome mais tempo do que emitir a fatura.

O Invoice Ninja é a opção mais completa neste aspeto, com um portal completo, vários gateways, métodos de pagamento guardados e faturação automática para faturas recorrentes. O InvoiceShelf tem um portal do cliente e acrescenta o checkout do Stripe através do seu módulo de pagamentos. O InvoicePlane fornece uma ligação de convidado para cada fatura e suporta o Stripe. O Kimai não oferece nenhuma destas opções, pelo que o PDF é enviado como anexo.

Há um ponto que é frequentemente confundido. A instalação autónoma da aplicação de faturação não significa armazenar números de cartões. Com o checkout do Stripe, o cliente é redirecionado para o Stripe e introduz aí os dados do cartão. O seu VPS nunca vê o número. O âmbito PCI (payment card industry) mantém-se reduzido precisamente porque não criou o formulário de pagamento. Se mais tarde precisar de mais de um processador ou quiser encaminhar pagamentos por país, isso deve ficar numa camada separada, como orquestração de pagamentos self-hosted com Hyperswitch.

Qualidade do PDF e o modelo que irá editar

Irá editar o modelo. Todos os valores predefinidos apresentados colocam o seu endereço no local errado para o seu país.

O Invoice Ninja renderiza modelos HTML e CSS para PDF usando um Chromium headless incluído na imagem, razão pela qual o contentor é grande. Reserve memória para este processo: um browser headless é o processo mais pesado da stack, por isso 1 GB de RAM é pouco para um VPS. O InvoicePlane usa mPDF, que é escrito apenas em PHP e é leve, mas ignora algum CSS moderno. O Kimai segue a abordagem oposta e pede que carregue um ficheiro DOCX ou ODS, pelo que o layout é feito no LibreOffice ou no Word por alguém que nunca escreveu uma folha de estilos.

Se uma fatura com um design específico for importante e o CSS não for, a abordagem do Kimai é melhor. Se quiser manter o modelo num sistema de controlo de versões e comparar diferenças, o HTML é melhor.

A licença permite uso comercial?

As cinco opções permitem faturar aos seus próprios clientes. As diferenças surgem quando faz algo além disso.

O Invoice Ninja está sob a Elastic License 2.0. Há duas cláusulas relevantes.

Não pode fornecer o software a terceiros como um serviço alojado ou gerido quando esse serviço disponibiliza aos utilizadores acesso a um conjunto substancial das funcionalidades do software.
Não pode mover, alterar, desativar ou contornar a funcionalidade de chave de licença incluída no software.

Por isso, executá-lo para a sua própria empresa é permitido, mas executar instâncias para clientes como produto não é. A segunda cláusula é o motivo pelo qual remover a marca custa uma licença de $40, em vez de ser uma alteração ao código-fonte.

InvoiceShelf, Kimai e Crater estão sob a AGPL-3.0. O uso comercial é gratuito e não existe um nível superior ao seu. A obrigação está na secção 13: se modificar o código e permitir que outras pessoas utilizem a sua versão modificada através de uma rede, tem de lhes disponibilizar o código-fonte das alterações. Uma instância sem modificações já está abrangida pelo código-fonte público do projeto original, pelo que a maioria dos operadores nunca precisa de lidar com esta obrigação.

O InvoicePlane está sob a MIT, a licença com menos obrigações deste grupo, embora o README indique que o nome e o logótipo continuam a pertencer ao projeto.

O ERPNext está sob a GPL-3.0. As modificações que distribuir têm de ser partilhadas, mas a execução privada não cria qualquer obrigação.

Esta é uma descrição do texto das licenças, não aconselhamento jurídico.

O projeto ainda é mantido? Consulte o histórico de commits

O Crater foi uma aplicação de faturação open source popular durante vários anos, e muitos guias ainda o recomendam. O seu branch predefinido não recebe nenhum commit há 741 dias.

ChartGap since the last commit on the default branch, in days, checked 21 August 2026
The data behind this chart
[
  {
    "label": "ERPNext",
    "commit_gap": 0
  },
  {
    "label": "Invoice Ninja",
    "commit_gap": 1
  },
  {
    "label": "Kimai",
    "commit_gap": 1
  },
  {
    "label": "InvoicePlane",
    "commit_gap": 3
  },
  {
    "label": "InvoiceShelf",
    "commit_gap": 4
  },
  {
    "label": "Crater",
    "commit_gap": 741
  }
]

Dos 6 projetos nesse bloco, cinco receberam um commit na última semana. O InvoiceShelf é o fork que deu continuidade ao trabalho do Crater, sob a mesma licença AGPL-3.0 e com o mesmo modelo de dados. Por isso, a migração consiste em migrar os dados, não em reescrever a aplicação. Instale o InvoiceShelf, não o Crater.

Instalar cada aplicação num VPS

Tudo, exceto o InvoicePlane, funciona mais facilmente com Docker Compose. Se esta tecnologia for nova para si, comece por uma primeira stack Docker Compose num VPS e depois volte aqui.

O Invoice Ninja disponibiliza o seu próprio repositório compose.

git clone https://github.com/invoiceninja/dockerfiles.git
cd dockerfiles
docker run --rm -it invoiceninja/invoiceninja php artisan key:generate --show

Copie essa chave para o ficheiro env no repositório, juntamente com o seu APP_URL real. Depois, defina o proprietário esperado pela imagem e inicie a aplicação.

chmod 755 docker/app/public
sudo chown -R 1500:1500 docker/app
docker compose up -d

O proprietário 1500:1500 corresponde ao utilizador dentro da imagem. Se o omitir, a aplicação não consegue escrever a cache nem os PDFs gerados. No assistente de configuração, indique db como anfitrião da base de dados, porque esse é o nome do serviço na rede compose. localhost aponta para o próprio contentor da aplicação.

O InvoiceShelf publica ficheiros compose prontos, um para cada motor de base de dados.

curl -fLO https://raw.githubusercontent.com/InvoiceShelf/docker/master/docker-compose.mysql.yml
mv docker-compose.mysql.yml docker-compose.yml

Abra esse ficheiro antes de o iniciar. Todas as palavras-passe são marcadores de posição, e os próprios comentários do ficheiro indicam-no. APP_URL, SESSION_DOMAIN e SANCTUM_STATEFUL_DOMAINS têm todos localhost como valor predefinido, e os três precisam do seu nome de anfitrião real antes do primeiro início de sessão. Depois, inicie os serviços.

docker compose up -d

Publica a porta 8090 no anfitrião e disponibiliza a porta 8080 dentro do contentor. Coloque um reverse proxy com TLS (transport layer security) à frente da aplicação antes de encaminhar qualquer cliente para ela.

Ficheiro compose de produção do Kimai, da documentação do projeto
services:

  sqldb:
    image: mysql:8.3
    volumes:
      - mysql:/var/lib/mysql
    environment:
      - MYSQL_DATABASE=kimai
      - MYSQL_USER=kimaiuser
      - MYSQL_PASSWORD=kimaipassword
      - MYSQL_ROOT_PASSWORD=changemeplease
    command: --default-storage-engine innodb
    restart: unless-stopped
    healthcheck:
      test: mysqladmin -uroot -p$$MYSQL_ROOT_PASSWORD ping -h 127.0.0.1 --silent
      interval: 10s
      timeout: 5s
      retries: 12
      start_period: 30s

  kimai:
    image: kimai/kimai2:stable
    depends_on:
      sqldb:
        condition: service_healthy
        restart: true
    volumes:
      - data:/opt/kimai/var/data
      - plugins:/opt/kimai/var/plugins
    ports:
      - 8001:8001
    environment:
      - APP_SECRET=your-fantastic-long-random-and-ultra-secure-secret
      - TRUSTED_HOSTS=kimai.example.com
      - ADMINMAIL=admin@example.com
      - ADMINPASS=changemeplease
      - DATABASE_URL=mysql://kimaiuser:kimaipassword@sqldb/kimai?charset=utf8mb4&serverVersion=8.3.0
    restart: unless-stopped

volumes:
  data:
  mysql:
  plugins:

Defina APP_SECRET como uma cadeia longa e aleatória criada por si e TRUSTED_HOSTS como o domínio que utilizará realmente. ADMINMAIL e ADMINPASS criam o primeiro administrador no primeiro arranque. Altere essa palavra-passe na interface depois e remova-a novamente do ficheiro.

O InvoicePlane não tem contentor. Crie primeiro uma base de dados vazia.

sudo mysql -e "CREATE DATABASE invoiceplane CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

Transfira o arquivo a partir da página de releases do projeto, extraia-o para a raiz web, copie ipconfig.php.example para ipconfig.php e defina o seu URL nesse ficheiro, seguindo os comentários incluídos. Depois, abra https://your-domain.example/index.php/setup e siga o instalador.

Por que a sua fatura vai parar à pasta de spam

Esta é a falha que lhe custa dinheiro, e a aplicação indicará sem problemas que a fatura foi enviada.

Não envie mensagens de fatura a partir do próprio endereço IP do VPS. Um endereço IP novo de um VPS não tem histórico de envio, e os grandes destinatários tratam, por predefinição, a primeira mensagem de um endereço desconhecido num bloco de alojamento como suspeita. Envie através de um relay SMTP (simple mail transfer protocol) num domínio que tenha autenticado. Fazer isso de ponta a ponta é um guia próprio, e enviar mensagens de forma fiável a partir de uma aplicação self-hosted explica o relay, os registos DNS e os testes.

O endereço From é onde a maioria das configurações de faturação falha. Tem de pertencer a um domínio que controla e que o seu relay assina com DKIM (domainkeys identified mail). Colocar o endereço do próprio cliente em From parece cortês, mas impede a entrega, porque o servidor destinatário verifica se o domínio de From corresponde ao domínio que autenticou a mensagem. O Gmail rejeita imediatamente esta incompatibilidade:

550 5.7.1 Unauthenticated email from example.com is not accepted due to domain's DMARC policy

Mantenha o seu próprio endereço em From e coloque o cliente em Reply-To. Verifique os registos publicados antes de enviar qualquer mensagem real.

dig +short TXT example.com
dig +short TXT _dmarc.example.com
dig +short TXT selector1._domainkey.example.com

O primeiro comando deve devolver um registo SPF (sender policy framework) que identifique o seu relay. O segundo deve devolver uma política DMARC (domain-based message authentication, reporting and conformance). O terceiro depende do selector fornecido pelo seu relay. Uma resposta vazia significa que o registo DKIM está em falta ou foi publicado com o nome errado. Nesse caso, todas as mensagens enviadas falharão a verificação da assinatura.

Depois, envie uma fatura real para uma conta sua num grande fornecedor e leia os cabeçalhos completos. dkim=pass e spf=pass no cabeçalho Authentication-Results são a única prova que conta. O estado "sent" da aplicação significa apenas que esta entregou a mensagem ao relay.

Backups: a única base de dados que não pode perder

Perder um servidor multimédia significa voltar a descarregar os ficheiros. Mesmo um servidor de fotografias self-hosted, como o PhotoPrism ou o Immich normalmente mantém uma segunda cópia dos originais que ainda existem no telefone que os captou. Perder a base de dados de faturação significa não conseguir mostrar o que faturou, o que recebeu ou o que ainda deve receber. Trate-a de acordo com essa importância.

Faça cópias de segurança de quatro elementos. A base de dados. O volume de armazenamento, que contém logótipos, PDFs gerados e recibos de despesas. O ficheiro de ambiente da aplicação. E os PDFs renderizados mantidos como ficheiros normais, porque um PDF abre daqui a dez anos sem a aplicação que o produziu.

O ficheiro de ambiente é mais importante do que muitas pessoas esperam. O Laravel cifra os valores sensíveis armazenados, incluindo as credenciais do gateway de pagamentos, usando o APP_KEY desse ficheiro. Se restaurar a base de dados junto de uma chave gerada novamente, esses valores não serão decifrados. Todas as suas faturas estarão presentes, mas as definições do gateway ficarão ilegíveis.

Um dump da stack do InvoiceShelf tem este aspeto. O serviço da base de dados é executado em mariadb:10, por isso a ferramenta dentro do contentor é mariadb-dump.

docker compose exec -T database mariadb-dump \
  --user=root --password=YOUR_ROOT_PASSWORD \
  --single-transaction --databases invoiceshelf > invoiceshelf.sql

--single-transaction cria um snapshot consistente das tabelas InnoDB sem as bloquear, por isso a aplicação continua a servir pedidos enquanto o dump é executado. -T impede o Docker de alocar um terminal, o que poderia corromper a saída redirecionada e produzir um ficheiro de dump que não seria importado.

Envie esse ficheiro para fora do servidor segundo um agendamento, usando cópias de segurança restic cifradas para armazenamento externo, e defina a retenção por tempo suficiente para abranger o período indicado pelo seu contabilista.

Depois, restaure-o. Inicie o dump num contentor temporário, inicie sessão e abra a fatura do mês passado. Enquanto não fizer isto uma vez, não saberá se a cópia de segurança funciona.

O que o seu contabilista vai pedir

Não obtenha aconselhamento fiscal a partir de um tutorial. O que se segue descreve o que este software consegue produzir, para que possa levar a lista à pessoa que o aconselha.

Dados exportáveis. Deve conseguir exportar as suas faturas e pagamentos para CSV a partir da interface, sem um cliente de base de dados e sem abrir um pedido de suporte. Um dump SQL é uma cópia de segurança, não uma exportação, porque o seu contabilista não o consegue abrir.

Numeração imutável. Os números das faturas devem seguir uma sequência e nunca ser reutilizados, sem lacunas. Eliminar uma fatura deixa uma lacuna que terá de ser explicada. Em vez disso, cancele a fatura ou emita uma nota de crédito, algo que todas as aplicações aqui suportam. A obrigatoriedade de uma numeração sem lacunas depende do local onde está registado, pelo que vale a pena perguntar desde cedo.

Retenção. Guarde os dumps da base de dados e os PDFs gerados durante o período exigido pelas suas regras. O PDF é o documento que foi efetivamente enviado e é esse o artefacto relevante se uma fatura for contestada.

Um histórico de alterações. É útil conseguir mostrar quem editou uma fatura e quando o fez, e este é o aspeto que mais varia entre estas aplicações. O Invoice Ninja mantém um registo de atividade por registo.

A faturação eletrónica estruturada tornou-se um requisito real, e não apenas um extra conveniente, em algumas partes da UE. O Invoice Ninja gera os formatos comuns, incluindo ZUGFeRD e XRechnung, Facturae, FatturaPA e o EN16931 genérico. A entrega através da rede Peppol a partir de uma instância self-hosted é feita pelo próprio access point do Invoice Ninja: regista a sua entidade junto deles e compra créditos por submissão, pelo que é um serviço pago em agosto de 2026. O Kimai suporta os mesmos formatos através do seu plugin pago. As outras três aplicações não produzem atualmente faturas eletrónicas estruturadas, o que constitui a razão mais forte para escolher o Invoice Ninja se emitir faturas dentro da UE.

FAQ

Devo instalar o Crater ou o InvoiceShelf?

InvoiceShelf. A branch padrão do Crater não recebe um commit há 741 dias em 21 de agosto de 2026, e o próprio rastreador de issues encaminha os utilizadores para o fork. O InvoiceShelf mantém a mesma licença AGPL-3.0 e o mesmo modelo de dados, por isso a migração entre os dois é uma migração de base de dados, não uma reescrita. Qualquer guia que ainda recomende o Crater foi escrito antes de o projeto ficar inativo.

Posso usar o Invoice Ninja na minha própria empresa sem pagar?

Sim. O Invoice Ninja self-hosted é totalmente funcional e não tem custos sob a Elastic License 2.0, incluindo faturas recorrentes, o portal do cliente e gateways de pagamento. Há duas funcionalidades com custo. Remover a identificação do Invoice Ninja das páginas voltadas para os clientes requer a licença white-label, "$40 per year" nas palavras do próprio projeto em agosto de 2026. O envio de faturas eletrónicas pela rede Peppol é cobrado separadamente conforme o uso. O que a licença proíbe é executar o software como um serviço alojado para outras pessoas.

Por que motivo os meus emails de faturas vão para a pasta de spam?

Quase sempre porque a mensagem não está autenticada para o domínio indicado no endereço From. Envie através de um relay SMTP, em vez de enviar diretamente do VPS, publique registos SPF e DMARC para o seu domínio e adicione o registo DKIM no selector fornecido pelo relay. Mantenha o seu próprio endereço em From e coloque o cliente em Reply-To. Definir o endereço do cliente como remetente faz com que o Gmail rejeite a mensagem com 550 5.7.1 Unauthenticated email from example.com is not accepted due to domain's DMARC policy. Confirme a correção procurando dkim=pass e spf=pass no cabeçalho Authentication-Results de uma mensagem de teste.

Qual devo escolher se cobro à hora?

Kimai. É principalmente um sistema de registo de tempo, por isso a fatura é gerada a partir dos registos de horas aprovados e os itens são o trabalho que registou. Os modelos são ficheiros DOCX, ODS ou XLSX que cria num processador de texto, o que é mais simples do que editar CSS. A desvantagem é que o Kimai não tem portal do cliente nem gateway de pagamento, por isso envia o PDF por email e recebe o pagamento por transferência. O Invoice Ninja também regista tempo e tem um portal, por isso escolha-o se o pagamento online com cartão for mais importante para si do que o detalhe dos registos de horas.

O que preciso exatamente de incluir nos backups?

A base de dados, o volume de armazenamento que contém os logótipos e os PDFs gerados, o ficheiro de ambiente e os PDFs renderizados mantidos como ficheiros normais. O ficheiro de ambiente é o elemento que muitas pessoas esquecem: aplicações Laravel como o Invoice Ninja e o InvoiceShelf encriptam as credenciais armazenadas com APP_KEY, por isso restaurar a base de dados junto de uma chave recém-gerada deixa as definições do gateway de pagamento ilegíveis. Restaure tudo numa instância descartável uma vez e abra uma fatura antiga, porque essa é a única forma de confirmar que o backup funciona.