এটি দীর্ঘ-রূপ গভীর-ডুব। একটি দ্রুত, স্কিম-পঠনযোগ্য সংস্করণের জন্য, দেখুন সহচর ব্লগ পোস্ট.
1. কেন আমি এটা তৈরি
VAT-রেজিস্ট্রেশন থ্রেশহোল্ডের উপরে করযোগ্য টার্নওভার সহ প্রতিটি UK ছোট ব্যবসাকে HMRC-এর Making Tax Digital (MTD) পরিষেবার মাধ্যমে - সাধারণত ত্রৈমাসিক - একটি VAT রিটার্ন গণনা করতে হবে এবং জমা দিতে হবে। নয়টি সংখ্যাযুক্ত বাক্স। আউটপুট VAT বিয়োগ ইনপুট VAT। নেট পরিমাণ অর্থ প্রদান করুন, অথবা ফেরত দাবি করুন। তত্ত্বে সহজ; যখন আপনার চালানগুলি Postgres-এ থাকে, তখন আপনার খরচের রসিদগুলি বিশটি বিভিন্ন সরবরাহকারীর পিডিএফ, আপনার ব্যাঙ্ক স্টেটমেন্টগুলি Wise এবং Revolut থেকে CSV এবং আপনার বৈদেশিক মুদ্রার লাইনগুলিকে সঠিক মাসিক হারে পাউন্ডে পুনরায় উল্লেখ করতে হবে৷
কয়েক বছর ধরে আমি একটি বিশাল স্প্রেডশীট, একটি ক্যালেন্ডার অনুস্মারক, এবং বিশ্বাসের একটি ছোট লাফ দিয়ে ঘোলাটে হয়েছি। প্রতি ত্রৈমাসিকে প্রায় অর্ধেক দিন সময় লেগেছিল, যার বেশিরভাগই ছিল ডেটা ঝগড়া- চালান DB থেকে একটি CSV রপ্তানি করুন, Excel এ পেস্ট করুন, কয়েকশ সারি হাতে শ্রেণীবদ্ধ করুন, সূত্রগুলি দুবার-চেক করুন, একটি তৃতীয় পক্ষের MTD সেতুতে নয়টি সংখ্যা অনুলিপি করুন, জমা দিন ক্লিক করুন৷ অডিট ট্রেইল ছিল "আমাকে বিশ্বাস করুন, আমার একটি স্প্রেডশীট ছিল"। মধ্য-ত্রৈমাসিক হার পরিবর্তন এটি ভেঙে দিয়েছে। রসিদগুলো হারিয়ে গেছে। একটি ভুল শ্রেণীবিভাগ ধাক্কা দিতে পারে Box 5 শত শত পাউন্ড দ্বারা বন্ধ.
আমি এই বছর একটি ছোট হিসাবে পাইপলাইন পুনর্নির্মাণ Claude Code প্রজেক্ট যা আমার ইনভয়েস এবং খরচ ডাটাবেসের সাথে সরাসরি কথা বলে, প্রতিটি লাইনকে শ্রেণীবদ্ধ করে, একটি ডিটারমিনিস্টিক পাইথন ইঞ্জিনের সাথে Box 1 থেকে Box 9 কম্পিউট করে, মার্কডাউন রিপোর্ট হিসাবে রিটার্নকে ড্রাই-রান করে এবং শুধুমাত্র মানুষের সাইন অফ HMRC MTD এ জমা দেওয়ার পরে। পুরো ত্রৈমাসিক এখন আমার প্রায় এক ঘন্টা সময় নেয়, যার বেশিরভাগই আমার হিসাবরক্ষকের সাথে ড্রাই-রান পর্যালোচনা করছে। অডিট ট্রেইল একটি গিট রেপো। গণিত ইউনিট-পরীক্ষিত হয়। ক্লাসিফায়ার একটি নথিভুক্ত মার্কডাউন ফাইল। জমা দেওয়া হয়.
এই নিবন্ধটি দীর্ঘ সংস্করণ. প্রম্পট, পাইথন, স্কিমা, HMRC OAuth প্রবাহ, প্রান্তের ক্ষেত্রে। আপনি প্রথমে সংক্ষিপ্ত সংস্করণ চান, পড়ুন সহচর ব্লগ.
2. HMRC MTD প্রাইমার (এবং দাবিত্যাগ)
VAT-এর জন্য Making Tax Digital হল HMRC-এর প্রয়োজনীয়তা যে VAT-নিবন্ধিত ব্যবসাগুলি ডিজিটাল রেকর্ড রাখে এবং gov.uk ওয়েব ফর্মে নম্বর টাইপ করার পরিবর্তে একটি নথিভুক্ত API এর মাধ্যমে সামঞ্জস্যপূর্ণ সফ্টওয়্যারের মাধ্যমে রিটার্ন জমা দেয়। API হল OAuth2, প্রতারণা-প্রতিরোধের HTTP হেডারের প্রয়োজন যাতে উদ্ভূত ডিভাইস সনাক্ত করা যায় এবং আপনি লাইভ প্রোডাকশন স্পর্শ করার আগে একটি বিনামূল্যের স্যান্ডবক্সে উপলব্ধ।
রিটার্ন নিজেই নয়টি বাক্স: Box 1 হল VAT বিক্রয় এবং অন্যান্য আউটপুটগুলির কারণে; Box 2 হল VAT ইইউ সদস্য রাষ্ট্রগুলি থেকে পণ্য অধিগ্রহণের কারণে (NI প্রোটোকলের অধীনে উত্তর আয়ারল্যান্ড ব্যবসার জন্য প্রাসঙ্গিক); Box 3 হল মোট VAT বকেয়া (Box 1 + Box 2); Box 4 হল VAT ক্রয়ের ক্ষেত্রে পুনরুদ্ধারযোগ্য (ইনপুট VAT); Box 5 হল নেট VAT অর্থপ্রদান বা পুনরুদ্ধার করার জন্য (Box 3 - Box 4); Box 6 হল VAT ছাড়া মোট বিক্রয়; Box 7 হল VAT বাদে মোট কেনাকাটা; Box 8 হল ইউরোপীয় ইউনিয়নের সদস্য রাষ্ট্রগুলিতে সরবরাহকৃত পণ্যের মোট মূল্য (আবার NI-শুধুমাত্র); Box 9 হল EU সদস্য দেশগুলি থেকে অধিগ্রহণের মোট মূল্য (শুধুমাত্র NI)। স্কিমের বৈচিত্র রয়েছে - ফ্ল্যাট-রেট স্কিম, নগদ অ্যাকাউন্টিং, বার্ষিক অ্যাকাউন্টিং - সেই পরিবর্তন কিভাবে আপনি সংখ্যায় পৌঁছান কিন্তু বাক্সের আকারে নয়।
দাবিত্যাগ। আমি একজন সফটওয়্যার ইঞ্জিনিয়ার, চার্টার্ড অ্যাকাউন্ট্যান্ট নই। এই নিবন্ধটি ট্যাক্স পরামর্শ না. VAT শ্রেণীবিভাগের সঠিক নিয়ম, আংশিক ছাড়, ফ্ল্যাট-রেট স্কিম, ডিজিটাল পরিষেবাগুলির জন্য স্থান-অফ-সরবরাহের নিয়ম, EU পণ্য ও পরিষেবাগুলির ব্রেক্সিট-পরবর্তী চিকিত্সা এবং NI প্রোটোকল সব সময়ের সাথে পরিবর্তিত হয় এবং আপনার নির্দিষ্ট পরিস্থিতির উপর নির্ভর করে। আপনি একটি বাস্তব HMRC অ্যাকাউন্টের বিরুদ্ধে এই ধরনের কিছু চালানোর আগে, আপনার প্রথম রিটার্ন এন্ড-টু-এন্ড পর্যালোচনা করার জন্য একজন ইউকে-নিবন্ধিত অ্যাকাউন্টেন্ট পান। কোনো নির্দিষ্ট প্রান্তের ক্ষেত্রে প্রামাণিক নিয়মের জন্য, gov.uk ওয়েবসাইটে HMRC VAT নোটিশ 700 এবং সম্পর্কিত বিজ্ঞপ্তিগুলি দেখুন। আপনার হিসাবরক্ষকের সময়ের এক ঘণ্টার খরচ একটি খারাপ জমা দেওয়ার খরচের চেয়ে অনেক কম।
3. ডেটা মডেল
নিচের দিকের সবকিছুই নির্ভর করে দুটি টেবিলের আকৃতির উপর: জারি করা চালান (বিক্রয়) এবং রেকর্ডকৃত খরচ (ক্রয়)। আমি Postgres এ আমার রাখি কিন্তু একই আকৃতি MySQL বা SQLite এ কাজ করে। ন্যূনতম দরকারী স্কিমা:
CREATE TABLE invoices (
id BIGSERIAL PRIMARY KEY,
invoice_number TEXT NOT NULL UNIQUE,
issued_at DATE NOT NULL,
customer_name TEXT NOT NULL,
customer_vat_no TEXT,
customer_country CHAR(2) NOT NULL,
net_amount NUMERIC(14,2) NOT NULL,
vat_amount NUMERIC(14,2) NOT NULL,
gross_amount NUMERIC(14,2) NOT NULL,
currency CHAR(3) NOT NULL DEFAULT 'GBP',
fx_rate_to_gbp NUMERIC(18,8) NOT NULL DEFAULT 1,
vat_rate NUMERIC(5,2) NOT NULL,
vat_treatment TEXT NOT NULL,
status TEXT NOT NULL,
paid_at DATE,
notes TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE expenses (
id BIGSERIAL PRIMARY KEY,
supplier_name TEXT NOT NULL,
supplier_vat_no TEXT,
supplier_country CHAR(2) NOT NULL,
incurred_at DATE NOT NULL,
net_amount NUMERIC(14,2) NOT NULL,
vat_amount NUMERIC(14,2) NOT NULL,
gross_amount NUMERIC(14,2) NOT NULL,
currency CHAR(3) NOT NULL DEFAULT 'GBP',
fx_rate_to_gbp NUMERIC(18,8) NOT NULL DEFAULT 1,
vat_rate NUMERIC(5,2) NOT NULL,
vat_treatment TEXT NOT NULL,
category TEXT NOT NULL,
receipt_url TEXT,
notes TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
অ-স্পষ্ট কলাম হয় vat_treatment, fx_rate_to_gbp, এবং দেশের কোড। চিকিত্সা একটি ছোট enum যা শ্রেণীবিভাগকারী এবং ইঞ্জিন উভয় দ্বারা ব্যবহৃত হয়; কান্ট্রি কোড রিভার্স-চার্জ এবং ইইউ-অধিগ্রহণ লজিক চালায়; fx হার আপনাকে বৈদেশিক মুদ্রার চালানগুলিকে তাদের আসল মুদ্রায় রাখতে দেয় এবং এখনও বাক্সের মোটের জন্য GBP-এ পুনঃরাজ্য করতে দেয়।
| কলাম | উদ্দেশ্য | দ্বারা ব্যবহৃত |
|---|---|---|
vat_treatment | মান / হ্রাস / শূন্য / অব্যাহতি / বাইরের সুযোগ / বিপরীত চার্জ / eu-পণ্য / eu-পরিষেবা / স্থগিত-আমদানি | ক্লাসিফায়ার + ইঞ্জিন |
vat_rate | 0.00, 5.00, 20.00 (বা স্কিম-নির্দিষ্ট হার) | ইঞ্জিন + চেকসাম |
currency + fx_rate_to_gbp | বহু-মুদ্রা পুনরায় বিবৃতি | স্বাভাবিকীকরণকারী |
customer_country / supplier_country | রিভার্স-চার্জ, NI প্রোটোকল, প্লেস-অফ-সাপ্লাই | শ্রেণিবিন্যাসকারী |
paid_at | নগদ-অ্যাকাউন্টিং স্কিম শাখা | ইঞ্জিন |
একটি লিগ্যাসি চালান টেবিলে সেই কলামগুলিকে ব্যাকফিল করা প্রকল্পের সবচেয়ে ধীর অংশ। Claude Code মাইগ্রেশন তৈরি করতে পারে; আপনাকে এখনও বিশ্রী প্রান্তের ক্ষেত্রে হাত-শ্রেণীবদ্ধ করতে হবে।
4. কেন Claude Code (এবং Xero / QuickBooks / FreeAgent নয়)
বেশিরভাগ ইউকে ছোট ব্যবসার জন্য উত্তর হল - প্রকৃতপক্ষে - প্যাকেজড সফ্টওয়্যার ব্যবহার করুন। Xero, QuickBooks, FreeAgent, Sage সকলের কাছেই HMRC-প্রত্যয়িত MTD জমা, শালীন UI এবং হিসাবরক্ষক রয়েছে যারা তাদের ইতিমধ্যেই জানেন৷ আপনার কাছে স্পষ্ট কারণ না থাকলে আপনার নিজের VAT সিস্টেমটি রোল করা উচিত নয়।
আমার কারণ সংকীর্ণ কিন্তু বাস্তব ছিল. আমি ইতিমধ্যেই সফ্টওয়্যার কাজের জন্য প্রতিদিন Claude Code ব্যবহার করি, তাই VAT এর জন্যও এটি ব্যবহার করার প্রান্তিক প্রচেষ্টা ছোট ছিল। আমার চালান ডিবি আমার নিজের মেশিনে থাকে; আমি এটি একটি SaaS ভাড়াটে মিরর না করা পছন্দ. আমার সরবরাহকারী মিশ্রণটি বিশ্রী (রিভার্স চার্জ সহ ইইউ পরিষেবাগুলি, স্থগিত আমদানি VAT, মাঝে মাঝে জিরো-রেটেড এজ কেস) এবং একটি একক মার্কডাউন ফাইলে নিয়মগুলি এনকোড করা এবং একটি পাইথন মডিউল সেগুলি পরিচালনা করার জন্য একটি SaaS কনফিগার করার চেয়ে দ্রুততর হতে দেখা গেছে৷ এবং আমি একটি গিট রেপো থেকে যে অডিট ট্রেইলটি পাই - প্রতিটি ক্লাসিফায়ার প্রম্পট, প্রতিটি পার্থক্য, প্রতিটি স্বাক্ষরিত সময়ের স্ন্যাপশট - ঠিক সেই অডিট ট্রেইল যা আমি চাই।
Claude Code তিনটি কারণে এটির জন্য উপযুক্ত। প্রথমত, এটি ডিস্কের একটি প্রকল্পের বিরুদ্ধে সরাসরি কাজ করে: এটি আমার স্কিমা, পূর্ব-ত্রৈমাসিক ড্রাই-রান রিপোর্ট, নিয়ম ফাইল এবং পাইথন ইঞ্জিন পড়তে পারে এবং প্রেক্ষাপটে সম্পাদনা প্রস্তাব করতে পারে। দ্বিতীয়ত, এটি বিরক্তিকর ভারা - মাইগ্রেশন স্ক্রিপ্ট, CSV আমদানিকারক, পুনর্মিলন প্রতিবেদন, পাইটেস্ট ফিক্সচারে ভাল। তৃতীয়ত, যখন এটি একটি লাইনকে শ্রেণিবদ্ধ করে, তখন এটি সরল ইংরেজিতে তার যুক্তি ব্যাখ্যা করে, যা আমি রিটার্নে স্বাক্ষর করার আগে পর্যালোচনা করতে চাই। নীচের ওয়ার্কফ্লো ডায়াগ্রামের নীচের সিদ্ধান্তের ম্যাট্রিক্সটি এই ট্রেড-অফের সৎ সংস্করণ।
5. স্থাপত্য এবং কর্মপ্রবাহ
পাইপলাইনে পাঁচটি সাঁতারের লেন রয়েছে। উৎস স্ট্রাইপ, ওয়াইজ এবং ব্যাঙ্ক ফিড থেকে CSV-এর জন্য একটি ড্রপ ফোল্ডার চালান এবং খরচ টেবিলে শুধুমাত্র পঠনযোগ্য অ্যাক্সেস। ইনজেস্ট + নরমালাইজ করুন একটি ছোট ক্লড-জেনারেটেড পাইথন স্ক্রিপ্ট যা প্রতিটি উৎস স্কিমাকে একটি ক্যানোনিকাল ভিউতে ম্যাপ করে, HMRC মাসিক হারে বৈদেশিক মুদ্রাকে GBP-এ রূপান্তর করে, একটি তারিখ-পরিসীমা ফিল্টার প্রয়োগ করে এবং প্রতিটি সারিতে স্ট্যাম্প করে run_key তাই পুনরায় রান নিরাপদ। শ্রেণীবিন্যাস + পুনর্মিলন হল Claude Code ক্লাসিফায়ার: এটি প্রতিটি ক্যানোনিকাল সারি হাঁটে, একটি বেছে নেয় vat_treatment নথিভুক্ত enum থেকে নিয়ম ব্যবহার করে vat-rules.md, অর্থপ্রদানের বিরুদ্ধে চালানগুলি পুনর্মিলন করে এবং অসঙ্গতিগুলিকে ফ্ল্যাগ করে (নেতিবাচক নেট, অনুপস্থিত সরবরাহকারী VAT নম্বর, দেশ-কোডের অমিল, সরবরাহকারী যেগুলি VAT-নিবন্ধিত হওয়া উচিত কিন্তু নয়)। VAT ইঞ্জিন একটি বিশুদ্ধ পাইথন মডিউল যা শ্রেণিবদ্ধ সারিগুলি পড়ে এবং Box 1 থেকে Box 9 নির্ধারকভাবে গণনা করে; ফ্ল্যাট-রেট, নগদ এবং বার্ষিক স্কিম শাখাগুলি সুস্পষ্ট কোড পাথ। জমা + নিরীক্ষা এটি হল HMRC MTD API কল (OAuth2, জালিয়াতি-প্রতিরোধ শিরোনাম, স্যান্ডবক্স প্রথম), একটি মানব অনুমোদনের পদক্ষেপের পিছনে গেট করা, স্বাক্ষরিত সময়ের স্ন্যাপশট এবং সম্পূর্ণ শ্রেণীবদ্ধ লগ লেখা একটি শুধুমাত্র-অডিট ফোল্ডারে ছয় বছর ধরে রাখা।
6. Claude Code দিয়ে ধাপে ধাপে বিল্ড
এই আমি আসলে ব্যবহৃত কর্মপ্রবাহ. পাঁচটি প্রম্পট। আমি এই নিবন্ধের জন্য তাদের পরিষ্কার; মূলগুলি অগোছালো।
প্রম্পট 1 - স্বাভাবিককরণকারী। "দেখুন invoices এবং expenses মধ্যে টেবিল schema.sql. একটি পাইথন মডিউল তৈরি করুন normalise.py যে উভয় টেবিল ব্যবহার করে পড়া psycopg (শুধু-পঠন ভূমিকা vat_reader), তারিখ পরিসরে সীমাবদ্ধ 2026-01-01 থেকে 2026-03-31, এবং কীগুলির সাথে ক্যানোনিকাল নির্দেশাবলীর একটি তালিকা নির্গত করে: id, source, date, party, gross, net, vat_amount, vat_rate, vat_treatment, country, currency, fx_rate, run_key. ব্যবহার করুন Decimal, ভাসা না. একটি ডকস্ট্রিং এবং একটি অন্তর্ভুক্ত করুন __main__ ব্লক যা একটি সারাংশ প্রিন্ট করে।"
ক্লদ এর সাথে একটি পরিষ্কার মডিউল ফিরিয়ে দিয়েছেন Decimal, প্যারামিটারাইজড SQL, ক build_run_key() যেটি হ্যাশ (period_start, period_end, স্কিম, schema_version) একটি স্থিতিশীল হেক্স স্ট্রিং এবং একটি ক্লিক-ভিত্তিক CLI-এ পরিণত হয়। আমি দুটি ক্ষেত্রের নাম সম্পাদনা করেছি এবং বাকিগুলি গ্রহণ করেছি।
প্রম্পট 2 - ক্লাসিফায়ার। "পড়ুন vat-rules.md এবং লিখুন classify.py. থেকে প্রতিটি ক্যানোনিকাল সারি জন্য normalise.py, সেট vat_treatment একজনের কাছে: মান, হ্রাস করা, শূন্য, অব্যাহতি, সুযোগের বাইরে, বিপরীত চার্জ, eu-পণ্য, eu-পরিষেবা, স্থগিত-আমদানি. যদি সারিটি ইতিমধ্যে একটি অ-খালি থাকে vat_treatment, এটা একা ছেড়ে এবং হিসাবে এটি রেকর্ড সংরক্ষিত. অন্যথায়, দেশের কোড, সরবরাহকারী VAT নম্বর, বিভাগ এবং পরিমাণ থেকে সিদ্ধান্ত নিন এবং একটি এক-বাক্য লিখুন reason প্রতিটি সারিতে। অসঙ্গতিগুলি (নেতিবাচক নেট, নিবন্ধন থ্রেশহোল্ডের উপরে যুক্তরাজ্যের সরবরাহকারীর জন্য অনুপস্থিত সরবরাহকারী VAT, দেশের অমিল) আলাদাভাবে যান anomalies.json মানুষের পর্যালোচনার জন্য। উৎস ডিবি পরিবর্তন করবেন না।"
শ্রেণীবদ্ধকারী নিজেই একটি ছোট, বেশিরভাগ নিয়ম-ভিত্তিক ফাংশন যা অস্পষ্ট ব্যয় বিভাগের জন্য একটি LLM-ব্যাকড শাখা সহ। সমালোচনামূলকভাবে, এটি কখনই উত্স DB-তে লেখে না - এটি একটি শ্রেণীবদ্ধ JSON ফাইল নির্গত করে যা ইঞ্জিনটি পড়ে। যদি আমি একটি শ্রেণীবিভাগের সাথে একমত না হই, আমি JSON সম্পাদনা করি; পরবর্তী ড্রাই-রান এটি তুলে নেয়।
প্রম্পট 3 - ইঞ্জিন। "লিখুন engine.py একটি বিশুদ্ধ ফাংশন হিসাবে: def compute_boxes(rows: list[Row], scheme: Scheme) -> BoxTotals. I/O নেই। LLM নেই। BoxTotals Box 1 থেকে Box 9 হিসাবে একটি হিমায়িত ডেটাক্লাস Decimal মান 2 dp. জন্য সুস্পষ্ট শাখা যোগ করুন standard, flat_rate, cash, এবং annual স্কিম স্ট্যান্ডার্ড স্কিম জমা হয়: বিক্রয় VAT Box 1-এ অবদান রাখে, VAT থেকে Box 4 ক্রয় করে। রিভার্স-চার্জ ইনভয়েসগুলি Box 1 এবং Box 4 উভয়ই যোগ করে। স্থগিত আমদানি VAT Box 1 এবং Box 4 উভয়কেই যোগ করে। NI ব্যবসার জন্য EU অধিগ্রহণ Box 2 এবং Box 9-এ যায়৷ বাক্সের মোট বৃত্তাকার, প্রতি সারিতে কখনই নয়। প্রতিটি শাখাকে তার নিয়মের সাথে যুক্ত করে একটি মতবাদ লিখুন।"
প্রম্পট 4 - ড্রাই-রান রিপোর্ট। "লিখুন dryrun.py যে কল compute_boxes() এবং একটি মার্কডাউন রিপোর্ট নির্গত করে: পিরিয়ড এবং স্কিম সহ শিরোনাম, ক্যানোনিকাল লেবেল সহ Box 1 থেকে Box 9 এর একটি টেবিল, শ্রেণীবদ্ধ বালতি প্রতি একটি বিভাগ যা মোট 10টি সারি তালিকাভুক্ত করে, একটি অসঙ্গতি বিভাগ এবং একটি ফুটার run_key এবং শ্রেণীবদ্ধ JSON-এর একটি SHA-256। সংরক্ষণ করুন ./audit/<period>/dryrun.md."
প্রম্পট 5 - জমাকারী। "লিখুন submit.py HMRC MTD VAT API v1.0 এর বিপরীতে। PKCE এর সাথে OAuth2 authorisation_code ফ্লো ব্যবহার করুন। থেকে অ্যাক্সেস টোকেন পড়ুন ~/.vat/token.json; মেয়াদ শেষ হলে রিফ্রেশ করুন। HMRC দ্বারা নথিভুক্ত প্রতারণা-প্রতিরোধ শিরোনাম প্রয়োজনীয়; তাদের থেকে টানুন fraud_headers.py. স্যান্ডবক্সে ডিফল্ট https://test-api.service.hmrc.gov.uk. পদক্ষেপ: GET /organisations/vat/{vrn}/obligations?status=O, ম্যাচিং পিরিয়ড খুঁজুন, ড্রাই-রান সারাংশ প্রদর্শন করে নিশ্চিত করতে অপারেটরকে অনুরোধ করুন, তারপর POST /organisations/vat/{vrn}/returns সঙ্গে finalised: true. প্রিন্ট করুন receiptId. লাইভে কল করবেন না যদি না HMRC_ENV=live সেট করা হয় এবং অপারেটর প্রকার জমা দিন."
পাঁচটি প্রম্পট, চারটি ফাইল এবং একটি ছোট মার্কডাউন নিয়ম নথি। টোটাল বিল্ড টাইম হতে পারে এক সপ্তাহ ফোকাসড সন্ধ্যা, যার বেশিরভাগই ছিল ক্লাসিফায়ার নিয়ম এবং HMRC OAuth ড্যান্স।
7. VAT ইঞ্জিন
ইঞ্জিনটি ইচ্ছাকৃতভাবে বিরক্তিকর অংশ। এটি ইউনিট পরীক্ষা সহ একটি বিশুদ্ধ ফাংশন এবং কোন এআই নেই। এটি প্রকৃত আকৃতি:
from dataclasses import dataclass
from decimal import Decimal, ROUND_HALF_UP
D2 = Decimal("0.01")
@dataclass(frozen=True)
class BoxTotals:
box1: Decimal
box2: Decimal
box3: Decimal
box4: Decimal
box5: Decimal
box6: Decimal
box7: Decimal
box8: Decimal
box9: Decimal
def _q(x: Decimal) -> Decimal:
return x.quantize(D2, rounding=ROUND_HALF_UP)
def compute_boxes(rows, scheme="standard", is_ni_business=False) -> BoxTotals:
box1 = box2 = box4 = Decimal(0)
box6 = box7 = box8 = box9 = Decimal(0)
for r in rows:
gbp_net = r.net * r.fx_rate
gbp_vat = r.vat_amount * r.fx_rate
if r.source == "invoice":
box6 += gbp_net
if r.vat_treatment in ("standard", "reduced"):
box1 += gbp_vat
elif r.vat_treatment == "eu-goods" and is_ni_business:
box8 += gbp_net
else:
box7 += gbp_net
if r.vat_treatment in ("standard", "reduced"):
box4 += gbp_vat
elif r.vat_treatment == "reverse-charge":
notional = gbp_net * (r.vat_rate / Decimal(100))
box1 += notional
box4 += notional
elif r.vat_treatment == "postponed-import":
notional = gbp_net * (r.vat_rate / Decimal(100))
box1 += notional
box4 += notional
elif r.vat_treatment == "eu-goods" and is_ni_business:
notional = gbp_net * (r.vat_rate / Decimal(100))
box2 += notional
box4 += notional
box9 += gbp_net
box3 = box1 + box2
box5 = box3 - box4
return BoxTotals(
_q(box1), _q(box2), _q(box3), _q(box4), _q(box5),
_q(box6), _q(box7), _q(box8), _q(box9),
)
দুটি জিনিস লক্ষ্য করুন। প্রথমত, প্রতিটি বাক্সের মোট একবার শেষে পরিমাপ করা হয়। প্রতি-সারি রাউন্ডিং লিক পেনিস এবং HMRC টোটাল সম্পর্কে ক্ষমাশীল নয় যা মিলিত হয় না। দ্বিতীয়ত, ইঞ্জিন সম্পূর্ণরূপে নির্ধারক: একই ইনপুট, একই আউটপুট, প্রতিবার। এটি সেই সম্পত্তি যা আমাকে ইউনিট-পরীক্ষা করতে দেয় এবং ড্রাই-রানে বিশ্বাস করে।
def test_simple_quarter():
rows = [
Row("invoice", net=Decimal("24500.00"), vat_amount=Decimal("4900.00"),
vat_rate=Decimal("20"), vat_treatment="standard", fx_rate=Decimal(1), source="invoice"),
Row("expense", net=Decimal("3000.00"), vat_amount=Decimal("600.00"),
vat_rate=Decimal("20"), vat_treatment="standard", fx_rate=Decimal(1), source="expense"),
]
t = compute_boxes(rows)
assert t.box1 == Decimal("4900.00")
assert t.box4 == Decimal("600.00")
assert t.box5 == Decimal("4300.00")
assert t.box6 == Decimal("24500.00")
assert t.box7 == Decimal("3000.00")
এটির সাথে সাথে, ড্রাই-রান রিপোর্ট স্পর্শ করার আগে প্রতিটি রিগ্রেশন সিআই-তে ধরা পড়ে। ক্লড আমাকে আরও পরীক্ষা লিখতে সাহায্য করতে পারে; পরীক্ষায় উত্তীর্ণ না হয়ে এটি ইঞ্জিন পরিবর্তন করতে পারে না।
8. ডেমো ভিডিও
নীচে এক চতুর্থাংশের জন্য বাস্তব (বেনামী) ইনভয়েস এবং খরচ ডাটাবেসের বিপরীতে এন্ড-টু-এন্ড চলমান পাইপলাইনের একটি সংক্ষিপ্ত ওয়াকথ্রু রয়েছে: স্বাভাবিককরণ, শ্রেণিবদ্ধ, ড্রাই-রান, তারপর একটি স্যান্ডবক্স MTD জমা দেওয়া। পুরো লুপ মিনিট দুয়েক।
9. HMRC MTD জমা
এই অংশ সবচেয়ে লেখা আপ চকচকে হয়. MTD VAT API নিজেই ভালভাবে নথিভুক্ত এবং বিনামূল্যে, তবে কল করার আগে আপনাকে তিনটি জিনিস পেতে হবে POST returns.
OAuth2 এবং টোকেন। HMRC বিকাশকারী হাবে একটি অ্যাপ্লিকেশন নিবন্ধন করুন; আপনি একটি ক্লায়েন্ট আইডি, একটি ক্লায়েন্ট সিক্রেট এবং একটি রিডাইরেক্ট ইউআরআই পাবেন। প্রবাহটি হল PKCE-এর সাথে authorisation_code: HMRC সম্মতি পৃষ্ঠায় ব্রাউজার খুলুন, ব্যবহারকারী তাদের সরকারি গেটওয়ে শংসাপত্রের সাথে লগ ইন করে এবং তাদের VAT রেজিস্ট্রেশন নম্বর (VRN) এর বিপরীতে আপনার আবেদন অনুমোদন করে, HMRC একটি অনুমোদন কোডের সাথে পুনরায় নির্দেশ করে, আপনি এটি একটি অ্যাক্সেস টোকেন + রিফ্রেশ টোকেনের জন্য বিনিময় করেন। ডিস্কে বুদ্ধিমান অনুমতি দিয়ে তাদের ক্যাশে করুন। অ্যাক্সেস টোকেন স্বল্পস্থায়ী; রিফ্রেশ টোকেন অনেক লম্বা।
জালিয়াতি-প্রতিরোধ হেডার। HMRC-এর জন্য প্রতিটি API কলে আদি ডিভাইস সনাক্ত করার জন্য HTTP শিরোনামগুলির একটি নথিভুক্ত সেট প্রয়োজন: সময় অঞ্চল, স্ক্রীন জ্যামিতি, ব্যবহারকারীর আইডি, পাবলিক আইপি, MAC ঠিকানা, ক্লায়েন্ট সংযোগ পদ্ধতি, ইত্যাদি। সঠিক তালিকা এবং বিন্যাসটি HMRC বিকাশকারী ডকুমেন্টেশনে রয়েছে (দেখুন HMRC VAT নোটিশ 700-এর জন্য নির্দিষ্ট লেখক-প্রক্রিয়াগত নিয়ম-নীতির জন্য)। তাদের ভুল এবং আপনি একটি পেতে 403 একটি অস্পষ্ট ত্রুটি সঙ্গে. তাদের ঠিক করুন এবং কলটি চলে যাবে। আমি তাদের রাখি fraud_headers.py এবং পরীক্ষায় তাদের উপস্থিতি নিশ্চিত করুন।
প্রথমে স্যান্ডবক্স। HMRC এ একটি বিনামূল্যে স্যান্ডবক্স প্রদান করে test-api.service.hmrc.gov.uk স্টাব VRN এবং স্টাব বাধ্যবাধকতা সহ। আপনি একটি জাল রিটার্ন জমা না দেওয়া পর্যন্ত, একটি জাল রসিদ আইডি না পাওয়া পর্যন্ত এবং আপনার বাধ্যবাধকতা সরানো নিশ্চিত না হওয়া পর্যন্ত আপনার সম্পূর্ণ পাইপলাইনটি স্যান্ডবক্সের বিরুদ্ধে এন্ড-টু-এন্ড চালান। তবেই আপনি উল্টে যাবেন HMRC_ENV=live. এনভায়রনমেন্ট ভেরিয়েবল সেট না করা এবং অপারেটর টাইপ না থাকলে আমার সাবমিটার লাইভ কল করতে অস্বীকার করে SUBMIT প্রম্পটে বেঁচে থাকার জন্য কোন স্বয়ংক্রিয় মৃত্যুদন্ডের পথ নেই। একটি একক খারাপ লাইভ জমা দেওয়ার খরচ আরও একটি স্যান্ডবক্স পুনরাবৃত্তির খরচের চেয়ে অনেক বেশি।
প্রকৃত সুখী-পথ কলটি সংক্ষিপ্ত: GET obligations সঙ্গে status=O ওপেন পিরিয়ড খুঁজে বের করতে, ড্রাই-রান রিপোর্ট প্রদর্শন করুন, অপারেটরকে নিশ্চিত করতে বলুন, তারপর POST returns নয়টি বাক্স নম্বর সহ, periodKey বাধ্যবাধকতা থেকে, এবং finalised: true. প্রতিক্রিয়া সংরক্ষণ করুন, অডিট ফোল্ডারে রসিদ আইডি লিখুন এবং আপনার কাজ শেষ।
10. নিরাপত্তা, নিরীক্ষা, এবং সম্মতি
তিন নিয়মে আমি এগোব না। প্রথম, ক্লদ পাটিগণিতের মধ্যে নেই. ক্লাসিফায়ার চিকিত্সার পরামর্শ দেয় এবং LLM পাইথন এবং নিয়মগুলি সম্পাদনা করতে পারে, তবে বাক্সের মোট সংখ্যা ইউনিট পরীক্ষা সহ একটি বিশুদ্ধ ফাংশন দ্বারা উত্পাদিত হয়। "এআই এটি করেছে" MTD এর অধীনে একটি প্রতিরক্ষা নয়। দ্বিতীয়, প্রতিটি জমা একটি মানুষের দ্বারা gated হয়. ড্রাই-রান রিপোর্ট সাইন-অফের জন্য সত্যের উৎস। যদি আমি শ্রেণীবদ্ধ সারি এবং ইঞ্জিন কোড থেকে একটি সংখ্যা ব্যাখ্যা করতে না পারি, আমি জমা দিই না। তৃতীয়, অডিট ট্রেইল শুধুমাত্র যোগ করা হয়. প্রতিটি শ্রেণীবদ্ধ JSON, প্রতিটি ড্রাই-রান রিপোর্ট, প্রতিটি প্রম্পট, প্রতিটি পার্থক্য এবং মেয়াদের জন্য চূড়ান্ত HMRC রসিদ আইডি লেখা হয় ./audit/<period>/ এবং একটি ব্যক্তিগত গিট রেপোতে প্রতিশ্রুতিবদ্ধ। HMRC এর জন্য ছয় বছরের রেকর্ড প্রয়োজন; আমার স্বাক্ষরিত স্ন্যাপশট হয়.
আপনি বাকিগুলি গ্রহণ না করলেও আমি আরও দুটি অনুশীলনের সুপারিশ করব। সোর্স-ডিবি সংযোগটি একটি ন্যূনতম-সুবিধা-পাঠ্য ভূমিকা হিসাবে চালান: না UPDATE, না DELETE, না DROP. HMRC ক্লায়েন্ট গোপন রাখুন এবং আপনার হোম ডিরেক্টরিতে একটি গোপন ম্যানেজার বা একটি 0600 ফাইল ব্যবহার করে রেপোর বাইরে অ্যাক্সেস টোকেনগুলি রাখুন৷ মূল বিষয় হল নির্মাণের মাধ্যমে দুর্ঘটনাকে অসম্ভব করা, শুধু নীতির দ্বারা নয়।
11. এজ কেস
VAT হল একটি নিয়ন্ত্রিত কর যা 1973 সাল থেকে প্রতিটি ইউকে সরকার দ্বারা সম্পাদনা করা হয়েছে, যার উপরে ব্রেক্সিট-পরবর্তী ওভারলে এবং একটি উত্তর আয়ারল্যান্ড প্রোটোকল রয়েছে। প্রান্ত কেস বাস্তব. আমার ইঞ্জিন যেগুলি পরিচালনা করে তার একটি অ-সম্পূর্ণ তালিকা:
- ব্রেক্সিট এবং উত্তর আয়ারল্যান্ড। গ্রেট-ব্রিটেন ব্যবসায় আর Box 8 বা Box 9 পূরণ করে না। NI ব্যবসাগুলি এখনও NI প্রোটোকলের অধীনে পণ্যের জন্য (সেবা নয়) করে। ইঞ্জিন লাগে
is_ni_businessএকটি পরামিতি হিসাবে এবং সেই অনুযায়ী শাখা। অনুমোদিত নিয়মের জন্য HMRC VAT বিজ্ঞপ্তি 700 দেখুন। - বিপরীত চার্জ। যুক্তরাজ্যের বাইরের কোনো সরবরাহকারীর কাছ থেকে কেনা পরিষেবাগুলি (এবং নির্দিষ্ট কিছু গার্হস্থ্য নির্মাণ-শিল্প পরিষেবাগুলি) বিপরীত চার্জের অধীনে ধরা হয়: আপনি Box 1-এ একটি ধারণাগত আউটপুট VAT যোগ করুন এবং Box 4-এ একই পরিমাণ পুনরুদ্ধার করুন। নগদ অর্থের উপর নেট প্রভাব শূন্য; রিটার্নের উপর নেট ইফেক্ট হল দুটি বাক্স যা একসাথে চলে।
- স্থগিত আমদানি VAT. যুক্তরাজ্যের বাইরে থেকে আমদানিকৃত পণ্যের জন্য, আপনি সীমান্তে পরিশোধ করার পরিবর্তে আপনার পরবর্তী রিটার্নে আমদানি VAT পিছিয়ে দেন। ট্রিটমেন্টটি রিভার্স চার্জের মতো দেখায়।
- আংশিক ছাড়। আপনি যদি করযোগ্য এবং অব্যাহতিপ্রাপ্ত সরবরাহ উভয়ই করেন তবে আপনি কেবলমাত্র সেই পরিমাণ ইনপুট VAT পুনরুদ্ধার করতে পারেন যে পরিমাণ এটি করযোগ্য সরবরাহের সাথে সম্পর্কিত। প্রমিত এবং বিশেষ পদ্ধতি আছে; এই কোণে প্রায়ই একজন হিসাবরক্ষকের প্রয়োজন হয়। মার্কডাউন ফাইলে আংশিক ছাড়ের নিয়ম এনকোড করার চেষ্টা করবেন না।
- ফ্ল্যাট-রেট স্কিম। আপনি মান হারে VAT চার্জ করেন কিন্তু মোট টার্নওভারের একটি নির্দিষ্ট শতাংশ HMRC প্রদান করেন এবং আপনি সাধারণত VAT ইনপুট পুনরুদ্ধার করতে পারবেন না। এর জন্য ইঞ্জিনের একটি পৃথক শাখা রয়েছে এবং এটি প্রতি-সারির বেশিরভাগ শ্রেণীবিভাগকে উপেক্ষা করে।
- মাল্টি-কারেন্সি ইনভয়েস। প্রাসঙ্গিক তারিখে কার্যকর হারে প্রতিটি সারিকে GBP-এ রূপান্তর করুন। HMRC মাসিক গড় হার প্রকাশ করে; আপনি স্পট রেট ব্যবহার করতে পারেন। ধারাবাহিক থাকুন। দ
fx_rate_to_gbpকলাম প্রতি সারিতে প্রয়োগকৃত প্রকৃত হার সঞ্চয় করে। - ক্রেডিট নোট। একটি ক্রেডিট নোট একটি নেতিবাচক চালান। এটি Box 1 এবং Box 6 (বা Box 4 এবং Box 7 যদি ক্রয় ক্রেডিট হয়) হ্রাস করে। নিশ্চিত করুন আপনার
net_amountএবংvat_amountনেতিবাচক যেতে পারে এবং ইঞ্জিন তাদের সঠিকভাবে যোগ করে। - আমানত এবং স্টেজ পেমেন্ট. ট্যাক্স পয়েন্ট হতে পারে যখন আমানত প্রাপ্ত হয়, চূড়ান্ত চালান ইস্যু করার সময় নয়। নগদ অ্যাকাউন্টিং এটি সহজ করতে পারে।
- মধ্য-ত্রৈমাসিক হার পরিবর্তন। ঐতিহাসিকভাবে বিরল, কিন্তু সম্ভব। সারি প্রতি হার সংরক্ষণ করুন, একটি বিশ্বব্যাপী ধ্রুবক হিসাবে নয়।
12. খরচ
সৎ সংখ্যা। সময় বিল্ড প্রায় এক সপ্তাহ মনোযোগ কেন্দ্রীভূত সন্ধ্যা ছিল - এটিকে 25 থেকে 30 ঘন্টা বলুন। এর বেশিরভাগই ছিল স্কিমা স্বাভাবিকীকরণ, শ্রেণীবিভাগের নিয়ম এবং ইঞ্জিন পরীক্ষা লেখা; HMRC OAuth নৃত্য ছিল দ্বিতীয় বৃহত্তম খণ্ড। প্রতি ত্রৈমাসিক চলমান খরচ ছোট: আমার বিদ্যমান Claude Code সাবস্ক্রিপশন (অন্যান্য সফ্টওয়্যার কাজের জন্য ইতিমধ্যেই অর্থ প্রদান করা হয়েছে), ক্লাসিফায়ার টোকেন ব্যবহারে কয়েকটি পেনিস এবং HMRC API এর জন্য শূন্য পাউন্ড। ইঞ্জিন এবং অডিট লগ আমার ম্যাকে স্থানীয়ভাবে চলে। প্রতি ত্রৈমাসিক পর্যালোচক সময় প্রায় এক ঘন্টা, বেশিরভাগই আমার হিসাবরক্ষকের সাথে ড্রাই-রান পড়তে ব্যয় করে। পুরানো কর্মপ্রবাহের অধীনে প্রায় অর্ধেক দিনের স্প্রেডশীট ঝগড়ার সাথে তুলনা করুন এবং সংরক্ষিত সময় প্রথম বছরের মধ্যে নির্মাণ খরচ ফেরত দেয়।
আপনি যদি এটিকে একটি প্রকল্প হিসাবে মূল্য নির্ধারণ করেন যা আপনি নির্মাণের জন্য অন্য কাউকে অর্থ প্রদান করছেন, তাহলে আপনি পরামর্শদাতা হারে চার-অঙ্কের বলপার্কের মধ্যে থাকবেন - এই কারণেই মাসে বিশ থেকে পঞ্চাশ পাউন্ডে প্যাকেজ করা SaaS বেশিরভাগ ব্যবসার জন্য প্রায় সবসময়ই সঠিক উত্তর। আকর্ষণীয় প্রশ্ন নয় "এটি কি Xero থেকে সস্তা?" - এটি সাধারণত হয় না - তবে "এটি কি আরও নির্ভুল, আরও নিরীক্ষণযোগ্য এবং আমার পক্ষে যুক্তি করা সহজ?"। আমার জন্য উত্তর হ্যাঁ.
13. পরবর্তী কি, এবং উপসংহার
পরবর্তী অংশগুলি আমি যোগ করতে চাই: স্বয়ংক্রিয় ব্যাঙ্ক-ফিড আমদানি (ওপেন ব্যাঙ্কিং AISP), সরবরাহকারী পিডিএফগুলির জন্য OCR যাতে রসিদ URL একটি প্রকৃত স্ক্যান করা লাইন, একটি নির্ধারিত ক্রোন + স্ল্যাক অনুমোদনের প্রবাহে পরিণত হয় তাই আমাকে সময়সীমা মনে রাখতে হবে না, এবং মার্কেটপ্লেস বিক্রেতাদের জন্য একটি স্ব-বিলিং এক্সটেনশন। এগুলোর কোনোটিই পাইপলাইনের মূল আকৃতি পরিবর্তন করে না। এগুলি একই পাঁচ-লেনের চিত্রের সমস্ত সজ্জা।
অন্তত আমার জন্য সবচেয়ে বড় শিক্ষা হল, একটি ছোট Claude Code প্রজেক্ট একটি নিয়ন্ত্রিত কর্মপ্রবাহের বিরক্তিকর অর্ধেক কতটা ভালোভাবে পরিচালনা করে। বিরক্তিকর অর্ধেক হল বেশিরভাগ কাজ: স্কিমা স্বাভাবিককরণ, CSV আমদানিকারক, পুনর্মিলন প্রতিবেদন, ফিক্সচার, প্রান্ত-কেস নিয়ম, অডিট লগিং। ক্লদ যে সব চমৎকার. নির্ধারক অর্ধেক - প্রকৃত গণিত, প্রকৃত জমা - একক পরীক্ষা এবং একটি মানব অনুমোদন গেট সহ প্লেইন পাইথনে থাকে, ঠিক যেখানে এটি রয়েছে।
দাবিত্যাগ, আবার. এই নিবন্ধটি ট্যাক্স পরামর্শ নয়. আপনি একটি বাস্তব HMRC অ্যাকাউন্টে এই ধরনের কিছু নির্দেশ করার আগে, আপনার প্রথম রিটার্ন এন্ড-টু-এন্ড পর্যালোচনা করার জন্য একজন ইউকে-নিবন্ধিত অ্যাকাউন্ট্যান্ট পান। আপনি এবং আপনার হিসাবরক্ষক উভয়ই আত্মবিশ্বাসী না হওয়া পর্যন্ত HMRC MTD স্যান্ডবক্সের বিরুদ্ধে দৌড়ান। যেকোন নির্দিষ্ট VAT ট্রিটমেন্টের প্রামাণিক নিয়মের জন্য, gov.uk ওয়েবসাইটে HMRC VAT নোটিশ 700 এবং সম্পর্কিত বিজ্ঞপ্তিগুলি দেখুন। আপনি এই সব সংক্ষিপ্ত সংস্করণ চান তাহলে, সহচর ব্লগ পোস্ট একটি পাঁচ মিনিটের পড়া; অন্যথায়, সাবস্ক্রাইব করুন এবং স্ট্যাক পরিপক্ক হওয়ার সাথে সাথে আমি লিখতে থাকব।
এই নিবন্ধের জন্য এসইও স্ন্যাপশট
- SEO শিরোনাম: Claude Code দিয়ে একটি VAT রিটার্ন সিস্টেম তৈরি করুন
- মেটা বর্ণনা: আপনার চালান এবং খরচ DB পড়তে Claude Code ব্যবহার করুন, VAT শ্রেণীবদ্ধ করুন, HMRC Box 1 থেকে 9 গণনা করুন, ড্রাই-রান করুন, তারপর MTD-এ জমা দিন - নির্ধারক ইঞ্জিন, মানুষের অনুমোদন।
- প্রাথমিক কীওয়ার্ড: ক্লড-কোড, ভ্যাট, এইচএমআরসি, এমটিডি, অ্যাকাউন্টিং, অটোমেশন, পাইথন, এআই-এজেন্ট, ফিনোপস, ছোট-ব্যবসা
- Twitter / X (280 অক্ষরের নিচে): একটি Claude Code প্রকল্প হিসাবে আমার UK VAT রিটার্ন পুনর্নির্মাণ: Postgres চালান + খরচ DB থেকে HMRC Box 1 থেকে 9, নির্ধারক পাইথন ইঞ্জিন, স্যান্ডবক্স-প্রথম MTD জমা, মানব অনুমোদন গেট। সম্পূর্ণ লেখা + ওয়ার্কফ্লো SVG + ডেমো ভিডিও। ট্যাক্স পরামর্শ নয়। #ClaudeCode #VAT #HMRC #MTD
- লিঙ্কডইন পোস্ট: আমি এই বছর একটি ছোট Claude Code প্রকল্প হিসাবে আমার ত্রৈমাসিক UK VAT রিটার্ন পুনর্নির্মাণ করেছি। এটি আমার ইনভয়েস এবং খরচের ডাটাবেস রিড-ওনলি পড়ে, একটি ডকুমেন্টেড নিয়ম ফাইল ব্যবহার করে VAT ট্রিটমেন্ট দ্বারা প্রতিটি লাইনকে শ্রেণীবদ্ধ করে, একটি ডিটারমিনিস্টিক পাইথন ইঞ্জিনের সাথে HMRC Box 1 থেকে 9 কম্পিউট করে (পাটিগণিত কোন LLM নেই), এবং শুধুমাত্র আমি ড্রাই-রান থেকে সাইন অফ করার পরে এটি HMRC, স্যান্ডপ্রেভেন্ট-প্রথম HMRC-প্রথম বক্সের মাধ্যমে জমা দেয়। সম্পূর্ণ OAuth2 প্রবাহ। পুরো কোয়ার্টার এখন প্রায় এক ঘন্টা লাগে। প্রম্পট, স্কিমা, ইঞ্জিন কোড, এজ কেস এবং সৎ খরচের গল্প সহ সম্পূর্ণ লেখা রয়েছে Workstation-এ। ট্যাক্স পরামর্শ নয়; আপনার প্রথম রিটার্ন পর্যালোচনা করার জন্য একজন হিসাবরক্ষক পান।
