Алгоритм/псевдокод для налогообложения в Великобритании (прирост капитала)Python

Программы на Python
Ответить
Anonymous
 Алгоритм/псевдокод для налогообложения в Великобритании (прирост капитала)

Сообщение Anonymous »

Я хотел реализовать алгоритм (или псевдокод) для налогообложения CGT в Великобритании (как описано на веб-сайте HRMC), но не могу понять, без какого алгоритма мне нужно было бы сделать это эффективно. повторяется слишком много раз. Я пытался найти как можно больше и даже попробовал несколько своих собственных реализаций, но, похоже, не смог заставить их работать должным образом.

Есть подходящий вариант пример также на сайте TimeToTrade. Я постарался объяснить здесь, насколько мог.

Предполагая, что у меня есть следующая таблица покупок/продаж (дата в формате гггг-мм-дд):

Код: Выделить всё

id action amount per share  total        date
1.  buy    2000      £1     £2000  2017-05-05 10:00
2.  buy    1000      £1     £1000  2017-05-10 10:00
3.  buy    1000    £1.5     £1500  2017-06-01 10:00
4.  sell   2000    £2.5     £5000  2017-06-01 10:00
5.  sell   1000      £2     £2000  2017-06-01 10:00
6.  buy    1500    £0.5      £750  2017-06-20 10:00
Согласно HRMC, необходимо соблюдать следующие правила:
  • Продажа сначала сопоставляется с покупкой (FIFO) в тот же день
  • Затем продажа сопоставляется с покупкой (FIFO) в течение следующих 30 дней
    Распродажа наконец-то совпадает со средней суммой покупок в прошлое (объединенное в «Удержание по Разделу 104»)
Это дает мне следующий расчет, если делать это вручную:
  • 1+2 в пуле = Всего 3000 акций по цене 3000 фунтов стерлингов (1 фунт стерлингов). на акцию)
  • 3 имеет транзакции продажи совершаются в тот же день, поэтому на данный момент они не объединяются.
    • 1000 из 2000 акций соответствуют покупке в тот же день (первым пришел — первым вышел)


      1000 акций @ 1,5 фунта стерлингов = 1500 фунтов стерлингов — прибыль 1000*2,5 фунтов стерлингов — 1500 фунтов стерлингов = £1000
  • 1000 из оставшихся 1000 акций после продажи 4 совпадают с покупкой в ​​течение следующих 30 дней (6)
    • 1000 акций @ 0,5 фунта стерлингов = 500 фунтов стерлингов — прибыль 1000*2,5–500 фунтов стерлингов = 2000 фунтов стерлингов
  • Сделка продажи 4 имеет общую облагаемую прибыль в размере 1000 фунтов стерлингов + 2000 фунтов стерлингов = 3000 фунтов стерлингов
  • 5 больше не может соответствовать покупке 3 в тот же день, так как он исчерпан. соответствующих акций
    • 500 из 1000 акций соответствуют покупке 6, так как у нее осталось 500 акций


      500 акций @ 0,5 = 250 фунтов стерлингов - прибыль (500*2 фунтов стерлингов)-250 фунтов стерлингов = 750 фунтов стерлингов
  • 500 из оставшихся 500 акций являются окончательно сопоставляется с объединенными активами из (1+2)
    • 500 акций @ 1 = £500 — прибыль (500* £2)-£500 = £500
  • Транзакция продажи 5 имеет общую налогооблагаемую прибыль в размере £750+500=£1250
Общая начисляемая прибыль 3000 фунтов стерлингов + 1250 фунтов стерлингов = 4250 фунтов стерлингов – Оставшаяся сумма иметь 2500 акций по цене 2500 фунтов стерлингов

Псевдокод того, что, по моему мнению, требуется:

Код: Выделить всё

- loop through all trades chronologically
- if it's a sell trade
- check if there any trades on the same day to match
- check for future buy trades (where sell trade < buy trade < sell trade + 30 days)
- use existing holdings if there are none and/or the matches aren't sufficient to fill the sell
- if it's a buy trade
- add it to a 'same_day' array
- loop through 'same_day' array on the next day to sum it up into a 'section 104 holding'
- keep reference of each trade in an indexed by trade id dictionary/object/hashmap to subtract and such when matching sell trades
Любой указатель в правильном направлении будет очень признателен.

Подробнее здесь: https://stackoverflow.com/questions/503 ... ital-gains
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»