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:
- 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. - 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.
- 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.
- 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.
- Se a operação ocorreu no estrangeiro ou self-custody (
- 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).
- Curto prazo (< 365 dias) - Tributáveis (taxa autónoma de 28%):
- 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
- 2. Arquitetura do algoritmo (v1.5)
- 1. Visão geral e conformidade legal
- 2. Estrutura de dados: lotes e o campo
originalAcquisitionDate - 3. Tratamento por tipo de transação
- 3.1.
deposit - ➤ Caso 1: compra com FIAT (
tag: 'buy') - ➤ Caso 2: rendimento passivo (
tag: 'staking') - 3.2.
withdrawal - Caso seja alienação para algo não-cripto (
fiatValue > 0): - Caso seja transferência (
tag = 'transfer'efiatValue=null): - ➤ Caso 1: venda para FIAT (
fiatValue > 0,tag: 'sell') - ➤ Caso 2: venda para FIAT com taxa em cripto
- ➤ Caso 3: transferência entre entidades com taxa (
tag: 'transfer',fiatValue = null) - 3.3.
trade(permuta cripto-cripto) - ➤ Caso 1: permuta simples (BTC → ETH)
- ➤ Caso 2: permuta com múltiplos ativos (BTC → ETH + SOL)
- 3.1.
- 4. Tratamento das taxas
- 5. Tratamento fiscal de NFT
- 6. Tratamento fiscal de DeFi
- 6.1. O que é DeFi?
- Exemplos comuns de DeFi:
- 6.2. Enquadramento fiscal de DeFi em Portugal (CIRS)
- 6.3 Princípios aplicáveis ao DeFi:
- 6.4. Como implementar DeFi no algoritmo
- ➤ Caso 1: staking / yield farming / recompensas
- ➤ Caso 2: fornecimento de liquidez (liquidity pool)
- ➤ Caso 3: retirada de liquidez (withdrawal de LP)
- ➤ Caso 4: taxas em DeFi (gas fees)
- 7. Sumário final
- 8. Fluxograma das transações
- 🤝 Como contribuir
- 📄 Licença
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.
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:
-
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. -
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.
-
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.
-
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.
-
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.
O sistema utiliza uma estrutura de pilhas FIFO por entidade: um Map<Entity, Map<Asset, List<Lot>>>.
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.
- Se
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.
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
originalAcquisitionDatepreserva a data de compra original quando um ativo é transferido entre entidades, impedindo o reinício incorreto do contador dos 365 dias.
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.
Exemplo:
- Data: 2023-01-15
- Entidade: Binance
- Ativo: BTC
- Quantidade: 1.0
- Valor em FIAT: 30.000€
Resultado:
- Cria novo lote:
acquisitionDate = 2023-01-15costPerUnit = 30.000€amount = 1.0originalAcquisitionDate = nullisSecurityToken = false
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-10costPerUnit = 0,00€amount = 0.05originalAcquisitionDate = 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.
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
➡️ Evento tributável.
Aciona _calculateFifoForSale na entidade de origem.
Para cada lote consumido: data de aquisição efetiva = originalAcquisitionDate ?? acquisitionDate
Regra de tributação:
- Se
isSecurityToken == true: Sempre tributável (28% ou englobamento). - Se
isSecurityToken == false:- Dias detidos < 365: Tributável (28% ou englobamento).
- Dias detidos >= 365: Isento.
➡️ Evento neutro.
- Consome lotes da entidade de origem.
- Cria lotes na entidade de destino.
- Preserva os seguintes dados inalterados:
costPerUnitoriginalAcquisitionDateisSecurityToken
A data da transferência acquisitionDate não influencia os 365 dias.
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)
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)
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-01costPerUnit = 30.000€amount = 0.499originalAcquisitionDate = 2023-01-15isSecurityToken= (mantido do original)
➡️ Evento neutro fiscalmente para o principal, mas a taxa é uma micro-alienação tributável.
➡️ Evento neutro - Art. 10.º, n.º 20
- Consome lotes do ativo entregue.
- Cria novo lote do ativo recebido.
- O custo do novo lote é:
costPerUnit= custo de aquisição dos lotes entregues (proporcional). acquisitionDate= data da permuta.originalAcquisitionDate=null(O contador de 365 dias reinicia para o novo ativo).isSecurityToken= (definido conforme a natureza do novo ativo recebido).
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-01costPerUnit = 15.000€ / 0.3 = 50.000€/ETHamount = 0.3originalAcquisitionDate = null(contador reinicia)isSecurityToken = false(assumindo ETH comum)
➡️ Evento neutro fiscalmente, não gera tributação imediata.
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-15costPerUnit = 22.500€ / 0.3 = 75.000€/ETHamount = 0.3originalAcquisitionDate = null
- Lote de SOL:
acquisitionDate = 2024-08-15costPerUnit = 7.500€ / 0.2 = 37.500€/SOLamount = 0.2originalAcquisitionDate = null
➡️ Evento neutro fiscalmente, não gera tributação imediata.
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.º).
➡️ É apenas um encargo da alienação, subtraído no cálculo da mais-valia.
A taxa é uma micro-alienação do ativo usado para pagá-la.
Valor de realização:
-
Venda para FIAT: Usa o preço implícito da venda:
valor = fiatValue / fromAmount -
Permuta ou transferência: Usa
feeFiatValue, introduzido pelo utilizador.
-
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)
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€
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.
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.
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.
DeFi (Decentralized Finance) = Finanças Descentralizadas. São aplicações financeiras construídas em blockchains que não dependem de intermediários tradicionais.
- 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.)
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.
- Rendimentos passivos (staking, yield farming): São tratados sob o regime de suspensão de tributação. O custo de aquisição é 0,00€.
- Alienação de ativos DeFi (venda, troca, saque): Mais-valia calculada com FIFO.
- Permutas DeFi (ex.: ETH → LP token): Neutras fiscalmente (Art. 10.º, n.º 20).
- Taxas em DeFi (gas fees): Tratadas como micro-alienações se pagas em cripto.
- Isenção após 365 dias: Aplicável apenas a criptoativos não-mobiliários.
Exemplo:
- Data: 2024-06-15
- Entidade: Uniswap (DeFi)
- Ativo: USDC
- Quantidade: 100
- Tipo:
deposit, Tag:defi
Resultado:
- Cria novo lote:
acquisitionDate = 2024-06-15costPerUnit = 0,00€amount = 100originalAcquisitionDate = 2024-06-15
- Ação fiscal: Nenhuma no momento da receção. A tributação ocorrerá apenas na venda por Euros (Categoria G).
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-01costPerUnit = 2.000€ / 1.0 = 2.000€/LPamount = 1.0originalAcquisitionDate = null(contador reinicia)
➡️ Evento neutro fiscalmente, permuta cripto-cripto.
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).
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).
- 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.
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 ( |
Anexo G1, Quadro 7 | Anexo G1, Quadro 7 |
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 -->|>= 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
Encontrou uma falha na nossa lógica? Acha que uma interpretação pode ser mais rigorosa?
- Abra uma Issue para iniciar a discussão.
- Se tiver uma sugestão de texto, pode submeter um Pull Request para melhorar este documento.
Este projeto é licenciado sob a MIT License.
Consulta o ficheiro para mais detalhes.