Skip to content

marotoweb/declaracriptopt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Documento técnico: Um algoritmo aberto para a fiscalidade de criptoativos em Portugal

License: MIT Version


⚠️ Aviso legal e limitações (leitura obrigatória)

Este algoritmo é uma ferramenta de cálculo baseada numa interpretação lógica do Código do IRS e nas orientações dos informativos fiscais vigentes. No entanto, existem nuances legais críticas que exigem intervenção manual do utilizador:

  1. Security tokens (valores mobiliários): O algoritmo assume por defeito que os ativos NÃO são valores mobiliários. Se o criptoativo representar uma participação financeira, dívida ou direito a dividendos (ex: tokens de equity, bonds tokenizados), a isenção de 365 dias NÃO se aplica. Estes ativos são sempre tributados (Categoria G), independentemente do tempo de detenção. O utilizador deve assinalar manualmente estes ativos como isSecurityToken: true.
  2. Staking e rendimentos em cripto: De acordo com o entendimento do regime fiscal português, os rendimentos gerados e pagos diretamente em criptoativos (como recompensas de staking, lending, airdrops ou yield farming) beneficiam de um regime de suspensão de tributação.
    • Quando se aplica? Aplica-se no exato momento em que recebes os tokens na tua carteira. Como recebeste ativos digitais e não moeda fiduciária (Euros), a AT "congela" a exigência do imposto. Não há qualquer tributação imediata ou obrigação de declarar.
    • Como o algoritmo trata isto? Para refletir esta suspensão, o algoritmo regista estas entradas com um custo de aquisição = 0,00€ (custo zero), iniciando aí a contagem do prazo de detenção de 365 dias.
    • Quando termina a suspensão? A suspensão cessa no momento em que realizas uma alienação onerosa para moeda fiat (venda por Euros, Dólares, etc.) ou compras bens/serviços com esses tokens. Nesse instante, geras liquidez real e o imposto é devido na Categoria G (mais-valias) sobre 100% do valor da venda (já que o teu custo guardado foi zero), a menos que o ativo tenha sido detido por 365 dias ou mais, caso em que fica legalmente excluído de tributação.
  3. Exclusão de NFT: Conforme detalhado nas orientações doutrinárias e informativos fiscais especializados (como o Informativo Fiscal da APECA), as operações e ganhos associados a NFT (ativos não fungíveis) encontram-se excluídos de tributação na categoria de criptoativos. O algoritmo ignora o cálculo de mais-valias sobre estes itens para efeitos de imposto, tratando-os como bens digitais não sujeitos a esta moldura fiscal.
  4. Matriz de anexos da declaração de IRS: O cálculo da mais-valia baseia-se na regra FIFO, e o destino de exportação do relatório segue estritamente a estrutura e instruções dos formulários oficiais da Autoridade Tributária, cruzando a natureza do ativo, o prazo de detenção e a jurisdição da entidade:
    • Curto prazo (< 365 dias) - Tributáveis (taxa autónoma de 28%):
      • Se a operação ocorreu no estrangeiro ou self-custody (isNational: false): Deve ser declarada detalhadamente no Anexo J, Quadro 9.4A.
      • Se a operação ocorreu através de um intermediário nacional (isNational: true): Deve ser declarada no Anexo G, Quadro 18A.
    • Longo prazo (>= 365 dias) - Não sujeitas a tributação:
      • Independentemente de estarem em carteiras privadas (self-custody), exchanges internacionais ou corretoras nacionais, os ganhos com criptoativos comuns detidos por mais de um ano estão excluídos de tributação. Devem ser declarados na totalidade no Anexo G1, Quadro 7 (mais-valias não sujeitas a tributação).
  5. Exclusão de atividade profissional (Categoria B / IRC): Este algoritmo abrange única e exclusivamente a gestão de património privado (Categoria G - mais-valias de particulares). Se o utilizador exercer uma atividade comercial ou profissional de compra e venda de criptoativos, mineração em escala industrial, ou se as transações forem efetuadas em nome de uma pessoa coletiva (empresa), os rendimentos enquadram-se na Categoria B (regime simplificado ou contabilidade organizada) ou em sede de IRC. Nestes cenários, aplicam-se regras de determinação de lucro e taxas de tributação totalmente distintas, estando fora do âmbito deste algoritmo.

