{"id":39803555,"url":"https://github.com/marotoweb/declaracriptopt","last_synced_at":"2026-05-30T02:01:01.271Z","repository":{"id":343021984,"uuid":"1106745084","full_name":"marotoweb/declaracriptopt","owner":"marotoweb","description":"Um algoritmo para cálculo fiscal de criptoativos em Portugal","archived":false,"fork":false,"pushed_at":"2026-05-28T22:11:49.000Z","size":749,"stargazers_count":2,"open_issues_count":4,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-28T23:21:39.226Z","etag":null,"topics":["algorithm","cripto","criptomoedas","irs"],"latest_commit_sha":null,"homepage":"","language":"Mermaid","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marotoweb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-29T21:19:58.000Z","updated_at":"2026-05-28T22:11:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/marotoweb/declaracriptopt","commit_stats":null,"previous_names":["marotoweb/declaracriptopt"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/marotoweb/declaracriptopt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marotoweb%2Fdeclaracriptopt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marotoweb%2Fdeclaracriptopt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marotoweb%2Fdeclaracriptopt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marotoweb%2Fdeclaracriptopt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marotoweb","download_url":"https://codeload.github.com/marotoweb/declaracriptopt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marotoweb%2Fdeclaracriptopt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33677261,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algorithm","cripto","criptomoedas","irs"],"created_at":"2026-01-18T12:35:51.901Z","updated_at":"2026-05-30T02:01:01.262Z","avatar_url":"https://github.com/marotoweb.png","language":"Mermaid","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Documento técnico: Um algoritmo aberto para a fiscalidade de criptoativos em Portugal\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Version](https://img.shields.io/badge/version-1.5.3-blue.svg)]()\n\n---\n\n### ⚠️ Aviso legal e limitações (leitura obrigatória)\n\nEste 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:\n\n1. ***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`.\n   \n2. ***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**.\n    * **Quando se aplica?** Aplica-se no exato momento em que recebe os *tokens* na carteira. Como recebeu 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.\n    * **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.\n    * **Quando termina a suspensão?** A suspensão cessa no momento em que realiza uma **alienação onerosa para moeda fiat** (venda por Euros, Dólares, etc.) ou compra bens/serviços com esses *tokens*. Nesse instante, gera liquidez real e o imposto é devido na **Categoria G (mais-valias)** sobre 100% do valor da venda (já que o 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.\n  \n3. **Exclusão de NFT do Regime de Criptoativos (Mas sujeito a regras gerais):** Conforme o Código do IRS, os NFT (ativos não fungíveis) estão expressamente excluídos da definição jurídica e do regime fiscal específico dos *criptoativos*. \n    * **O que o algoritmo faz:** O algoritmo ignora o cálculo de mais-valias sobre NFT *dentro do motor de cripto*, o que significa que eles **NÃO** beneficiam da isenção de 365 dias nem da neutralidade fiscal em permutas.\n    * **Impacto Fiscal Real:** A alienação onerosa de NFT pode ser tributável noutras sedes do Código do IRS. Se transacionados de forma esporádica por particulares, podem enquadrar-se nas regras gerais de mais-valias de bens móveis ou propriedade intelectual; se transacionados de forma recorrente, configuram rendimento comercial (Categoria B). O utilizador deve isolar estas operações para análise jurídica humana autónoma.\n  \n4. **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:\n    * **Curto prazo (\u003c 365 dias) - Tributáveis (taxa autónoma de 28%):**\n        * Se a operação ocorreu através de uma corretora sediada em Portugal (`type: 'Exchange'` e `countryCode: 'PT'`): Deve ser declarada no **Anexo G, Quadro 18A**.\n        * Se a operação ocorreu no estrangeiro ou em carteiras privadas (`type: 'Exchange'` com `countryCode` diferente de 'PT', ou carteiras onde `type` seja 'Cold Wallet' ou 'Hot Wallet'): Deve ser declarada detalhadamente no **Anexo J, Quadro 9.4A**.\n    * **Longo prazo (\u003e= 365 dias) - Não sujeitas a tributação:**\n        * Desde que operados em jurisdições cooperantes, 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).\n\n5. **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.\n\n---\n\n### Índice\n\n- [Documento técnico: Um algoritmo aberto para a fiscalidade de criptoativos em Portugal](#documento-técnico-um-algoritmo-aberto-para-a-fiscalidade-de-criptoativos-em-portugal)\n    - [⚠️ Aviso legal e limitações (leitura obrigatória)](#️-aviso-legal-e-limitações-leitura-obrigatória)\n    - [Índice](#índice)\n  - [1. Objetivo do projeto](#1-objetivo-do-projeto)\n  - [2. Arquitetura do algoritmo (v1.5.3)](#2-arquitetura-do-algoritmo-v153)\n    - [2.1. Visão geral e conformidade legal](#21-visão-geral-e-conformidade-legal)\n    - [2.2. Estrutura de dados: lotes e o campo `originalAcquisitionDate`](#22-estrutura-de-dados-lotes-e-o-campo-originalacquisitiondate)\n      - [Definição de entidade](#definição-de-entidade)\n      - [Estrutura do lote (`Lot`)](#estrutura-do-lote-lot)\n    - [3. Tratamento por tipo de transação](#3-tratamento-por-tipo-de-transação)\n      - [3.1. `deposit`](#31-deposit)\n      - [➤ Caso 1: compra com FIAT (`tag: 'buy'`)](#-caso-1-compra-com-fiat-tag-buy)\n      - [➤ Caso 2: rendimento passivo (`tag: 'staking'`)](#-caso-2-rendimento-passivo-tag-staking)\n      - [3.2. `withdrawal`](#32-withdrawal)\n      - [Caso seja **alienação para algo não-cripto** (`fiatValue \u003e 0`):](#caso-seja-alienação-para-algo-não-cripto-fiatvalue--0)\n      - [Caso seja **transferência** (`tag = 'transfer'` e `fiatValue` = `null`):](#caso-seja-transferência-tag--transfer-e-fiatvalue--null)\n      - [➤ Caso 1: venda para FIAT (`fiatValue \u003e 0`, `tag: 'sell'`) em jurisdição cooperante](#-caso-1-venda-para-fiat-fiatvalue--0-tag-sell-em-jurisdição-cooperante)\n      - [➤ Caso 2: venda para FIAT numa jurisdição não cooperante (paraíso fiscal)](#-caso-2-venda-para-fiat-numa-jurisdição-não-cooperante-paraíso-fiscal)\n      - [➤ Caso 3: venda para FIAT com taxa em cripto](#-caso-3-venda-para-fiat-com-taxa-em-cripto)\n      - [➤ Caso 4: transferência entre entidades com taxa (`tag: 'transfer'`, `fiatValue = null`)](#-caso-4-transferência-entre-entidades-com-taxa-tag-transfer-fiatvalue--null)\n      - [3.3. `trade` (permuta cripto-cripto)](#33-trade-permuta-cripto-cripto)\n      - [➤ Caso 1: permuta simples em entidade cooperante (BTC → ETH)](#-caso-1-permuta-simples-em-entidade-cooperante-btc--eth)\n      - [➤ Caso 2: permuta simples em entidade não cooperante (BTC → ETH)](#-caso-2-permuta-simples-em-entidade-não-cooperante-btc--eth)\n      - [➤ Caso 3: permuta com múltiplos ativos (BTC → ETH + SOL)](#-caso-3-permuta-com-múltiplos-ativos-btc--eth--sol)\n    - [4. Tratamento das taxas](#4-tratamento-das-taxas)\n      - [4.1. Taxa paga em FIAT](#41-taxa-paga-em-fiat)\n      - [4.2. Taxa paga em cripto](#42-taxa-paga-em-cripto)\n      - [Dupla entrada fiscal aplicável apenas quando deve ser:](#dupla-entrada-fiscal-aplicável-apenas-quando-deve-ser)\n      - [➤ Caso 1: taxa paga em FIAT](#-caso-1-taxa-paga-em-fiat)\n      - [➤ Caso 2: taxa paga em cripto](#-caso-2-taxa-paga-em-cripto)\n    - [5. Tratamento fiscal de NFT](#5-tratamento-fiscal-de-nft)\n      - [5.1 O que é NFT?](#51-o-que-é-nft)\n      - [5.2. Enquadramento fiscal de NFT em Portugal (CIRS)](#52-enquadramento-fiscal-de-nft-em-portugal-cirs)\n      - [5.3 Como o algoritmo trata os NFT](#53-como-o-algoritmo-trata-os-nft)\n    - [6. Tratamento fiscal de _DeFi_](#6-tratamento-fiscal-de-defi)\n      - [6.1. O que é _DeFi_?](#61-o-que-é-defi)\n      - [Exemplos comuns de _DeFi_:](#exemplos-comuns-de-defi)\n      - [6.2. Enquadramento fiscal de _DeFi_ em Portugal (CIRS)](#62-enquadramento-fiscal-de-defi-em-portugal-cirs)\n      - [6.3 Princípios aplicáveis ao _DeFi_:](#63-princípios-aplicáveis-ao-defi)\n      - [6.4. Como implementar _DeFi_ no algoritmo](#64-como-implementar-defi-no-algoritmo)\n      - [➤ Caso 1: *staking* / *yield farming* / recompensas](#-caso-1-staking--yield-farming--recompensas)\n      - [➤ Caso 2: fornecimento de liquidez (*liquidity pool*)](#-caso-2-fornecimento-de-liquidez-liquidity-pool)\n      - [➤ Caso 3: retirada de liquidez (*withdrawal* de *LP*)](#-caso-3-retirada-de-liquidez-withdrawal-de-lp)\n      - [➤ Caso 4: taxas em _DeFi_ (*gas fees*)](#-caso-4-taxas-em-defi-gas-fees)\n    - [7. Sumário final](#7-sumário-final)\n    - [8. Matriz de exportação de relatórios (IRS)](#8-matriz-de-exportação-de-relatórios-irs)\n    - [9. Fluxograma das transações](#9-fluxograma-das-transações)\n  - [🤝 Como Contribuir](#-como-contribuir)\n  - [📄 Licença](#-licença)\n\n---\n\n## 1. Objetivo do projeto\n\nEste 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.\n\nO objetivo é criar e manter uma \"fonte da verdade\" lógica e transparente que possa ser:\n* **Validada** por especialistas em fiscalidade e contabilidade.\n* **Discutida e melhorada** pela comunidade.\n* **Implementada** por qualquer desenvolvedor ou aplicação que precise de calcular mais-valias de criptoativos em Portugal.\n\n**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.\n\n---\n\n## 2. Arquitetura do algoritmo (v1.5.3)\n\n### 2.1. Visão geral e conformidade legal\n\nEste 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.\n\nO motor opera sobre os seguintes princípios fundamentais:\n\n1. **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.\n\n2. **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**.\n\n3. **Elegibilidade territorial e cláusula anti-abuso (Art. 10.º, n.º 21):** Os benefícios de neutralidade fiscal nas permutas e a isenção de mais-valias após 365 dias aplicam-se apenas se a entidade onde se realiza a operação ou a contraparte estiver sediada num país cooperante (Estados-Membros da UE, EEE ou países com convenção de dupla tributação ou acordo de troca de informações com Portugal). Se a jurisdição for considerada não cooperante (paraíso fiscal), todos os benefícios fiscais deixam de se aplicar.\n\n4. **Neutralidade fiscal condicionada para permutas cripto-cripto (Art. 10.º, n.º 20):** Numa permuta cripto-cripto (ex.: BTC → ETH) realizada numa entidade de jurisdição cooperante, 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. A contagem dos 365 dias reinicia para o novo ativo recebido. Se ocorrer numa entidade não cooperante, a neutralidade fiscal é revogada e a mais-valia é apurada em euros imediatamente.\n\n5. **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**.\n   * **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).\n   * **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.\n\n6. **Distinção security tokens vs. criptoativos comuns:**\n   * **Criptoativos comuns (valores não mobiliários ex: BTC, ETH):** Isentos de imposto se detidos por \u003e= 365 dias em jurisdições cooperantes.\n   * **Security tokens (valores mobiliários):** **Nunca isentos**. Sempre tributados à taxa de 28% (ou englobamento), independentemente do tempo de detenção.\n\n---\n\n### 2.2. Estrutura de dados: lotes e o campo `originalAcquisitionDate`\n\nO sistema utiliza uma estrutura de pilhas FIFO por entidade: um `Map\u003cEntity, Map\u003cAsset, List\u003cLot\u003e\u003e\u003e`.\n\n#### Definição de entidade\nCada entidade (carteira ou *exchange*) deve ser criada com os seguintes atributos:\n* **`name`**: Nome dado pelo utilizador à carteira (ex: \"Kraken\", \"Ledger Nano X\").\n* **`type`**: O tipo de carteira. Ex: '*Exchange*', '*Cold Wallet*', '*Hot Wallet*', '*Other*'.\n* **`creationDate`**: Data em que a carteira foi criada.\n* **`countryCode`**: Código ISO-3166 alfa-2 do país onde a entidade está sediada (ex: 'PT', 'IE', 'KY').\n\nO algoritmo calcula os seguintes estados implícitos no momento da transação:\n* **`fiscalEligibility`**: Determinado a partir do `countryCode`. Consulta uma tabela interna para classificar o país como cooperante (`COOPERATING`), não cooperante (`NON_COOPERATING` - paraísos fiscais da lista negra nacional) ou desconhecido. O estado desconhecido suspende o cálculo para obrigar à revisão e intervenção manual.\n* **Destino declarativo**: Determinado de forma dinâmica no processamento. Se `type` for 'Exchange' e `countryCode` for 'PT', as mais-valias de curto prazo seguem para o **Anexo G**. Se `type` for 'Exchange' e `countryCode` for diferente de 'PT' (ex: 'IE'), seguem para o **Anexo J**. Para carteiras pessoais ou DeFi (`type` igual a 'Cold Wallet' ou 'Hot Wallet'), o algoritmo assume por defeito o `countryCode` de residência do sujeito passivo (ex: 'PT') para efeitos de `fiscalEligibility`, mas encaminha sempre o curto prazo para o **Anexo J**, uma vez que a custódia não pertence a um intermediário financeiro nacional.\n\n\n#### Estrutura do lote (`Lot`)\nCada `Lot` deve ter:\n\n* **`acquisitionDate`**: Data da operação atual (causada por depósito, permuta ou transferência).\n* **`costPerUnit`**: Custo unitário em EUR.\n* **`amount`**: Quantidade do ativo.\n* **`originalAcquisitionDate`** (opcional): Data da compra original (crucial para a regra dos 365 dias).\n* **`isSecurityToken`** (boolean): Define se o ativo está sujeito a tributação obrigatória (sem isenção de 365 dias).\n\n\u003e [!NOTE]\n\u003e 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.\n\n---\n\n## 3. Tratamento por tipo de transação\n\n### 3.1. `deposit`\n\nUm depósito é sempre uma **aquisição** que cria um novo lote:\n* **tag: 'buy':** `costPerUnit` = `fiatValue`, `acquisitionDate` = data da transação.\n* **tag: 'staking', 'airdrop', 'interest', 'rewards', 'defi':**\n    * `costPerUnit` = **0,00€** (suspensão de tributação).\n    * `acquisitionDate` = data da transação (início da contagem dos 365 dias).\n* **`originalAcquisitionDate`** = `null`.\n\n#### ➤ Caso 1: compra com FIAT (`tag: 'buy'`)\n**Exemplo:**\n- Data: 2023-01-15\n- Entidade: Kraken (countryCode: 'IE')\n- Ativo: BTC\n- Quantidade: 1.0\n- Valor em FIAT: 30.000€\n\n**Resultado:**\n- Cria novo lote:\n  - `acquisitionDate = 2023-01-15`\n  - `costPerUnit = 30.000€`\n  - `amount = 1.0`\n  - `originalAcquisitionDate = null`\n  - `isSecurityToken = false`\n\n#### ➤ Caso 2: rendimento passivo (`tag: 'staking'`)\n**Exemplo:**\n- Data: 2024-03-10\n- Entidade: Ledger (type: 'Cold Wallet')\n- Ativo: ETH\n- Quantidade: 0.05 \n\n**Cálculo interno do algoritmo:**\n- Custo de aquisição = **0,00€**\n\n**Resultado:**\n- Cria novo lote:\n  - `acquisitionDate = 2024-03-10`\n  - `costPerUnit = 0,00€`\n  - `amount = 0.05`\n  - `originalAcquisitionDate = null`\n- *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 em ambiente cooperante, a venda total estará isenta.\n\n---\n\n### 3.2. `withdrawal`\n\nInclui **qualquer alienação para algo não-cripto**, como:\n* **FIAT**\n* **NFT**\n* **Compra de bens ou serviços**\n* **Pagamentos com cartões que gastem a sua cripto**\n\n#### Caso seja **alienação para algo não-cripto** (`fiatValue \u003e 0`):\n\n➡️ **Evento tributável.**\n\nAntes de calcular o prazo de detenção, o algoritmo valida o `fiscalEligibility` da entidade de origem. Aciona o `_calculateFifoForSale` na entidade correspondente.\n\nPara cada lote consumido: **`data de aquisição efetiva = originalAcquisitionDate ?? acquisitionDate`**\n\n**Regra de tributação:**\n1. Se `isSecurityToken == true`: **Sempre tributável** (28% ou englobamento).\n2. Se `isSecurityToken == false`:\n    * Se `fiscalEligibility == NON_COOPERATING`: **Sempre tributável** (28% ou englobamento) por força do Artigo 10.º, n.º 21 do CIRS, revogando o benefício da isenção por prazo.\n    * Se `fiscalEligibility == COOPERATING`:\n        * Dias detidos \u003c 365: **Tributável** (28% ou englobamento).\n        * Dias detidos \u003e= 365: **Isento**.\n\n#### Caso seja **transferência** (`tag = 'transfer'` e `fiatValue` = `null`):\n\n➡️ **Evento neutro.**\n\n 1. Consome lotes da entidade de origem.  \n 2. Cria lotes na entidade de destino.  \n 3. Preserva os seguintes dados inalterados:\n    * `costPerUnit`\n    * `originalAcquisitionDate` (caso seja nulo, herda a `acquisitionDate` do lote consumido).\n    * `isSecurityToken`\n\nA data da transferência em si (`acquisitionDate` do novo local) **não influencia os 365 dias**.\n\n#### ➤ Caso 1: venda para FIAT (`fiatValue \u003e 0`, `tag: 'sell'`) em jurisdição cooperante\n**Exemplo:**\n- Data: 2024-10-01\n- Entidade: Kraken (countryCode: 'IE')\n- Ativo: BTC\n- Quantidade: 0.5\n- Valor em FIAT: 30.000€\n- Custo do lote consumido (FIFO): 0.5 × 30.000€ = 15.000€\n- Data de aquisição efetiva: 2023-01-15\n- Dias detidos: 624 dias → **Isento** (por ser cooperante, detido por \u003e= 365 dias e não-security)\n\n**Cálculo:**\n- Mais-valia = 30.000€ - 15.000€ = **15.000€**\n- Tributação: **Isento** (Encaminhado para o **Anexo G1, Quadro 7**).\n\n#### ➤ Caso 2: venda para FIAT numa jurisdição não cooperante (paraíso fiscal)\n**Exemplo:**\n- Data: 2024-10-01\n- Entidade: CaymanExchange (countryCode: 'KY', fiscalEligibility: NON_COOPERATING)\n- Ativo: BTC\n- Quantidade: 0.5\n- Valor em FIAT: 30.000€\n- Custo do lote consumido (FIFO): 15.000€\n- Data de aquisição efetiva: 2023-01-15\n- Dias detidos: 624 dias\n\n**Cálculo:**\n- Mais-valia = 30.000€ - 15.000€ = **15.000€**\n- Tributação: **Tributável** à taxa autónoma de 28% no **Anexo J, Quadro 9.4A**. A isenção dos 365 dias é revogada por força do Art. 10.º, n.º 21.\n\n#### ➤ Caso 3: venda para FIAT com taxa em cripto\n**Exemplo:**\n- Data: 2024-10-01\n- Entidade: Kraken (countryCode: 'IE')\n- Ativo: BTC\n- Quantidade: 0.5\n- Valor em FIAT: 30.000€\n- Taxa: 0.001 BTC (valor implícito de mercado: 60€)\n- Custo do lote consumido da taxa (FIFO): 30€\n- Dias detidos do lote principal e da taxa: 180 dias → **Tributáveis**\n\n**Cálculo:**\n- Mais-valia principal = 30.000€ - 15.000€ = **15.000€**\n- Micro-alienação da taxa:\n  - Custo da taxa = 30€\n  - Valor de realização da taxa = 0.001 × (30.000€ / 0.5) = 60€\n  - Mais-valia da taxa = 60€ - 30€ = **30€**\n- Total mais-valia combinada = 15.000€ + 30€ = **15.030€**\n- Encaminhamento: Reportado na totalidade no **Anexo J, Quadro 9.4A**.\n\n#### ➤ Caso 4: transferência entre entidades com taxa (`tag: 'transfer'`, `fiatValue = null`)\n**Exemplo:**\n- Data: 2024-06-01\n- Entidade de origem: Kraken (countryCode: 'IE')\n- Entidade de destino: Ledger (type: 'Cold Wallet')\n- Ativo: BTC\n- Quantidade enviada: 0.5\n- Taxa de rede cobrada: 0.001 BTC (valor de mercado implícito: 60€)\n- Custo do lote de taxa consumido (FIFO): 30€\n- Data de aquisição original do lote: 2024-01-15 (\u003c 365 dias)\n\n**Resultado:**\n- **Micro-alienação da taxa:** É tratada como uma venda forçada de frações para pagar o serviço de rede.\n  - Custo da taxa = 30€\n  - Mais-valia gerada pela taxa = 60€ - 30€ = **30€** (Tributável no **Anexo J, Quadro 9.4A** por ter menos de 365 dias e decorrer na Kraken estrangeira).\n- **Criação do novo lote na Ledger:**\n  - `acquisitionDate = 2024-06-01`\n  - `costPerUnit = 30.000€`\n  - `amount = 0.499` (0.500 enviado - 0.001 de taxa)\n  - `originalAcquisitionDate = 2024-01-15`\n  - `isSecurityToken` = (preservado da origem)\n\n➡️ **O montante principal (0.499 BTC) é neutro fiscalmente**, mas a taxa gasta gera uma micro-alienação autónoma declarável.\n\n---\n\n### 3.3. `trade` (permuta cripto-cripto)\n\nO fluxo lógico depende diretamente da elegibilidade da entidade detentora:\n\n* **Se `fiscalEligibility == COOPERATING`:** ➡️ **Evento neutro - Art. 10.º, n.º 20**\n   1. Consome lotes do ativo entregue através da pilha FIFO.\n   2. Cria um novo lote para o ativo recebido.\n   3. O custo do novo lote herda o custo histórico: `costPerUnit` = custo total de aquisição dos lotes entregues dividido pelo novo `amount`.\n   4. `acquisitionDate` = data da permuta atual.\n   5. `originalAcquisitionDate` = `null` (**O contador de 365 dias reinicia** para zero no novo ativo).\n   6. `isSecurityToken` = (mapeado de acordo com a natureza do novo ativo recebido).\n* **Se `fiscalEligibility == NON_COOPERATING`:** ➡️ **Evento tributável - Art. 10.º, n.º 21**\n   A neutralidade fiscal é completamente revogada. Ocorre o apuramento de mais-valias imediato em euros, calculando a diferença entre o valor de mercado atual do ativo entregue e o seu custo de aquisição. O ativo recebido entra na pilha com uma nova `acquisitionDate` e o seu `costPerUnit` atualizado ao preço de mercado.\n\n#### ➤ Caso 1: permuta simples em entidade cooperante (BTC → ETH)\n**Exemplo:**\n- Data: 2024-07-01\n- Entidade: Kraken (countryCode: 'IE', COOPERATING)\n- Ativo entregue: BTC (0.5) - Custo histórico FIFO: 15.000€\n- Ativo recebido: ETH (0.3)\n\n**Resultado:**\n- Cria novo lote de ETH na Kraken:\n  - `acquisitionDate = 2024-07-01`\n  - `costPerUnit = 15.000€ / 0.3 = 50.000€/ETH`\n  - `amount = 0.3`\n  - `originalAcquisitionDate = null` (o relógio de 365 dias faz reset)\n  - `isSecurityToken = false`\n\n➡️ **Evento  neutro fiscalmente**, não gerando qualquer registo ou obrigação declarativa imediata.\n\n#### ➤ Caso 2: permuta simples em entidade não cooperante (BTC → ETH)\n**Exemplo:**\n- Data: 2024-07-01\n- Entidade: CaymanExchange (countryCode: 'KY', NON_COOPERATING)\n- Ativo entregue: BTC (0.5) - Custo histórico FIFO: 15.000€\n- Ativo recebido: ETH (0.3)\n- Valor de mercado em Euros do BTC entregue no momento da troca: 25.000€\n\n**Resultado:**\n- Revogação de neutralidade: Apuramento imediato de mais-valia comercial.\n  - Mais-valia = 25.000€ (valor de mercado de realização) - 15.000€ (custo) = **10.000€**\n- Ação: **Tributável** à taxa de 28% no **Anexo J, Quadro 9.4A**.\n- Cria novo lote de ETH na CaymanExchange:\n  - `acquisitionDate = 2024-07-01`\n  - `costPerUnit = 25.000€ / 0.3 = 83.333,33€/ETH`\n  - `amount = 0.3`\n  - `originalAcquisitionDate = null`\n\n#### ➤ Caso 3: permuta com múltiplos ativos (BTC → ETH + SOL)\n\n**Exemplo:**\n- Data: 2024-08-15\n- Entidade: Binance (type: 'Exchange', countryCode: 'GE')\n- Ativo entregue: BTC (1.0) - Custo histórico total: 30.000€\n- Ativos recebidos: ETH (0.3) + SOL (0.2)\n- Valores de mercado proporcionais calculados no instante da troca:\n  - Fração ETH: Representa 75% do valor total da transação.\n  - Fração SOL: Representa 25% do valor total da transação.\n\n**Cálculo do custo proporcional distribuído:**\n- Custo total do BTC entregue a fracionar: 30.000€\n- Custo atribuído ao ETH = 75% × 30.000€ = **22.500€**\n- Custo atribuído ao SOL = 25% × 30.000€ = **7.500€**\n\n**Resultado:**\n- Lote de ETH:\n  - `acquisitionDate = 2024-08-15`\n  - `costPerUnit = 22.500€ / 0.3 = 75.000€/ETH`\n  - `amount = 0.3`\n  - `originalAcquisitionDate = null`\n- Lote de SOL:\n  - `acquisitionDate = 2024-08-15`\n  - `costPerUnit = 7.500€ / 0.2 = 37.500€/SOL`\n  - `amount = 0.2`\n  - `originalAcquisitionDate = null`\n\n➡️ **Evento neutro fiscalmente**, não gera tributação imediata.\n\n---\n\n## 4. Tratamento das taxas\n\nA lógica de tratamento de taxas é offline e determinística, aplicando os princípios gerais de \"alienação onerosa\" (Art. 10.º) e \"apuramento de mais-valias\" (Art. 43.º).\n\n### 4.1. Taxa paga em FIAT\n➡️ **É um encargo puro da alienação**, deduzido diretamente na fórmula da mais-valia.\n\n### 4.2. Taxa paga em cripto\n\nA taxa é tratada como uma **micro-alienação** do criptoativo usado para liquidá-la.\n\nValor de realização da micro-alienação:\n1. **Venda para FIAT:** Herda o **preço implícito** da venda: **`valor = fiatValue / fromAmount`**\n2. **Permuta ou transferência:** Usa `feeFiatValue`, introduzido pelo utilizador.\n\n#### Dupla entrada fiscal aplicável apenas quando deve ser:\n\n- **Venda FIAT:** - apura mais/menos-valia da taxa  \n  - adiciona o valor às despesas dedutíveis da alienação principal (ou soma à mais-valia se considerada venda parcial)\n\n- **Permuta ou transferência:** - só apura a micro-alienação da taxa  \n  - **não** soma nada à operação principal (porque é neutra)\n\n#### ➤ Caso 1: taxa paga em FIAT\n**Exemplo:**\n- Venda de 0.5 BTC por 30.000€\n- Taxa em FIAT: 50€\n\n**Resultado:**\n- Mais-valia = 30.000€ - 15.000€ - 50€ = **14.950€**\n- Se tributável (\u003c 365 dias): IRS = 14.950€ × 28% = **4.186€**\n\n#### ➤ Caso 2: taxa paga em cripto\n**Exemplo:**\n- Venda de 0.5 BTC por 30.000€\n- Taxa: 0.001 BTC (valor implícito: 60€)\n- Custo da taxa: 0.001 × 30.000€ = 30€\n- Mais-valia da taxa: 60€ - 30€ = **30€**\n\n**Resultado:**\n- Mais-valia principal = 30.000€ - 15.000€ = 15.000€\n- Total mais-valia = 15.000€ + 30€ = **15.030€**\n- IRS = 15.030€ × 28% = **4.208,40€**\n\n\u003e [!NOTE]\n\u003e **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.\n\n---\n\n## 5. Tratamento fiscal de NFT\n\n### 5.1 O que é NFT?\nNFT significa *Non-Fungible Token* (*Token* não fungível). Representa um certificado digital de propriedade sobre um ativo único, indivisível e não intermutável (ex.: arte digital, colecionáveis, registos de exclusividade).\n\n**Não fungível** = único e irrepetível.\nDiferente de moedas ou criptomoedas (como Bitcoin ou Ethereum), que são fungíveis. Um NFT é único - não pode ser trocado por outro igual.\n\n**Exemplo:**\n- Um Bitcoin = outro Bitcoin → fungível.\n- Um NFT de uma obra de arte digital = só existe um → não fungível.\n\n### 5.2. Enquadramento fiscal de NFT em Portugal (CIRS)\nPor força da exclusão legal da definição de criptoativos, as transações de NFT **não seguem o regime das criptomoedas**. Isto implica um tratamento severo pelo algoritmo:\n\n1. **Revogação de Isenções:** Não existe exclusão de tributação após 365 dias de detenção.\n2. **Permutas Tributáveis:** Trocar um NFT por outro (ou por ETH) não goza de neutralidade fiscal. É um evento de alienação imediato com apuramento de ganho em Euros baseado no valor de mercado.\n\n### 5.3 Como o algoritmo trata os NFT\nPara evitar cálculos errados e proteger o utilizador, o algoritmo implementa uma **\"Flag de Bloqueio/Alerta\"** (`assetType: 'NFT'`).\n\nEm vez de aplicar a lógica FIFO de cripto, o motor suspende o processamento da linha e emite um aviso ao utilizador para reporte manual na categoria geral correspondente do IRS (ex: Categoria B se houver cariz profissional, ou mais-valia geral se aplicável), uma vez que a Autoridade Tributária analisa estes ativos pela sua substância (ex: se representa arte digital, propriedade, ou um direito de serviço).\n\n---\n\n## 6. Tratamento fiscal de _DeFi_\n\n### 6.1. O que é _DeFi_?\n*DeFi* (*Decentralized Finance*) engloba serviços financeiros (empréstimos, trocas automatizadas, derivados) executados diretamente através de *smart contracts* em redes *blockchain*, sem a presença de intermediários centralizados.\n \n### Exemplos comuns de _DeFi_:\n- ***Staking* (delegar *tokens* para validar redes)**\n- ***Lending* \u0026 *Borrowing* (emprestar ou pedir emprestado cripto)**\n- ***Liquidity pools* (fornecer liquidez em _exchanges_ descentralizadas como Uniswap)**\n- ***Yield farming* (ganhar recompensas por fornecer liquidez)**\n- ***Stablecoins* (USDC, DAI, etc.)**\n\n### 6.2. Enquadramento fiscal de _DeFi_ em Portugal (CIRS)\nO Código do IRS não faz qualquer distinção operacional entre finanças descentralizadas (*DeFi*) ou centralizadas (*CeFi*). As regras gerais da Categoria G aplicam-se igualmente à natureza dos ativos movimentados.\n\n### 6.3 Princípios aplicáveis ao _DeFi_:\n1. **Rendimentos passivos (*staking*, *yield farming*):** São tratados sob o regime de **suspensão de tributação**. O custo de aquisição é **0,00€**.\n2. **Alienação de ativos _DeFi_ (venda, troca, saque):** Mais-valia calculada com *FIFO*.\n3. **Permutas _DeFi_ (ex.: ETH → *LP token*):** Neutras fiscalmente (Art. 10.º, n.º 20).\n4. **Taxas em _DeFi_ (*gas fees*):** Tratadas como micro-alienações se pagas em cripto.\n5. **Isenção após 365 dias:** Aplicável apenas a criptoativos não-mobiliários.\n\n### 6.4. Como implementar _DeFi_ no algoritmo\n\n\u003e [!NOTE]\n\u003e No DeFi o ónus da prova cabe inteiramente ao contribuinte. A Autoridade Tributária (AT) não monitoriza de forma automática as suas wallets privadas ou protocolos descentralizados, pelo que é o titular quem tem de demonstrar a origem, o histórico e o tempo de detenção dos ativos para beneficiar das isenções fiscais.\n \nComo os protocolos *DeFi* correm em contratos sem localização geográfica tradicional, o algoritmo determina a `fiscalEligibility` avaliando o `type` da carteira que assina a transação (`Cold/Hot Wallet`), herdando o país de residência fiscal do utilizador (ex: 'PT' = `COOPERATING`). No entanto, o encaminhamento declarativo de curto prazo é sempre remetido para o **Anexo J**, dada a ausência de intermediário financeiro nacional.\n\n#### ➤ Caso 1: *staking* / *yield farming* / recompensas\n**Exemplo:**\n- Data: 2024-06-15\n- Entidade: Uniswap Protocol (`type: 'Hot Wallet'`)\n- Ativo: USDC\n- Quantidade: 100\n- Tipo: `deposit`, Tag: `defi`\n\n**Resultado:**\n- Cria novo lote:\n  - `acquisitionDate = 2024-06-15`\n  - `costPerUnit = 0,00€`\n  - `amount = 100`\n  - `originalAcquisitionDate = null`\n- *Ação fiscal:* Nenhuma no momento da receção. A tributação ocorrerá apenas na venda por Euros (Categoria G).\n\n#### ➤ Caso 2: fornecimento de liquidez (*liquidity pool*)\n**Exemplo:**\n- Data: 2024-07-01\n- Entidade: Uniswap\n- Ativo entregue: ETH (0.5) + USDC (500)\n- Custo histórico total dos lotes entregues: 0.5 × 3.000€ + 500€ = 2.000€\n- Ativo recebido: UNI-V2 LP Token (1.0)\n\n**Resultado:**\n- Cria novo lote de *LP token*:\n  - `acquisitionDate = 2024-07-01`\n  - `costPerUnit = 2.000€ / 1.0 = 2.000€/LP`\n  - `amount = 1.0`\n  - `originalAcquisitionDate = null` (contador reinicia)\n\n➡️ **Evento neutro fiscalmente**, permuta cripto-cripto.\n\n#### ➤ Caso 3: retirada de liquidez (*withdrawal* de *LP*)\n**Exemplo:**\n- Data: 2025-01-10\n- Entidade: Uniswap\n- Ativo: UNI-V2 LP Token (1.0)\n- Quantidade: 1.0\n- Valor em FIAT (mercado): 2.500€\n- Custo do LP Token: 2.000€\n- Dias detidos: 193 dias (\u003c 365 dias) → **Tributável**\n\n**Cálculo:**\n- Mais-valia = 2.500€ - 2.000€ = **500€**\n- IRS = 500€ × 28% = **140€**\n\u003e [!NOTE]\n\u003e 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).\n- **Ação:** Sendo curto prazo numa estrutura sem intermediário nacional, é direcionado para o **Anexo J, Quadro 9.4A**.\n\n#### ➤ Caso 4: taxas em _DeFi_ (*gas fees*)\n**Exemplo:**\n- Transação DeFi (ex.: staking)\n- Taxa paga em ETH: 0.005 ETH\n- Valor implícito da taxa: 15€\n- Custo da taxa (FIFO): 15€\n\n**Resultado:**\n- Micro-alienação da taxa: 15€ - 15€ = **0€** (nenhuma mais-valia)\n- 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).\n\n---\n\n## 7. Sumário final\n\n* **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).\n* **Alienações para FIAT, bens ou serviços:** Curto prazo (\u003c 365 dias) é sempre tributado a 28%. Longo prazo (≥ 365 dias) em países cooperantes é isento. Transações em paraísos fiscais perdem o direito a isenção de longo prazo.\n  - Se operado em jurisdição cooperante: são **tributáveis** (Categoria G) se detidos por menos de 365 dias, e estão **excluídos de tributação** se detidos por 365 dias ou mais (exceto *security tokens*).\n  - Se operado em jurisdição não cooperante: Sempre tributável na Categoria G (28%).\n* **Alienações de NFT:** São tributados em Portugal, mas estão excluídos do regime especial de criptoativos.  Os ganhos obtidos com a sua venda enquadram-se nas regras gerais de mais-valias do IRS\n  - Vendas ocasionais (Categoria G)\n  - Atividade profissional (Categoria B)\n* ***Security tokens*:** **Sempre tributáveis** (Categoria G), independentemente do tempo de detenção. Não beneficiam da isenção de longo prazo.\n* **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*.\n* **Permutas (*trades*):** evento fiscalmente neutro (Art. 10.º, n.º 20) apenas se operado em entidades cooperantes - 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. Tornam-se tributáveis no momento da troca se efetuadas em entidades de paraísos fiscais.\n* **Taxas (*gas fees*):** separa a lógica conforme a moeda de pagamento:\n  - Taxas pagas em fiat: reduzem o valor de realização / acrescem aos encargos dedutíveis da operação principal.\n  - Taxas pagas em criptoativos: são tratadas como micro-alienações autónomas do ativo usado para o pagamento.\n\n---\n\n## 8. Matriz de exportação de relatórios (IRS)\n\nA 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:\n\n| Natureza do ativo | Prazo de detenção | Entidade com sede em Portugal (`type: 'Exchange'`, `countryCode: 'PT'`) | Entidade estrangeira cooperante ou carteira pessoal (`type: 'Exchange'` com `countryCode` diferente de 'PT', ou carteiras 'Wallet') | Entidade não cooperante (Paraíso fiscal, `fiscalEligibility: NON_COOPERATING`) |\n| :--- | :--- | :--- | :--- | :--- |\n| **Criptoativo comum** | Curto Prazo (\u003c 365 dias) | **Anexo G, Quadro 18A** (Tributável) | **Anexo J, Quadro 9.4A** (Tributável) | **Anexo J, Quadro 9.4A** (Tributável) |\n| **Criptoativo comum** | Longo Prazo (≥ 365 dias) | **Anexo G1, Quadro 7** (Isento) | **Anexo G1, Quadro 7** (Isento) | **Anexo J, Quadro 9.4A** (Tributável - Isenção revogada pelo Art 10 n21) |\n| ***Security Token*** | Qualquer Prazo | **Anexo G, Quadro 18A** (Tributável) | **Anexo J, Quadro 9.4A** (Tributável) | **Anexo J, Quadro 9.4A** (Tributável) |\n| **NFT** | Qualquer prazo | **Excluído** (Tributavel) | **Excluído** (Tributavel) | **Excluído** (Tributavel) |\n\n---\n\n## 9. Fluxograma das transações\n\n```mermaid\nflowchart TD\n    A[Início: Transação de Cripto] --\u003e B{Tipo de Transação?}\n\n    %% DEPÓSITOS\n    B --\u003e|Deposit\u003cbr\u003eCompra| C[Cria novo Lot]\n    C --\u003e C1{Tag?}\n    C1 --\u003e|Buy| C2[CostPerUnit = fiatValue,\u003cbr\u003e acquisitionDate = data da \u003cbr\u003etransação]\n    C1 --\u003e|Staking/Airdrop/Interest| C3[CostPerUnit = 0,00€\u003cbr\u003eSuspensão de Tributação]\n    C1 --\u003e|DeFi| C4[CostPerUnit = 0,00€\u003cbr\u003eSe rendimento em cripto]\n\n    %% RETIRADAS / VENDAS\n    B --\u003e|Withdrawal\u003cbr\u003eAlienação não-cripto| D[Evento Tributável]\n    D --\u003e D0{Jurisdição Cooperante?}\n    D0 --\u003e|Não| D2[Sempre Tributável\u003cbr\u003eIsenção revogada pelo Art 10 n21]\n    D0 --\u003e|Sim| D1{É Security Token?}\n    D1 --\u003e|Sim| D2[Sempre Tributável\u003cbr\u003e Sem isenção 365 dias]\n    D1 --\u003e|Não| D3[Verificar Dias Detidos]\n    D3 --\u003e|\u003c 365 dias| D4[Tributável\u003cbr\u003e Cat. G]\n    D3 --\u003e|\u0026gt= 365 dias| D5[Isento\u003cbr\u003e Cat. G]\n    D2 \u0026 D4 \u0026 D5 --\u003e D6[Apurar Mais-Valia FIFO\u003cbr\u003e Encaminhar p/ Anexo conforme matriz]\n\n    %% TRANSFERÊNCIAS\n    B --\u003e|Transfer/Transferência| E[Evento Fiscalmente Neutro]\n    E --\u003e E1[Consumir Lot da\u003cbr\u003e entidade de origem]\n    E1 --\u003e E2[Criar novo Lot na\u003cbr\u003e entidade de destino]\n    E2 --\u003e E3[Preservar costPerUnit,\u003cbr\u003e originalAcquisitionDate\u003cbr\u003e e isSecurityToken]\n\n    %% PERMUTAS / TRADES\n    B --\u003e|Trade/Permuta| F0{Jurisdição Cooperante?}\n    F0 --\u003e|Não| F_Tributavel[Revoga Neutralidade\u003cbr\u003e Apura Mais-Valia Imediata Cat. G]\n    F0 --\u003e|Sim| F[\"Evento Neutro\u003cbr\u003e 'Art. 10.º, n.º 20'\"]\n    F --\u003e F1[Consumir Lot do ativo\u003cbr\u003e entregue 'FIFO']\n    F1 --\u003e F2[Criar novo Lot para ativo\u003cbr\u003e recebido]\n    F2 --\u003e F3[CostPerUnit \u003cbr\u003e=\u003cbr\u003e custo de aquisição\u003cbr\u003e dos lotes entregues]\n    F3 --\u003e F4[acquisitionDate \u003cbr\u003e=\u003cbr\u003e data da permuta\u003cbr\u003e originalAcquisitionDate = null\u003cbr\u003e Contador 365 dias REINICIA]\n\n    %% DEFI NOMINAL\n    B --\u003e|DeFi| G[Tratar como\u003cbr\u003e staking, LP, ou troca]\n    G --\u003e G1{Tipo de DeFi?}\n    G1 --\u003e|Staking/Rewards| G2[CostPerUnit = 0,00€\u003cbr\u003eSuspensão de Tributação]\n    G1 --\u003e|LP/Permuta| G3[CostPerUnit = custo\u003cbr\u003e dos ativos entregues\u003cbr\u003e Reinicia 365 dias]\n    G1 --\u003e|Withdrawal LP| G4[Alienação do LP Token\u003cbr\u003e Calcular Mais-Valia FIFO]\n\n    %% LÓGICA DE TAXAS (Encadeamento Global)\n    D6 --\u003e H{Taxa Paga?}\n    E3 --\u003e H\n    F4 --\u003e H\n    F_Tributavel --\u003e H\n    G2 --\u003e H\n    G3 --\u003e H\n    G4 --\u003e H\n\n    H --\u003e|FIAT| H1[Taxa reduz o valor de\u003cbr\u003e realização / encargo]\n    H --\u003e|CRYPTO| H2[Micro-alienação: apurar\u003cbr\u003e mais/menos-valia da taxa]\n    H2 --\u003e H3{Operação principal\u003cbr\u003e tributável?}\n    H3 --\u003e|Sim| H4[Somar taxa como encargo\u003cbr\u003e da alienação principal]\n    H3 --\u003e|Não| H5[Registar apenas a\u003cbr\u003e micro-alienação da taxa]\n\n    %% ESTILIZAÇÃO DO GRAPH\n    style A fill:#f9f,stroke:#333,stroke-width:2px,color:#000\n    style B fill:#77f,stroke:#333,stroke-width:1px,color:#fff\n    style C fill:#cff,stroke:#333,stroke-width:1px,color:#000\n    style D fill:#f88,stroke:#333,stroke-width:1px,color:#000\n    style E fill:#cff,stroke:#333,stroke-width:1px,color:#000\n    style F fill:#cff,stroke:#333,stroke-width:1px,color:#000\n    style F_Tributavel fill:#f88,stroke:#333,stroke-width:1px,color:#000\n    style G fill:#bbf,stroke:#333,stroke-width:1px,color:#000\n    style H fill:#fffbcc,stroke:#333,stroke-width:1px,color:#000\n    style D0 fill:#bbf,stroke:#333,stroke-width:1px,color:#000\n    style D1 fill:#ff9999,stroke:#333,stroke-width:2px,color:#000\n    style F0 fill:#bbf,stroke:#333,stroke-width:1px,color:#000\n    style C1 fill:#bbf,stroke:#333,stroke-width:1px,color:#000\n    style H3 fill:#bbf,stroke:#333,stroke-width:1px,color:#000\n```\n\n[Ver fluxograma](diagrams/fluxograma.mermaid.svg)\n\n---\n\n## 🤝 Como Contribuir\n\nEncontrou uma falha na nossa lógica? Acha que uma interpretação pode ser mais rigorosa?\n1.  Abra uma **[Issue](https://github.com/marotoweb/declaracriptopt/issues)** para iniciar a discussão.\n2.  Se tiver uma sugestão de texto, pode submeter um **Pull Request** para melhorar este documento.\n\n---\n\n## 📄 Licença\n\nEste projeto é licenciado sob a [MIT License](LICENSE).  \nConsulta o ficheiro para mais detalhes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarotoweb%2Fdeclaracriptopt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarotoweb%2Fdeclaracriptopt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarotoweb%2Fdeclaracriptopt/lists"}