カザフスタン:私がどのように100税申告フォームを渡すのを手伝ったか。 200フォームを開始

社会への挨拶! むかしむかし(数日前の3月25日)、遠く、遠くの銀河(カザフスタンのアルマトイ)で...

私の友人、会計士は、次の言葉で私に電話をかけました。

"-こんにちはRinat!あなたはプログラミングが好きです。私はここでLLPで新しい仕事を得ました。昨年ここでいくつかの税理士がここに変わりました。しかし、私は年次報告書を提出する必要があります。もちろん、私は1週間で解決しますが、すべてが正しいという事実ではありません。

ためらうことなく、私は助けることにしました、女の子は適用された意味で悪くはなく、時には有用です。

そして、ここで待ち伏せが私を待っていました...
記事への注意:合計3つの記事があります。200のフォーム、300のフォーム、請求書の会計です。

トラブル

1C:Enterpriseなどの会計自動化システムは、提出された納税申告書にリンクせずに、全体として状況を示します。 既存のオンラインサービスにインポートするファイルを作成できますが、レポートが正しく送信されたかどうかを確認できません。

問題解決策:

私は会計の基礎を学ばなければなりませんでした。

2009年以降、カザフスタンでは、納税申告書をオンラインで提出できます。 次の2つのオプションがあります。

1. 納税者キャビネット
2. 税務申告処理システム (以下SONOと呼びます)

LLPにはいくつかの課税制度があります。


一般に確立された課税手続きが必要でした。

このモードでは、私の場合と同様に、主に3種類の宣言が送信されます。

100.00法人所得税の申告
200.00カザフスタン共和国国民の個人所得税および社会税に関する宣言
300.00付加価値税の申告

年に一度、100のフォームがレンタルされます。
200および300のフォームが四半期に1回レンタルされます。

200と300のフォームの要約を提出する必要がありました。

まず、オンラインサービスにアクセスするためのAPIを探し始めました。 残念ながら、ポータルを提供している会社にはAPIが存在していません。 クローズドシステム。 納税者に関する公開情報を要求できますが、残念ながら申告は機能しません。

簡単な方法を探していないので、十分なオープン検索を行うことにしました。

「納税者のオフィス」に行き、仕事を始めるために200のフォームすべてをアップロードしました。

「納税者キャビネット」はどのように見えますか?



その結果、2016年に5つの宣言を受け取りました。 レギュラー4個と追加1個。 宣言はxml形式でアップロードされます。

それはどのように見えますか



このxmlの主要な要素はfnoです。

<fno code="200.00" version="26" id="83970683" documentId="304374645967031219" formatVersion="1"> 

ここでは、2つのプロパティを区別する必要があります。

 var version = "26"; var formatVersion = "1"; 

内部構造は変更されないため、他のプロパティは必要ありません。 すべてのxml 200フォームを確認したところ、2つのバージョン値があり、「25」と「26」であることがわかりました。 また、formatVersionの値は「1」のみです。

さらに、200のフォームから必要な情報を友人(以下、顧客と呼びます)に明らかにして、コードを書き始めました。 ところで、顧客は最初の技術タスクを変更し、1つのLLPの代わりに、複数のLLPを説明するコードを書くように依頼しました。

RNN、IIN、およびその他の会計略語
納税者登録番号(TRN)
個人識別番号(IIN)
ビジネス識別番号(BIN)は、ビジネス向けIINの完全な類似物です。
個人所得税(PIT)
強制年金拠出額(OPV)
義務的な年金拠出
社会税(CH)
社会保障貢献

IIN / BINおよびTRNでフィルタリングすることにしました。 それらはxml内に埋め込まれています:

 <field name="iin">      </field> 

要約が必要なフィールドでのタスク:

いん
RNN
四半期
完成年(はい、はい、顧客はすべてがうまくいくかどうかを決定し、過去の期間を経てすべてを整理します)
報告日。
IIT(申告額)
OPV(申告額)
OPVA(申告額)
CH(申告額)
SO(申告額)
宣言のタイプ。

最初に、要素を作成します。

 <input type="file" id="file" onchange="seeXML();"> 

バージョン26および25のサマリーデータに必要な供給構造を検討した結果、これらのデータの供給に違いはないことがわかりました。
データ名前フィールド
いんいん
RNNrnn
四半期period_quarter
完成年period_year
報告日。submit_date
IIT(申告額)field_200_00_001_4
OPV(申告額)field_200_00_002_4 +
field_200_00_004_4
OPVA(申告額)field_200_00_003_4
SO(申告額)field_200_00_005_4 +
field_200_00_006_4 +
field_200_00_007_4
宣言のタイプ。field_200_00_008_4 +
field_200_00_009_4

その結果、必要なすべてのデータを含むオブジェクトを返す関数を取得しました。

 var frame = document.createElement("IFRAME"); function getValue(a,b,fnoVersion = "25",fnoFormatVersion = "1") { try { switch(true) { case((fnoVersion == "25")&&(fnoFormatVersion == "1")): return frame.contentWindow.document.querySelector("form[name='form_200_0" + a + "'] field[name='" + b + "']").innerHTML.split("<")[0];; break; } return ""; } catch (ex) { return ""; } } function seeXML() { var fno = {}; if (document.querySelector("#file").files.length < 1) return; var fReader = new FileReader(); fReader.addEventListener("load", function(){ frame.contentWindow.document.documentElement.innerHTML = fReader.result; fno["iin"] = getValue(0,"iin"); fno["rnn"] = getValue(0,"rnn"); fno["period_quarter"] = getValue(0,"period_quarter"); fno["period_year"] = getValue(0,"period_year"); fno["submit_date"] = getValue(0,"submit_date"); fno["ipn"] = (getValue(0,"field_200_00_001_4") - 1) + 1; fno["opv"] = (getValue(0,"field_200_00_002_4") - 1) + (getValue(0,"field_200_00_004_4") - 1) + 2; fno["oppv"] = (getValue(0,"field_200_00_003_4") - 1) + 1; fno["sn"] = (getValue(0,"field_200_00_005_4")) - 1 + (getValue(0,"field_200_00_006_4") - 1) + (getValue(0,"field_200_00_007_4") - 1) + 3; fno["so"] = (getValue(0,"field_200_00_008_4") - 1) + (getValue(0,"field_200_00_009_4") - 1) + 2; switch(true) { case (getValue(0,"dt_main") == "true"): fno["dt"] = "dt_main/"; break; case (getValue(0,"dt_regular") == "true"): fno["dt"] = "dt_regular/"; break; case (getValue(0,"dt_additional") == "true"): fno["dt"] = "dt_additional/"; break; case (getValue(0,"dt_notice") == "true"): fno["dt"] = "dt_notice/  "; break; case (getValue(0,"dt_final") == "true"): fno["dt"] = "dt_final/"; break; } console.log(fno); }, false); fReader.readAsText(document.querySelector("#file").files[0]); } 

さらに、このオブジェクトで何でもできます。 あなたと私が好きな人は誰でも、200のフォームで提出された宣言のために小さな会計システムを作りました。

その結果、私がやったことは、私はデザイナーではなく、視覚化は私には向いていません。




ps顧客は、提出されたフォームの少なくともそのような会計を見て喜んで書き始めました。
ppsしかし、フォーム300では、私は本当に多くの苦しみを味わいました。

2記事はこちら

Source: https://habr.com/ru/post/J325292/


All Articles