Índice


1. Objetivo do projeto

Este repositório contém uma especificação técnica aberta e um algoritmo para o cálculo fiscal de mais-valias de criptoativos em Portugal, de acordo com o Código do IRS.

O objetivo é criar e manter uma "fonte da verdade" lógica e transparente que possa ser:

  • Validada por especialistas em fiscalidade e contabilidade.
  • Discutida e melhorada pela comunidade.
  • Implementada por qualquer desenvolvedor ou aplicação que precise de calcular mais-valias de criptoativos em Portugal.

Este é um projeto de lógica e especificação, não de código. A sua contribuição, seja através de uma issue para apontar uma falha na interpretação da lei ou de um pull request para melhorar este documento, é extremamente bem-vinda.


2. Arquitetura do algoritmo (v1.5)

1. Visão geral e conformidade legal

Este documento descreve um algoritmo fiscal, desenhado para estar em conformidade com o Código do IRS português, nomeadamente os Artigos 10.º e 43.º. A abordagem segue uma interpretação conservadora, rigorosa e lógica da lei.

O motor opera sobre cinco princípios fundamentais:

  1. FIFO por entidade depositária (Art. 43.º, n.º 9): O método FIFO (First-In, First-Out) é aplicado individualmente a cada "entidade depositária" (ex.: exchanges). Todas as carteiras self-custody (frias, quentes, etc.) são tratadas como uma única entidade depositária para efeitos de cálculo, a menos que o utilizador opte por separá-las.

  2. Transferência entre entidades é um evento neutro: Transferir ativos entre entidades do mesmo titular é uma mera mudança de local de custódia. Não é um evento tributável. O lote transferido mantém custo e data de aquisição originais.

  3. Neutralidade fiscal para permutas cripto-cripto (Art. 10.º, n.º 20): Numa permuta cripto-cripto (ex.: BTC → ETH), a operação é uma alienação onerosa mas não gera tributação no momento da troca. O novo ativo é considerado uma nova aquisição, com valor de aquisição igual ao valor de aquisição do ativo entregue, e nova data da permuta. Este valor e nova data servirão como base para o cálculo de futuras mais-valias. Nota: A contagem dos 365 dias reinicia para o novo ativo recebido.

  4. Rendimentos em cripto (staking/airdrop/rewards/interest): São tratados sob o regime de suspensão de tributação. O custo de aquisição é Zero.

    • Fiscalidade: Não são tributados no momento da receção. A tributação ocorre apenas no momento da alienação onerosa (venda para Euros), sendo enquadrada na Categoria G (mais-valias).
    • Custo para mais-valias: O cost basis é 0,00€, garantindo que o valor total da venda futura seja tributável ou isento de acordo com a regra dos 365 dias.
  5. Distinção security tokens vs. criptoativos comuns:

    • Criptoativos comuns (valores não mobiliários ex: BTC, ETH): Isentos de imposto se detidos por >= 365 dias.
    • Security tokens (valores mobiliários): Nunca isentos. Sempre tributados à taxa de 28% (ou englobamento), independentemente do tempo de detenção.

2. Estrutura de dados: lotes e o campo originalAcquisitionDate

O sistema utiliza uma estrutura de pilhas FIFO por entidade: um Map<Entity, Map<Asset, List<Lot>>>.

Definição de entidade

