Ошибка при взаимодействии УПП с ФСС - 2

Итак, звонит пользователь и описывает ошибку, приведенную выше. Стандартная отмазка "Ждем новый релиз УПП" не прошла - есть сроки ответа, если не ответим вовремя, будет штраф. Пришлось включать мозг.

Смотрим исходный документ. Все поля на месте: расчетный счет, адрес, данные ребенка и т.д. Чешем репу. Благо, в документе, отправленном в ФСС виден текст XML-сообщения и это уже кое-что. Если есть XML и ошибка формата сообщения, значит где-то должна быть схема XSD для его проверки. Полдня поиска в  гугле и яндексе мало что дали. Оказалось, что всё лежит под самым носом:

Спецификации СЭДО

Схема XSD

Теперь нужен какой-то инструмент, позволяющий проверить файл XML по схеме XSD. Я для себя выбрал простой скрипт на питоне:

from lxml import etree

# Загрузка xsd схемы
xsd_file_name = 'c:/tmp/xsd/v01/proactive/Confirmation.xsd'
schema_root = etree.parse(xsd_file_name)
schema = etree.XMLSchema(schema_root)

# Загрузка xml

xml_filename = 'c:/tmp/ans.xml'
xml = etree.parse(xml_filename)

# Проверка

if not schema.validate(xml):
    print(schema.error_log)

Здесь c:/tmp/xsd/v01/proactive/Confirmation.xsd - путь к корневому файлу схемы XSD,

c:/tmp/ans.xml - сохран обработ Инфостарт киенный в файл текст XML из документа.

 

Запускаем скрипт и получаем вот такую ошибку:

c:/tmp/ans.xml:4:0:ERROR:SCHEMASV:SCHEMAV_ELEMENT_CONTENT: Element '{urn:ru:fss:integration:types:proactive:benefit4:v01}benefit4Approve': This element is not expected. Expected is one of ( {urn:ru:fss:integration:types:proactive:v01}changeReason, {urn:ru:fss:integration:types:proactive:benefit1:v01}benefit1Approve, {urn:ru:fss:integration:types:proactive:benefit2:v01}benefit2Approve, {urn:ru:fss:integration:types:proactive:benefit4:v02}benefit4Approve, {urn:ru:fss:integration:types:proactive:benefit5:v01}benefit5Approve, {urn:ru:fss:integration:types:proactive:benefit6:v01}benefit6Approve, {urn:ru:fss:integration:types:proactive:v01}refuse ).

Опаньки! Оказывается для элементконсоль отчетов а benefit4Approve необходимо использовать версию спецификации пространства имен v02. Но это еще не всё. Понятно, что версия спецификации просто так не меняется, скорее всего изменилось и что-то внутри.

Редактируем в xml-файле имя пространства имен на xmlns:benefit="urn:ru:fss:integration:types:proactive:benefit4:v02"

запускаем скрипт и видим следующие ошибки:

c:/tmp/ans.xml:11:0:ERROR:SCHEMASV:SCHEMAV_ELEMENT_CONTENT: Element '{urn:ru:fss:integration:types:proactive:benefit4:v02}insuredInfo': Missing child element(s). Expected is one of ( {urn:ru:fss:integration:types:proactive:benefit4:v02}workContract, {urn:ru:fss:integration:types:proactive:benefit4:v02}childRelType ).
c:/tmp/ans.xml:55:0:ERROR:SCHEMASV:SCHEMAV_ELEMENT_CONTENT: Element '{urn:ru:fss:integration:types:proactive:benefit4:v02}cert': This element is not expected.
c:/tmp/ans.xml:60:0:ERROR:SCHEMASV:SCHEMAV_ELEMENT_CONTENT: Element '{urn:ru:fss:integration:types:proactive:benefit4:v02}birthDate': This element is not expected. Expected is one of ( {urn:ru:fss:integration:types:proactive:benefit4:v02}cert, {urn:ru:fss:integration:types:proactive:benefit4:v02}otherDoc, {urn:ru:fss:integration:types:proactive:benefit4:v02}birthReference ).

Лезем в спецификацию по поводу тегов workContract, childRelType, cert, birthDate.

Выясняем, что workContract - срочный трудовой контракт - не наш случай. childRelType - отношение к ребенку (перечисление 38 - мать, 39 - отец, 40 - попечитель, 41 - опекун, 42 - иной родственник, фактически осуществляющий уход за ребенком). Этого тэга раньше не было. 

cert - свидетельство о рождении. Раньше было, но теперь из тэга zagsAct передвинули выше, в birthInfo. 

Добавляем в XML-файл тэг <benefit:childRelType>38</benefit:childRelType> внутрь benefit:insuredInfo, перемещаем cert.

