You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+19-8Lines changed: 19 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,9 +13,8 @@ Este algoritmo é uma ferramenta de cálculo baseada numa interpretação lógic
13
13
**Comportamento do Algoritmo:* Para simplificar o rastreamento, o algoritmo regista estes eventos com `custo = valor de mercado na data da receção`.
14
14
**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.
15
15
3.**Anexos do IRS (G vs. J):** O cálculo da mais-valia é universal, mas o local de declaração depende da entidade:
***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).
19
18
---
20
19
21
20
### Índice
@@ -116,6 +115,18 @@ O motor opera sobre cinco princípios fundamentais:
116
115
117
116
O sistema utiliza uma estrutura de pilhas FIFO por entidade: um `Map<Entity, Map<Asset, List<Lot>>>`.
118
117
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`)
119
130
Cada `Lot` deve ter:
120
131
121
132
***`acquisitionDate`**: Data da operação atual (ou da transferência).
@@ -124,8 +135,7 @@ Cada `Lot` deve ter:
124
135
***`originalAcquisitionDate`** (opcional): Data da compra original (crucial para a regra dos 365 dias).
125
136
***`isSecurityToken`** (boolean): Define se o ativo está sujeito a tributação obrigatória (sem isenção de 365 dias).
126
137
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.
129
139
130
140
---
131
141
@@ -137,9 +147,9 @@ Um depósito é sempre uma **aquisição** que cria um novo lote:
137
147
138
148
***tag: '`buy`':**`costPerUnit` = `fiatValue`, `acquisitionDate` = data da transação.
0 commit comments