Cada entidade (carteira ou exchange) deve ser criada com os seguintes atributos:

  • name: Nome dado pelo utilizador à carteira (ex: "Binance", "Ledger Nano X").
  • type: O tipo de carteira. Ex: 'Exchange', 'Cold Wallet', 'Hot Wallet', 'Other'.
  • creationDate: Data em que a carteira foi criada.
  • isNational: 'true' | 'false'.
    • Se 'isNational = true' → Relatório para Anexo G.
    • Se 'isNational = false' → Relatório para Anexo J.

Regra crítica para carteiras self-custody: Carteiras frias (Hardware Wallets como Ledger, Trezor) e carteiras quentes (Software Wallets como Metamask, Trust Wallet, Phantom) são SEMPRE consideradas isNational = false.

  • Motivo: Não existe uma entidade intermediária sediada em Portugal a custodiar os ativos; o utilizador detém as chaves privadas numa rede descentralizada global.
  • Ação: Ao criar uma entidade do tipo "Wallet Pessoal", defina automaticamente isNational: 'false'. O relatório gerado será para o Anexo J.

Estrutura do lote (Lot)

Cada Lot deve ter:

  • acquisitionDate: Data da operação atual (ou da transferência).
  • costPerUnit: Custo unitário em EUR.
  • amount: Quantidade do ativo.
  • originalAcquisitionDate (opcional): Data da compra original (crucial para a regra dos 365 dias).
  • isSecurityToken (boolean): Define se o ativo está sujeito a tributação obrigatória (sem isenção de 365 dias).

📝 Nota: O campo originalAcquisitionDate preserva a data de compra original quando um ativo é transferido entre entidades, impedindo o reinício incorreto do contador dos 365 dias.


3. Tratamento por tipo de transação

3.1. deposit

Um depósito é sempre uma aquisição que cria um novo lote:

  • tag: 'buy': costPerUnit = fiatValue, acquisitionDate = data da transação.
  • tag: 'staking', 'airdrop', 'interest', 'rewards':
    • costPerUnit = 0,00€ (suspensão de tributação).
    • acquisitionDate = data da transação (início da contagem dos 365 dias).
  • originalAcquisitionDate = null.

➤ Caso 1: compra com FIAT (tag: 'buy')

Exemplo:

  • Data: 2023-01-15
  • Entidade: Binance
  • Ativo: BTC
  • Quantidade: 1.0
  • Valor em FIAT: 30.000€

Resultado:

  • Cria novo lote:
    • acquisitionDate = 2023-01-15
    • costPerUnit = 30.000€
    • amount = 1.0
    • originalAcquisitionDate = null
    • isSecurityToken = false

➤ Caso 2: rendimento passivo (tag: 'staking')

Exemplo:

  • Data: 2024-03-10
  • Entidade: Ledger (ou exchange)
  • Ativo: ETH
  • Quantidade: 0.05

Cálculo interno do algoritmo:

  • Custo de aquisição = 0,00€

Resultado:

  • Cria novo lote:
    • acquisitionDate = 2024-03-10
    • costPerUnit = 0,00€
    • amount = 0.05
    • originalAcquisitionDate = 2024-03-10
  • Ação fiscal: Nenhuma declaração imediata no momento da receção. A tributação ocorrerá apenas na venda deste lote por Euros ou outra moeda fiduciária. Se detido por mais de 365 dias, a venda total (lucro 100%) estará isenta.

3.2. withdrawal

Inclui qualquer alienação para algo não-cripto, como:

  • FIAT
  • NFT
  • Compra de bens ou serviços
  • Pagamentos com cartões que gastem a sua cripto

Caso seja alienação para algo não-cripto (fiatValue > 0):

➡️ Evento tributável.

Aciona _calculateFifoForSale na entidade de origem.

Para cada lote consumido: data de aquisição efetiva = originalAcquisitionDate ?? acquisitionDate

Regra de tributação:

  1. Se isSecurityToken == true: Sempre tributável (28% ou englobamento).
  2. Se isSecurityToken == false:
    • Dias detidos < 365: Tributável (28% ou englobamento).
    • Dias detidos >= 365: Isento.

