Приветствую социум! Давным-давно (пару дней назад числа 25 марта), в далекой-далекой галактике (в Алматы, Казахстан)…
Моя знакомая, бухгалтер, позвонила мне со словами:
" — Привет Ринат! Ты же увлекаешься программированием! Я тут устроилась на новую работу, в ТОО-шку. За прошлый год тут сменилось несколько бухгалтеров по налогам. А мне нужно сдать годовой отчет. Я продление уже запросила, и у меня есть месяц чтобы разобраться в цифрах. Я то конечно разберусь, за недельку, но не факт что все будет правильно. Помоги. Нужно немного автоматизировать проверку уже сданных деклараций."
Я не долго думая решил помочь, девушка то не плохая, а иногда и полезная, в прикладном смысле.
И вот тут меня ждала засада…
Ремарка к статье: Всего будет 3 статьи, 200 форма, 300 форма и учет счет фактур.
trouble:
Системы автоматизации бухгалтерского учёта такие как 1С: Предприятие, показывают ситуацию в целом никак не связывая ее со сданными налоговыми декларациями. Они могут создать файл для импорта в действующие онлайн сервисы, но проверить правильно ли сдана отчетность не могут.
problem solution:
Пришлось изучить азы бух учета.
У нас в Казахстане с 2009 года налоговые декларации можно сдать в онлайн режиме. Есть два варианта:
1. Кабинет налогоплательщика
2. Система Обработки Налоговой Отчётности (далее по тексту СОНО)
Для ТОО имеются несколько режимов налогообложения:
<fno code="200.00" version="26" id="83970683" documentId="304374645967031219" formatVersion="1">
var version = "26";
var formatVersion = "1";
<field name="iin">Здесь ИИН или БИН лица сдавшего декларацию</field>
<input type="file" id="file" onchange="seeXML();">
Данные | name поля |
---|---|
ИИН | iin |
РНН | rnn |
Квартал | period_quarter |
Год сдачи | period_year |
Дата сдачи отчетности. | submit_date |
ИПН(сумма по декларации) | field_200_00_001_4 |
ОПВ(сумма по декларации) | field_200_00_002_4 + field_200_00_004_4 |
ОППВ(сумма по декларации) | field_200_00_003_4 |
СО(сумма по декларации) | 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]);
}
К сожалению, не доступен сервер mySQL