Skip to content

Commit 9d5abc8

Browse files
authored
Update IRS reporting guidelines in README
Clarify reporting requirements for entities and transactions.
1 parent f63b5a3 commit 9d5abc8

1 file changed

Lines changed: 19 additions & 8 deletions

File tree

README.md

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@ Este algoritmo é uma ferramenta de cálculo baseada numa interpretação lógic
1313
* *Comportamento do Algoritmo:* Para simplificar o rastreamento, o algoritmo regista estes eventos com `custo = valor de mercado na data da receção`.
1414
* *Ação do Utilizador:* Deve garantir que o valor desses rendimentos foi declarado no **Anexo E** do IRS do ano correspondente à receção. Na venda futura, o algoritmo calculará a mais-valia (Categoria G) apenas sobre a valorização posterior à receção, evitando a dupla tributação.
1515
3. **Anexos do IRS (G vs. J):** O cálculo da mais-valia é universal, mas o local de declaração depende da entidade:
16-
* **Entidades Estrangeiras** (Binance, Coinbase, Ledger, Metamask, etc.): Preencher no **Anexo J**.
17-
* **Entidades Nacionais** (Raro em cripto): Preencher no **Anexo G**.
18-
16+
* **Entidades Estrangeiras (Non-PT):** Preencher no **Anexo J**. Inclui **TODAS** as exchanges internacionais (Binance, Coinbase, Kraken) e **TODAS** as carteiras self-custody (Ledger, Trezor, Metamask, Trust Wallet), pois não são entidades portuguesas.
17+
* **Entidades Nacionais (PT):** Preencher no **Anexo G**. Apenas se a custódia for feita por uma entidade licenciada sediada em Portugal (extremamente raro).
1918
---
2019

2120
### Índice
@@ -116,6 +115,18 @@ O motor opera sobre cinco princípios fundamentais:
116115

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

118+
#### Definição de Entidade
119+
Cada entidade (carteira ou exchange) deve ser criada com os seguintes atributos:
120+
* **`name`**: Nome da entidade (ex: "Binance", "Ledger Nano X").
121+
* **`jurisdiction`**: `'PT'` | `'Non-PT'`.
122+
* Se `'PT'` → Relatório para **Anexo G**.
123+
* Se `'Non-PT'` → Relatório para **Anexo J**.
124+
125+
> **Regra Crítica para Carteiras Self-Custody:**
126+
> Carteiras frias (Hardware Wallets como Ledger, Trezor) e carteiras quentes (Software Wallets como Metamask, Trust Wallet, Phantom) são **SEMPRE consideradas `Non-PT`**.
127+
> * **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.
128+
> * **Ação:** Ao criar uma entidade do tipo "Wallet Pessoal", defina automaticamente `jurisdiction: 'Non-PT'`. O relatório gerado será para o **Anexo J**.
129+
#### Estrutura do Lote (`Lot`)
119130
Cada `Lot` deve ter:
120131

121132
* **`acquisitionDate`**: Data da operação atual (ou da transferência).
@@ -124,8 +135,7 @@ Cada `Lot` deve ter:
124135
* **`originalAcquisitionDate`** (opcional): Data da compra original (crucial para a regra dos 365 dias).
125136
* **`isSecurityToken`** (boolean): Define se o ativo está sujeito a tributação obrigatória (sem isenção de 365 dias).
126137

127-
>**📝 Nota:** Para que serve `originalAcquisitionDate`?
128-
>Para preservar a data real de aquisição de um lote que foi comprado numa entidade **A** e posteriormente transferido para **B**. Sem este campo, o algoritmo poderia reiniciar incorretamente o contador dos **365 dias** ao receber o ativo noutra entidade.
138+
>**📝 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.
129139
130140
---
131141

@@ -137,9 +147,9 @@ Um depósito é sempre uma **aquisição** que cria um novo lote:
137147

138148
* **tag: '`buy`':** `costPerUnit` = `fiatValue`, `acquisitionDate` = data da transação.
139149
* **tag: '`staking`', '`airdrop`', '`interest`', '`rewards`':**
140-
* `costPerUnit` = **Valor de Mercado em EUR no dia da receção**.
150+
* `costPerUnit` = **Preço de mercado unitário em EUR no dia da receção**.
141151
* `acquisitionDate` = data da transação.
142-
* *Nota Fiscal:* Este valor deve ser declarado no Anexo E (Categoria E) do IRS desse ano.
152+
* *Nota Fiscal:* O valor total (`amount` × `costPerUnit`) deve ser declarado no Anexo E (Categoria E) do IRS desse ano.
143153
* **`originalAcquisitionDate`** = `null`.
144154

145155
#### ➤ Caso 1: Compra com FIAT (`tag: 'buy'`)
@@ -576,7 +586,8 @@ O **Código do IRS não distingue explicitamente entre DeFi e CeFi**, ou seja, *
576586
- **Transferências entre entidades:** evento neutro, preserva data e custo original.
577587
- **Permutas:** evento neutro - o novo ativo tem como custo o valor de aquisição do ativo entregue e **reinicia a contagem dos 365 dias**.
578588
- **Taxas:** separa lógica entre FIAT e cripto. Taxas em cripto são micro-alienações.
579-
- **Relatórios:** Identificar claramente se o output é para **Anexo G** (Nacional) ou **Anexo J** (Estrangeiro).
589+
- **Relatórios:** Gerados conforme `jurisdiction` da entidade (Anexo G para PT, Anexo J para Non-PT).
590+
580591

581592
---
582593

0 commit comments

Comments
 (0)