Caso seja transferência (tag = 'transfer' e fiatValue = null):

➡️ Evento neutro.

  1. Consome lotes da entidade de origem.
  2. Cria lotes na entidade de destino.
  3. Preserva os seguintes dados inalterados:
    • costPerUnit
    • originalAcquisitionDate
    • isSecurityToken

A data da transferência acquisitionDate não influencia os 365 dias.

➤ Caso 1: venda para FIAT (fiatValue > 0, tag: 'sell')

Exemplo:

  • Data: 2024-10-01
  • Entidade: Binance (estrangeira) → Anexo J
  • Ativo: BTC
  • Quantidade: 0.5
  • Valor em FIAT: 30.000€
  • Custo do lote consumido (FIFO): 0.5 × 30.000€ = 15.000€
  • Data de aquisição efetiva: 2023-01-15
  • Dias detidos: 624 dias → Isento (se não for security token)

Cálculo:

  • Mais-valia = 30.000€ - 15.000€ = 15.000€
  • Tributação: Isento (≥ 365 dias e não-security token)

➤ Caso 2: venda para FIAT com taxa em cripto

Exemplo:

  • Data: 2024-10-01
  • Entidade: Binance
  • Ativo: BTC
  • Quantidade: 0.5
  • Valor em FIAT: 30.000€
  • Taxa: 0.001 BTC (valor implícito: 60€)
  • Custo do lote consumido: 15.000€
  • Dias detidos: 180 dias → Tributável

Cálculo:

  • Mais-valia principal = 30.000€ - 15.000€ = 15.000€
  • Micro-alienação da taxa:
    • Custo da taxa = 0.001 × 30.000€ = 30€
    • Mais-valia da taxa = 60€ - 30€ = 30€
  • Total mais-valia = 15.000€ + 30€ = 15.030€
  • IRS devido = 15.030€ × 28% = 4.208,40€ (ou taxa progressiva se englobado)

➤ Caso 3: transferência entre entidades com taxa (tag: 'transfer', fiatValue = null)

Exemplo:

  • Data: 2024-06-01
  • Entidade de origem: Binance
  • Entidade de destino: Ledger
  • Ativo: BTC
  • Quantidade enviada: 0.5
  • Taxa: 0.001 BTC (valor implícito: 60€)
  • Custo do lote consumido: 0.5 × 30.000€ = 15.000€
  • Data de aquisição original: 2023-01-15

Resultado:

  • Micro-alienação da taxa:
    • Custo da taxa = 0.001 × 30.000€ = 30€
    • Mais-valia da taxa = 60€ - 30€ = 30€ (tributável se o lote da taxa tiver < 365 dias)
  • Cria novo lote na Ledger:
    • acquisitionDate = 2024-06-01
    • costPerUnit = 30.000€
    • amount = 0.499
    • originalAcquisitionDate = 2023-01-15
    • isSecurityToken = (mantido do original)

➡️ Evento neutro fiscalmente para o principal, mas a taxa é uma micro-alienação tributável.


3.3. trade (permuta cripto-cripto)

➡️ Evento neutro - Art. 10.º, n.º 20

  1. Consome lotes do ativo entregue.
  2. Cria novo lote do ativo recebido.
  3. O custo do novo lote é: costPerUnit = custo de aquisição dos lotes entregues (proporcional).
  4. acquisitionDate = data da permuta.
  5. originalAcquisitionDate = null (O contador de 365 dias reinicia para o novo ativo).
  6. isSecurityToken = (definido conforme a natureza do novo ativo recebido).

➤ Caso 1: permuta simples (BTC → ETH)

Exemplo:

  • Data: 2024-07-01
  • Entidade: Binance
  • Ativo entregue: BTC (0.5) - Custo total: 15.000€
  • Ativo recebido: ETH (0.3)