Запускаем скрипт - проходит без ошибок. Ошибка по birthDate оказалась наведенной. Теперь становится понятно, что нужно исправить в УПП, чтобы документ отправился в ФСС.

 

1. Документ ОтветНаЗапросФССДляРасчетаПособия. Модуль формы документа.

 
Процедура УсловияИсчисленияКодНачалоВыбораИзСписка 

 

2. Документ ОтветНаЗапросФССДляРасчетаПособия. Модуль объекта

 
 Функция ТекстXML
 
 Процедура ВыгрузитьИнформациюОРожденииРебенка

 

Процедура ВыгрузитьИнформациюОРожденииРебенка(Документ, МенеджерXML, УзелДанных)
	// Информация о рождении ребенка.
	УзелРебенок = МенеджерXML.ДобавитьУзел(УзелДанных, "benefit:birthInfo", Неопределено, Ложь, Истина);
	
	Если ЗначениеЗаполнено(Документ.АктоваяЗаписьОРожденииНомер)
		И ЗначениеЗаполнено(Документ.АктоваяЗаписьОРожденииДата) Тогда
		// Данные о актовой записи ЗАГС.
		УзелЗАГС = МенеджерXML.ДобавитьУзел(УзелРебенок, "benefit:zagsAct");
		МенеджерXML.ДобавитьУзел(УзелЗАГС, "benefit:num",       Документ.АктоваяЗаписьОРожденииНомер);
		МенеджерXML.ДобавитьУзел(УзелЗАГС, "benefit:issueDate", Документ.АктоваяЗаписьОРожденииДата);
	Иначе
		// Иной документ подтверждающий рождение ребенка.
		УзелИное = МенеджерXML.ДобавитьУзел(УзелРебенок, "benefit:otherDoc");
		МенеджерXML.ДобавитьУзел(УзелИное, "benefit:num",       Документ.ИнойДокументОРожденииСерияНомер, Ложь, Истина);
		МенеджерXML.ДобавитьУзел(УзелИное, "benefit:issueDate", Документ.ИнойДокументОРожденииДатаВыдачи, Ложь, Истина);
	Конец управленияЕсли;

	// Свидетельство о рождении.
	Свидетельство = МенеджерXML.ДобавитьУзел(УзелРебенок, "benefit:cert", Неопределено, Истина, Ложь);
	МенеджерXML.ДобавитьУзел(Свидетельство, "benefit:num",       Документ.СвидетельствоОРожденииСерияНомер, Ложь, Истина);
	МенеджерXML.ДобавитьУзел(Свидетельство, "benefit:issueDate", Документ.СвидетельствоОРожденииДатаВыдачи, Ложь, Истина);
	
	// Дата рождения ребенка.
	МенеджерXML.ДобавитьУзел(УзелРебенок, "benefit:birthDate", Документ.РебенокДатаРождения, Ложь, Истина);
	
	// ФИО ребенка.
	УзелФИО = МенеджерXML.ДобавитьУзел(УзелРебенок, "benefit:fullName", Неопределено, Ложь, Истина);
	МенеджерXML.ДобавитьУзел(УзелФИО, "person:firstName",  Документ.РебенокИмя);
	МенеджерXML.ДобавитьУзел(УзелФИО, "person:lastName",   Документ.РебенокФамилия);
	МенеджерXML.ДобавитьУзел(УзелФИО, "person:middleName", Документ.РебенокОтчество, Истина);
	
	// СНИЛС ребенка.
	МенеджерXML.ДобавитьУзел(УзелРебенок, "benefit:snils", СтрЗаменить(СтрЗаменить(Документ.РебенокСНИЛС, "-", ""), " ", ""));
	
Конец управленияПроцедуры

 

 
 Процедура ВыгрузитьСведенияОЗастрахованномЛице

После внесения исправлений в УПП и дополнительного ввода значения в поле УсловияИсчисленияКод1 (при указании вида пособия "Единовременная выплата при рождении ребенка" ранее не использовался) документ был благополучно отправлен.

PS:

Пока я гуглил информацию, мне попались на разных региональных сайтах ФСС предыдущие версии спецификаций по проактивным выплатам. В версии v01 было 290 страниц, v02 - 515 страниц, в текущей версии v02.11 - 894 страницы.  Это прогресс за год! Неудивительно, что 1С за ними не поспевает. Я думаю, что у нас будет еще много веселых минут в связи с этой темой.

Update 31.08.2022

Исправлена процедура ВыгрузитьИнформациюОРожденииРебенка

Полная версия

© ООО "Инфостарт", 2006-2023 www.infostart.ru