Resultado:

  • Cria novo lote de ETH:
    • acquisitionDate = 2024-07-01
    • costPerUnit = 15.000€ / 0.3 = 50.000€/ETH
    • amount = 0.3
    • originalAcquisitionDate = null (contador reinicia)
    • isSecurityToken = false (assumindo ETH comum)

➡️ Evento neutro fiscalmente, não gera tributação imediata.


➤ Caso 2: permuta com múltiplos ativos (BTC → ETH + SOL)

Exemplo:

  • Data: 2024-08-15
  • Entidade: Binance
  • Ativo entregue: BTC (1.0) - Custo total: 30.000€
  • Ativos recebidos: ETH (0.3) + SOL (0.2)
  • Valor de mercado implícito no momento da permuta:
    • ETH: 100€/unidade → 0.3 × 100€ = 30€ (75% do valor total)
    • SOL: 50€/unidade → 0.2 × 50€ = 10€ (25% do valor total)
    • Total: 40€ (valores relativos para distribuição de custo)

Cálculo do custo proporcional:

  • Custo total do BTC entregue: 30.000€
  • Custo do ETH = 75% × 30.000€ = 22.500€
  • Custo do SOL = 25% × 30.000€ = 7.500€

Resultado:

  • Lote de ETH:
    • acquisitionDate = 2024-08-15
    • costPerUnit = 22.500€ / 0.3 = 75.000€/ETH
    • amount = 0.3
    • originalAcquisitionDate = null
  • Lote de SOL:
    • acquisitionDate = 2024-08-15
    • costPerUnit = 7.500€ / 0.2 = 37.500€/SOL
    • amount = 0.2
    • originalAcquisitionDate = null

➡️ Evento neutro fiscalmente, não gera tributação imediata.


4. Tratamento das taxas

A lógica de tratamento de taxas é 100% offline e determinística. A nossa interpretação baseia-se na aplicação consistente dos princípios gerais de "alienação onerosa" (Art. 10.º) e "apuramento de mais-valias" (Art. 43.º).

4.1. Taxa paga em FIAT

➡️ É apenas um encargo da alienação, subtraído no cálculo da mais-valia.

4.2. Taxa paga em cripto

A taxa é uma micro-alienação do ativo usado para pagá-la.

Valor de realização:

  1. Venda para FIAT: Usa o preço implícito da venda: valor = fiatValue / fromAmount

  2. Permuta ou transferência: Usa feeFiatValue, introduzido pelo utilizador.

Dupla entrada fiscal aplicável apenas quando deve ser:

  • Venda FIAT: - apura mais/menos-valia da taxa

    • adiciona o valor às despesas dedutíveis da alienação principal (ou soma à mais-valia se considerada venda parcial)
  • Permuta ou transferência: - só apura a micro-alienação da taxa

    • não soma nada à operação principal (porque é neutra)

➤ Caso 1: taxa paga em FIAT

Exemplo:

  • Venda de 0.5 BTC por 30.000€
  • Taxa em FIAT: 50€

Resultado:

  • Mais-valia = 30.000€ - 15.000€ - 50€ = 14.950€
  • Se tributável (< 365 dias): IRS = 14.950€ × 28% = 4.186€

➤ Caso 2: taxa paga em cripto

Exemplo:

  • Venda de 0.5 BTC por 30.000€
  • Taxa: 0.001 BTC (valor implícito: 60€)
  • Custo da taxa: 0.001 × 30.000€ = 30€
  • Mais-valia da taxa: 60€ - 30€ = 30€

Resultado:

  • Mais-valia principal = 30.000€ - 15.000€ = 15.000€
  • Total mais-valia = 15.000€ + 30€ = 15.030€
  • IRS = 15.030€ × 28% = 4.208,40€

📝 Nota sobre taxas em transferências: Mesmo que a transferência entre entidades do mesmo titular seja neutra fiscalmente, a taxa de rede paga em cripto é uma micro-alienação — e deve ser apurada separadamente para manter a precisão dos custos nos lotes.


5. Tratamento fiscal de NFT

5.1 O que é NFT?

NFT significa Non-Fungible Token, em português: Token Não Fungível.

Não fungível = único e irrepetível. Diferente de moedas ou criptomoedas (como Bitcoin ou Ethereum), que são fungíveis. Um NFT é único - não pode ser trocado por outro igual.

Exemplo:

  • Um Bitcoin = outro Bitcoin → fungível.
  • Um NFT de uma obra de arte digital = só existe um → não fungível.

5.2. Enquadramento fiscal de NFT em Portugal (CIRS)

Para efeitos do Código do IRS, e suportado pelas orientações doutrinárias recentes (como as divulgadas pela APECA), os NFT possuem uma exclusão expressa de tributação na categoria de criptoativos, por carecerem da característica de fungibilidade exigida pela redação da lei.

  • Comportamento do algoritmo: Transações identificadas como NFT não originam apuramento de mais-valias tributáveis, poupando a sua inclusão nos quadros de reporte fiscal de mais-valias padrão de criptoativos.

6. Tratamento fiscal de DeFi

6.1. O que é DeFi?

DeFi (Decentralized Finance) = Finanças Descentralizadas. São aplicações financeiras construídas em blockchains que não dependem de intermediários tradicionais.

Exemplos comuns de DeFi:

  • Staking (delegar tokens para validar redes)
  • Lending & Borrowing (emprestar ou pedir emprestado cripto)
  • Liquidity pools (fornecer liquidez em exchanges descentralizadas como Uniswap)
  • Yield farming (ganhar recompensas por fornecer liquidez)
  • Stablecoins (USDC, DAI, etc.)

6.2. Enquadramento fiscal de DeFi em Portugal (CIRS)

O Código do IRS não distingue explicitamente entre DeFi e CeFi, ou seja, o tratamento fiscal é o mesmo para todos os ativos móveis.

6.3 Princípios aplicáveis ao DeFi:

  1. Rendimentos passivos (staking, yield farming): São tratados sob o regime de suspensão de tributação. O custo de aquisição é 0,00€.
  2. Alienação de ativos DeFi (venda, troca, saque): Mais-valia calculada com FIFO.
  3. Permutas DeFi (ex.: ETH → LP token): Neutras fiscalmente (Art. 10.º, n.º 20).
  4. Taxas em DeFi (gas fees): Tratadas como micro-alienações se pagas em cripto.
  5. Isenção após 365 dias: Aplicável apenas a criptoativos não-mobiliários.

6.4. Como implementar DeFi no algoritmo

➤ Caso 1: staking / yield farming / recompensas

Exemplo:

  • Data: 2024-06-15
  • Entidade: Uniswap (DeFi)
  • Ativo: USDC
  • Quantidade: 100
  • Tipo: deposit, Tag: defi

Resultado:

  • Cria novo lote:
    • acquisitionDate = 2024-06-15
    • costPerUnit = 0,00€
    • amount = 100
    • originalAcquisitionDate = 2024-06-15
  • Ação fiscal: Nenhuma no momento da receção. A tributação ocorrerá apenas na venda por Euros (Categoria G).

➤ Caso 2: fornecimento de liquidez (liquidity pool)

Exemplo:

  • Data: 2024-07-01
  • Entidade: Uniswap
  • Ativo entregue: ETH (0.5) + USDC (500)
  • Custo total dos ativos entregues: 0.5 × 3.000€ + 500€ = 2.000€
  • Ativo recebido: UNI-V2 LP Token (1.0)

Resultado:

  • Cria novo lote de LP token:
    • acquisitionDate = 2024-07-01
    • costPerUnit = 2.000€ / 1.0 = 2.000€/LP
    • amount = 1.0
    • originalAcquisitionDate = null (contador reinicia)

➡️ Evento neutro fiscalmente, permuta cripto-cripto.


➤ Caso 3: retirada de liquidez (withdrawal de LP)

Exemplo:

  • Data: 2025-01-10
  • Entidade: Uniswap
  • Ativo: UNI-V2 LP Token (1.0)
  • Quantidade: 1.0
  • Valor em FIAT (mercado): 2.500€
  • Custo do LP Token: 2.000€
  • Dias detidos: 193 dias → Tributável

Cálculo:

  • Mais-valia = 2.500€ - 2.000€ = 500€
  • IRS = 500€ × 28% = 140€
  • Nota: Os ativos recebidos de volta (ETH, USDC) entram como novos lotes com custo igual ao seu valor de mercado no dia da retirada (2.500€ no total).

➤ Caso 4: taxas em DeFi (gas fees)

Exemplo:

  • Transação DeFi (ex.: staking)
  • Taxa paga em ETH: 0.005 ETH
  • Valor implícito da taxa: 15€
  • Custo da taxa (FIFO): 15€

Resultado:

  • Micro-alienação da taxa: 15€ - 15€ = 0€ (nenhuma mais-valia)
  • Se a operação principal for tributável, a taxa é dedutível como encargo (se paga em FIAT) ou apurada como micro-alienação (se paga em cripto).

7. Sumário final

  • Depósitos: criam novos lotes com o custo real (no caso de uma compra) ou com custo zero (no caso de rendimentos passivos recebidos diretamente em criptoativos).
  • Alienações para FIAT, bens ou serviços: o enquadramento depende do tempo de detenção e da natureza do ativo:
    • Se detidos por menos de 365 dias: são tributáveis (Categoria G).
    • Se detidos por 365 dias ou mais: estão excluídos de tributação (exceto security tokens).
  • Alienações de NFT: de acordo com o enquadramento legal, os ganhos com NFT estão totalmente excluídos de tributação na categoria de criptoativos, por não partilharem da natureza fungível prevista na lei.
  • Security tokens: Sempre tributáveis (Categoria G), independentemente do tempo de detenção. Não beneficiam da isenção de longo prazo.
  • Transferências entre entidades: evento totalmente neutro que apenas altera o local de custódia (self-custody ou exchanges). Preserva a data e o custo de aquisição originais para o cálculo do FIFO.
  • Permutas (trades): evento fiscalmente neutro (Art. 10.º, n.º 20) - o novo ativo recebido herda o custo de aquisição proporcional do ativo entregue e reinicia a contagem do prazo de 365 dias para zero.
  • Taxas (gas fees): separa a lógica conforme a moeda de pagamento:
    • Taxas pagas em fiat: reduzem o valor de realização / acrescem aos encargos dedutíveis da operação principal.
    • Taxas pagas em criptoativos: são tratadas como micro-alienações autónomas do ativo usado para o pagamento.

Matriz de exportação de relatórios (IRS)

A geração de relatórios de exportação cruza a natureza do ativo, o prazo de detenção e a jurisdição da entidade para o preenchimento correto dos anexos da Autoridade Tributária:

Natureza do Ativo Prazo de Detenção Entidade Nacional (isNational: true) Entidade Estrangeira / Self-Custody (isNational: false)
Criptoativo Comum (ex: BTC, ETH) Curto Prazo (< 365 dias) Anexo G, Quadro 18A Anexo J, Quadro 9.4A
Criptoativo Comum (ex: BTC, ETH) Longo Prazo ($\ge$ 365 dias) Anexo G1, Quadro 7 Anexo G1, Quadro 7

8. Fluxograma das transações

flowchart TD
  A[Início: Transação de Cripto] --> B{Tipo de Transação?}

  B -->|Deposit<br>Compra| C[Cria novo Lot]
  C --> C1{Tag?}
  C1 -->|Buy| C2[CostPerUnit = fiatValue,<br> acquisitionDate = data da <br>transação]
  C1 -->|Staking/Airdrop/Interest| C3[CostPerUnit = 0,00€<br>Suspensão de Tributação]
  C1 -->|Defi| C4[CostPerUnit = 0,00€<br> se rendimento em cripto]

  B -->|Withdrawal<br>Alienação não-cripto| D[Evento Tributável?]
  D --> D1{É Security Token?}
  D1 -->|Sim| D2[Sempre Tributável<br> Sem isenção 365 dias]
  D1 -->|Não| D3[Verificar Dias Detidos]
  D3 -->|< 365 dias| D4[Tributável<br> Cat. G]
  D3 -->|&gt= 365 dias| D5[Isento<br> Cat. G]
  D2 & D4 & D5 --> D6[Apurar Mais-Valia FIFO<br> Usar originalAcquisitionDate]

  B -->|Transfer/Transferência| E[Evento Fiscalmente Neutro]
  E --> E1[Consumir Lot da<br> entidade de origem]
  E1 --> E2[Criar novo Lot na<br> entidade de destino]
  E2 --> E3[Preservar costPerUnit,<br> originalAcquisitionDate<br> e isSecurityToken]

  B -->|Trade/Permuta| F["Evento Neutro<br> 'Art. 10.º, n.º 20'"]
  F --> F1[Consumir Lot do ativo<br> entregue 'FIFO']
  F1 --> F2[Criar novo Lot para ativo<br> recebido]
  F2 --> F3[CostPerUnit <br>=<br> custo de aquisição<br> dos lotes entregues]
  F3 --> F4[acquisitionDate <br>=<br> data da permuta<br> originalAcquisitionDate = null<br> Contador 365 dias REINICIA]

  B -->|DeFi| G[Tratar como<br> staking, LP, ou troca]
  G --> G1{Tipo de DeFi?}
  G1 -->|Staking/Rewards| G2[CostPerUnit = 0,00€<br>Suspensão de Tributação]
  G1 -->|LP/Permuta| G3[CostPerUnit = custo<br> dos ativos entregues<br> Reinicia 365 dias]
  G1 -->|Withdrawal LP| G4[Alienação do LP Token<br> Calcular Mais-Valia FIFO]

  %% Taxas
  D6 --> H{Taxa Paga?}
  E3 --> H
  F4 --> H
  G4 --> H

  H -->|FIAT| H1[Taxa reduz o valor de<br> realização / encargo]
  H -->|CRYPTO| H2[Micro-alienação: apurar<br> mais/menos-valia da taxa]
  H2 --> H3{Operação principal<br> tributável?}
  H3 -->|Sim| H4[Somar taxa como encargo<br> da alienação principal]
  H3 -->|Não| H5[Registar apenas a<br> micro-alienação da taxa]

  style A fill:#f9f,stroke:#333,stroke-width:2px,color:#000
  style B fill:#77f,stroke:#333,stroke-width:1px,color:#fff
  style C fill:#cff,stroke:#333,stroke-width:1px,color:#000
  style D fill:#f88,stroke:#333,stroke-width:1px,color:#000
  style E fill:#cff,stroke:#333,stroke-width:1px,color:#000
  style F fill:#cff,stroke:#333,stroke-width:1px,color:#000
  style G fill:#bbf,stroke:#333,stroke-width:1px,color:#000
  style H fill:#fffbcc,stroke:#333,stroke-width:1px,color:#000
  style D1 fill:#ff9999,stroke:#333,stroke-width:2px,color:#000
  style C1 fill:#bbf,stroke:#333,stroke-width:1px,color:#000
  style H3 fill:#bbf,stroke:#333,stroke-width:1px,color:#000
Loading

Ver fluxograma


🤝 Como Contribuir

Encontrou uma falha na nossa lógica? Acha que uma interpretação pode ser mais rigorosa?

  1. Abra uma Issue para iniciar a discussão.
  2. Se tiver uma sugestão de texto, pode submeter um Pull Request para melhorar este documento.

📄 Licença

Este projeto é licenciado sob a MIT License.
Consulta o ficheiro para mais detalhes.

About

Um algoritmo para cálculo fiscal de criptoativos em Portugal

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors