├── .editorconfig ├── .gitignore ├── .gitlab-ci.yml ├── FairMark.Docs ├── 4_5_1_CreateOrderSignedResponse.txt ├── 4_5_1_CreateOrderUnsignedResponse.txt ├── 4_5_8_GetOrderSummariesResponse.txt ├── DocumentFormats.md ├── Errors │ ├── getTokenFromSuzTimedOut.txt │ └── pingBadRequest.txt ├── FairMarkGlitchyLogo.gif ├── FairMarkGlitchyLogo.png ├── FairMarkGlitchyLogo.webp ├── OmsID_blue_OmsConnectionID_green.png ├── TestCertificates.md ├── XsdSchema.png ├── edo_methods.txt ├── oms_methods.txt └── true_methods.txt ├── FairMark.Tests ├── App.config ├── AuthentificationTests.cs ├── EdoLiteClientTests.Chapter3.cs ├── FairMark.Tests.csproj ├── GostCryptoHelpersTests.cs ├── OmsClientTests.Chapter4.cs ├── Properties │ ├── Resources.Designer.cs │ └── Resources.resx ├── Resources │ ├── EdoLite_Chapter_3_1_SampleUpd.xml │ ├── ON_KORSCHFDOPPR_2LT-600003352_2LT-600006439_20210426_a4941fa7-9a53-4991-aa02-f1606b71142c.xml │ ├── ON_KORSCHFDOPPR_2LT-600006439_2LT-600003352_20210426_68426923-d1e2-4582-93f2-f690912d5161.xml │ ├── ON_NSCHFDOPPR_2LT-600003352_2LT-600006439_20210426_00c4d099-a48f-47ed-8608-54d32890fe73.УПДи.xml │ ├── ON_NSCHFDOPPR_2LT-600003352_2LT-600006439_20210426_afb6cce6-6cb9-4147-bc2f-689be4fd2198.xml │ ├── ON_NSCHFDOPPR_2LT-600006439_2LT-600003352_20210426_0dc17582-d11d-4a4d-8e25-816d59870ef4.xml │ └── ON_NSCHFDOPPR_2LT-600006439_2LT-600003352_20210426_a5011718-844e-4bba-b15c-a1c15e49a691.УПДи.xml ├── SerializationTests.cs ├── TrueApiClientTests.Chapter3.cs ├── TrueApiClientTests.Chapter6.cs └── UnitTestsBase.cs ├── FairMark ├── CommonApiClient.Tracing.cs ├── CommonApiClient.cs ├── CommonCredentials.cs ├── CredentialsAuthenticator.cs ├── DataContracts │ ├── ApiFieldError.cs │ ├── ApiGlobalError.cs │ ├── AuthResponse.cs │ ├── AuthToken.cs │ ├── CustomDate.cs │ ├── CustomDateTime.cs │ ├── CustomDateTimeSpace.cs │ └── ErrorResponse.cs ├── EdoLite │ ├── DataContracts │ │ ├── DocumentAgent.cs │ │ ├── DocumentGroup.cs │ │ ├── DocumentInfo.cs │ │ ├── DocumentListFilter.cs │ │ ├── GetDocumentsResponse.cs │ │ └── ResID.cs │ ├── EdoLiteClient.Chapter3.cs │ ├── EdoLiteClient.cs │ └── EdoLiteCredentials.cs ├── FairMark.csproj ├── FairMarkException.cs ├── OmsApi │ ├── DataContracts │ │ ├── 11_3_4_ProductGroups.cs │ │ ├── 4_5_10_2_ReportStatusDto.cs │ │ ├── 4_5_13_1_AppVersion.cs │ │ ├── 4_5_14_3_BlockDto.cs │ │ ├── 4_5_14_3_BlocksDto.cs │ │ ├── 4_5_16_3_ReceiptDto.cs │ │ ├── 4_5_16_3_ReceiptsDto.cs │ │ ├── 4_5_17_ProviderInfo.cs │ │ ├── 4_5_17_ProvidersDto.cs │ │ ├── 4_5_1_1_0_Order.cs │ │ ├── 4_5_1_1_0_OrderProduct.cs │ │ ├── 4_5_1_1_10_Order_Wheelchairs.cs │ │ ├── 4_5_1_1_11_OrderProduct_Otp.cs │ │ ├── 4_5_1_1_11_Order_Otp.cs │ │ ├── 4_5_1_1_12_Order_Water.cs │ │ ├── 4_5_1_1_13_OrderProduct_Beer.cs │ │ ├── 4_5_1_1_13_Order_Beer.cs │ │ ├── 4_5_1_1_14_Order_Ncp.cs │ │ ├── 4_5_1_1_1_OrderProduct_Tobacco.cs │ │ ├── 4_5_1_1_1_Order_Tobacco.cs │ │ ├── 4_5_1_1_2_OrderProduct_Lp.cs │ │ ├── 4_5_1_1_2_Order_Lp.cs │ │ ├── 4_5_1_1_3_OrderProduct_Shoes.cs │ │ ├── 4_5_1_1_3_Order_Shoes.cs │ │ ├── 4_5_1_1_4_OrderProduct_Tires.cs │ │ ├── 4_5_1_1_4_Order_Tires.cs │ │ ├── 4_5_1_1_5_OrderProduct_Perfum.cs │ │ ├── 4_5_1_1_5_Order_Perfum.cs │ │ ├── 4_5_1_1_6_OrderProduct_Photo.cs │ │ ├── 4_5_1_1_6_Order_Photo.cs │ │ ├── 4_5_1_1_7_Order_Pharma.cs │ │ ├── 4_5_1_1_8_OrderProduct_Milk.cs │ │ ├── 4_5_1_1_8_Order_Milk.cs │ │ ├── 4_5_1_1_9_Order_Bicycle.cs │ │ ├── 4_5_1_2_OrderResponse.cs │ │ ├── 4_5_2_1_0_DropoutReport.cs │ │ ├── 4_5_2_1_1_DropoutReport_Tobacco.cs │ │ ├── 4_5_2_1_2_DropoutReport_Ncp.cs │ │ ├── 4_5_3+4_5_9_AggregationUnit.cs │ │ ├── 4_5_3_AggregationReport.cs │ │ ├── 4_5_4_1_0_UtilisationReport.cs │ │ ├── 4_5_4_1_1_UtilisationReport_Tobacco.cs │ │ ├── 4_5_4_1_2_UtilisationReport_Pharma.cs │ │ ├── 4_5_4_1_3_UtilisationReport_Milk.cs │ │ ├── 4_5_4_1_4_UtilisationReport_Otp.cs │ │ ├── 4_5_4_1_5_UtilisationReport_Water.cs │ │ ├── 4_5_4_1_6_UtilisationReport_Ncp.cs │ │ ├── 4_5_6_2_CodesDto.cs │ │ ├── 4_5_7_2_BufferInfo.cs │ │ ├── 4_5_7_2_PoolInfo.cs │ │ ├── 4_5_8_OrderSummaries.cs │ │ ├── 4_5_8_OrderSummaryInfo.cs │ │ ├── 4_5_9_2_ProductInfo.cs │ │ ├── 4_5_9_AggregationInfo.cs │ │ ├── 4_5_x_EmptyResult.cs │ │ ├── 4_5_x_ReportResult.cs │ │ ├── 5_3_1_10_OrderStatuses.cs │ │ ├── 5_3_1_11_DropoutReasons.cs │ │ ├── 5_3_1_12_CisTypes.cs │ │ ├── 5_3_1_13_Countries.cs │ │ ├── 5_3_1_1_ReleaseMethodTypes.cs │ │ ├── 5_3_1_2_SerialNumberTypes.cs │ │ ├── 5_3_1_3_CreateMethodTypes.cs │ │ ├── 5_3_1_4_Templates.cs │ │ ├── 5_3_1_5_PoolStatuses.cs │ │ ├── 5_3_1_6_AggregationTypes.cs │ │ ├── 5_3_1_7_BufferStatuses.cs │ │ ├── 5_3_1_8_ReportStatuses.cs │ │ ├── 5_3_1_9_UsageType.cs │ │ └── DataContracts.cs │ ├── OmsApiClient.Chapter4.cs │ ├── OmsApiClient.cs │ └── OmsCredentials.cs ├── Properties │ └── AssemblyInfo.cs ├── Toolbox │ ├── GostCryptoHelpers.cs │ ├── HashUtilities.cs │ ├── HtmlHelper.cs │ ├── JsonFormatter.cs │ ├── ServiceStackSerializer.cs │ └── StringExtensions.cs ├── TrueApi │ ├── DataContracts │ │ ├── 3_1_1_BankDetails.cs │ │ ├── 3_1_1_EdoOperator.cs │ │ ├── 3_1_1_Organization.cs │ │ ├── 3_1_1_ProductDocument.cs │ │ ├── 3_1_1_ProductGroup.cs │ │ ├── 3_1_1_Registration.cs │ │ ├── 3_1_1_RegistrationResponse.cs │ │ ├── 3_1_1_User.cs │ │ ├── 3_1_2_RegistrationStatusError.cs │ │ ├── 3_1_2_RegistrationStatusResponse.cs │ │ ├── 3_4_Balance.cs │ │ ├── 4_1_UniformDocument.cs │ │ ├── 4_2_1_1_AggregationDocument.cs │ │ ├── 4_2_1_1_AggregationUnit.cs │ │ ├── 4_2_1_3_DisaggregationUnit.cs │ │ ├── 4_2_2_3_DisaggregationDocument.cs │ │ ├── 4_2_5_1_IntroduceGoodsDocumentRF.cs │ │ ├── 4_2_5_1_IntroduceGoodsProduct.cs │ │ ├── 5_4_1_GetProductsInfoResponse.cs │ │ ├── 5_4_2_GetParticipantGtinsReponse.cs │ │ ├── 6_4_UnifiedDocumentInfo.cs │ │ ├── DocumentStatuses.cs │ │ └── ProductGroupsTrueApi.cs │ ├── TrueApiClient.Chapter3.cs │ ├── TrueApiClient.Chapter4.cs │ ├── TrueApiClient.Chapter5.cs │ ├── TrueApiClient.Chapter6.cs │ ├── TrueApiClient.cs │ └── TrueApiCredentials.cs └── Xsd │ ├── ON_NSCHFDOPPOK │ ├── СвИПТип.cs │ ├── СвФЛТип.cs │ ├── ФИОТип.cs │ ├── Файл.cs │ ├── ФайлИнфПок.cs │ ├── ФайлИнфПокИдИнфПрод.cs │ ├── ФайлИнфПокИнфПокГосЗакКазн.cs │ ├── ФайлИнфПокИнфПокГосЗакКазнИнфСведДенОбяз.cs │ ├── ФайлИнфПокКНД.cs │ ├── ФайлИнфПокПодписант.cs │ ├── ФайлИнфПокПодписантЮЛ.cs │ ├── ФайлИнфПокСодФХЖ4.cs │ ├── ФайлИнфПокСодФХЖ4ИнфПолФХЖ4.cs │ ├── ФайлИнфПокСодФХЖ4ИнфПолФХЖ4ТекстИнф.cs │ ├── ФайлИнфПокСодФХЖ4СвПрин.cs │ ├── ФайлИнфПокСодФХЖ4СвПринКодСодОпер.cs │ ├── ФайлИнфПокСодФХЖ4СвПринСвЛицПрин.cs │ ├── ФайлИнфПокСодФХЖ4СвПринСвЛицПринИнЛицо.cs │ ├── ФайлИнфПокСодФХЖ4СвПринСвЛицПринИнЛицоПредОргПрин.cs │ ├── ФайлИнфПокСодФХЖ4СвПринСвЛицПринИнЛицоФЛПрин.cs │ ├── ФайлИнфПокСодФХЖ4СвПринСвЛицПринРабОргПок.cs │ ├── ФайлСвУчДокОбор.cs │ └── ФайлСвУчДокОборСвОЭДОтпр.cs │ └── ON_NSCHFDOPPR │ ├── АдрИнфТип.cs │ ├── АдрРФТип.cs │ ├── АдресТип.cs │ ├── КонтактТип.cs │ ├── ОснованиеТип.cs │ ├── СвИПТип.cs │ ├── СвФЛТип.cs │ ├── СумАкцизТип.cs │ ├── СумНДСТип.cs │ ├── ТекстИнфТип.cs │ ├── УчастникТип.cs │ ├── УчастникТипБанкРекв.cs │ ├── УчастникТипБанкРеквСвБанк.cs │ ├── УчастникТипИдСв.cs │ ├── УчастникТипИдСвСвИнНеУч.cs │ ├── УчастникТипИдСвСвЮЛУч.cs │ ├── ФИОТип.cs │ ├── Файл.cs │ ├── ФайлДокумент.cs │ ├── ФайлДокументКНД.cs │ ├── ФайлДокументПодписант.cs │ ├── ФайлДокументПодписантЮЛ.cs │ ├── ФайлДокументСвПродПер.cs │ ├── ФайлДокументСвПродПерИнфПолФХЖ3.cs │ ├── ФайлДокументСвПродПерСвПер.cs │ ├── ФайлДокументСвПродПерСвПерСвЛицПер.cs │ ├── ФайлДокументСвПродПерСвПерСвЛицПерИнЛицо.cs │ ├── ФайлДокументСвПродПерСвПерСвЛицПерИнЛицоПредОргПер.cs │ ├── ФайлДокументСвПродПерСвПерСвЛицПерИнЛицоФЛПер.cs │ ├── ФайлДокументСвПродПерСвПерСвЛицПерРабОргПрод.cs │ ├── ФайлДокументСвПродПерСвПерСвПерВещи.cs │ ├── ФайлДокументСвПродПерСвПерТранГруз.cs │ ├── ФайлДокументСвПродПерСвПерТранГрузТранНакл.cs │ ├── ФайлДокументСвСчФакт.cs │ ├── ФайлДокументСвСчФактГрузОт.cs │ ├── ФайлДокументСвСчФактДокПодтвОтгр.cs │ ├── ФайлДокументСвСчФактДопСвФХЖ1.cs │ ├── ФайлДокументСвСчФактДопСвФХЖ1ИнфПродГосЗакКазн.cs │ ├── ФайлДокументСвСчФактИнфПолФХЖ1.cs │ ├── ФайлДокументСвСчФактИспрСчФ.cs │ ├── ФайлДокументСвСчФактСвПРД.cs │ ├── ФайлДокументТаблСчФакт.cs │ ├── ФайлДокументТаблСчФактВсегоОпл.cs │ ├── ФайлДокументТаблСчФактСведТов.cs │ ├── ФайлДокументТаблСчФактСведТовДопСведТов.cs │ ├── ФайлДокументТаблСчФактСведТовДопСведТовНомСредИдентТов.cs │ ├── ФайлДокументТаблСчФактСведТовДопСведТовСведПрослеж.cs │ ├── ФайлДокументТаблСчФактСведТовСвТД.cs │ ├── ФайлСвУчДокОбор.cs │ └── ФайлСвУчДокОборСвОЭДОтпр.cs ├── FairMarkClient.sln ├── LICENSE ├── README.md ├── Schemas └── UniversalTransferDocumentXsd │ ├── ON_NSCHFDOPPOK_1_997_02_05_01_01.xsd │ ├── ON_NSCHFDOPPR_1_997_01_05_01_01.xsd │ └── generate.bat ├── Scripts ├── Coverage.ps1 └── TestReportPrefix.ps1 ├── SwaggerTest ├── App.xaml ├── App.xaml.cs ├── AssemblyInfo.cs ├── MainWindow.xaml ├── MainWindow.xaml.cs └── SwaggerTest.csproj └── TestApp ├── App.xaml ├── App.xaml.cs ├── AssemblyInfo.cs ├── MainWindow.xaml ├── MainWindow.xaml.cs └── TestApp.csproj /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig: http://EditorConfig.org 2 | # VS extension: https://visualstudiogallery.msdn.microsoft.com/c8bccfe2-650c-4b42-bc5c-845e21f96328 3 | 4 | # tab indentation 5 | [*.cs] 6 | indent_style = space 7 | indent_size = 4 8 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | variables: 2 | GIT_CLEAN_FLAGS: none # disable git clean on every stage 3 | CODECOV_TOKEN: "c01ca799-5c1f-4647-9743-7d6e8b3fb0f8" 4 | 5 | stages: 6 | - build 7 | - unit tests 8 | 9 | build: 10 | stage: build 11 | before_script: 12 | - git clean -ffdx -e $MIRROR_DIR/ 13 | script: 14 | - dotnet build FairMark 15 | - dotnet build FairMark.Tests 16 | - dotnet pack FairMark 17 | artifacts: 18 | paths: 19 | - FairMark\bin\Debug\*.nupkg 20 | 21 | unit_tests: 22 | stage: unit tests 23 | before_script: 24 | - echo "Normal build -- running unit tests with coverage..." 25 | - chcp 65001 26 | # uncomment to install the required tools -- 27 | # dotnet tool install -g trx2junit 28 | # choco install opencover.portable 29 | # choco install codecov 30 | script: 31 | # original test command line -- 32 | # dotnet test --logger "trx;LogFileName=TestResults.trx" 33 | # don't use -returntargetcode for now 34 | # 'OpenCover.Console.exe -register:administrator -target:dotnet.exe -targetargs:"test --logger=trx;LogFileName=TestResults.trx" -filter:"+[*]* -[*Test*]*" -output:MdlpCoverage.xml' 35 | # codecov -f "MdlpCoverage.xml" 36 | - Scripts\Coverage.ps1 37 | - TrxerConsole.exe FairMark.Tests\TestResults\TestResults.trx 38 | - copy "FairMark.Tests\TestResults\TestResults.trx.html" "$ULTIMA_REPORT_UPLOAD_PATH\FairMark.html" 39 | artifacts: 40 | paths: 41 | - FairMark.Tests\TestResults\TestResults.trx 42 | - FairMark.Tests\TestResults\TestResults.xml 43 | reports: 44 | junit: 45 | - FairMark.Tests\TestResults\TestResults.xml 46 | expire_in: 1 day 47 | -------------------------------------------------------------------------------- /FairMark.Docs/4_5_1_CreateOrderUnsignedResponse.txt: -------------------------------------------------------------------------------- 1 | // CreateOrder 2 | -> POST https://intuot.crpt.ru:12011/api/v2/milk/orders?omsId=67ad4640-48f4-4eca-886b-517462cf0415 3 | headers: { 4 | X-ApiMethodName = CreateOrder 5 | clientToken = 63810c34-9d72-4f56-9c17-253c1e53b84d 6 | Accept = application/json, text/json, text/x-json, text/javascript, application/xml, text/xml 7 | Content-type = application/json 8 | } 9 | body: { 10 | "contactPerson": "Говоров К.А.", 11 | "releaseMethodType": "PRODUCTION", 12 | "createMethodType": "CM", 13 | "productionOrderId": "efa002c4-aaf1-4862-93c8-823b7e7468ad", 14 | "products": [ 15 | { 16 | "gtin": "04635785586010", 17 | "quantity": 5, 18 | "serialNumberType": "SELF_MADE", 19 | "serialNumbers": [ 20 | "asdf7", 21 | "asdf8", 22 | "asdf9", 23 | "asdfa", 24 | "asdfb" 25 | ], 26 | "templateId": 20, 27 | "stickerId": "19" 28 | } 29 | ], 30 | "serviceProviderId": "156893d9-42d9-4753-9a19-bdbf182c7851" 31 | } 32 | 33 | <- OK 200 (OK) https://intuot.crpt.ru:12011/api/v2/milk/orders?omsId=67ad4640-48f4-4eca-886b-517462cf0415 34 | timings: { 35 | started: 2021-04-14 00:24:19 36 | elapsed: 0:00:06.844 37 | } 38 | headers: { 39 | Pragma = no-cache 40 | X-Content-Type-Options = nosniff 41 | X-Frame-Options = DENY 42 | X-Xss-Protection = 1; mode=block 43 | Content-Length = 132 44 | Cache-Control = no-cache, no-store, max-age=0, must-revalidate 45 | Content-Type = application/json; charset=UTF-8 46 | Date = Tue, 13 Apr 2021 21:24:26 GMT 47 | Expires = 0 48 | Set-Cookie = targetsrv=http://10.0.25.4:8811; Path=/ 49 | } 50 | body: { 51 | "omsId": "67ad4640-48f4-4eca-886b-517462cf0415", 52 | "orderId": "9d420e24-38ea-401c-bf5b-4947bf25384b", 53 | "expectedCompleteTimestamp": 120000 54 | } 55 | 56 | Order placed: 9d420e24-38ea-401c-bf5b-4947bf25384b 57 | Expected to be ready in: 120000 58 | NUnit Adapter 3.16.1.0: Test execution complete -------------------------------------------------------------------------------- /FairMark.Docs/DocumentFormats.md: -------------------------------------------------------------------------------- 1 | # Форматы документов 2 | 3 | УПД и УКД — стандартные XML форматы для электронного документооборота. 4 | Для создания документов в этих форматах на C# используются классы, 5 | сгенерированные на базе XSD-схем утилитой XmlSchemaClassGenerator: 6 | 7 | * https://www.nuget.org/packages/XmlSchemaClassGenerator.Console/ 8 | * https://www.nuget.org/packages/dotnet-xscgen (то же самое, но оформлено в виде dotnet tool) 9 | 10 | Последовательность действий при выходе новых версий XSD-схем этих форматов такая: 11 | 12 | 1. Скачивается XSD-схема (ссылки см. ниже) 13 | 2. Устанавливается генератор: dotnet tool install -g dotnet-xscgen 14 | 2. Генерируются классы в нужном namespace: xscgen upd.xsd -n ""=FairMark.Xsd.ON_NSCHFDOPPOK -sf 15 | 3. Копируются в проект FairMarkClient. 16 | 17 | После этого можно создавать документы и сериализовывать их в XML обычным XmlSerializer-ом. 18 | К сожалению, в XSD-схеме все названия русскоязычные, типа ФайлИнфПокИнфПокГосЗакКазнИнфСведДенОбяз. 19 | 20 | Для документа УПД есть два варианта, две XSD-схемы: информация покупателя и информация продавца. 21 | Структуры в них местами пересекаются, местами почти совпадают, но не идентичны на 100%. 22 | Из-за этого сгенерированные классы пришлось положить в два отдельных пространства имен: 23 | 24 | * FairMark.Xsd.ON_NSCHFDOPPOK -- информация покупателя 25 | * FairMark.Xsd.ON_NSCHFDOPP -- информация продавца 26 | 27 | Корневой элемент, с которого начинается заполнение УПД, в обоих случаях -- Файл. 28 | То, что в нем заполняется дальше, зависит от типа документа (например, счет-фактура): 29 | 30 | [![XsdSchema.png](XsdSchema.png)](https://www.diadoc.ru/docs/forms/upd/structure/8) 31 | 32 | ## Общее описание 33 | 34 | * Неформальное описание УПД, УКД и др., примеры: https://sbis.ru/help/edo/primary/formats_doc 35 | * Примеры готовых XML-документов: https://bi-cons.ru/xml/materials/vat-invoice-xml-xsd.html 36 | * УПД и УКД. Найдите отличия: https://www.buhgalteria.ru/article/upd-i-ukd-naydite-otlichiya 37 | 38 | ## Универсальный передаточный документ (УПД) 39 | 40 | * Неформальное описание: https://www.diadoc.ru/docs/upd 41 | * Диаграммы и XSD-схемы: https://api-docs.diadoc.ru/ru/latest/docflows/UtdDocflow.html 42 | * Тоже XSD-схемы: https://www.diadoc.ru/docs/forms/upd/structure/8 43 | 44 | ## Универсальный корректировочный документ (УКД) 45 | 46 | * Пока не нашел -------------------------------------------------------------------------------- /FairMark.Docs/FairMarkGlitchyLogo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FairMark/FairMarkClient/c564b226c8696f8016d7e0ca8866f516968b2736/FairMark.Docs/FairMarkGlitchyLogo.gif -------------------------------------------------------------------------------- /FairMark.Docs/FairMarkGlitchyLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FairMark/FairMarkClient/c564b226c8696f8016d7e0ca8866f516968b2736/FairMark.Docs/FairMarkGlitchyLogo.png -------------------------------------------------------------------------------- /FairMark.Docs/FairMarkGlitchyLogo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FairMark/FairMarkClient/c564b226c8696f8016d7e0ca8866f516968b2736/FairMark.Docs/FairMarkGlitchyLogo.webp -------------------------------------------------------------------------------- /FairMark.Docs/OmsID_blue_OmsConnectionID_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FairMark/FairMarkClient/c564b226c8696f8016d7e0ca8866f516968b2736/FairMark.Docs/OmsID_blue_OmsConnectionID_green.png -------------------------------------------------------------------------------- /FairMark.Docs/TestCertificates.md: -------------------------------------------------------------------------------- 1 | # Тестовые сертификаты УКЭП 2 | 3 | Юнит-тесты запускаются на демо-контуре ГИС МТ с использованием тестовых УКЭП-сертификатов. 4 | Для получения тестового сертификата нужно зарегистрироваться в тестовом УЦ КриптоПро, 5 | который расположен тут: 6 | 7 | https://testca2012.cryptopro.ru/ui 8 | 9 | При регистрации нужно указывать реальные реквизиты какого-нибудь юридического лица, 10 | так как даже демо-контур сверяет все реквизиты с ЕГРЮЛ. 11 | 12 | После регистрации УКЭП в демо-контуре ГИС МТ его можно будет использовать для авторизации 13 | в ГИС МТ, СУЗ Облако, ЭДО Лайт, и True API. Клиент FairMarkClient не реализует API ГИС МТ, 14 | т.к. документация рекомендует пользоваться вместо него True API (там охват функционала 15 | больше, и развиваться в качестве основного API для интеграции будет True API). 16 | 17 | Когда тестовый сертификат будет просрочен, нужно зайти повторно на сайт тестового УЦ 18 | и запросить перевыпуск. При перевыпуске, как я понимаю, заполнять уже ничего не надо. 19 | 20 | После перевыпуска в юнит-тестах нужно указать новые параметры сертификата. 21 | Нужны ли еще какие-то манипуляции, чтобы активировать в ГИС МТ новый сертификат взамен 22 | просроченного, я пока не знаю. 23 | -------------------------------------------------------------------------------- /FairMark.Docs/XsdSchema.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FairMark/FairMarkClient/c564b226c8696f8016d7e0ca8866f516968b2736/FairMark.Docs/XsdSchema.png -------------------------------------------------------------------------------- /FairMark.Docs/edo_methods.txt: -------------------------------------------------------------------------------- 1 | Список реализованных методов API ЭДО Лайт 2 | ------------------------------------------ 3 | 4 | https://честныйзнак.рф/upload/API ЭДО lite.pdf 5 | 6 | + 2.1. Запрос авторизации 7 | + 2.2. Получение ключа сессии 8 | + 3.1. Метод загрузки файла информации продавца УПД согласно приказу 820 от 19.12.2018 № ММВ-7-15/820@ 9 | + 3.2. Метод загрузки файла информации продавца УПДи согласно приказу 820 от 19.12.2018 № ММВ-7-15/820@ в формате XML 10 | + 3.3. Методы загрузки информации продавца УКД согласно приказу 189 от 13 апреля 2016 г. в формате XML 11 | + 3.4. Получение содержимого XML документа 12 | + 3.5. Подписание исходящего документа 13 | + 3.6. Получение печатной формы УПД/УПДи/УКД 14 | + 3.7. Получение ZIP архива с документооборотом УПД/УПДи/УКД 15 | + 3.8. Получение списка документов 16 | - 3.9. Метод загрузки файла информации покупателя УПД согласно приказу 820 от 19.12.2018 № ММВ-7-15/820@ в формате XML 17 | - 3.10. Метод загрузки файла информации покупателя УПДи согласно приказу 820 от 19.12.2018 № ММВ-7-15/820@ в формате XML 18 | - 3.11. Метод загрузки файла информации покупателя УКД согласно приказу 189 от 13 апреля 2016 г. в формате XML 19 | - 3.12. Получение XML файла информации покупателя (УПД/УПДи/УКД) или квитанции 20 | - 3.13. Подписание квитанций или файла информации покупателя (УПД/УПДи/УКД) 21 | - 3.14. Получение списка квитанций для подписания 22 | + 3.15. Создание уведомления об уточнении 23 | -------------------------------------------------------------------------------- /FairMark.Docs/oms_methods.txt: -------------------------------------------------------------------------------- 1 | Список реализованных методов API СУЗ Облако 2 | -------------------------------------------- 3 | 4 | https://честныйзнак.рф/upload/iblock/07f/ru_API_OMS-CLOUD.pdf 5 | 6 | + 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 7 | + 4.5.2. Метод «Отправить отчёт о выбытии/отбраковке КМ» 8 | - 4.5.3. Метод «Отправить отчёт об агрегации КМ» 9 | + 4.5.4. Метод «Отправить отчёт об использовании (нанесении) КМ» 10 | + 4.5.5. Метод «Закрыть подзаказ/заказ» 11 | + 4.5.6. Метод «Получить КМ из заказа» 12 | + 4.5.7. Метод «Получить статус массива КМ из заказа» 13 | + 4.5.8. Метод «Получить статус заказов» 14 | + 4.5.9. Метод «Получить информацию об агрегации» 15 | + 4.5.10. Метод «Получить статус обработки отчёта» 16 | + 4.5.11. Метод «Проверить доступность СУЗ» 17 | x 4.5.12. Не поддерживается в «СУЗ Облако»: Метод «Получить маркер безопасности по имени пользователя и паролю» 18 | + 4.5.13. Метод «Получить версию СУЗ и API» 19 | + 4.5.14 Метод «Получить список идентификаторов пакетов кодов маркировки» 20 | + 4.5.15 Метод «Получить повторно коды маркировки из заказа кодов маркировки» 21 | + 4.5.16. Метод «Получить квитанцию по уникальному идентификатору документа» 22 | + 4.5.17. Метод «Получить список сервис-провайдеров» 23 | - 10.2.1. Метод «Запрос регистрации установки экземпляра интеграционного решения» 24 | + 10.3.1.1. Метод для получения кода аутентификации 25 | + 10.3.1.2. Метод для получения ключа сессии 26 | -------------------------------------------------------------------------------- /FairMark.Tests/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /FairMark.Tests/FairMark.Tests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net462 5 | FairMark.Tests 6 | FairMark.Tests 7 | 8 | 9 | 10 | pdbonly 11 | True 12 | 13 | 14 | 15 | 16 | 17 | 18 | runtime; build; native; contentfiles; analyzers 19 | all 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | True 38 | True 39 | Resources.resx 40 | 41 | 42 | 43 | 44 | 45 | ResXFileCodeGenerator 46 | Resources.Designer.cs 47 | 48 | 49 | 50 | 51 | full 52 | True 53 | 54 | 55 | -------------------------------------------------------------------------------- /FairMark.Tests/GostCryptoHelpersTests.cs: -------------------------------------------------------------------------------- 1 | using System.Security.Cryptography.X509Certificates; 2 | using NUnit.Framework; 3 | using FairMark.Toolbox; 4 | 5 | namespace FairMark.Tests 6 | { 7 | [TestFixture] 8 | public class GostCryptoHelpersTests : UnitTestsBase 9 | { 10 | private X509Certificate2 GetTestCertificate() 11 | { 12 | return GostCryptoHelpers.FindCertificate(TestCertificateSubjectName); 13 | } 14 | 15 | [Test] 16 | public void CertificateThumbprintIsCleanedUp() 17 | { 18 | Assert.AreEqual(null, GostCryptoHelpers.CleanupThumbprint(null)); 19 | Assert.AreEqual(string.Empty, GostCryptoHelpers.CleanupThumbprint(string.Empty)); 20 | Assert.AreEqual(string.Empty, GostCryptoHelpers.CleanupThumbprint(" \t\v\r\n")); 21 | Assert.AreEqual("1234abcd", GostCryptoHelpers.CleanupThumbprint(" 12 34 ab cd ")); 22 | Assert.AreEqual(TestCertificateThumbprint, GostCryptoHelpers.CleanupThumbprint(TestCertificateThumbprintCopiedFromTheSnapin)); 23 | } 24 | 25 | [Test] 26 | public void GostCryproProviderIsInstalled() 27 | { 28 | Assert.IsTrue(GostCryptoHelpers.IsGostCryptoProviderInstalled()); 29 | } 30 | 31 | [Test] 32 | public void CertificateIsLoadedByThumbprint() 33 | { 34 | var cert = GostCryptoHelpers.FindCertificate(TestCertificateThumbprint); 35 | Assert.NotNull(cert); 36 | } 37 | 38 | [Test] 39 | public void CertificateWithPrivateKeyIsLoaded() 40 | { 41 | var cert = GetTestCertificate(); 42 | Assert.IsNotNull(cert); 43 | Assert.AreEqual(cert.Thumbprint.ToUpper(), TestCertificateThumbprint.ToUpper()); 44 | } 45 | 46 | [Test] 47 | public void CertificateCanBeUsedToComputeDetachedCmsSignature() 48 | { 49 | var cert = GetTestCertificate(); 50 | var sign = GostCryptoHelpers.ComputeDetachedSignature(cert, "Привет!"); 51 | Assert.IsNotNull(sign); 52 | Assert.IsTrue(sign.StartsWith("MII")); 53 | Assert.IsTrue(sign.Length > 1000); 54 | } 55 | 56 | [Test] 57 | public void CertificateCanBeUsedToComputeAttachedCmsSignature() 58 | { 59 | var cert = GetTestCertificate(); 60 | var sign = GostCryptoHelpers.ComputeAttachedSignature(cert, "Привет!"); 61 | Assert.IsNotNull(sign); 62 | Assert.IsTrue(sign.StartsWith("MII")); 63 | Assert.IsTrue(sign.Length > 1000); 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /FairMark.Tests/Resources/ON_KORSCHFDOPPR_2LT-600003352_2LT-600006439_20210426_a4941fa7-9a53-4991-aa02-f1606b71142c.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FairMark/FairMarkClient/c564b226c8696f8016d7e0ca8866f516968b2736/FairMark.Tests/Resources/ON_KORSCHFDOPPR_2LT-600003352_2LT-600006439_20210426_a4941fa7-9a53-4991-aa02-f1606b71142c.xml -------------------------------------------------------------------------------- /FairMark.Tests/Resources/ON_KORSCHFDOPPR_2LT-600006439_2LT-600003352_20210426_68426923-d1e2-4582-93f2-f690912d5161.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FairMark/FairMarkClient/c564b226c8696f8016d7e0ca8866f516968b2736/FairMark.Tests/Resources/ON_KORSCHFDOPPR_2LT-600006439_2LT-600003352_20210426_68426923-d1e2-4582-93f2-f690912d5161.xml -------------------------------------------------------------------------------- /FairMark.Tests/Resources/ON_NSCHFDOPPR_2LT-600003352_2LT-600006439_20210426_00c4d099-a48f-47ed-8608-54d32890fe73.УПДи.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FairMark/FairMarkClient/c564b226c8696f8016d7e0ca8866f516968b2736/FairMark.Tests/Resources/ON_NSCHFDOPPR_2LT-600003352_2LT-600006439_20210426_00c4d099-a48f-47ed-8608-54d32890fe73.УПДи.xml -------------------------------------------------------------------------------- /FairMark.Tests/Resources/ON_NSCHFDOPPR_2LT-600003352_2LT-600006439_20210426_afb6cce6-6cb9-4147-bc2f-689be4fd2198.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FairMark/FairMarkClient/c564b226c8696f8016d7e0ca8866f516968b2736/FairMark.Tests/Resources/ON_NSCHFDOPPR_2LT-600003352_2LT-600006439_20210426_afb6cce6-6cb9-4147-bc2f-689be4fd2198.xml -------------------------------------------------------------------------------- /FairMark.Tests/Resources/ON_NSCHFDOPPR_2LT-600006439_2LT-600003352_20210426_0dc17582-d11d-4a4d-8e25-816d59870ef4.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FairMark/FairMarkClient/c564b226c8696f8016d7e0ca8866f516968b2736/FairMark.Tests/Resources/ON_NSCHFDOPPR_2LT-600006439_2LT-600003352_20210426_0dc17582-d11d-4a4d-8e25-816d59870ef4.xml -------------------------------------------------------------------------------- /FairMark.Tests/Resources/ON_NSCHFDOPPR_2LT-600006439_2LT-600003352_20210426_a5011718-844e-4bba-b15c-a1c15e49a691.УПДи.xml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FairMark/FairMarkClient/c564b226c8696f8016d7e0ca8866f516968b2736/FairMark.Tests/Resources/ON_NSCHFDOPPR_2LT-600006439_2LT-600003352_20210426_a5011718-844e-4bba-b15c-a1c15e49a691.УПДи.xml -------------------------------------------------------------------------------- /FairMark.Tests/TrueApiClientTests.Chapter6.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using FairMark.TrueApi.DataContracts; 7 | using NUnit.Framework; 8 | 9 | namespace FairMark.Tests 10 | { 11 | [TestFixture] 12 | public partial class TrueApiClientTests : UnitTestsBase 13 | { 14 | [Test] 15 | public void Chapter_6_9_GetCisesByOrderId() 16 | { 17 | var verificationCises = new[] 18 | { 19 | "0104635785586010215MRZpi", 20 | "0104635785586010215O(JSD", 21 | "0104635785586010215boSWI", 22 | "0104635785586010215Yc51t", 23 | "0104635785586010215cS2kT", 24 | "0104635785586010215kyoYo", 25 | "0104635785586010215S4PPf", 26 | "0104635785586010215BC!FF", 27 | "0104635785586010215UrkP'", 28 | "0104635785586010215nU:VT" 29 | }; 30 | 31 | var cises = Client.GetCisesByOrderId("a1769132-796e-47cb-8bc5-1053c4d7d6c5"); 32 | Assert.NotNull(cises); 33 | CollectionAssert.AreEquivalent(verificationCises, cises); 34 | } 35 | 36 | [Test] 37 | public void Chapter_6_9_GetCisesByOrderId_NotFound() 38 | { 39 | var ex = Assert.Throws(() => 40 | { 41 | // "836cc65b-6b89-40f2-b074-0bcd22b998cd" 42 | Client.GetCisesByOrderId("this-order-id-is-invalid"); 43 | }); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /FairMark/CommonCredentials.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using FairMark.DataContracts; 3 | 4 | namespace FairMark 5 | { 6 | /// 7 | /// Common FairMark credentials for True API, OMS API, etc. 8 | /// Credentials class stores the authentication data and implements 9 | /// the authentication protocol when connection is established. 10 | /// 11 | public abstract class CommonCredentials 12 | { 13 | /// 14 | /// Gets or sets the user identity, same as the cryptographic certificate thumbprint. 15 | /// 16 | public string CertificateThumbprint { get; set; } 17 | 18 | /// 19 | /// Gets of sets the session token, if the client has already authorized. 20 | /// 21 | /// 22 | /// If session token is specified, the client will try to skip the authentication process. 23 | /// If session token is not specified or is not valid, the client will proceed to log in as usual. 24 | /// 25 | public AuthToken SessionToken { get; set; } 26 | 27 | /// 28 | /// Performs authentication, returns access token with a limited lifetime. 29 | /// 30 | /// REST API client to perform API calls. 31 | /// instance. 32 | public abstract AuthToken Authenticate(CommonApiClient apiClient); 33 | 34 | /// 35 | /// Invalidates the authentication token and closes the session. 36 | /// 37 | /// REST API clientn to perform API calls. 38 | public abstract void Logout(CommonApiClient apiClient); 39 | 40 | /// 41 | /// Formats the authentication header for REST requests. 42 | /// 43 | /// Authentication token. 44 | public abstract Tuple FormatAuthHeader(AuthToken authToken); 45 | } 46 | } -------------------------------------------------------------------------------- /FairMark/CredentialsAuthenticator.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark 2 | { 3 | using System; 4 | using DataContracts; 5 | using RestSharp; 6 | using RestSharp.Authenticators; 7 | 8 | /// 9 | /// RestSharp client authenticator. 10 | /// Uses credentials to log in to the API and get the auth token. 11 | /// Sets the authentication headers on each REST request. 12 | /// 13 | internal class CredentialsAuthenticator : IAuthenticator 14 | { 15 | public CredentialsAuthenticator(CommonApiClient apiClient, CommonCredentials credentials) 16 | { 17 | State = AuthState.NotAuthenticated; 18 | Client = apiClient; 19 | Credentials = credentials; 20 | } 21 | 22 | private CommonApiClient Client { get; set; } 23 | 24 | private CommonCredentials Credentials { get; set; } 25 | 26 | private AuthState State { get; set; } 27 | 28 | private enum AuthState 29 | { 30 | NotAuthenticated, InProgress, Authenticated 31 | } 32 | 33 | public bool IsAuthenticated => State == AuthState.Authenticated; 34 | 35 | internal AuthToken AuthToken { get; set; } 36 | 37 | private Tuple AuthHeader { get; set; } 38 | 39 | protected virtual void SetAuthHeader(AuthToken authToken) 40 | { 41 | AuthHeader = string.IsNullOrWhiteSpace(authToken?.Token) ? null : 42 | Credentials.FormatAuthHeader(authToken); 43 | } 44 | 45 | public virtual void Authenticate(IRestClient client, IRestRequest request) 46 | { 47 | // perform authentication request 48 | if (State == AuthState.NotAuthenticated) 49 | { 50 | State = AuthState.InProgress; 51 | AuthToken = Credentials.Authenticate(Client); 52 | SetAuthHeader(AuthToken); 53 | State = AuthState.Authenticated; 54 | } 55 | 56 | // add authorization header if specified 57 | if (AuthHeader != null) 58 | { 59 | request.AddOrUpdateParameter(AuthHeader.Item1, AuthHeader.Item2, ParameterType.HttpHeader); 60 | } 61 | } 62 | 63 | public virtual void Logout() 64 | { 65 | Credentials.Logout(Client); 66 | State = AuthState.NotAuthenticated; 67 | AuthToken = null; 68 | AuthHeader = null; 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /FairMark/DataContracts/ApiFieldError.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.DataContracts 9 | { 10 | /// 11 | /// Структура, которая содержит описание ошибочного поля. 12 | /// 13 | [DataContract] 14 | public partial class ApiFieldError 15 | { 16 | [DataMember(Name = "errorCode", IsRequired = false)] 17 | public int? ErrorCode { get; set; } 18 | 19 | [DataMember(Name = "fieldError", IsRequired = false)] 20 | public string FieldError { get; set; } 21 | 22 | [DataMember(Name = "fieldName", IsRequired = false)] 23 | public string FieldName { get; set; } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /FairMark/DataContracts/ApiGlobalError.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.DataContracts 9 | { 10 | /// 11 | /// Структура, которая содержит описание ошибочного поля. 12 | /// 13 | [DataContract] 14 | public partial class ApiGlobalError 15 | { 16 | [DataMember(Name = "error", IsRequired = false)] 17 | public string Error { get; set; } 18 | 19 | [DataMember(Name = "errorCode", IsRequired = false)] 20 | public int? ErrorCode { get; set; } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /FairMark/DataContracts/AuthResponse.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.DataContracts 2 | { 3 | using System.Runtime.Serialization; 4 | 5 | /// 6 | /// Fair Mark API authentication key. 7 | /// True API 1.5.1. Запрос авторизации при единой аутентификации 8 | /// OMS API 10.3.2.1. Запрос авторизации при единой аутентификации 9 | /// Edo Lite API 2.1. Запрос авторизации 10 | /// 11 | [DataContract] 12 | public class AuthResponse 13 | { 14 | [DataMember(Name = "uuid")] 15 | public string UUID { get; set; } 16 | 17 | [DataMember(Name = "data")] 18 | public string Data { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /FairMark/DataContracts/AuthToken.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.DataContracts 2 | { 3 | using System; 4 | using System.Runtime.Serialization; 5 | 6 | /// 7 | /// Fair Mark API authentication token. 8 | /// True Api 1.5.2. Получение ключа сессии при единой аутентификации 9 | /// OMS API 10.3.2.2. Получение аутентификационного токена 10 | /// Edo Lite API 2.2. Получение ключа сессии 11 | /// 12 | [DataContract] 13 | public class AuthToken 14 | { 15 | /// 16 | /// Initializes a new instance of the . 17 | /// 18 | public AuthToken() 19 | { 20 | // make sure we don't expire prematurely 21 | CreationDate = DateTime.Now.AddSeconds(-30); 22 | } 23 | 24 | /// 25 | /// Gets the creation date. 26 | /// 27 | [DataMember(Name = "$creation_date$", IsRequired = false)] 28 | public DateTime CreationDate { get; private set; } 29 | 30 | /// 31 | /// Gets the expiration date. 32 | /// 33 | [IgnoreDataMember] 34 | public DateTime ExpirationDate 35 | { 36 | get { return CreationDate.AddMinutes(LifeTime); } 37 | } 38 | 39 | /// 40 | /// Gets or sets the authentication token. 41 | /// 42 | [DataMember(Name = "token", IsRequired = true)] 43 | public string Token { get; set; } 44 | 45 | /// 46 | /// Gets or sets the token type (EDO-specific property). 47 | /// 48 | [DataMember(Name = "type", IsRequired = false)] 49 | public string Type { get; set; } 50 | 51 | /// 52 | /// Gets or sets the token lifetime, in minutes. 53 | /// 54 | [IgnoreDataMember] 55 | public int LifeTime { get; } = (int)TimeSpan.FromHours(10).TotalMinutes; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /FairMark/EdoLite/DataContracts/DocumentAgent.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.EdoLite.DataContracts 9 | { 10 | /// 11 | /// 3.8. Получение списка документов. 12 | /// Отправитель или получатель цепочки документов. 13 | /// 14 | [DataContract] 15 | public class DocumentAgent 16 | { 17 | /// 18 | /// Идентификатор получателя в системе ЭДО оператора 19 | /// 20 | [DataMember(Name = "id", IsRequired = false)] 21 | public int ID { get; set; } // 600061573, 22 | 23 | /// 24 | /// Дополнительный идентификатор получателя в системе ЭДО оператора 25 | /// 26 | [DataMember(Name = "extra_id", IsRequired = false)] 27 | public string ExtraID { get; set; } // "00000000-23c4-3685-0000-000000000000", 28 | 29 | /// 30 | /// ИНН получателя 31 | /// 32 | [DataMember(Name = "inn", IsRequired = false)] 33 | public string Inn { get; set; } // "0000000000", 34 | 35 | /// 36 | /// КПП получателя 37 | /// 38 | [DataMember(Name = "kpp", IsRequired = false)] 39 | public string Kpp { get; set; } // null, 40 | 41 | /// 42 | /// ОГРН получателя 43 | /// 44 | [DataMember(Name = "ogrn", IsRequired = false)] 45 | public string Ogrn { get; set; } // "316503200073256", 46 | 47 | /// 48 | /// Адрес получателя 49 | /// 50 | [DataMember(Name = "address", IsRequired = false)] 51 | public string Address { get; set; } // null, 52 | 53 | /// 54 | /// Наименование получателя 55 | /// 56 | [DataMember(Name = "name", IsRequired = false)] 57 | public string Name { get; set; } // "ООО", 58 | 59 | /// 60 | /// E-mail получателя 61 | /// 62 | [DataMember(Name = "email", IsRequired = false)] 63 | public string Email { get; set; } // "noreply@example.com", 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /FairMark/EdoLite/DataContracts/DocumentInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using System.Runtime.Serialization; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace FairMark.EdoLite.DataContracts 8 | { 9 | using System; 10 | 11 | /// 12 | /// 3.8. Получение списка документов. 13 | /// Информация о документе. 14 | /// 15 | [DataContract] 16 | public class DocumentInfo 17 | { 18 | /// 19 | /// Идентификатор документа в системе ЭДО оператора 20 | /// 21 | [DataMember(Name = "id", IsRequired = false)] 22 | public string ID { get; set; } // "66ecae1e-5ff6-41c5-be29-5e1162237b8c", 23 | 24 | /// 25 | /// Дата создания документа в формате timestamp 26 | /// 27 | [DataMember(Name = "created_at", IsRequired = false)] 28 | public long CreatedAt { get; set; } // 1582090925 29 | 30 | /// 31 | /// Дата документа в формате timestamp 32 | /// 33 | [DataMember(Name = "date", IsRequired = false)] 34 | public int Date { get; set; } // 1582059600 35 | 36 | /// 37 | /// Номер документа 38 | /// 39 | [DataMember(Name = "number", IsRequired = false)] 40 | public string Number { get; set; } 41 | 42 | /// 43 | /// Дата последней обработки документа в формате timestamp 44 | /// 45 | [DataMember(Name = "processed_at", IsRequired = false)] 46 | public long ProcessedAt { get; set; } // 1582059600 47 | 48 | /// 49 | /// Числовой статус документа 50 | /// см. Справочник "Статусы документов" 51 | /// 52 | [DataMember(Name = "status", IsRequired = false)] 53 | public int Status { get; set; } // 0 54 | 55 | /// 56 | /// Цена с НДС 57 | /// 58 | [DataMember(Name = "total_price", IsRequired = false)] 59 | public int TotalPrice { get; set; } // 1930500 60 | 61 | /// 62 | /// Цена с НДС 63 | /// 64 | [DataMember(Name = "total_vat_amount", IsRequired = false)] 65 | public int TotalVatAmount { get; set; } // 279500 66 | 67 | /// 68 | /// Код типа документа 69 | /// см. Справочник "Типы документов" 70 | /// 71 | [DataMember(Name = "type", IsRequired = false)] 72 | public int Type { get; set; } // 504 73 | } 74 | } -------------------------------------------------------------------------------- /FairMark/EdoLite/DataContracts/GetDocumentsResponse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.EdoLite.DataContracts 9 | { 10 | /// 11 | /// 3.8. Получение списка документов. 12 | /// Список цепочек документов. 13 | /// 14 | [DataContract] 15 | internal class GetDocumentsResponse 16 | { 17 | /// 18 | /// Цепочки документов 19 | /// 20 | [DataMember(Name = "items")] 21 | public List Items { get; set; } 22 | 23 | /// 24 | /// Количество цепочек 25 | /// 26 | [DataMember(Name = "count", IsRequired = false)] 27 | public int Count { get; set; } // 1 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /FairMark/EdoLite/DataContracts/ResID.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.EdoLite.DataContracts 9 | { 10 | [DataContract] 11 | internal class ResID 12 | { 13 | [DataMember(Name = "id", IsRequired = true)] 14 | public string ID { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /FairMark/EdoLite/EdoLiteClient.cs: -------------------------------------------------------------------------------- 1 | using FairMark.OmsApi.DataContracts; 2 | using FairMark.Toolbox; 3 | 4 | namespace FairMark.EdoLite 5 | { 6 | /// 7 | /// EDO Lite API client. 8 | /// 9 | /// 10 | /// Документация по API ЭДО Лайт: 11 | /// https://честныйзнак.рф/upload/API ЭДО lite.pdf 12 | /// 13 | public partial class EdoLiteClient : CommonApiClient 14 | { 15 | /// 16 | /// Sandbox EDO Lite API URL. Интеграционный стенд ЭДО Лайт для ГИС МТ (маркировка промтоваров). 17 | /// 18 | public const string SandboxApiUrl = "https://int.edo.crpt.tech/api/v1"; 19 | 20 | /// 21 | /// Production EDO Lite for GIS MT API URL. Промышленный стенд ЭДО Лайт для ГИС МТ (маркировка промтоваров). 22 | /// 23 | public const string ProductionApiGisMtUrl = "https://elk.edo.crpt.tech/api/v1"; 24 | 25 | /// 26 | /// Production EDO Lite for MDLP API URL. Промышленный стенд ЭДО Лайт для МДЛП (маркировка лекарств). 27 | /// 28 | public const string ProductionApiMdlpUrl = "https://mdlp.edo.crpt.tech/api/v1"; 29 | 30 | /// 31 | /// Initializes a new instance of the class. 32 | /// 33 | /// OMS API endpoint. 34 | /// Authentication credentials. 35 | public EdoLiteClient(string apiUrl, EdoLiteCredentials credentials) 36 | : base(apiUrl, credentials) 37 | { 38 | } 39 | 40 | /// 41 | /// EDO Lite-specific credentials. 42 | /// 43 | public EdoLiteCredentials EdoLiteCredentials => (EdoLiteCredentials)Credentials; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /FairMark/FairMark.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net462 5 | FairMark 6 | FairMark 7 | Честный Знак. ИС «Маркировка», СУЗ Облако. Неофициальная клиентская библиотека для .NET. 8 | 9 | Alexey Yakovlev 10 | Copyright © Alexey Yakovlev 2021 11 | 1.0.1.0 12 | 1.0.1.0 13 | 1.0.0.0 14 | Alexey Yakovlev;Aleksei Kudryakov;Contributors 15 | 16 | FairMarkClient 17 | REST;API;TrueAPI;Честный знак;ГИС МТ;СУЗ Облако;ЭДО Лайт 18 | https://raw.githubusercontent.com/FairMark/FairMarkClient/master/FairMark.Docs/FairMarkGlitchyLogo.gif 19 | https://github.com/FairMark/FairMarkClient 20 | https://github.com/FairMark/FairMarkClient/blob/master/LICENSE 21 | git 22 | https://github.com/FairMark/FairMarkClient.git 23 | 24 | Alpha release. What's new: 25 | 26 | v1.0.0: 27 | — Initial implementation of the OMS API client. 28 | — Stub implementations of the True API and EDO Lite clients. 29 | 30 | en-US 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | full 54 | True 55 | 56 | 57 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_10_2_ReportStatusDto.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.10. Метод «Получить статус обработки отчёта» 12 | /// 4.5.10.2. Ответ на запрос, Таблица 67. 13 | /// 14 | [DataContract] 15 | public class ReportStatusDto 16 | { 17 | /// Причина отклонения отчета (обнаруженная ошибка) 18 | [DataMember(Name = "errorReason", IsRequired = false)] 19 | public string ErrorReason { get; set; } 20 | 21 | /// Уникальный идентификатор СУЗ 22 | [DataMember(Name = "omsId", IsRequired = true)] 23 | public string OmsID { get; set; } 24 | 25 | /// Report ID (Идентификатор отчета) 26 | [DataMember(Name = "reportId", IsRequired = true)] 27 | public string ReportID { get; set; } 28 | 29 | /// Report status (Статус отчета) 30 | [DataMember(Name = "reportStatus", IsRequired = true)] 31 | public ReportStatuses ReportStatus { get; set; } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_13_1_AppVersion.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.13. Метод «Получить версию СУЗ и API» 12 | /// 13 | [DataContract] 14 | public class AppVersion 15 | { 16 | /// OMS API Version (Версия API СУЗ) 17 | [DataMember(Name = "apiVersion")] 18 | public string ApiVersion { get; set; } 19 | 20 | /// OMS Version (Версия СУЗ) 21 | [DataMember(Name = "omsVersion")] 22 | public string OmsVersion { get; set; } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_14_3_BlockDto.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.14. Метод «Получить список идентификаторов пакетов кодов маркировки» 12 | /// 4.5.14.3. Ответ на запрос, Таблица 76. 13 | /// 14 | [DataContract] 15 | public partial class BlockDto 16 | { 17 | /// Date, time of creation of the marking code package(Дата, время создания пакета кодов маркировки) 18 | [DataMember(Name = "blockDateTime", IsRequired = false)] 19 | public long? BlockDateTime { get; set; } 20 | 21 | /// Unique identifier of a business order for issuing MC (Уникальный идентификатор бизнес-заказа на эмиссию КМ) 22 | [DataMember(Name = "blockId", IsRequired = false)] 23 | public string BlockID { get; set; } 24 | 25 | /// Количество КМ/СИ 26 | [DataMember(Name = "quantity", IsRequired = false)] 27 | public int? Quantity { get; set; } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_14_3_BlocksDto.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.14. Метод «Получить список идентификаторов пакетов кодов маркировки» 12 | /// 4.5.14.3. Ответ на запрос, Таблица 75. 13 | /// 14 | [DataContract] 15 | public partial class BlocksDto 16 | { 17 | [DataMember(Name = "blocks", IsRequired = false)] 18 | public List Blocks { get; set; } 19 | 20 | /// Product GTIN (GTIN товара) 21 | [DataMember(Name = "gtin", IsRequired = true)] 22 | public string Gtin { get; set; } 23 | 24 | /// Уникальный идентификатор СУЗ 25 | [DataMember(Name = "omsId", IsRequired = true)] 26 | public string OmsID { get; set; } 27 | 28 | /// Unique identifier of a business order for issuing MC (Уникальный идентификатор бизнес-заказа на эмиссию КМ) 29 | [DataMember(Name = "orderId", IsRequired = false)] 30 | public Guid OrderID { get; set; } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_16_3_ReceiptDto.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.16. Метод «Получить квитанцию по уникальному идентификатору документа» 12 | /// 4.5.16.2. Формат объекта Receipt, Таблица 81. 13 | /// 14 | [DataContract] 15 | public partial class ReceiptDto 16 | { 17 | [DataMember(Name = "content", IsRequired = false)] 18 | public string Content { get; set; } 19 | 20 | [DataMember(Name = "signature", IsRequired = false)] 21 | public string Signature { get; set; } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_16_3_ReceiptsDto.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.16. Метод «Получить квитанцию по уникальному идентификатору документа» 12 | /// 4.5.16.2. Ответ на запрос, Таблица 80. 13 | /// 14 | [DataContract] 15 | public partial class ReceiptsDto 16 | { 17 | [DataMember(Name = "receipts", IsRequired = false)] 18 | public List Receipts { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_17_ProviderInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.17. Метод «Получить список сервис-провайдеров» 12 | /// 4.5.17.2, Ответ на запрос, Таблица 84. 13 | /// 14 | [DataContract] 15 | public partial class ProviderInfo 16 | { 17 | /// Site address (Адрес площадки) 18 | [DataMember(Name = "address", IsRequired = false)] 19 | public string Address { get; set; } 20 | 21 | /// Contact person (Контактное лицо) 22 | [DataMember(Name = "contactPerson", IsRequired = false)] 23 | public string ContactPerson { get; set; } 24 | 25 | /// Service provider country (Страна сервис провайдера) 26 | [DataMember(Name = "country", IsRequired = true)] 27 | public string Country { get; set; } 28 | 29 | /// E-mail (Электронный адрес) 30 | [DataMember(Name = "email", IsRequired = false)] 31 | public string Email { get; set; } 32 | 33 | /// Contractor name (Наименование контрагента) 34 | [DataMember(Name = "name", IsRequired = true)] 35 | public string Name { get; set; } 36 | 37 | /// Contractor role (Service Provider Role) 38 | [DataMember(Name = "productGroups", IsRequired = true)] 39 | public List ProductGroups { get; set; } = new List(); 40 | 41 | /// Service provider name (Наименование сервис-провайдера) 42 | [DataMember(Name = "providerName", IsRequired = true)] 43 | public string ProviderName { get; set; } 44 | 45 | /// Service provider role (Роль сервис провайдера) 46 | [DataMember(Name = "role", IsRequired = false)] 47 | public string Role { get; set; } 48 | 49 | /// Service Provider ID (Идентификатор сервис-провайдера) 50 | [DataMember(Name = "serviceProviderId", IsRequired = true)] 51 | public string ServiceProviderID { get; set; } 52 | 53 | /// Exporter ID (Идентификатор экспортера) 54 | [DataMember(Name = "taxIdentificationNumber", IsRequired = true)] 55 | public string TaxIdentificationNumber { get; set; } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_17_ProvidersDto.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.17. Метод «Получить список сервис-провайдеров» 12 | /// 4.5.17.2, Ответ на запрос, Таблица 83. 13 | /// 14 | [DataContract] 15 | public partial class ProvidersDto 16 | { 17 | [DataMember(Name = "providers", IsRequired = false)] 18 | public List Providers { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_0_Order.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1. Запрос, Таблица 5. 14 | /// 15 | /// The type of the order product. 16 | [DataContract] 17 | public class Order 18 | where T : OrderProduct 19 | { 20 | /// 21 | /// Список товаров. 22 | /// 23 | /// 24 | /// В зависимости от типа товара в этой коллекции нужно 25 | /// передавать экземпляры либо класса , 26 | /// либо его потомков: и др. 27 | /// 28 | [DataMember(Name = "products", IsRequired = true)] 29 | public List Products { get; set; } = new List(); 30 | 31 | /// 32 | /// Идентификатор сервис-провайдера. 33 | /// 34 | [DataMember(Name = "serviceProviderId", IsRequired = false)] 35 | public string ServiceProviderID { get; set; } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_10_Order_Wheelchairs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.10 Расширения для производителей кресел-колясок, Таблица 23. 14 | /// 15 | [DataContract] 16 | public partial class Order_Wheelchairs : Order 17 | { 18 | /// Contact Person (Контактное лицо) 19 | [DataMember(Name = "contactPerson", IsRequired = false)] 20 | public string ContactPerson { get; set; } 21 | 22 | /// Marking Manufacturing Type (Способ изготовления) 23 | [DataMember(Name = "createMethodType", IsRequired = true)] 24 | public CreateMethodTypes CreateMethodType { get; set; } 25 | 26 | /// Production Order ID (Идентификатор производственного заказа) 27 | [DataMember(Name = "productionOrderId", IsRequired = false)] 28 | public string ProductionOrderID { get; set; } 29 | 30 | /// Product Release Type (Способ выпуска товаров в оборот) 31 | [DataMember(Name = "releaseMethodType", IsRequired = true)] 32 | public ReleaseMethodTypes ReleaseMethodType { get; set; } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_11_OrderProduct_Otp.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order product. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.11 Расширения для производителей альтернативной табачной продукции, Таблица 24. 14 | /// 15 | [DataContract] 16 | public class OrderProduct_Otp : OrderProduct 17 | { 18 | /// CIS type (Тип КМ) 19 | [DataMember(Name = "cisType", IsRequired = false)] 20 | public CisTypes? CisType { get; set; } 21 | 22 | /// 23 | /// Максимальная розничная цена. 24 | /// 25 | /// 26 | /// Примечание*: Поле «mrp» (Максимальная розничная цена) является обязательным 27 | /// для заполнения, максимально розничная цена должна указываться в копейках, с точностью 28 | /// до единицы, например, если цена 105 рублей и 1 копейка, то это число 10501, для блока 29 | /// это сумма всех пачек, также в копейках. /// 30 | [DataMember(Name = "mrp", IsRequired = true)] 31 | public string MaxRetailPrice { get; set; } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_12_Order_Water.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.12 Расширения для производителей упакованной воды, Таблица 26. 14 | /// 15 | [DataContract] 16 | public partial class Order_Water : Order 17 | { 18 | /// Contact Person (Контактное лицо) 19 | [DataMember(Name = "contactPerson", IsRequired = false)] 20 | public string ContactPerson { get; set; } 21 | 22 | /// Marking Manufacturing Type (Способ изготовления) 23 | [DataMember(Name = "createMethodType", IsRequired = true)] 24 | public CreateMethodTypes CreateMethodType { get; set; } 25 | 26 | /// Production Order ID (Идентификатор производственного заказа) 27 | [DataMember(Name = "productionOrderId", IsRequired = false)] 28 | public string ProductionOrderID { get; set; } 29 | 30 | /// Product Release Type (Способ выпуска товаров в оборот) 31 | [DataMember(Name = "releaseMethodType", IsRequired = true)] 32 | public ReleaseMethodTypes ReleaseMethodType { get; set; } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_13_OrderProduct_Beer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order product. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.13 Расширения для производителей пива, напитков, 14 | /// изготавливаемых на основе пива и слабоалкогольных напитков, Таблица 28. 15 | /// 16 | [DataContract] 17 | public class OrderProduct_Beer : OrderProduct 18 | { 19 | /// CIS type (Тип КМ) 20 | [DataMember(Name = "cisType", IsRequired = false)] 21 | public CisTypes? CisType { get; set; } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_13_Order_Beer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.13 Расширения для производителей пива, напитков, 14 | /// изготавливаемых на основе пива и слабоалкогольных напитков, Таблица 27. 15 | /// 16 | [DataContract] 17 | public partial class Order_Beer : Order 18 | { 19 | /// Contact Person (Контактное лицо) 20 | [DataMember(Name = "contactPerson", IsRequired = false)] 21 | public string ContactPerson { get; set; } 22 | 23 | /// Marking Manufacturing Type (Способ изготовления) 24 | [DataMember(Name = "createMethodType", IsRequired = true)] 25 | public CreateMethodTypes CreateMethodType { get; set; } 26 | 27 | /// Production Order ID (Идентификатор производственного заказа) 28 | [DataMember(Name = "productionOrderId", IsRequired = false)] 29 | public string ProductionOrderID { get; set; } 30 | 31 | /// Product Release Type (Способ выпуска товаров в оборот) 32 | [DataMember(Name = "releaseMethodType", IsRequired = true)] 33 | public ReleaseMethodTypes ReleaseMethodType { get; set; } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_1_OrderProduct_Tobacco.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order product. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.1 Расширения для табачной промышленности, Таблица 7. 14 | /// 15 | [DataContract] 16 | public class OrderProduct_Tobacco : OrderProduct 17 | { 18 | /// 19 | /// Максимальная розничная цена. 20 | /// 21 | /// 22 | /// Примечание*: Поле «mrp» (Максимальная розничная цена) является обязательным 23 | /// для заполнения, максимально розничная цена должна указываться в копейках, с точностью 24 | /// до единицы, например, если цена 105 рублей и 1 копейка, то это число 10501, для блока 25 | /// это сумма всех пачек, также в копейках. /// 26 | [DataMember(Name = "mrp", IsRequired = true)] 27 | public string MaxRetailPrice { get; set; } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_1_Order_Tobacco.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.1 Расширения для табачной промышленности, Таблица 8. 14 | /// 15 | [DataContract] 16 | public partial class Order_Tobacco : Order 17 | { 18 | /// 19 | /// Expected Start Date (Ожидаемая дата начала производства продукции по данному заказу). 20 | /// 21 | /// 22 | /// Формат: (yyyy-mm-dd). 23 | /// 24 | /// ) 25 | [DataMember(Name = "expectedStartDate", IsRequired = false)] 26 | public string ExpectedStartDate { get; set; } 27 | 28 | /// Factory Address (Адрес производства) 29 | [DataMember(Name = "factoryAddress", IsRequired = false)] 30 | public string FactoryAddress { get; set; } 31 | 32 | /// Factory Country (Страна производителя) 33 | [DataMember(Name = "factoryCountry", IsRequired = true)] 34 | public string FactoryCountry { get; set; } 35 | 36 | /// Factory Identifier (GLN) Идентификатор производства. (Глобальный номер места нахождения) 37 | [DataMember(Name = "factoryId", IsRequired = true)] 38 | public string FactoryID { get; set; } 39 | 40 | /// Factory Name (Наименование производства) 41 | [DataMember(Name = "factoryName", IsRequired = false)] 42 | public string FactoryName { get; set; } 43 | 44 | /// PO Number (Номер заказа) 45 | [DataMember(Name = "poNumber", IsRequired = false)] 46 | public string PoNumber { get; set; } 47 | 48 | /// Product Code (SKU) Код продукта (SKU) 49 | [DataMember(Name = "productCode", IsRequired = true)] 50 | public string ProductCode { get; set; } 51 | 52 | /// Product Description (Описание продукта) 53 | [DataMember(Name = "productDescription", IsRequired = true)] 54 | public string ProductDescription { get; set; } 55 | 56 | /// Line Identifier (Идентификатор производственной линии) 57 | [DataMember(Name = "productionLineId", IsRequired = true)] 58 | public string ProductionLineID { get; set; } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_2_OrderProduct_Lp.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order product. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.2 Расширения для лёгкой промышленности – категория товарной группы 14 | /// «Предметы одежды, белье постельное, столовое, туалетное и кухонное», Таблица 10. 15 | /// 16 | /// 17 | /// Примечание*: Поле «exporterTaxpayerId» становится обязательным, если в поле 18 | /// releaseMethod (способ выпуска товара в оборот) было выбрано значение 19 | /// «CROSSBORDER» (Ввезен в РФ из стран ЕАЭС). 20 | /// 21 | [DataContract] 22 | public class OrderProduct_Lp : OrderProduct 23 | { 24 | /// CIS type (Тип КМ) 25 | [DataMember(Name = "cisType", IsRequired = false)] 26 | public CisTypes? CisType { get; set; } 27 | 28 | /// ИНН/УНБ (или аналог) экспортера 29 | [DataMember(Name = "exporterTaxpayerId", IsRequired = false)] 30 | public string ExporterTaxpayerID { get; set; } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_2_Order_Lp.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.2 Расширения для лёгкой промышленности – категория товарной группы 14 | /// «Предметы одежды, белье постельное, столовое, туалетное и кухонное», Таблица 9. 15 | /// 16 | [DataContract] 17 | public partial class Order_Lp : Order 18 | { 19 | /// Contact Person (Контактное лицо) 20 | [DataMember(Name = "contactPerson", IsRequired = false)] 21 | public string ContactPerson { get; set; } 22 | 23 | /// Marking Manufacturing Type (Способ изготовления) 24 | [DataMember(Name = "createMethodType", IsRequired = true)] 25 | public CreateMethodTypes CreateMethodType { get; set; } 26 | 27 | /// Production Order ID (Идентификатор производственного заказа) 28 | [DataMember(Name = "productionOrderId", IsRequired = false)] 29 | public string ProductionOrderID { get; set; } 30 | 31 | /// Product Release Type (Способ выпуска товаров в оборот) 32 | [DataMember(Name = "releaseMethodType", IsRequired = true)] 33 | public ReleaseMethodTypes ReleaseMethodType { get; set; } 34 | 35 | /// Признак того, что товар произведен/приобретен до даты запрета оборота немаркированных товаров по данной ТГ 36 | [DataMember(Name = "remainsAvailable", IsRequired = false)] 37 | public bool? RemainsAvailable { get; set; } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_3_OrderProduct_Shoes.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order product. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.3 Расширения для лёгкой промышленности – категория товарной группы «Обувные товары», Таблица 12. 14 | /// 15 | /// 16 | /// Примечание*: Поле «exporterTaxpayerId» становится обязательным, если в поле 17 | /// releaseMethod (способ выпуска товара в оборот) было выбрано значение 18 | /// «CROSSBORDER» (Ввезен в РФ из стран ЕАЭС). 19 | /// 20 | [DataContract] 21 | public class OrderProduct_Shoes : OrderProduct 22 | { 23 | /// ИНН/УНБ (или аналог) экспортера 24 | [DataMember(Name = "exporterTaxpayerId", IsRequired = false)] 25 | public string ExporterTaxpayerID { get; set; } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_3_Order_Shoes.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.3 Расширения для лёгкой промышленности – категория товарной группы «Обувные товары», Таблица 11. 14 | /// 15 | /// 16 | /// Примечание*: значение «REMAINS» справочника «Способ выпуска товаров в 17 | /// оборот» не применимо для категории товаров «Обувные товары». 18 | /// 19 | [DataContract] 20 | public partial class Order_Shoes : Order 21 | { 22 | /// Contact Person (Контактное лицо) 23 | [DataMember(Name = "contactPerson", IsRequired = false)] 24 | public string ContactPerson { get; set; } 25 | 26 | /// Marking Manufacturing Type (Способ изготовления) 27 | [DataMember(Name = "createMethodType", IsRequired = true)] 28 | public CreateMethodTypes CreateMethodType { get; set; } 29 | 30 | /// Production Order ID (Идентификатор производственного заказа) 31 | [DataMember(Name = "productionOrderId", IsRequired = false)] 32 | public string ProductionOrderID { get; set; } 33 | 34 | /// Product Release Type (Способ выпуска товаров в оборот) 35 | [DataMember(Name = "releaseMethodType", IsRequired = true)] 36 | public ReleaseMethodTypes ReleaseMethodType { get; set; } 37 | 38 | /// Признак того, что товар произведен/приобретен до даты запрета оборота немаркированных товаров по данной ТГ 39 | [DataMember(Name = "remainsAvailable", IsRequired = false)] 40 | public bool? RemainsAvailable { get; set; } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_4_OrderProduct_Tires.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order product. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.4 Расширения для производителей шин – категория товарной группы 14 | /// «Шины и покрышки пневматические резиновые новые», Таблица 14. 15 | /// 16 | /// 17 | /// Примечание*: Поле «exporterTaxpayerId» становится обязательным, если в поле 18 | /// releaseMethod (способ выпуска товара в оборот) было выбрано значение 19 | /// «CROSSBORDER» (Ввезен в РФ из стран ЕАЭС). 20 | /// 21 | [DataContract] 22 | public class OrderProduct_Tires : OrderProduct 23 | { 24 | /// ИНН/УНБ (или аналог) экспортера 25 | [DataMember(Name = "exporterTaxpayerId", IsRequired = false)] 26 | public string ExporterTaxpayerID { get; set; } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_4_Order_Tires.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.4 Расширения для производителей шин – категория товарной группы 14 | /// «Шины и покрышки пневматические резиновые новые», Таблица 13. 15 | /// 16 | [DataContract] 17 | public partial class Order_Tires : Order 18 | { 19 | /// Contact Person (Контактное лицо) 20 | [DataMember(Name = "contactPerson", IsRequired = false)] 21 | public string ContactPerson { get; set; } 22 | 23 | /// Marking Manufacturing Type (Способ изготовления) 24 | [DataMember(Name = "createMethodType", IsRequired = true)] 25 | public CreateMethodTypes CreateMethodType { get; set; } 26 | 27 | /// Production Order ID (Идентификатор производственного заказа) 28 | [DataMember(Name = "productionOrderId", IsRequired = false)] 29 | public string ProductionOrderID { get; set; } 30 | 31 | /// Product Release Type (Способ выпуска товаров в оборот) 32 | [DataMember(Name = "releaseMethodType", IsRequired = true)] 33 | public ReleaseMethodTypes ReleaseMethodType { get; set; } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_5_OrderProduct_Perfum.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order product. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.5 Расширения для производителей парфюмерной продукции – категория 14 | /// товарной группы «Духи и туалетная вода», Таблица 16. 15 | /// 16 | /// 17 | /// Примечание*: Поле «exporterTaxpayerId» становится обязательным, если в поле 18 | /// releaseMethod (способ выпуска товара в оборот) было выбрано значение 19 | /// «CROSSBORDER» (Ввезен в РФ из стран ЕАЭС). 20 | /// 21 | [DataContract] 22 | public class OrderProduct_Perfum : OrderProduct 23 | { 24 | /// CIS type (Тип КМ) 25 | [DataMember(Name = "cisType", IsRequired = false)] 26 | public CisTypes? CisType { get; set; } 27 | 28 | /// ИНН/УНБ (или аналог) экспортера 29 | [DataMember(Name = "exporterTaxpayerId", IsRequired = false)] 30 | public string ExporterTaxpayerID { get; set; } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_5_Order_Perfum.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.5 Расширения для производителей парфюмерной продукции – категория 14 | /// товарной группы «Духи и туалетная вода», Таблица 15. 15 | /// 16 | [DataContract] 17 | public partial class Order_Perfum : Order 18 | { 19 | /// Contact Person (Контактное лицо) 20 | [DataMember(Name = "contactPerson", IsRequired = false)] 21 | public string ContactPerson { get; set; } 22 | 23 | /// Marking Manufacturing Type (Способ изготовления) 24 | [DataMember(Name = "createMethodType", IsRequired = true)] 25 | public CreateMethodTypes CreateMethodType { get; set; } 26 | 27 | /// Production Order ID (Идентификатор производственного заказа) 28 | [DataMember(Name = "productionOrderId", IsRequired = false)] 29 | public string ProductionOrderID { get; set; } 30 | 31 | /// Product Release Type (Способ выпуска товаров в оборот) 32 | [DataMember(Name = "releaseMethodType", IsRequired = true)] 33 | public ReleaseMethodTypes ReleaseMethodType { get; set; } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_6_OrderProduct_Photo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order product. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.6 Расширения для производителей фототоваров – категория товарной группы 14 | /// «Фотокамеры (кроме кинокамер), фотовспышки и лампы-вспышки», Таблица 17. 15 | /// 16 | /// 17 | /// Примечание*: Поле «exporterTaxpayerId» становится обязательным, если в поле 18 | /// releaseMethod (способ выпуска товара в оборот) было выбрано значение 19 | /// «CROSSBORDER» (Ввезен в РФ из стран ЕАЭС). 20 | /// 21 | [DataContract] 22 | public class OrderProduct_Photo : OrderProduct 23 | { 24 | /// CIS type (Тип КМ) 25 | [DataMember(Name = "cisType", IsRequired = false)] 26 | public CisTypes? CisType { get; set; } 27 | 28 | /// ИНН/УНБ (или аналог) экспортера 29 | [DataMember(Name = "exporterTaxpayerId", IsRequired = false)] 30 | public string ExporterTaxpayerID { get; set; } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_6_Order_Photo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.6 Расширения для производителей фототоваров – категория товарной группы 14 | /// «Фотокамеры (кроме кинокамер), фотовспышки и лампы-вспышки», Таблица 17. 15 | /// 16 | /// 17 | /// Примечание*: значение «REMAINS» справочника «Способ выпуска товаров в 18 | /// оборот» не применимо для категории товаров «Фотокамеры (кроме кинокамер), 19 | /// фотовспышки и лампы-вспышки» 20 | /// 21 | [DataContract] 22 | public partial class Order_Photo : Order 23 | { 24 | /// Contact Person (Контактное лицо) 25 | [DataMember(Name = "contactPerson", IsRequired = false)] 26 | public string ContactPerson { get; set; } 27 | 28 | /// Marking Manufacturing Type (Способ изготовления) 29 | [DataMember(Name = "createMethodType", IsRequired = true)] 30 | public CreateMethodTypes CreateMethodType { get; set; } 31 | 32 | /// Production Order ID (Идентификатор производственного заказа) 33 | [DataMember(Name = "productionOrderId", IsRequired = false)] 34 | public string ProductionOrderID { get; set; } 35 | 36 | /// Product Release Type (Способ выпуска товаров в оборот) 37 | [DataMember(Name = "releaseMethodType", IsRequired = true)] 38 | public ReleaseMethodTypes ReleaseMethodType { get; set; } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_7_Order_Pharma.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.7 Расширения для фармацевтической промышленности, Таблица 19. 14 | /// 15 | [DataContract] 16 | public partial class Order_Pharma : Order 17 | { 18 | /// Is code emission free (Признак оплаты эмиссии КМ: true - не подлежит оплате, false - подлежит оплате (значение по умолчанию) 19 | [DataMember(Name = "freeCode", IsRequired = false)] 20 | public bool? FreeCode { get; set; } 21 | 22 | /// Payment Type (Тип оплаты: 1 - Оплата по эмиссии, 2 - Оплата по нанесению (значение по умолчанию) 23 | [DataMember(Name = "paymentType", IsRequired = false)] 24 | public int? PaymentType { get; set; } 25 | 26 | /// Subject ID (Субъект обращения) 27 | [DataMember(Name = "subjectId", IsRequired = true)] 28 | public string SubjectID { get; set; } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_8_OrderProduct_Milk.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order product. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.8 Расширения для производителей молока, Таблица 20. 14 | /// 15 | [DataContract] 16 | public class OrderProduct_Milk : OrderProduct 17 | { 18 | /// CIS type (Тип КМ) 19 | [DataMember(Name = "cisType", IsRequired = false)] 20 | public CisTypes? CisType { get; set; } 21 | 22 | /// 23 | /// Expiry date of the product (expiration date more than 72 hours) 24 | /// Дата окончания срока годности продукции (срок хранения более 72 часов) 25 | /// 26 | [DataMember(Name = "expDate", IsRequired = false)] 27 | public string ExpDate { get; set; } 28 | 29 | /// Expiration date of the product (shelf life less than 72 hours) 30 | /// Дата окончания срока годности продукции (срок хранения менее 72 часов) 31 | /// 32 | [DataMember(Name = "expDate72", IsRequired = false)] 33 | public string ExpDate72 { get; set; } 34 | 35 | /// ИНН/УНБ (или аналог) экспортера 36 | /// 37 | /// Примечание*: Поле «exporterTaxpayerId» становится обязательным, если в поле 38 | /// releaseMethodType (способ выпуска товара в оборот) было выбрано значение 39 | /// «CROSSBORDER» (Ввезен в РФ из стран ЕАЭС). 40 | /// 41 | [DataMember(Name = "exporterTaxpayerId", IsRequired = false)] 42 | public string ExporterTaxpayerID { get; set; } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_8_Order_Milk.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.8 Расширения для производителей молока, Таблица 21. 14 | /// 15 | /// 16 | /// Примечание*: значения «REMAINS», «REMARK» справочника «Способ выпуска 17 | /// товаров в оборот» не применимы для категории товаров «Молочная продукция». 18 | /// 19 | [DataContract] 20 | public class Order_Milk : Order 21 | { 22 | /// 23 | /// Контактное лицо. 24 | /// 25 | [DataMember(Name = "contactPerson", IsRequired = false)] 26 | public string ContactPerson { get; set; } 27 | 28 | /// 29 | /// Способ выпуска товаров в оборот. 30 | /// Справочное значение «Способ выпуска товаров в оборот» 31 | /// см. раздел 5.3.1.1. 32 | /// 33 | [DataMember(Name = "releaseMethodType", IsRequired = true)] 34 | public ReleaseMethodTypes ReleaseMethodType { get; set; } 35 | 36 | /// 37 | /// Способ изготовления СИ. 38 | /// Справочное значение «Способ изготовления» 39 | /// см. раздел 5.3.1.3. 40 | /// 41 | [DataMember(Name = "createMethodType", IsRequired = true)] 42 | public CreateMethodTypes CreateMethodType { get; set; } 43 | 44 | /// 45 | /// Идентификатор производственного заказа. 46 | /// 47 | [DataMember(Name = "productionOrderId", IsRequired = true)] 48 | public string ProductionOrderID { get; set; } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_1_9_Order_Bicycle.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.1.9 Расширения для производителей велосипедов и велосипедных рам, Таблица 22. 14 | /// 15 | [DataContract] 16 | public partial class Order_Bicycle : Order 17 | { 18 | /// Contact Person (Контактное лицо) 19 | [DataMember(Name = "contactPerson", IsRequired = false)] 20 | public string ContactPerson { get; set; } 21 | 22 | /// Marking Manufacturing Type (Способ изготовления) 23 | [DataMember(Name = "createMethodType", IsRequired = true)] 24 | public CreateMethodTypes CreateMethodType { get; set; } 25 | 26 | /// Production Order ID (Идентификатор производственного заказа) 27 | [DataMember(Name = "productionOrderId", IsRequired = false)] 28 | public string ProductionOrderID { get; set; } 29 | 30 | /// Product Release Type (Способ выпуска товаров в оборот) 31 | [DataMember(Name = "releaseMethodType", IsRequired = true)] 32 | public ReleaseMethodTypes ReleaseMethodType { get; set; } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_1_2_OrderResponse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Code emission order response. 12 | /// 4.5.1. Метод «Создать заказ на эмиссию кодов маркировки» 13 | /// 4.5.1.2. Ответ на запрос 14 | /// 15 | [DataContract] 16 | public class OrderResponse 17 | { 18 | [DataMember(Name = "omsId")] 19 | public string OmsID { get; set; } 20 | 21 | [DataMember(Name = "orderId")] 22 | public Guid OrderID { get; set; } 23 | 24 | [DataMember(Name = "expectedCompleteTimestamp")] 25 | public long ExpectedCompleteTimestamp { get; set; } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_2_1_0_DropoutReport.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.2.1. Метод «Отправить отчёт о выбытии/отбраковке КМ», Таблица 32. 12 | /// 13 | /// 14 | /// Примечание. Количество КМ в отчёте о выбытии не должно превышать 30 000 кодов. 15 | /// Примечание. Для ТГ «Табачная продукция» и «Никотиносодержащая продукция» 16 | /// допустимо указывать в массиве выбывших КМ транспортные и групповые упаковки с 17 | /// указанием признака списания всех вложенных элементов. 18 | /// Массив выбывших КМ потребительской упаковки для ТГ «Табачная продукция» и 19 | /// «Никотиносодержащая продукция» обязательно должен содержать код идентификации 20 | /// (GTIN + Serial). 21 | /// 22 | [DataContract] 23 | public partial class DropoutReport 24 | { 25 | /// Dropout reason (Причина выбытия) 26 | [DataMember(Name = "dropoutReason", IsRequired = true)] 27 | public DropoutReasons DropoutReason { get; set; } 28 | 29 | /// Identification Codes that were dropped out (Информация о выбывших КМ) 30 | [DataMember(Name = "sntins", IsRequired = true)] 31 | public List Sntins { get; set; } = new List(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_2_1_1_DropoutReport_Tobacco.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.2.1. Метод «Отправить отчёт о выбытии/отбраковке КМ» 12 | /// 4.5.2.1.1 Расширения для табачной промышленности, Таблица 33. 13 | /// 14 | /// 15 | /// Примечание*: В случае отсутствия полей sourceDocDate и sourceDocNum СУЗ 16 | /// заполняет их автоматически следующими значениями: 17 | /// 1) sourceDocDate – текущая дата в unixTime UTC:0 в миллисекундах; 18 | /// 2) sourceDocNum – текущая дата в unixTime UTC:0 в миллисекундах. 19 | /// 20 | [DataContract] 21 | public partial class DropoutReport_Tobacco : DropoutReport 22 | { 23 | /// Address where the write-off was made (Адрес, где было произведено списание) 24 | [DataMember(Name = "address", IsRequired = true)] 25 | public string Address { get; set; } 26 | 27 | /// Taxpayer Identification Number (Идентификационный номер налогоплательщика) 28 | [DataMember(Name = "participantId", IsRequired = true)] 29 | public string ParticipantID { get; set; } 30 | 31 | /// Production Line Number (Идентификатор производственной линии) 32 | [DataMember(Name = "productionLineId", IsRequired = false)] 33 | public string ProductionLineID { get; set; } 34 | 35 | /// The Id of the production order (Идентификатор производственного заказа) 36 | [DataMember(Name = "productionOrderId", IsRequired = false)] 37 | public string ProductionOrderID { get; set; } 38 | 39 | /// Dropout document date (Дата первичного документа) 40 | [DataMember(Name = "sourceDocDate", IsRequired = false)] 41 | public string SourceDocDate { get; set; } 42 | 43 | /// Dropout document number (Номер первичного документа) 44 | [DataMember(Name = "sourceDocNum", IsRequired = false)] 45 | public string SourceDocNum { get; set; } 46 | 47 | /// Specifies whether to write off all nested items (Признак списания всех вложенных элементов) 48 | [DataMember(Name = "withChild", IsRequired = true)] 49 | public bool WithChild { get; set; } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_2_1_2_DropoutReport_Ncp.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.2.1. Метод «Отправить отчёт о выбытии/отбраковке КМ» 12 | /// 4.5.2.1.2 Расширения для никотиносодержащей продукции, Таблица 34. 13 | /// 14 | /// 15 | /// Примечание: В случае отсутствия полей sourceDocDate и sourceDocNum СУЗ 16 | /// заполняет их автоматически следующими значениями: 17 | /// 3) sourceDocDate – текущая дата в unixTime UTC:0 в миллисекундах; 18 | /// 4) sourceDocNum – текущая дата в unixTime UTC:0 в миллисекундах. 19 | /// 20 | [DataContract] 21 | public partial class DropoutReport_Ncp : DropoutReport 22 | { 23 | /// Address where the write-off was made (Адрес, где было произведено списание) 24 | [DataMember(Name = "address", IsRequired = true)] 25 | public string Address { get; set; } 26 | 27 | /// Taxpayer Identification Number (Идентификационный номер налогоплательщика) 28 | [DataMember(Name = "participantId", IsRequired = true)] 29 | public string ParticipantID { get; set; } 30 | 31 | /// Production Line Number (Идентификатор производственной линии) 32 | [DataMember(Name = "productionLineId", IsRequired = false)] 33 | public string ProductionLineID { get; set; } 34 | 35 | /// The Id of the production order (Идентификатор производственного заказа) 36 | [DataMember(Name = "productionOrderId", IsRequired = false)] 37 | public string ProductionOrderID { get; set; } 38 | 39 | /// Dropout document date (Дата документа) 40 | [DataMember(Name = "sourceDocDate", IsRequired = false)] 41 | public string SourceDocDate { get; set; } 42 | 43 | /// Dropout document number (Идентификатор документа, на основании которого осуществляется списание) 44 | [DataMember(Name = "sourceDocNum", IsRequired = false)] 45 | public string SourceDocNum { get; set; } 46 | 47 | /// Specifies whether to write off all nested items (Признак списания всех вложенных элементов) 48 | [DataMember(Name = "withChild", IsRequired = true)] 49 | public bool WithChild { get; set; } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_3+4_5_9_AggregationUnit.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.3. Метод «Отправить отчёт об агрегации КМ» 12 | /// 4.5.9. Метод «Получить информацию об агрегации» 13 | /// 4.5.9.2. Ответ на запрос, Таблица 38. 14 | /// 15 | [DataContract] 16 | public class AggregationUnit 17 | { 18 | /// Number of goods actually aggregated in the unit (Фактически упаковано) 19 | [DataMember(Name = "aggregatedItemsCount", IsRequired = true)] 20 | public int AggregatedItemsCount { get; set; } 21 | 22 | /// Aggregation operation type (Тип агрегации) 23 | [DataMember(Name = "aggregationType", IsRequired = true)] 24 | public AggregationTypes AggregationType { get; set; } 25 | 26 | /// Aggregation Unit Capacity (Емкость упаковки) 27 | [DataMember(Name = "aggregationUnitCapacity", IsRequired = true)] 28 | public int AggregationUnitCapacity { get; set; } 29 | 30 | /// List of the Aggregated Identification Codes (Список агрегированных КМ) 31 | [DataMember(Name = "sntins", IsRequired = true)] 32 | public List Sntins { get; set; } = new List(); 33 | 34 | /// Identification Code of Aggregation Unit (КМ агрегата) 35 | [DataMember(Name = "unitSerialNumber", IsRequired = true)] 36 | public string UnitSerialNumber { get; set; } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_3_AggregationReport.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.OmsApi.DataContracts 2 | { 3 | using System.Collections.Generic; 4 | using System.Runtime.Serialization; 5 | 6 | /// 7 | /// 4.5.3. Метод «Отправить отчёт об агрегации КМ» 8 | /// 9 | [DataContract] 10 | public class AggregationReport 11 | { 12 | /// 13 | /// Идентификационный номер налогоплательщика 14 | /// 15 | [DataMember(Name = "participantId")] 16 | public string ParticipantId { get; set; } 17 | 18 | /// 19 | /// Массив единиц агрегации 20 | /// 21 | [DataMember(Name = "aggregationUnits")] 22 | public List AggregationUnits { get; set; } 23 | } 24 | 25 | 26 | } 27 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_4_1_0_UtilisationReport.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.OmsApi.DataContracts 2 | { 3 | using System.Collections.Generic; 4 | using System.Runtime.Serialization; 5 | 6 | /// 7 | /// 4.5.4.1. Метод «Отправить отчёт об использовании (нанесении) КМ», Таблица 44. 8 | /// 9 | /// 10 | /// Примечание: 11 | /// 1) для участников, не являющихся Операторами ЕАЭС, данный метод в настоящий 12 | /// момент доступен по товарным группам «Табачная продукция», «Молоко», «Лекарственные 13 | /// препараты для медицинского применения», «Альтернативная табачная продукция», 14 | /// «Упакованная вода», «Пиво, напитки, изготавливаемые на основе пива и 15 | /// слабоалкогольные напитки» (структура запроса, направляемого по пивным напиткам, 16 | /// должна содержать базовый объект «UtilisationReport» без расширений для товарной 17 | /// группы) и «Никотиносодержащая продукция». Для следующих товарных групп отчет 18 | /// формируется автоматически: 19 | /// - «Велосипеды и велосипедные рамы» 20 | /// - «Кресла-коляски» 21 | /// - «Предметы одежды, белье постельное, столовое, туалетное и кухонное» 22 | /// - «Обувные товары» 23 | /// - «Духи и туалетная вода» 24 | /// - «Шины и покрышки пневматические резиновые новые» 25 | /// - «Фотокамеры (кроме кинокамер), фотовспышки и лампы-вспышки» 26 | /// Впоследствии, по мере готовности информационной системы, автоматическая 27 | /// отправка отчетов о нанесении будет отключена.Отчеты об использовании(нанесении) КМ 28 | /// необходимо будет формировать и отправлять самостоятельно с помощью описываемого 29 | /// метода. 30 | /// 2) для Оператора ЕАЭС данный метод доступен по следующим товарным группам: 31 | /// - «Молоко». 32 | /// По итогам отправки отчета об использовании КМ в СУЗ необходимо получить статус 33 | /// обработки отчета(используя Метод «Получить статус обработки отчёта»), после 34 | /// получения ответа предоставляется возможным использование мотода «Получить 35 | /// квитанцию по уникальному идентификатору документа (см.раздел 4.5.16). 36 | /// 37 | [DataContract] 38 | public partial class UtilisationReport 39 | { 40 | /// List of Utilized Identification Codes (Информация об использованных КМ) 41 | [DataMember(Name = "sntins", IsRequired = true)] 42 | public List Sntins { get; set; } = new List(); 43 | 44 | /// Usage type (Тип использования) 45 | [DataMember(Name = "usageType", IsRequired = true)] 46 | public UsageTypes UsageType { get; set; } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_4_1_1_UtilisationReport_Tobacco.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.4.1 Метод «Отправить отчёт об использовании (нанесении) КМ» 12 | /// 4.5.4.1.1 Расширения для табачной промышленности, Таблица 44. 13 | /// 14 | [DataContract] 15 | public partial class UtilisationReport_Tobacco : UtilisationReport 16 | { 17 | /// Product Brand Name (Наименование бренда продукции) 18 | [DataMember(Name = "brandcode", IsRequired = false)] 19 | public string Brandcode { get; set; } 20 | 21 | /// Production date (Дата производства. Дата указывается с учетом часового пояса. Обозначение даты в соответствии с ГОСТ ИСО 8601–2001) 22 | /// Формат даты: yyyy-MMddTHH:mm:ss.SSSZ 23 | [DataMember(Name = "productionDate", IsRequired = false)] 24 | public string ProductionDate { get; set; } 25 | 26 | /// Production line number (Номер производственной линии) 27 | [DataMember(Name = "productionLineId", IsRequired = true)] 28 | public string ProductionLineID { get; set; } 29 | 30 | /// The Id of the production order (Идентификатор производственного заказа) 31 | [DataMember(Name = "productionOrderId", IsRequired = false)] 32 | public string ProductionOrderID { get; set; } 33 | 34 | /// Utilisation report identifier of APCS (Идентификатор отчёта о нанесении АСУТП) 35 | [DataMember(Name = "sourceReportId", IsRequired = false)] 36 | public string SourceReportID { get; set; } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_4_1_3_UtilisationReport_Milk.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.4.1 Метод «Отправить отчёт об использовании (нанесении) КМ» 12 | /// 4.5.4.1.3 Расширения для производителей молока, Таблица 47. 13 | /// 14 | /// 15 | /// Примечание*: В отчёте обязательно должна быть представлена дата срока 16 | /// годности продукции в атрибуте «expDate» или «expDate72». В случае, если коды 17 | /// маркировки содержат дату срока годности продукции, отличную от значения, указанного в 18 | /// атрибутах «expDate» или «expDate72», отчёт не будет принят. 19 | /// Атрибут «accompanyingDocument» в текущей версии является необязательным и в 20 | /// дальнейшем будет исключён как устаревший. 21 | /// 22 | [DataContract] 23 | public partial class UtilisationReport_Milk : UtilisationReport 24 | { 25 | /// Производственный ветеринарный сопроводительный документ 26 | [DataMember(Name = "accompanyingDocument", IsRequired = false)] 27 | public string AccompanyingDocument { get; set; } 28 | 29 | /// Capacity/Weight (Объем/Масса) 30 | [DataMember(Name = "capacity", IsRequired = false)] 31 | public double? Capacity { get; set; } 32 | 33 | /// CIS type (Тип КМ) 34 | [DataMember(Name = "cisType", IsRequired = true)] 35 | public CisTypes CisType { get; set; } 36 | 37 | /// Date format: "yyMMdd" Expiry date of the product (expiration date more than 72 hours) (Дата окончания срока годности продукции (срок хранения более 72 часов)) 38 | [DataMember(Name = "expDate", IsRequired = false)] 39 | public string ExpDate { get; set; } 40 | 41 | /// Date format: "yyMMddHHmm" Expiry date of the product (expiration date more than 72 hours) (Дата окончания срока годности продукции (срок хранения менее 72 часов)) 42 | [DataMember(Name = "expDate72", IsRequired = false)] 43 | public string ExpDate72 { get; set; } 44 | 45 | /// The indication of use of ICs in production (Признак использовании КМ на производстве) 46 | /// Признак использования КМ на производстве: 0 – значение по умолчанию; 1 – КМ были использованы на производстве 47 | [DataMember(Name = "usedInProduction", IsRequired = false)] 48 | public int? UsedInProduction { get; set; } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_4_1_4_UtilisationReport_Otp.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.4.1 Метод «Отправить отчёт об использовании (нанесении) КМ» 12 | /// 4.5.4.1.4 Расширения для производителей альтернативной табачной продукции, Таблица 48. 13 | /// 14 | [DataContract] 15 | public partial class UtilisationReport_Otp : UtilisationReport 16 | { 17 | /// Наименование бренда продукции 18 | [DataMember(Name = "brandcode", IsRequired = false)] 19 | public string Brandcode { get; set; } 20 | 21 | /// Идентификатор производственной линии 22 | [DataMember(Name = "productionLineId", IsRequired = true)] 23 | public string ProductionLineID { get; set; } 24 | 25 | /// Идентификатор производственного заказа 26 | [DataMember(Name = "productionOrderId", IsRequired = false)] 27 | public string ProductionOrderID { get; set; } 28 | 29 | /// Идентификатор отчёта о нанесении АСУТП 30 | [DataMember(Name = "sourceReportId", IsRequired = false)] 31 | public string SourceReportID { get; set; } 32 | 33 | /// The indication of use of ICs in production (Признак использовании КМ на производстве) 34 | [DataMember(Name = "usedInProduction", IsRequired = false)] 35 | public int? UsedInProduction { get; set; } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_4_1_5_UtilisationReport_Water.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.4.1 Метод «Отправить отчёт об использовании (нанесении) КМ» 12 | /// 4.5.4.1.5 Расширения для производителей упакованной воды, Таблица 49. 13 | /// 14 | [DataContract] 15 | public partial class UtilisationReport_Water : UtilisationReport 16 | { 17 | /// The indication of use of ICs in production (Признак использовании КМ на производстве) 18 | [DataMember(Name = "usedInProduction", IsRequired = false)] 19 | public int? UsedInProduction { get; set; } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_4_1_6_UtilisationReport_Ncp.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.4.1 Метод «Отправить отчёт об использовании (нанесении) КМ» 12 | /// 4.5.4.1.6 Расширения для никотиносодержащей продукции, Таблица 50. 13 | /// 14 | [DataContract] 15 | public partial class UtilisationReport_Ncp : UtilisationReport 16 | { 17 | /// Наименование бренда продукции 18 | [DataMember(Name = "brandcode", IsRequired = false)] 19 | public string Brandcode { get; set; } 20 | 21 | /// Идентификатор производственной линии 22 | [DataMember(Name = "productionLineId", IsRequired = true)] 23 | public string ProductionLineID { get; set; } 24 | 25 | /// Идентификатор производственного заказа 26 | [DataMember(Name = "productionOrderId", IsRequired = false)] 27 | public string ProductionOrderID { get; set; } 28 | 29 | /// Идентификатор отчёта о нанесении АСУТП 30 | [DataMember(Name = "sourceReportId", IsRequired = false)] 31 | public string SourceReportID { get; set; } 32 | 33 | /// Production date (Дата производства. Дата указывается с учетом часового пояса. Обозначение даты в соответствии с ГОСТ ИСО 8601–2001) 34 | [DataMember(Name = "productionDate", IsRequired = false)] 35 | public string ProductionDate { get; set; } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_6_2_CodesDto.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.6. Метод «Получить КМ из заказа» 12 | /// 4.5.6.2. Ответ на запрос, Таблица 55. 13 | /// 4.5.15 Метод «Получить повторно коды маркировки из заказа кодов маркировки» 14 | /// 4.5.15.3. Ответ на запрос, Таблица 78. 15 | /// 16 | [DataContract] 17 | public partial class CodesDto 18 | { 19 | /// Identifier of code block (Идентификатор блока кодов) 20 | [DataMember(Name = "blockId", IsRequired = false)] 21 | public string BlockID { get; set; } 22 | 23 | /// Identification Codes (Список КМ) 24 | [DataMember(Name = "codes", IsRequired = false)] 25 | public List Codes { get; set; } 26 | 27 | /// Уникальный идентификатор СУЗ 28 | [DataMember(Name = "omsId", IsRequired = true)] 29 | public string OmsID { get; set; } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_7_2_PoolInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// CIS buffer pool information 12 | /// 4.5.7. Метод «Получить статус массива КМ из заказа» 13 | /// 4.5.7.2. Ответ на запрос, Таблица 58 14 | /// 15 | [DataContract] 16 | public class PoolInfo 17 | { 18 | /// Logical flag that shows if the Emission Registrar is currently ready for orders (Готовность РЭ) 19 | [DataMember(Name = "isRegistrarReady", IsRequired = true)] 20 | public bool IsRegistrarReady { get; set; } 21 | 22 | /// Timestamp when the last Emission Registrar error occurred (Метка времени последней наблюдавшейся ошибки РЭ) 23 | [DataMember(Name = "lastRegistrarErrorTimestamp", IsRequired = true)] 24 | public long LastRegistrarErrorTimestamp { get; set; } 25 | 26 | /// Number of unused ICs in the pool (Оставшеесе кол-во КМ в пуле) 27 | [DataMember(Name = "leftInRegistrar", IsRequired = true)] 28 | public int LeftInRegistrar { get; set; } 29 | 30 | /// Number of ICs ordered in the array (Заказанное кол-во КМ в пуле) 31 | [DataMember(Name = "quantity", IsRequired = true)] 32 | public int Quantity { get; set; } 33 | 34 | /// Number of Emission Registrar errors occurred (Количество ошибок РЭ) 35 | [DataMember(Name = "registrarErrorCount", IsRequired = true)] 36 | public int RegistrarErrorCount { get; set; } 37 | 38 | /// Emission Registrar Identifier (Номер РЭ) 39 | [DataMember(Name = "registrarId", IsRequired = true)] 40 | public string RegistrarID { get; set; } 41 | 42 | /// The IC array rejection reason returned by the Emission Registrar (Причина отказа) 43 | [DataMember(Name = "rejectionReason", IsRequired = false)] 44 | public string RejectionReason { get; set; } 45 | 46 | /// 47 | /// IC array status (Статус пула КМ). Справочное значение «Статус массива КМ». 48 | /// см. раздел 5.3.1.5, . 49 | /// 50 | [DataMember(Name = "status", IsRequired = true)] 51 | public PoolStatuses Status { get; set; } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_8_OrderSummaries.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// Current orders and their statuses. 12 | /// 4.5.8. Метод «Получить статус заказов» 13 | /// 4.5.8.2. Ответ на запрос, Таблица 60. 14 | /// 15 | [DataContract] 16 | public class OrderSummaries 17 | { 18 | [DataMember(Name = "omsId")] 19 | public string OmsID { get; set; } 20 | 21 | [DataMember(Name = "orderInfos")] 22 | public List OrderInfos { get; set; } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_8_OrderSummaryInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Runtime.Serialization; 3 | 4 | namespace FairMark.OmsApi.DataContracts 5 | { 6 | using System; 7 | 8 | /// 9 | /// Current orders and their statuses. 10 | /// 4.5.8. Метод «Получить статус заказов» 11 | /// 4.5.8.2. Ответ на запрос, Таблица 61. 12 | /// 13 | [DataContract] 14 | public class OrderSummaryInfo 15 | { 16 | /// 17 | /// Идентификатор заказа на эмиссию КМ. 18 | /// 19 | [DataMember(Name = "orderId", IsRequired = true)] 20 | public Guid OrderID { get; set; } 21 | 22 | /// 23 | /// Статус заказа. Справочное значение «Статус заказа» 24 | /// см. раздел 5.3.1.10: . 25 | /// 26 | [DataMember(Name = "orderStatus", IsRequired = true)] 27 | public OrderStatuses OrderStatus { get; set; } 28 | 29 | /// 30 | /// Массив информации о статусе буферов. 31 | /// 32 | [DataMember(Name = "buffers", IsRequired = true)] 33 | public List Buffers { get; set; } = new List(); 34 | 35 | /// 36 | /// Время создания заказа. 37 | /// 38 | [DataMember(Name = "createdTimestamp", IsRequired = true)] 39 | public long CreatedTimestamp { get; set; } 40 | 41 | /// 42 | /// Причина отклонения заказа. 43 | /// 44 | [DataMember(Name = "declineReason", IsRequired = false)] 45 | public string DeclineReason { get; set; } 46 | 47 | /// 48 | /// Идентификатор производственного заказа. 49 | /// 50 | [DataMember(Name = "productionOrderId", IsRequired = false)] 51 | public string ProductionOrderId { get; set; } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_9_2_ProductInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.9. Метод «Получить информацию об агрегации» 12 | /// 4.5.9.2. Ответ на запрос, Таблица 64. 13 | /// 14 | [DataContract] 15 | public class ProductInfo 16 | { 17 | [DataMember(Name = "gtin", IsRequired = false)] 18 | public string Gtin { get; set; } 19 | 20 | [DataMember(Name = "name", IsRequired = false)] 21 | public string Name { get; set; } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_9_AggregationInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.9. Метод «Получить информацию об агрегации» 12 | /// 4.5.9.2. Ответ на запрос, Таблица 63. 13 | /// 14 | [DataContract] 15 | public class AggregationInfo 16 | { 17 | /// Aggregation unit (Единица агрегации) 18 | [DataMember(Name = "aggregationUnit", IsRequired = true)] 19 | public AggregationUnit AggregationUnit { get; set; } = new AggregationUnit(); 20 | 21 | /// Уникальный идентификатор СУЗ 22 | [DataMember(Name = "omsId", IsRequired = true)] 23 | public string OmsID { get; set; } 24 | 25 | /// Taxpayer Identification Number (Идентификационный номер налогоплательщика) 26 | [DataMember(Name = "participantId", IsRequired = false)] 27 | public string ParticipantID { get; set; } 28 | 29 | [DataMember(Name = "productsInfo", IsRequired = false)] 30 | public List ProductsInfo { get; set; } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_x_EmptyResult.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.5. Метод «Закрыть подзаказ/заказ» 12 | /// 4.5.11 Метод «Проверить доступность СУЗ» 13 | /// 14 | [DataContract] 15 | internal class EmptyResult 16 | { 17 | [DataMember(Name = "omsId")] 18 | public string OmsID { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/4_5_x_ReportResult.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.Serialization; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace FairMark.OmsApi.DataContracts 9 | { 10 | /// 11 | /// 4.5.2.2. Метод «Отправить отчёт о выбытии/отбраковке КМ», Ответ на запрос Таблица 35. 12 | /// 4.5.4.2. Метод «Отправить отчёт об использовании (нанесении) КМ», Таблица 51. 13 | /// 14 | [DataContract] 15 | internal partial class ReportResult 16 | { 17 | /// Уникальный идентификатор СУЗ 18 | [DataMember(Name = "omsId", IsRequired = true)] 19 | public string OmsID { get; set; } 20 | 21 | /// Unique OMS Report ID (Уникальный идентификатор отчета в СУЗ) 22 | [DataMember(Name = "reportId", IsRequired = false)] 23 | public string ReportID { get; set; } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/5_3_1_10_OrderStatuses.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Linq; 5 | using System.Runtime.Serialization; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | 9 | namespace FairMark.OmsApi.DataContracts 10 | { 11 | /// 12 | /// 5.3.1.10. Справочник «Статус заказа» (orderStatus) 13 | /// 14 | public enum OrderStatuses 15 | { 16 | /// 17 | /// Заказ создан. 18 | /// 19 | [Description("Заказ создан")] 20 | [EnumMember(Value = @"CREATED")] 21 | CREATED = 0, 22 | 23 | /// 24 | /// Заказ ожидает подтверждения ГИС МТ. 25 | /// 26 | [Description("Заказ ожидает подтверждения ГИС МТ")] 27 | [EnumMember(Value = @"PENDING")] 28 | PENDING = 1, 29 | 30 | /// 31 | /// Заказ не подтверждён в ГИС МТ. 32 | /// 33 | [Description("Заказ не подтверждён в ГИС МТ")] 34 | [EnumMember(Value = @"DECLINED")] 35 | DECLINED = 2, 36 | 37 | /// 38 | /// Заказ подтверждён в ГИС МТ. 39 | /// 40 | [Description("Заказ подтверждён в ГИС МТ")] 41 | [EnumMember(Value = @"APPROVED")] 42 | APPROVED = 3, 43 | 44 | /// 45 | /// Заказ готов. 46 | /// 47 | [Description("Заказ готов")] 48 | [EnumMember(Value = @"READY")] 49 | READY = 4, 50 | 51 | /// 52 | /// Заказ закрыт. 53 | /// 54 | [Description("Заказ закрыт")] 55 | [EnumMember(Value = @"CLOSED")] 56 | CLOSED = 5, 57 | 58 | /// 59 | /// Заказ аннулирован (по истечению срока годности не использованных КМ). 60 | /// 61 | [Description("Заказ аннулирован")] 62 | [EnumMember(Value = @"EXPIRED")] 63 | EXPIRED = 6, 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/5_3_1_11_DropoutReasons.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Serialization; 2 | 3 | namespace FairMark.OmsApi.DataContracts 4 | { 5 | /// 6 | /// 5.3.1.11. Справочник «Причина выбытия» (dropoutReason) 7 | /// 8 | public enum DropoutReasons 9 | { 10 | /// 11 | /// Брак. 12 | /// 13 | [EnumMember(Value = @"DEFECT")] 14 | DEFECT = 0, 15 | 16 | /// 17 | /// Истек срок годности. 18 | /// 19 | [EnumMember(Value = @"EXPIRY")] 20 | EXPIRY = 1, 21 | 22 | /// 23 | /// Лабораторные образцы. 24 | /// 25 | [EnumMember(Value = @"QA_SAMPLES")] 26 | QA_SAMPLES = 2, 27 | 28 | /// 29 | /// Отзыв с рынка. 30 | /// 31 | [EnumMember(Value = @"PRODUCT_RECALL")] 32 | PRODUCT_RECALL = 3, 33 | 34 | /// 35 | /// Рекламации. 36 | /// 37 | [EnumMember(Value = @"COMPLAINTS")] 38 | COMPLAINTS = 4, 39 | 40 | /// 41 | /// Тестирование продукта. 42 | /// 43 | [EnumMember(Value = @"PRODUCT_TESTING")] 44 | PRODUCT_TESTING = 5, 45 | 46 | /// 47 | /// Демонстрационные образцы. 48 | /// 49 | [EnumMember(Value = @"DEMO_SAMPLES")] 50 | DEMO_SAMPLES = 6, 51 | 52 | /// 53 | /// Другие причины. 54 | /// 55 | [EnumMember(Value = @"OTHER")] 56 | OTHER = 7, 57 | 58 | /// 59 | /// Утрата товаров. 60 | /// 61 | [EnumMember(Value = @"DAMAGE_LOSS")] 62 | DAMAGE_LOSS = 8, 63 | 64 | /// 65 | /// Уничтожение товаров. 66 | /// 67 | [EnumMember(Value = @"DESTRUCTION")] 68 | DESTRUCTION = 9, 69 | 70 | /// 71 | /// Ликвидация предприятия. 72 | /// 73 | [EnumMember(Value = @"LIQUIDATION")] 74 | LIQUIDATION = 10, 75 | 76 | /// 77 | /// Конфискация товаров. 78 | /// 79 | [EnumMember(Value = @"CONFISCATION")] 80 | CONFISCATION = 11, 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/5_3_1_12_CisTypes.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Runtime.Serialization; 3 | 4 | namespace FairMark.OmsApi.DataContracts 5 | { 6 | /// 7 | /// 5.3.1.12. Справочник «Типы КМ» (cisType) 8 | /// 9 | public enum CisTypes 10 | { 11 | /// 12 | /// Единица товара 13 | /// 14 | [Description("Единица товара")] 15 | [EnumMember(Value = @"UNIT")] 16 | UNIT = 0, 17 | 18 | /// 19 | /// Комплект 20 | /// 21 | [Description("Комплект")] 22 | [EnumMember(Value = @"BUNDLE")] 23 | BUNDLE = 1, 24 | 25 | /// 26 | /// Групповая потребительская упаковка 27 | /// 28 | [Description("Групповая потребительская упаковка")] 29 | [EnumMember(Value = @"GROUP")] 30 | GROUP = 2, 31 | 32 | /// 33 | /// Набор 34 | /// 35 | [Description("Набор")] 36 | [EnumMember(Value = @"SET")] 37 | SET = 3, 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/5_3_1_13_Countries.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.OmsApi.DataContracts 2 | { 3 | /// 4 | /// 5.3.1.13. Справочник «Код страны эмиссии КМ» (используется для templateId=20) 5 | /// 6 | public static class Countries 7 | { 8 | /// 9 | /// Республика Армения 10 | /// 11 | public static int Armenia = 1; 12 | 13 | /// 14 | /// Республика Беларусь 15 | /// 16 | public static int Belarus = 2; 17 | 18 | /// 19 | /// Республика Казахстан 20 | /// 21 | public static int Kazakhstan = 3; 22 | 23 | /// 24 | /// Киргизская республика 25 | /// 26 | public static int Kyrgyzstan = 4; 27 | 28 | /// 29 | /// Российская Федерация 30 | /// 31 | public static int Russia = 5; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/5_3_1_1_ReleaseMethodTypes.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Runtime.Serialization; 3 | 4 | namespace FairMark.OmsApi.DataContracts 5 | { 6 | /// 7 | /// 5.3.1.1. Справочник «Способ выпуска товаров в оборот» (releaseMethodType) 8 | /// 9 | public enum ReleaseMethodTypes 10 | { 11 | /// 12 | /// Производство в РФ 13 | /// 14 | [Description("Производство в РФ")] 15 | [EnumMember(Value = @"PRODUCTION")] 16 | PRODUCTION = 0, 17 | 18 | /// 19 | /// Ввезен в РФ (Импорт) 20 | /// 21 | [Description("Ввезен в РФ (Импорт)")] 22 | [EnumMember(Value = @"IMPORT")] 23 | IMPORT = 1, 24 | 25 | /// 26 | /// Маркировка остатков (доступно только для ТГ «Альтернативная табачная продукция», «Духи и туалетная вода», «Предметы одежды, белье постельное, столовое, туалетное и кухонное») 27 | /// 28 | [Description("Маркировка остатков")] 29 | [EnumMember(Value = @"REMAINS")] 30 | REMAINS = 2, 31 | 32 | /// 33 | /// Доступен исключительно Операторам ЕАЭС для следующих товарных групп («Обувные товары», «Предметы одежды, белье постельное, столовое, туалетное и кухонное», «Шины и покрышки пневматические резиновые новые», «Духи и туалетная вода», «Фотокамеры (кроме кинокамер), фотовспышки и лампы-вспышки») в том числе «Молочная продукция» 34 | /// 35 | [Description("Трансграничная торговля")] 36 | [EnumMember(Value = @"CROSSBORDER")] 37 | CROSSBORDER = 3, 38 | 39 | /// 40 | /// Перемаркировка (доступно только для ТГ «Предметы одежды, белье постельное, столовое, туалетное и кухонное», «Обувные товары», «Шины и покрышки пневматические резиновые новые», «Духи и туалетная вода», «Фотокамеры (кроме кинокамер), фотовспышки и лампывспышки», «Велосипеды и велосипедные рамы», «Кресла-коляски»). 41 | /// 42 | [Description("Перемаркировка")] 43 | [EnumMember(Value = @"REMARK")] 44 | REMARK = 4, 45 | 46 | /// 47 | /// Принят на комиссию от физического лица (доступно для для ТГ «Предметы одежды, белье постельное, столовое, туалетное и кухонное», «Обувные товары») 48 | /// 49 | [Description("Принят на комиссию от физического лица")] 50 | [EnumMember(Value = @"COMMISSION")] 51 | COMMISSION = 5, 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/5_3_1_2_SerialNumberTypes.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Runtime.Serialization; 3 | 4 | namespace FairMark.OmsApi.DataContracts 5 | { 6 | /// 7 | /// 5.3.1.2. Справочник «Способ формирования индивидуального серийного номера» (serialNumberType) 8 | /// 9 | public enum SerialNumberTypes 10 | { 11 | /// 12 | /// Самостоятельно. 13 | /// 14 | [Description("Самостоятельно")] 15 | [EnumMember(Value = @"SELF_MADE")] 16 | SELF_MADE = 0, 17 | 18 | /// 19 | /// Оператором ГИС МТ. 20 | /// 21 | [Description("Оператором ГИС МТ")] 22 | [EnumMember(Value = @"OPERATOR")] 23 | OPERATOR = 1, 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/5_3_1_3_CreateMethodTypes.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Runtime.Serialization; 3 | 4 | namespace FairMark.OmsApi.DataContracts 5 | { 6 | /// 7 | /// 5.3.1.3. Справочник «Способ изготовления» (createMethodType) 8 | /// 9 | public enum CreateMethodTypes 10 | { 11 | /// 12 | /// Самостоятельно. 13 | /// 14 | [Description("Самостоятельно")] 15 | [EnumMember(Value = @"SELF_MADE")] 16 | SELF_MADE = 0, 17 | 18 | /// 19 | /// ЦЭМ. 20 | /// 21 | [Description("ЦЭМ")] 22 | [EnumMember(Value = @"CEM")] 23 | CEM = 1, 24 | 25 | /// 26 | /// Контрактное производство. 27 | /// 28 | [Description("Контрактное производство")] 29 | [EnumMember(Value = @"CM")] 30 | CM = 2, 31 | 32 | /// 33 | /// Логистический склад. 34 | /// 35 | [Description("Логистический склад")] 36 | [EnumMember(Value = @"CL")] 37 | CL = 3, 38 | 39 | /// 40 | /// Комиссионная площадка. 41 | /// 42 | [Description("Комиссионная площадка")] 43 | [EnumMember(Value = @"CA")] 44 | CA = 4, 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/5_3_1_5_PoolStatuses.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Runtime.Serialization; 3 | 4 | namespace FairMark.OmsApi.DataContracts 5 | { 6 | /// 7 | /// 5.3.1.5. Справочник «Статус массива КМ» (status) 8 | /// 9 | public enum PoolStatuses 10 | { 11 | /// 12 | /// Неверный формат запроса. 13 | /// 14 | [Description("Неверный формат запроса")] 15 | [EnumMember(Value = @"REQUEST_ERROR")] 16 | REQUEST_ERROR = 0, 17 | 18 | /// 19 | /// Массив (пул) КМ был запрошен в РЭ. 20 | /// 21 | [Description("Массив (пул) КМ был запрошен в РЭ")] 22 | [EnumMember(Value = @"REQUESTED")] 23 | REQUESTED = 1, 24 | 25 | /// 26 | /// В процессе обработки. 27 | /// 28 | [Description("В процессе обработки")] 29 | [EnumMember(Value = @"IN_PROCESS")] 30 | IN_PROCESS = 2, 31 | 32 | /// 33 | /// Массив (пул) КМ готов к использованию. 34 | /// 35 | [Description("Массив (пул) КМ готов к использованию")] 36 | [EnumMember(Value = @"READY")] 37 | READY = 3, 38 | 39 | /// 40 | /// Все КМ в массиве были использованы полностью. 41 | /// 42 | [Description("Все КМ в массиве были использованы полностью")] 43 | [EnumMember(Value = @"CLOSED")] 44 | CLOSED = 4, 45 | 46 | /// 47 | /// Массив КМ был исчерпан и закрыт. 48 | /// 49 | [Description("Массив КМ был исчерпан и закрыт")] 50 | [EnumMember(Value = @"DELETED")] 51 | DELETED = 5, 52 | 53 | /// 54 | /// Заказ не был выполнен (неверные параметры заказа, 55 | /// например, заказ содержит неуникальные серийные номера). 56 | /// 57 | [Description("Заказ не был выполнен")] 58 | [EnumMember(Value = @"REJECTED")] 59 | REJECTED = 6, 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/5_3_1_6_AggregationTypes.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Runtime.Serialization; 3 | 4 | namespace FairMark.OmsApi.DataContracts 5 | { 6 | /// 7 | /// 5.3.1.6. Справочник «Тип агрегации» (aggregationType) 8 | /// 9 | public enum AggregationTypes 10 | { 11 | /// 12 | /// Новая агрегация. 13 | /// 14 | [Description("Новая агрегация")] 15 | [EnumMember(Value = @"AGGREGATION")] 16 | AGGREGATION = 0, 17 | 18 | /// 19 | /// Обновление существующей агрегации. 20 | /// 21 | /// 22 | /// Примечание: выбор данного значения означает 23 | /// переупаковку (к указанному коду агрегата будут 24 | /// относиться только переданные в рамках текущего 25 | /// запроса коды маркировки). 26 | /// Значение UPDATE считается уставревшим (не 27 | /// рекомендуется использовать и не исключается для 28 | /// совместимости старых версий), для обновления 29 | /// существующей агрегации, рекомендуется 30 | /// использовать значение AGGREGATION. 31 | /// 32 | [Description("Обновление существующей агрегации")] 33 | [EnumMember(Value = @"UPDATE")] 34 | UPDATE = 1, 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/5_3_1_7_BufferStatuses.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Runtime.Serialization; 3 | 4 | namespace FairMark.OmsApi.DataContracts 5 | { 6 | /// 7 | /// 5.3.1.7. Справочник «Статус буфера КМ» (bufferStatus) 8 | /// 9 | public enum BufferStatuses 10 | { 11 | /// 12 | /// Буфер КМ находится в ожидании. 13 | /// 14 | [Description("Буфер КМ находится в ожидании")] 15 | [EnumMember(Value = @"PENDING")] 16 | PENDING = 0, 17 | 18 | /// 19 | /// Буфер создан. 20 | /// 21 | [Description("Буфер создан")] 22 | [EnumMember(Value = @"ACTIVE")] 23 | ACTIVE = 1, 24 | 25 | /// 26 | /// Буфер и пулы РЭ не содержат больше кодов. 27 | /// 28 | [Description("Буфер и пулы РЭ не содержат больше кодов")] 29 | [EnumMember(Value = @"EXHAUSTED")] 30 | EXHAUSTED = 2, 31 | 32 | /// 33 | /// Буфер более не доступен для работы. 34 | /// 35 | [Description("Буфер более не доступен для работы")] 36 | [EnumMember(Value = @"REJECTED")] 37 | REJECTED = 3, 38 | 39 | /// 40 | /// Буфер закрыт. 41 | /// 42 | [Description("Буфер закрыт")] 43 | [EnumMember(Value = @"CLOSED")] 44 | CLOSED = 4, 45 | 46 | /// 47 | /// Буфер аннулирован (по истечению срока годности не использованных КМ). 48 | /// 49 | [Description("Буфер аннулирован")] 50 | [EnumMember(Value = @"EXPIRED")] 51 | EXPIRED = 5, 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/5_3_1_8_ReportStatuses.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Runtime.Serialization; 3 | 4 | namespace FairMark.OmsApi.DataContracts 5 | { 6 | /// 7 | /// 5.3.1.8. Справочник «Статус обработки отчета» (reportStatus) 8 | /// 9 | /// 10 | /// Примечание: Статус «Отчет обработан» PROCESSED используется только для 11 | /// отчетов об использовании (нанесении) КМ. 12 | /// 13 | public enum ReportStatuses 14 | { 15 | /// 16 | /// Отчет получен СУЗ (Устаревший, не используется). 17 | /// 18 | [Description("Отчет получен СУЗ")] 19 | [EnumMember(Value = @"DRAFT")] 20 | DRAFT = 0, 21 | 22 | /// 23 | /// Отчет находится в ожидании. 24 | /// 25 | [Description("Отчет находится в ожидании")] 26 | [EnumMember(Value = @"PENDING")] 27 | PENDING = 1, 28 | 29 | /// 30 | /// Выполняется проверка метаданных отчёта 31 | /// (применимо к товарной группе «Лекарственные 32 | /// препараты для медицинского применения»). 33 | /// 34 | [Description("Выполняется проверка метаданных отчёта")] 35 | [EnumMember(Value = @"CHECK")] 36 | CHECK = 2, 37 | 38 | /// 39 | /// Отчет готов к отправке в РЭ. 40 | /// 41 | [Description("Отчет готов к отправке в РЭ")] 42 | [EnumMember(Value = @"READY_TO_SEND")] 43 | READY_TO_SEND = 3, 44 | 45 | /// 46 | /// Отчет отклонен. 47 | /// 48 | [Description("Отчет отклонен")] 49 | [EnumMember(Value = @"REJECTED")] 50 | REJECTED = 4, 51 | 52 | /// 53 | /// Отчет отправлен. 54 | /// 55 | [Description("Отчет отправлен")] 56 | [EnumMember(Value = @"SENT")] 57 | SENT = 5, 58 | 59 | /// 60 | /// Отчет обработан. 61 | /// 62 | [Description("Отчет обработан")] 63 | [EnumMember(Value = @"PROCESSED")] 64 | PROCESSED = 6, 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /FairMark/OmsApi/DataContracts/5_3_1_9_UsageType.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel; 2 | using System.Runtime.Serialization; 3 | 4 | namespace FairMark.OmsApi.DataContracts 5 | { 6 | /// 7 | /// 5.3.1.9. Справочник «Тип использования» (usageType) 8 | /// 9 | /// 10 | /// Примечание*: значения справочника «USED_FOR_PRODUCTION», 11 | /// «SENT_TO_PRINTER» и «PRINTER_LOST» в настоящее время не используются 12 | /// (отмечены как устаревшие) и впоследствии будут исключены из справочника 13 | /// 14 | public enum UsageTypes 15 | { 16 | /// 17 | /// КМ был передан на производственную линию (данное значение не используется)*. 18 | /// 19 | [Description("КМ был передан на производственную линию")] 20 | [EnumMember(Value = @"USED_FOR_PRODUCTION")] 21 | USED_FOR_PRODUCTION = 0, 22 | 23 | /// 24 | /// Производственная линия отправила КМ на принтер (данное значение не используется)*. 25 | /// 26 | [Description("Производственная линия отправила КМ на принтер")] 27 | [EnumMember(Value = @"SENT_TO_PRINTER")] 28 | SENT_TO_PRINTER = 1, 29 | 30 | /// 31 | /// КМ был напечатан. 32 | /// 33 | [Description("КМ был напечатан")] 34 | [EnumMember(Value = @"PRINTED")] 35 | PRINTED = 2, 36 | 37 | /// 38 | /// Подтверждённая потеря КМ принтером (данное значение не используется)*. 39 | /// 40 | [Description("Подтверждённая потеря КМ принтером")] 41 | [EnumMember(Value = @"PRINTER_LOST")] 42 | PRINTER_LOST = 3, 43 | 44 | /// 45 | /// Нанесение КМ подтверждено. 46 | /// 47 | [Description("Нанесение КМ подтверждено")] 48 | [EnumMember(Value = @"VERIFIED")] 49 | VERIFIED = 4, 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /FairMark/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("FairMark.Tests")] 4 | 5 | -------------------------------------------------------------------------------- /FairMark/Toolbox/HtmlHelper.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.Toolbox 2 | { 3 | using System; 4 | using System.Linq; 5 | using System.Text.RegularExpressions; 6 | 7 | internal static class HtmlHelper 8 | { 9 | /// 10 | /// Try to extract readable text from HTML. 11 | /// 12 | /// HTML to process. 13 | /// Human-readable text. 14 | public static string ExtractText(string html) 15 | { 16 | if (string.IsNullOrWhiteSpace(html)) 17 | { 18 | return string.Empty; 19 | } 20 | 21 | var bodyStart = html.IndexOf("= 0) 23 | { 24 | html = html.Substring(bodyStart); 25 | } 26 | 27 | // replace tags 28 | var text = new Regex("<(br/?)|(").Replace(html, Environment.NewLine); 29 | text = new Regex("<[^>]+>").Replace(text, " "); 30 | text = new Regex("[ \t]+").Replace(text, " "); 31 | 32 | // trim lines 33 | var lines = text.Split('\r').Select(l => l.Trim()).Where(l => !string.IsNullOrEmpty(l)); 34 | return string.Join(Environment.NewLine, lines); 35 | } 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /FairMark/Toolbox/JsonFormatter.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.Toolbox 2 | { 3 | using System; 4 | using System.Linq; 5 | 6 | /// 7 | /// Dependency-free JSON formatter. 8 | /// 9 | internal static class JsonFormatter 10 | { 11 | /// 12 | /// Formats the given JSON code. 13 | /// 14 | /// 15 | /// Based on: 16 | /// https://stackoverflow.com/a/57100143/544641 17 | /// https://stackoverflow.com/a/24782322/544641 18 | /// 19 | /// JSON code to format. 20 | /// Optional indent. 21 | public static string FormatJson(string json, string indent = " ") 22 | { 23 | var indentation = 0; 24 | var quoteCount = 0; 25 | var escapeCount = 0; 26 | 27 | var result = 28 | from ch in json ?? string.Empty 29 | let escaped = (ch == '\\' ? escapeCount++ : escapeCount > 0 ? escapeCount-- : escapeCount) > 0 30 | let quotes = ch == '"' && !escaped ? quoteCount++ : quoteCount 31 | let unquoted = quotes % 2 == 0 32 | let colon = ch == ':' && unquoted ? ": " : null 33 | let nospace = char.IsWhiteSpace(ch) && unquoted ? string.Empty : null 34 | let lineBreak = ch == ',' && unquoted ? ch + Environment.NewLine + string.Concat(Enumerable.Repeat(indent, indentation)) : null 35 | let openChar = (ch == '{' || ch == '[') && unquoted ? ch + Environment.NewLine + string.Concat(Enumerable.Repeat(indent, ++indentation)) : ch.ToString() 36 | let closeChar = (ch == '}' || ch == ']') && unquoted ? Environment.NewLine + string.Concat(Enumerable.Repeat(indent, --indentation)) + ch : ch.ToString() 37 | select colon ?? nospace ?? lineBreak ?? ( 38 | openChar.Length > 1 ? openChar : closeChar 39 | ); 40 | 41 | return string.Concat(result); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /FairMark/Toolbox/StringExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace FairMark.Toolbox 8 | { 9 | internal static class StringExtensions 10 | { 11 | /// 12 | /// Appends the given suffix if it's missing. 13 | /// 14 | /// The string to append to. 15 | /// The suffix. 16 | /// Optional comparison type. 17 | public static string AppendMissing(this string str, string suffix, StringComparison comparison = StringComparison.InvariantCulture) 18 | { 19 | if (str.EndsWith(suffix, comparison)) 20 | { 21 | return str; 22 | } 23 | 24 | return str + suffix; 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/3_1_1_BankDetails.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Serialization; 2 | 3 | namespace FairMark.TrueApi.DataContracts 4 | { 5 | /// 6 | /// Банковские реквизиты. 7 | /// 3.1.1. Метод создания заявки на регистрацию УОТ 8 | /// 9 | [DataContract(Name="bank_details")] 10 | public class BankDetails 11 | { 12 | [DataMember(Name = "bic")] 13 | public string Bic { get; set; } 14 | 15 | [DataMember(Name = "account")] 16 | public string Account { get; set; } 17 | 18 | [DataMember(Name = "sf_required")] 19 | public bool SfRequired { get; set; } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/3_1_1_EdoOperator.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Serialization; 2 | 3 | namespace FairMark.TrueApi.DataContracts 4 | { 5 | /// 6 | /// Оператор электронного документооборота. 7 | /// 3.1.1. Метод создания заявки на регистрацию УОТ 8 | /// 9 | [DataContract(Name = "edo_operators")] 10 | public partial class EdoOperator 11 | { 12 | [DataMember(Name = "edo_operator_name")] 13 | public string EdoOperatorName { get; set; } 14 | 15 | [DataMember(Name = "edo_participant_id")] 16 | public string EdoParticipantId { get; set; } 17 | 18 | [DataMember(Name = "is_main_operator")] 19 | public bool IsMainOperator { get; set; } 20 | } 21 | } -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/3_1_1_Organization.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Serialization; 2 | 3 | namespace FairMark.TrueApi.DataContracts 4 | { 5 | /// 6 | /// Организация. 7 | /// 3.1.1. Метод создания заявки на регистрацию УОТ 8 | /// 9 | [DataContract(Name = "organisation")] 10 | public class Organization 11 | { 12 | [DataMember(Name = "inn")] 13 | public string Inn { get; set; } 14 | 15 | [DataMember(Name = "ogrn")] 16 | public string Ogrn { get; set; } 17 | 18 | [DataMember(Name = "organisation_name")] 19 | public string OrganizationName { get; set; } 20 | 21 | [DataMember(Name = "email")] 22 | public string Email { get; set; } 23 | 24 | [DataMember(Name = "ifns")] 25 | public string Ifns { get; set; } 26 | 27 | [DataMember(Name = "phone")] 28 | public string Phone { get; set; } 29 | 30 | [DataMember(Name = "kpp")] 31 | public string Kpp { get; set; } 32 | 33 | [DataMember(Name = "address")] 34 | public string Address { get; set; } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/3_1_1_ProductDocument.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Serialization; 2 | 3 | namespace FairMark.TrueApi.DataContracts 4 | { 5 | /// 6 | /// Заявка на регистрацию. 7 | /// 3.1.1. Метод создания заявки на регистрацию УОТ 8 | /// 9 | [DataContract(Name = "product_document")] 10 | public class ProductDocument 11 | { 12 | [DataMember(Name = "organisation")] 13 | public Organization Organization { get; set; } 14 | 15 | [DataMember(Name = "bank_details")] 16 | public BankDetails BankDetails { get; set; } 17 | 18 | [DataMember(Name = "product_group")] 19 | public ProductGroup[] ProductGroups { get; set; } 20 | 21 | [DataMember(Name = "user")] 22 | public User User { get; set; } 23 | 24 | [DataMember(Name = "edo_operators")] 25 | public EdoOperator[] EdoOperators; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/3_1_1_ProductGroup.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Serialization; 2 | 3 | namespace FairMark.TrueApi.DataContracts 4 | { 5 | /// 6 | /// Товарная группа. 7 | /// 3.1.1. Метод создания заявки на регистрацию УОТ 8 | /// 9 | [DataContract(Name = "product_group")] 10 | public class ProductGroup 11 | { 12 | [DataMember(Name = "code")] 13 | public string Code { get; set; } 14 | 15 | [DataMember(Name = "types")] 16 | public string[] Types { get; set; } 17 | } 18 | } -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/3_1_1_Registration.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Serialization; 2 | 3 | namespace FairMark.TrueApi.DataContracts 4 | { 5 | /// 6 | /// Заявка на регистрацию УОТ. 7 | /// 3.1.1. Метод создания заявки на регистрацию УОТ 8 | /// 9 | [DataContract(Name="registration")] 10 | public class Registration 11 | { 12 | public const string DocumentFormatXml = "XML"; 13 | public const string DocumentFormatManual = "MANUAL"; 14 | public const string DocumentFormatJson = DocumentFormatManual; 15 | 16 | [DataMember(Name = "document_format")] 17 | public string DocumentFormat { get; set; } 18 | 19 | /// 20 | /// Base64-encoded instance of the class. 21 | /// 22 | [DataMember(Name = "product_document")] 23 | public string ProductDocument { get; set; } 24 | 25 | /// 26 | /// Detached signature of the original instance. 27 | /// 28 | [DataMember(Name = "signature")] 29 | public string Signature { get; set; } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/3_1_1_RegistrationResponse.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Serialization; 2 | 3 | namespace FairMark.TrueApi.DataContracts 4 | { 5 | /// 6 | /// Ответ на заявку на регистрацию УОТ. 7 | /// 3.1.1. Метод создания заявки на регистрацию УОТ 8 | /// 9 | [DataContract(Name="registration_response")] 10 | internal class RegistrationResponse 11 | { 12 | [DataMember(Name = "registrationRequestDocId")] 13 | public string RegistrationRequestDocID { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/3_1_1_User.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Serialization; 2 | 3 | namespace FairMark.TrueApi.DataContracts 4 | { 5 | /// 6 | /// Пользователь с усиленной электронной подписью. 7 | /// 3.1.1. Метод создания заявки на регистрацию УОТ 8 | /// 9 | [DataContract(Name = "user")] 10 | public class User 11 | { 12 | [DataMember(Name = "name")] 13 | public string FirstName { get; set; } 14 | 15 | [DataMember(Name = "last_name")] 16 | public string LastName { get; set; } 17 | 18 | [DataMember(Name = "finger_print")] 19 | public string Fingerprint { get; set; } 20 | } 21 | } -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/3_1_2_RegistrationStatusError.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Serialization; 2 | 3 | namespace FairMark.TrueApi.DataContracts 4 | { 5 | /// 6 | /// Сообщение об ошибке регистрации. 7 | /// 3.1.2. Метод проверки статуса заявки УОТ на регистрацию по ID заявки 8 | /// 9 | [DataContract] 10 | public class RegistrationStatusError 11 | { 12 | [DataMember(Name = "message")] 13 | public string Message { get; set; } 14 | 15 | [DataMember(Name = "internalError")] 16 | public string InternalError { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/3_1_2_RegistrationStatusResponse.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Serialization; 2 | 3 | namespace FairMark.TrueApi.DataContracts 4 | { 5 | /// 6 | /// Результат обработки заявки на регистрацию. 7 | /// 3.1.2. Метод проверки статуса заявки УОТ на регистрацию по ID заявки 8 | /// 9 | [DataContract] 10 | public class RegistrationStatusResponse 11 | { 12 | [DataMember(Name = "registrationRequestStatus")] 13 | public string RegistrationRequestStatus { get; set; } 14 | 15 | [DataMember(Name = "documentType")] 16 | public string DocumentType { get; set; } 17 | 18 | [DataMember(Name = "errors")] 19 | public RegistrationStatusError[] Errors { get; set; } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/3_4_Balance.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Serialization; 2 | 3 | namespace FairMark.TrueApi.DataContracts 4 | { 5 | [DataContract] 6 | public class ProductGroupBalance 7 | { 8 | [DataMember(Name = "balance")] 9 | public long? Balance { get; set; } 10 | 11 | [DataMember(Name = "contractId")] 12 | public long? ContractId { get; set; } 13 | 14 | [DataMember(Name = "organisationId")] 15 | public long OrganisationId { get; set; } 16 | 17 | [DataMember(Name = "productGroupId")] 18 | public long ProductGroupID { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/4_1_UniformDocument.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.TrueApi.DataContracts 2 | { 3 | using System.Runtime.Serialization; 4 | 5 | public interface IUniformDocumentBase 6 | { 7 | /// 8 | /// Document name according to TrueApi uniform documents list (see attachment 1) 9 | /// 10 | string DocumentApiName { get; } 11 | /// 12 | /// TrueApi Product group 13 | /// 14 | ProductGroupsTrueApi ProductGroup { get; set; } 15 | 16 | } 17 | /// 18 | /// Uniform document used in TrueApi chapter 4 19 | /// 20 | [DataContract] 21 | public class UniformDocument 22 | { 23 | /// 24 | /// Document format. Only "MANUAL"(JSON) format is supported 25 | /// 26 | [DataMember(Name = "document_format")] public string DocumentFormat { get; private set; } = "MANUAL";//TODO Сделать справочником? На данный момент поддерживаем только JSON, поэтому может вообще захордкоидть? 27 | 28 | /// 29 | /// Base64-encoded instance of the class. 30 | /// 31 | [DataMember(Name = "product_document")] 32 | public string DocumentBase64 { get; set; } 33 | 34 | /// 35 | /// Detached signature of the original instance. 36 | /// 37 | [DataMember(Name = "signature")] 38 | public string Signature { get; set; } 39 | 40 | /// 41 | /// Код типа документа 42 | /// 43 | [DataMember(Name = "type")] 44 | public string Type { get; set; } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/4_2_1_1_AggregationDocument.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.TrueApi.DataContracts 2 | { 3 | using System.Collections.Generic; 4 | using System.Runtime.Serialization; 5 | 6 | /// 7 | /// 4.2.1.1. Агрегация 8 | /// 9 | [DataContract] 10 | public class AggregationDocument : IUniformDocumentBase 11 | { 12 | public string DocumentApiName { get; } = "AGGREGATION_DOCUMENT"; 13 | public ProductGroupsTrueApi ProductGroup { get; set; } = ProductGroupsTrueApi.milk; 14 | 15 | /// 16 | /// ИНН участника оборота товаров 17 | /// 18 | [DataMember(Name = "participantId")] 19 | public string ParticipantInn { get; set; } 20 | 21 | /// 22 | /// Список формируемых агрегатов 23 | /// 24 | [DataMember(Name = "aggregationUnits")] 25 | public List AggregationUnits { get; set; } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/4_2_1_1_AggregationUnit.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.TrueApi.DataContracts 2 | { 3 | using System.Collections.Generic; 4 | using System.Runtime.Serialization; 5 | 6 | [DataContract] 7 | public class AggregationUnit 8 | { 9 | /// 10 | /// Код идентификации агрегата 11 | /// Примечание: КИ может содержать от 18 до 74 символов включительно: цифры, буквы латинского алфавита, спецсимволы(A-Z a-z 0-9 % & ' " ( ) * + , - _ . / : ; < = > ? !) 12 | /// 13 | [DataMember(Name = "unitSerialNumber")] 14 | public string UnitSerialNumber { get; set; } 15 | 16 | /// 17 | /// Код типа агрегации 18 | /// Примечание: Значение может быть только "AGGREGATION" 19 | /// 20 | [DataMember(Name = "aggregationType")] 21 | public string AggregationType { get; set; } = "AGGREGATION"; 22 | 23 | /// 24 | /// Список КИ, входящих в агрегат 25 | /// Примечание: Статусы КИ, входящих в агрегат, должны быть идентичны 26 | /// 27 | [DataMember(Name = "sntins")] 28 | public List Sntins { get; set; } 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/4_2_1_3_DisaggregationUnit.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.TrueApi.DataContracts 2 | { 3 | using System.Collections.Generic; 4 | using System.Runtime.Serialization; 5 | 6 | [DataContract] 7 | public class DisaggregationUnit 8 | { 9 | /// 10 | /// Код расформировываемого агрегата 11 | /// Примечание: Указание КИН в данном поле недопустимо 12 | /// 13 | [DataMember(Name = "uitu")] 14 | public string Uitu { get; set; } 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/4_2_2_3_DisaggregationDocument.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.TrueApi.DataContracts 2 | { 3 | using System.Collections.Generic; 4 | using System.Runtime.Serialization; 5 | 6 | /// 7 | /// 4.2.1.3. Расформирование агрегата 8 | /// 9 | [DataContract] 10 | public class DisaggregationDocument : IUniformDocumentBase 11 | { 12 | public string DocumentApiName { get; } = "DISAGGREGATION_DOCUMENT"; 13 | public ProductGroupsTrueApi ProductGroup { get; set; } = ProductGroupsTrueApi.milk; 14 | 15 | /// 16 | /// ИНН участника оборота товаров 17 | /// 18 | [DataMember(Name = "participant_inn")] 19 | public string ParticipantInn { get; set; } 20 | 21 | /// 22 | /// Список расформируемых агрегатов 23 | /// 24 | [DataMember(Name = "products_list")] 25 | public List DisaggregationUnits { get; set; } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/4_2_5_1_IntroduceGoodsDocumentRF.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace FairMark.TrueApi.DataContracts 8 | { 9 | using System.Runtime.Serialization; 10 | 11 | /// 12 | /// 4.2.5.1. Ввод в оборот 13 | /// 14 | [DataContract] 15 | public class IntroduceGoodsDocumentRF : IUniformDocumentBase 16 | { 17 | public string DocumentApiName { get; } = "LP_INTRODUCE_GOODS"; 18 | public ProductGroupsTrueApi ProductGroup { get; set; } 19 | 20 | /// 21 | /// ИНН участника, осуществившего эмиссию КИ 22 | /// 23 | [DataMember(Name = "participant_inn")] 24 | public string ParticipantInn { get; set; } 25 | 26 | /// 27 | /// Дата производства товара. 28 | /// Задаётся в формате yyyy-MM-dd. Диапазон допустимых значений: от даты создания документа минус пять лет по дату создания документа. 29 | /// Диапазон допустимых значений: от даты создания документа минус пять лет по дату создания документа. 30 | /// Параметр является обязательным, если "production_date" ("Дата производства товара") не указан в массиве ("Массив, содержащий список передаваемых кодов товаров") 31 | [DataMember(Name = "production_date")] 32 | public string ProductionDate { get; set; } 33 | 34 | /// 35 | /// ИНН производителя товара 36 | /// 37 | [DataMember(Name = "producer_inn")] 38 | public string ProducerInn { get; set; } 39 | 40 | /// 41 | /// ИНН собственника товара 42 | /// 43 | [DataMember(Name = "owner_inn")] 44 | public string OwnerInn { get; set; } 45 | 46 | /// 47 | /// Тип производственного заказа 48 | /// Возможные значения: OWN_PRODUCTION – Собственное производство 49 | /// 50 | [DataMember(Name = "production_type")] 51 | public string ProductionType { get; } = "OWN_PRODUCTION";//According to documentation only one value can be - OWN_PRODUCTION 52 | 53 | /// 54 | /// Перечень товаров 55 | /// 56 | [DataMember(Name = "products")] 57 | public List Products { get; set; } 58 | } 59 | 60 | } 61 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/5_4_2_GetParticipantGtinsReponse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace FairMark.TrueApi.DataContracts 8 | { 9 | using System.Runtime.Serialization; 10 | 11 | /// 12 | /// Ответ на 5.4.2. Метод получения списка кодов товаров (GTIN) УОТ по ИНН 13 | /// Примечание: Ответ, получаемый в реальности, не соответствует документации! 14 | /// 15 | [DataContract] 16 | public class GetParticipantGtinsReponse 17 | { 18 | /// 19 | /// Сколько всего кодов 20 | /// 21 | [DataMember(Name = "total")] 22 | public int Total { get; set; } 23 | 24 | /// 25 | /// Список Gtin`ов 26 | /// 27 | [DataMember(Name = "gtins")] 28 | public List Gtins { get; set; } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/DocumentStatuses.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.Serialization; 2 | 3 | namespace FairMark.TrueApi.DataContracts 4 | { 5 | /// 6 | /// Справочник TrueApi "Статусы документов" 7 | /// 8 | [DataContract] 9 | public enum DocumentStatuses 10 | { 11 | /// 12 | /// Проверяется 13 | /// 14 | [EnumMember(Value = @"IN_PROGRESS")] 15 | IN_PROGRESS = 0, 16 | 17 | /// 18 | /// Обработан 19 | /// 20 | [EnumMember(Value = @"CHECKED_OK")] 21 | CHECKED_OK = 1, 22 | 23 | /// 24 | /// Обработан с ошибками 25 | /// 26 | [EnumMember(Value = @"CHECKED_NOT_OK")] 27 | CHECKED_NOT_OK = 2, 28 | 29 | /// 30 | /// Техническая ошибка 31 | /// 32 | [EnumMember(Value = @"PROCESSING_ERROR")] 33 | PROCESSING_ERROR = 3, 34 | 35 | /// 36 | /// Принят 37 | /// Примечание: Только для документа "Отгрузка" 38 | /// 39 | [EnumMember(Value = @"ACCEPTED")] 40 | ACCEPTED = 4, 41 | 42 | /// 43 | /// Аннулирован 44 | /// Примечание: Только для документа "Отгрузка" и документов ЭДО 45 | /// 46 | [EnumMember(Value = @"CANCELLED")] 47 | CANCELLED = 5, 48 | 49 | /// 50 | /// Ожидает приемку 51 | /// Примечание: Только для документа "Отгрузка". Устанавливается при успешной обработке документа "Отгрузка" 52 | /// 53 | [EnumMember(Value = @"WAIT_ACCEPTANCE")] 54 | WAIT_ACCEPTANCE = 6, 55 | 56 | /// 57 | /// Обработан с ошибками 58 | /// 59 | [EnumMember(Value = @"PARSE_ERROR")] 60 | PARSE_ERROR = 7, 61 | 62 | /// 63 | /// Ожидает регистрации участника в ГИС МТ 64 | /// Примечание: Только для документа "Отгрузка". Устанавливается при успешной обработке документа "Отгрузка товара" в сторону незарегистрированного участника 65 | /// 66 | [EnumMember(Value = @"WAIT_PARTICIPANT_REGISTRATION")] 67 | WAIT_PARTICIPANT_REGISTRATION = 8, 68 | 69 | /// 70 | /// Ожидает продолжения обработки документа 71 | /// 72 | [EnumMember(Value = @"WAIT_FOR_CONTINUATION")] 73 | WAIT_FOR_CONTINUATION = 9 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /FairMark/TrueApi/DataContracts/ProductGroupsTrueApi.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.TrueApi.DataContracts 2 | { 3 | using System.Runtime.Serialization; 4 | 5 | [DataContract] 6 | public enum ProductGroupsTrueApi 7 | { 8 | /// 9 | ///Предметы одежды, бельё постельное, столовое, туалетное и кухонное 10 | /// 11 | [EnumMember(Value = @"lp")] 12 | lp = 1, 13 | /// 14 | /// Обувные товары 15 | /// 16 | [EnumMember(Value = @"shoes")] 17 | shoes = 2, 18 | /// 19 | /// Табачная продукция 20 | /// 21 | [EnumMember(Value = @"tobacco")] 22 | tobacco = 3, 23 | /// 24 | /// Духи и туалетная вода 25 | /// 26 | [EnumMember(Value = @"perfumery")] 27 | perfumery = 4, 28 | /// 29 | /// Шины и покрышки пневматические резиновые новые 30 | /// 31 | [EnumMember(Value = @"tires")] 32 | tires = 5, 33 | /// 34 | /// Фотокамеры (кроме кинокамер), фотовспышки и лампы-вспышки 35 | /// 36 | [EnumMember(Value = @"electronics")] 37 | electronics = 6, 38 | /// 39 | /// Молочная продукция 40 | /// 41 | [EnumMember(Value = @"milk")] 42 | milk = 8, 43 | /// 44 | /// Велосипеды и велосипедные рамы 45 | /// 46 | [EnumMember(Value = @"bicycle")] 47 | bicycle = 9, 48 | /// 49 | /// Кресла-коляски 50 | /// 51 | [EnumMember(Value = @"wheelchairs")] 52 | wheelchairs = 10, 53 | /// 54 | /// Альтернативная табачная продукция 55 | /// 56 | [EnumMember(Value = @"otp")] 57 | otp = 12, 58 | /// 59 | /// Упакованная вода 60 | /// 61 | [EnumMember(Value = @"water")] 62 | water = 13, 63 | /// 64 | /// Товары из натурального меха 65 | /// 66 | [EnumMember(Value = @"furs")] 67 | furs = 14, 68 | /// 69 | /// Пиво, напитки, изготавливаемые на основе пива, слабоалкогольные напитки 70 | /// 71 | [EnumMember(Value = @"beer")] 72 | beer = 15, 73 | /// 74 | /// Никотиносодержащая продукция 75 | /// 76 | [EnumMember(Value = @"ncp")] 77 | ncp = 16, 78 | /// 79 | /// Биологические активные добавки к пище 80 | /// 81 | [EnumMember(Value = @"bio")] 82 | bio = 17 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /FairMark/TrueApi/TrueApiClient.Chapter3.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.TrueApi 2 | { 3 | using System; 4 | using System.Text; 5 | using DataContracts; 6 | using RestSharp; 7 | using Toolbox; 8 | 9 | public partial class TrueApiClient 10 | { 11 | /// 12 | /// 3.1.1. Метод создания заявки на регистрацию УОТ 13 | /// 14 | public string Register(ProductDocument organizationInfo) 15 | { 16 | var json = Serializer.Serialize(organizationInfo); 17 | var signature = GostCryptoHelpers.ComputeDetachedSignature(UserCertificate, json); 18 | var jsonBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(json)); 19 | var response = Post("/elk/registration", new Registration 20 | { 21 | DocumentFormat = Registration.DocumentFormatJson, 22 | ProductDocument = jsonBase64, 23 | Signature = signature, 24 | }); 25 | 26 | return response.RegistrationRequestDocID; 27 | } 28 | 29 | /// 30 | /// 3.1.2. Метод проверки статуса заявки УОТ на регистрацию по ID заявки 31 | /// 32 | public RegistrationStatusResponse GetRegistrationStatus(int registrationDocId) 33 | { 34 | return Get("/elk/documents/status/{documentId}", new[] 35 | { 36 | new Parameter("documentId", registrationDocId, ParameterType.UrlSegment), 37 | }); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /FairMark/TrueApi/TrueApiClient.Chapter4.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.TrueApi 2 | { 3 | using System; 4 | using System.Text; 5 | using DataContracts; 6 | using RestSharp; 7 | using Toolbox; 8 | 9 | public partial class TrueApiClient 10 | { 11 | public UniformDocument PrepareUniformDocument(IUniformDocumentBase document) 12 | { 13 | var Serializer = new ServiceStackSerializer(); 14 | var json = Serializer.Serialize(document); 15 | var signature = GostCryptoHelpers.ComputeDetachedSignature(UserCertificate, json); 16 | var jsonBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(json)); 17 | Tracer.Invoke("Кодирование универсального документа в DocumentBase64", new[] { json }); 18 | return new UniformDocument() { DocumentBase64 = jsonBase64, Signature = signature, Type = document.DocumentApiName }; 19 | } 20 | 21 | /// 22 | /// 4.1. Send unified document method 23 | /// 24 | public string SendUniformDocument(IUniformDocumentBase document) 25 | { 26 | var response = Post("/lk/documents/create", 27 | PrepareUniformDocument(document), 28 | new Parameter[] { new RestSharp.Parameter("pg", document.ProductGroup, ParameterType.QueryString) }); 29 | 30 | return response; 31 | } 32 | 33 | 34 | /// 35 | /// 4.2.2.1 Аггрегация 36 | /// 37 | [Obsolete("Use SendUniformDocument() method for sending AggregationDocument")] 38 | public string Aggregation(AggregationDocument Document) 39 | { 40 | var json = Serializer.Serialize(Document); 41 | var signature = GostCryptoHelpers.ComputeDetachedSignature(UserCertificate, json); 42 | var jsonBase64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(json)); 43 | var response = Post("/lk/documents/create", new UniformDocument() 44 | { 45 | DocumentBase64 = jsonBase64, 46 | Signature = signature, 47 | Type = "AGGREGATION_DOCUMENT" 48 | }, 49 | new Parameter[] { new RestSharp.Parameter("pg", "milk", ParameterType.QueryString) }); 50 | 51 | return response; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /FairMark/TrueApi/TrueApiClient.Chapter6.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.TrueApi 2 | { 3 | using System; 4 | using DataContracts; 5 | using RestSharp; 6 | 7 | public partial class TrueApiClient 8 | { 9 | /// 10 | /// 6.4. Метод получения содержимого документа по идентификатору 11 | /// 12 | /// ID документа, формируемый в ГИС МТ 13 | /// Значение устанавливает количество записей в ответе(не более 10 000 записей, по умолчанию 10 записей) 14 | /// Примечание: При указании данного параметра необходимо указать товарную группу 15 | /// Товарная групп 16 | /// Примечание: Параметр обязательный для товарных групп: milk – Молочная продукция; water – Упакованная вода 17 | /// 18 | public DocumentInfo GetDocumentInfo(Guid docId, int limit, ProductGroupsTrueApi productGroup) 19 | { 20 | return GetDocumentInfo(docId.ToString(), limit, productGroup); 21 | } 22 | 23 | /// 24 | /// 6.4. Метод получения содержимого документа по идентификатору 25 | /// 26 | /// ID документа, формируемый в ГИС МТ 27 | /// Значение устанавливает количество записей в ответе(не более 10 000 записей, по умолчанию 10 записей) 28 | /// Примечание: При указании данного параметра необходимо указать товарную группу 29 | /// Товарная групп 30 | /// Примечание: Параметр обязательный для товарных групп: milk – Молочная продукция; water – Упакованная вода 31 | /// 32 | public DocumentInfo GetDocumentInfo(string docId, int limit, ProductGroupsTrueApi productGroup) 33 | { 34 | return Get("/doc/{docId}/info", new[] 35 | { 36 | new Parameter("docId", docId.ToLower(), ParameterType.UrlSegment), 37 | new Parameter("limit", limit.ToString(), ParameterType.QueryString), 38 | new Parameter("pg", productGroup.ToString(), ParameterType.UrlSegment) 39 | }); 40 | } 41 | 42 | 43 | 44 | /// 45 | /// 6.9. Метод получения списка КИ по номеру документа. 46 | /// 47 | /// 48 | /// Список КИ 49 | public string[] GetCisesByOrderId(string docNum) // TODO Сделать поддержку второго параметра pg (товарная группа) 50 | { 51 | return Get("/cises/doc/{docNum}", new[] { new Parameter("docNum", docNum, ParameterType.UrlSegment) }); 52 | } 53 | 54 | 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /FairMark/TrueApi/TrueApiClient.cs: -------------------------------------------------------------------------------- 1 | namespace FairMark.TrueApi 2 | { 3 | using RestSharp; 4 | 5 | public partial class TrueApiClient : CommonApiClient 6 | { 7 | /// 8 | /// Sandbox API endpoint. 9 | /// 10 | public const string SandboxApiUrl = 11 | //"https://demo.lp.crpt.tech/api/v3/"; 12 | //"https://demo.lp.crpt.tech/api/v3/auth/cert/key"; 13 | "https://int01.gismt.crpt.tech/api/v3/true-api"; 14 | 15 | /// 16 | /// Production API endpoint. 17 | /// 18 | public const string ProductionApiUrl = "https://ismp.crpt.ru/api/v3/"; 19 | 20 | /// 21 | /// Initializes a new instance of the . 22 | /// 23 | /// Base URL of the True API. 24 | /// Authentication credentials. 25 | public TrueApiClient(string baseUrl, CommonCredentials credentials) 26 | : base(baseUrl, credentials) 27 | { 28 | } 29 | 30 | /// 31 | /// Initializes a new instance of the . 32 | /// 33 | /// REST client. 34 | /// Authentication credentials. 35 | public TrueApiClient(IRestClient restClient, CommonCredentials credentials) 36 | : base(restClient, credentials) 37 | { 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /FairMark/Xsd/ON_NSCHFDOPPOK/ФайлИнфПокКНД.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | // This code was generated by XmlSchemaClassGenerator version 2.0.521.0. 11 | namespace FairMark.Xsd.ON_NSCHFDOPPOK 12 | { 13 | 14 | 15 | [System.CodeDom.Compiler.GeneratedCodeAttribute("XmlSchemaClassGenerator", "2.0.521.0")] 16 | [System.SerializableAttribute()] 17 | [System.Xml.Serialization.XmlTypeAttribute("ФайлИнфПокКНД", Namespace="", AnonymousType=true)] 18 | public enum ФайлИнфПокКНД 19 | { 20 | 21 | [System.Xml.Serialization.XmlEnumAttribute("1115132")] 22 | Item1115132, 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /FairMark/Xsd/ON_NSCHFDOPPOK/ФайлИнфПокСодФХЖ4ИнфПолФХЖ4ТекстИнф.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | // This code was generated by XmlSchemaClassGenerator version 2.0.521.0. 11 | namespace FairMark.Xsd.ON_NSCHFDOPPOK 12 | { 13 | 14 | 15 | [System.CodeDom.Compiler.GeneratedCodeAttribute("XmlSchemaClassGenerator", "2.0.521.0")] 16 | [System.SerializableAttribute()] 17 | [System.Xml.Serialization.XmlTypeAttribute("ФайлИнфПокСодФХЖ4ИнфПолФХЖ4ТекстИнф", Namespace="", AnonymousType=true)] 18 | [System.Diagnostics.DebuggerStepThroughAttribute()] 19 | [System.ComponentModel.DesignerCategoryAttribute("code")] 20 | public partial class ФайлИнфПокСодФХЖ4ИнфПолФХЖ4ТекстИнф 21 | { 22 | 23 | /// 24 | /// Идентификатор 25 | /// Minimum length: 1. 26 | /// Maximum length: 50. 27 | /// 28 | [System.ComponentModel.DescriptionAttribute("Идентификатор")] 29 | [System.ComponentModel.DataAnnotations.MinLengthAttribute(1)] 30 | [System.ComponentModel.DataAnnotations.MaxLengthAttribute(50)] 31 | [System.ComponentModel.DataAnnotations.RequiredAttribute()] 32 | [System.Xml.Serialization.XmlAttributeAttribute("Идентиф")] 33 | public string Идентиф { get; set; } 34 | 35 | /// 36 | /// Значение 37 | /// Minimum length: 1. 38 | /// Maximum length: 2000. 39 | /// 40 | [System.ComponentModel.DescriptionAttribute("Значение")] 41 | [System.ComponentModel.DataAnnotations.MinLengthAttribute(1)] 42 | [System.ComponentModel.DataAnnotations.MaxLengthAttribute(2000)] 43 | [System.ComponentModel.DataAnnotations.RequiredAttribute()] 44 | [System.Xml.Serialization.XmlAttributeAttribute("Значен")] 45 | public string Значен { get; set; } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /FairMark/Xsd/ON_NSCHFDOPPOK/ФайлИнфПокСодФХЖ4СвПринСвЛицПрин.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | // This code was generated by XmlSchemaClassGenerator version 2.0.521.0. 11 | namespace FairMark.Xsd.ON_NSCHFDOPPOK 12 | { 13 | 14 | 15 | [System.CodeDom.Compiler.GeneratedCodeAttribute("XmlSchemaClassGenerator", "2.0.521.0")] 16 | [System.SerializableAttribute()] 17 | [System.Xml.Serialization.XmlTypeAttribute("ФайлИнфПокСодФХЖ4СвПринСвЛицПрин", Namespace="", AnonymousType=true)] 18 | [System.Diagnostics.DebuggerStepThroughAttribute()] 19 | [System.ComponentModel.DesignerCategoryAttribute("code")] 20 | public partial class ФайлИнфПокСодФХЖ4СвПринСвЛицПрин 21 | { 22 | 23 | /// 24 | /// Работник организации покупателя 25 | /// 26 | [System.ComponentModel.DescriptionAttribute("Работник организации покупателя")] 27 | [System.Xml.Serialization.XmlElementAttribute("РабОргПок", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 28 | public ФайлИнфПокСодФХЖ4СвПринСвЛицПринРабОргПок РабОргПок { get; set; } 29 | 30 | /// 31 | /// Иное лицо 32 | /// 33 | [System.ComponentModel.DescriptionAttribute("Иное лицо")] 34 | [System.Xml.Serialization.XmlElementAttribute("ИнЛицо", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 35 | public ФайлИнфПокСодФХЖ4СвПринСвЛицПринИнЛицо ИнЛицо { get; set; } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /FairMark/Xsd/ON_NSCHFDOPPOK/ФайлИнфПокСодФХЖ4СвПринСвЛицПринИнЛицо.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | // This code was generated by XmlSchemaClassGenerator version 2.0.521.0. 11 | namespace FairMark.Xsd.ON_NSCHFDOPPOK 12 | { 13 | 14 | 15 | [System.CodeDom.Compiler.GeneratedCodeAttribute("XmlSchemaClassGenerator", "2.0.521.0")] 16 | [System.SerializableAttribute()] 17 | [System.Xml.Serialization.XmlTypeAttribute("ФайлИнфПокСодФХЖ4СвПринСвЛицПринИнЛицо", Namespace="", AnonymousType=true)] 18 | [System.Diagnostics.DebuggerStepThroughAttribute()] 19 | [System.ComponentModel.DesignerCategoryAttribute("code")] 20 | public partial class ФайлИнфПокСодФХЖ4СвПринСвЛицПринИнЛицо 21 | { 22 | 23 | /// 24 | /// Представитель организации, которой доверено принятие товаров (груза) 25 | /// 26 | [System.ComponentModel.DescriptionAttribute("Представитель организации, которой доверено принятие товаров (груза)")] 27 | [System.Xml.Serialization.XmlElementAttribute("ПредОргПрин", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 28 | public ФайлИнфПокСодФХЖ4СвПринСвЛицПринИнЛицоПредОргПрин ПредОргПрин { get; set; } 29 | 30 | /// 31 | /// Физическое лицо, которому доверено принятие товаров (груза) 32 | /// 33 | [System.ComponentModel.DescriptionAttribute("Физическое лицо, которому доверено принятие товаров (груза)")] 34 | [System.Xml.Serialization.XmlElementAttribute("ФЛПрин", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 35 | public ФайлИнфПокСодФХЖ4СвПринСвЛицПринИнЛицоФЛПрин ФЛПрин { get; set; } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /FairMark/Xsd/ON_NSCHFDOPPR/АдрИнфТип.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | // This code was generated by XmlSchemaClassGenerator version 2.0.521.0. 11 | namespace FairMark.Xsd.ON_NSCHFDOPPR 12 | { 13 | 14 | 15 | /// 16 | /// Информация об адресе, в том числе об адресе за пределами территории Российской Федерации 17 | /// 18 | [System.ComponentModel.DescriptionAttribute("Информация об адресе, в том числе об адресе за пределами территории Российской Фе" + 19 | "дерации")] 20 | [System.CodeDom.Compiler.GeneratedCodeAttribute("XmlSchemaClassGenerator", "2.0.521.0")] 21 | [System.SerializableAttribute()] 22 | [System.Xml.Serialization.XmlTypeAttribute("АдрИнфТип", Namespace="")] 23 | [System.Diagnostics.DebuggerStepThroughAttribute()] 24 | [System.ComponentModel.DesignerCategoryAttribute("code")] 25 | public partial class АдрИнфТип 26 | { 27 | 28 | /// 29 | /// Код страны 30 | /// Код из Общероссийского классификатора стран мира 31 | /// Minimum length: 3. 32 | /// Maximum length: 3. 33 | /// Pattern: [0-9]{3}. 34 | /// 35 | [System.ComponentModel.DescriptionAttribute("Код страны")] 36 | [System.ComponentModel.DataAnnotations.MinLengthAttribute(3)] 37 | [System.ComponentModel.DataAnnotations.MaxLengthAttribute(3)] 38 | [System.ComponentModel.DataAnnotations.RegularExpressionAttribute("[0-9]{3}")] 39 | [System.ComponentModel.DataAnnotations.RequiredAttribute()] 40 | [System.Xml.Serialization.XmlAttributeAttribute("КодСтр")] 41 | public string КодСтр { get; set; } 42 | 43 | /// 44 | /// Адрес 45 | /// Minimum length: 1. 46 | /// Maximum length: 1000. 47 | /// 48 | [System.ComponentModel.DescriptionAttribute("Адрес")] 49 | [System.ComponentModel.DataAnnotations.MinLengthAttribute(1)] 50 | [System.ComponentModel.DataAnnotations.MaxLengthAttribute(1000)] 51 | [System.ComponentModel.DataAnnotations.RequiredAttribute()] 52 | [System.Xml.Serialization.XmlAttributeAttribute("АдрТекст")] 53 | public string АдрТекст { get; set; } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /FairMark/Xsd/ON_NSCHFDOPPR/КонтактТип.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | // This code was generated by XmlSchemaClassGenerator version 2.0.521.0. 11 | namespace FairMark.Xsd.ON_NSCHFDOPPR 12 | { 13 | 14 | 15 | /// 16 | /// Контактные данные 17 | /// 18 | [System.ComponentModel.DescriptionAttribute("Контактные данные")] 19 | [System.CodeDom.Compiler.GeneratedCodeAttribute("XmlSchemaClassGenerator", "2.0.521.0")] 20 | [System.SerializableAttribute()] 21 | [System.Xml.Serialization.XmlTypeAttribute("КонтактТип", Namespace="")] 22 | [System.Diagnostics.DebuggerStepThroughAttribute()] 23 | [System.ComponentModel.DesignerCategoryAttribute("code")] 24 | public partial class КонтактТип 25 | { 26 | 27 | /// 28 | /// Номер контактного телефона/факс 29 | /// Minimum length: 1. 30 | /// Maximum length: 255. 31 | /// 32 | [System.ComponentModel.DescriptionAttribute("Номер контактного телефона/факс")] 33 | [System.ComponentModel.DataAnnotations.MinLengthAttribute(1)] 34 | [System.ComponentModel.DataAnnotations.MaxLengthAttribute(255)] 35 | [System.Xml.Serialization.XmlAttributeAttribute("Тлф")] 36 | public string Тлф { get; set; } 37 | 38 | /// 39 | /// Адрес электронной почты 40 | /// Minimum length: 1. 41 | /// Maximum length: 255. 42 | /// 43 | [System.ComponentModel.DescriptionAttribute("Адрес электронной почты")] 44 | [System.ComponentModel.DataAnnotations.MinLengthAttribute(1)] 45 | [System.ComponentModel.DataAnnotations.MaxLengthAttribute(255)] 46 | [System.Xml.Serialization.XmlAttributeAttribute("ЭлПочта")] 47 | public string ЭлПочта { get; set; } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /FairMark/Xsd/ON_NSCHFDOPPR/СумАкцизТип.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | // This code was generated by XmlSchemaClassGenerator version 2.0.521.0. 11 | namespace FairMark.Xsd.ON_NSCHFDOPPR 12 | { 13 | 14 | 15 | /// 16 | /// Сумма акциза 17 | /// 18 | [System.ComponentModel.DescriptionAttribute("Сумма акциза")] 19 | [System.CodeDom.Compiler.GeneratedCodeAttribute("XmlSchemaClassGenerator", "2.0.521.0")] 20 | [System.SerializableAttribute()] 21 | [System.Xml.Serialization.XmlTypeAttribute("СумАкцизТип", Namespace="")] 22 | [System.Diagnostics.DebuggerStepThroughAttribute()] 23 | [System.ComponentModel.DesignerCategoryAttribute("code")] 24 | public partial class СумАкцизТип 25 | { 26 | 27 | /// 28 | /// Сумма акциза 29 | /// Total number of digits: 19. 30 | /// Total number of digits in fraction: 2. 31 | /// 32 | [System.ComponentModel.DescriptionAttribute("Сумма акциза")] 33 | [System.Xml.Serialization.XmlElementAttribute("СумАкциз", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 34 | public decimal СумАкциз { get; set; } 35 | 36 | /// 37 | /// Gets or sets a value indicating whether the СумАкциз property is specified. 38 | /// 39 | [System.Xml.Serialization.XmlIgnoreAttribute()] 40 | public bool СумАкцизSpecified { get; set; } 41 | 42 | /// 43 | /// Без акциза 44 | /// Minimum length: 10. 45 | /// Maximum length: 10. 46 | /// 47 | [System.ComponentModel.DescriptionAttribute("Без акциза")] 48 | [System.ComponentModel.DataAnnotations.MinLengthAttribute(10)] 49 | [System.ComponentModel.DataAnnotations.MaxLengthAttribute(10)] 50 | [System.Xml.Serialization.XmlElementAttribute("БезАкциз", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 51 | public string БезАкциз { get; set; } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /FairMark/Xsd/ON_NSCHFDOPPR/ТекстИнфТип.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | // This code was generated by XmlSchemaClassGenerator version 2.0.521.0. 11 | namespace FairMark.Xsd.ON_NSCHFDOPPR 12 | { 13 | 14 | 15 | /// 16 | /// Текстовая информация 17 | /// 18 | [System.ComponentModel.DescriptionAttribute("Текстовая информация")] 19 | [System.CodeDom.Compiler.GeneratedCodeAttribute("XmlSchemaClassGenerator", "2.0.521.0")] 20 | [System.SerializableAttribute()] 21 | [System.Xml.Serialization.XmlTypeAttribute("ТекстИнфТип", Namespace="")] 22 | [System.Diagnostics.DebuggerStepThroughAttribute()] 23 | [System.ComponentModel.DesignerCategoryAttribute("code")] 24 | public partial class ТекстИнфТип 25 | { 26 | 27 | /// 28 | /// Идентификатор 29 | /// Minimum length: 1. 30 | /// Maximum length: 50. 31 | /// 32 | [System.ComponentModel.DescriptionAttribute("Идентификатор")] 33 | [System.ComponentModel.DataAnnotations.MinLengthAttribute(1)] 34 | [System.ComponentModel.DataAnnotations.MaxLengthAttribute(50)] 35 | [System.ComponentModel.DataAnnotations.RequiredAttribute()] 36 | [System.Xml.Serialization.XmlAttributeAttribute("Идентиф")] 37 | public string Идентиф { get; set; } 38 | 39 | /// 40 | /// Значение 41 | /// Minimum length: 1. 42 | /// Maximum length: 2000. 43 | /// 44 | [System.ComponentModel.DescriptionAttribute("Значение")] 45 | [System.ComponentModel.DataAnnotations.MinLengthAttribute(1)] 46 | [System.ComponentModel.DataAnnotations.MaxLengthAttribute(2000)] 47 | [System.ComponentModel.DataAnnotations.RequiredAttribute()] 48 | [System.Xml.Serialization.XmlAttributeAttribute("Значен")] 49 | public string Значен { get; set; } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /FairMark/Xsd/ON_NSCHFDOPPR/УчастникТипБанкРекв.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | // This code was generated by XmlSchemaClassGenerator version 2.0.521.0. 11 | namespace FairMark.Xsd.ON_NSCHFDOPPR 12 | { 13 | 14 | 15 | [System.CodeDom.Compiler.GeneratedCodeAttribute("XmlSchemaClassGenerator", "2.0.521.0")] 16 | [System.SerializableAttribute()] 17 | [System.Xml.Serialization.XmlTypeAttribute("УчастникТипБанкРекв", Namespace="", AnonymousType=true)] 18 | [System.Diagnostics.DebuggerStepThroughAttribute()] 19 | [System.ComponentModel.DesignerCategoryAttribute("code")] 20 | public partial class УчастникТипБанкРекв 21 | { 22 | 23 | /// 24 | /// Сведения о банке 25 | /// 26 | [System.ComponentModel.DescriptionAttribute("Сведения о банке")] 27 | [System.Xml.Serialization.XmlElementAttribute("СвБанк", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 28 | public УчастникТипБанкРеквСвБанк СвБанк { get; set; } 29 | 30 | /// 31 | /// Номер банковского счета 32 | /// Minimum length: 1. 33 | /// Maximum length: 20. 34 | /// 35 | [System.ComponentModel.DescriptionAttribute("Номер банковского счета")] 36 | [System.ComponentModel.DataAnnotations.MinLengthAttribute(1)] 37 | [System.ComponentModel.DataAnnotations.MaxLengthAttribute(20)] 38 | [System.Xml.Serialization.XmlAttributeAttribute("НомерСчета")] 39 | public string НомерСчета { get; set; } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /FairMark/Xsd/ON_NSCHFDOPPR/ФайлДокументКНД.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | // This code was generated by XmlSchemaClassGenerator version 2.0.521.0. 11 | namespace FairMark.Xsd.ON_NSCHFDOPPR 12 | { 13 | 14 | 15 | [System.CodeDom.Compiler.GeneratedCodeAttribute("XmlSchemaClassGenerator", "2.0.521.0")] 16 | [System.SerializableAttribute()] 17 | [System.Xml.Serialization.XmlTypeAttribute("ФайлДокументКНД", Namespace="", AnonymousType=true)] 18 | public enum ФайлДокументКНД 19 | { 20 | 21 | [System.Xml.Serialization.XmlEnumAttribute("1115131")] 22 | Item1115131, 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /FairMark/Xsd/ON_NSCHFDOPPR/ФайлДокументСвПродПер.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | // This code was generated by XmlSchemaClassGenerator version 2.0.521.0. 11 | namespace FairMark.Xsd.ON_NSCHFDOPPR 12 | { 13 | 14 | 15 | [System.CodeDom.Compiler.GeneratedCodeAttribute("XmlSchemaClassGenerator", "2.0.521.0")] 16 | [System.SerializableAttribute()] 17 | [System.Xml.Serialization.XmlTypeAttribute("ФайлДокументСвПродПер", Namespace="", AnonymousType=true)] 18 | [System.Diagnostics.DebuggerStepThroughAttribute()] 19 | [System.ComponentModel.DesignerCategoryAttribute("code")] 20 | public partial class ФайлДокументСвПродПер 21 | { 22 | 23 | /// 24 | /// Сведения о передаче (сдаче) товаров (результатов работ), имущественных прав (о предъявлении оказанных услуг) 25 | /// 26 | [System.ComponentModel.DescriptionAttribute("Сведения о передаче (сдаче) товаров (результатов работ), имущественных прав (о пр" + 27 | "едъявлении оказанных услуг)")] 28 | [System.ComponentModel.DataAnnotations.RequiredAttribute()] 29 | [System.Xml.Serialization.XmlElementAttribute("СвПер", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 30 | public ФайлДокументСвПродПерСвПер СвПер { get; set; } 31 | 32 | /// 33 | /// Информационное поле факта хозяйственной жизни 3 34 | /// 35 | [System.ComponentModel.DescriptionAttribute("Информационное поле факта хозяйственной жизни 3")] 36 | [System.Xml.Serialization.XmlElementAttribute("ИнфПолФХЖ3", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 37 | public ФайлДокументСвПродПерИнфПолФХЖ3 ИнфПолФХЖ3 { get; set; } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /FairMark/Xsd/ON_NSCHFDOPPR/ФайлДокументСвПродПерСвПерСвЛицПер.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | // This code was generated by XmlSchemaClassGenerator version 2.0.521.0. 11 | namespace FairMark.Xsd.ON_NSCHFDOPPR 12 | { 13 | 14 | 15 | [System.CodeDom.Compiler.GeneratedCodeAttribute("XmlSchemaClassGenerator", "2.0.521.0")] 16 | [System.SerializableAttribute()] 17 | [System.Xml.Serialization.XmlTypeAttribute("ФайлДокументСвПродПерСвПерСвЛицПер", Namespace="", AnonymousType=true)] 18 | [System.Diagnostics.DebuggerStepThroughAttribute()] 19 | [System.ComponentModel.DesignerCategoryAttribute("code")] 20 | public partial class ФайлДокументСвПродПерСвПерСвЛицПер 21 | { 22 | 23 | /// 24 | /// Работник организации продавца 25 | /// 26 | [System.ComponentModel.DescriptionAttribute("Работник организации продавца")] 27 | [System.Xml.Serialization.XmlElementAttribute("РабОргПрод", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 28 | public ФайлДокументСвПродПерСвПерСвЛицПерРабОргПрод РабОргПрод { get; set; } 29 | 30 | /// 31 | /// Иное лицо 32 | /// 33 | [System.ComponentModel.DescriptionAttribute("Иное лицо")] 34 | [System.Xml.Serialization.XmlElementAttribute("ИнЛицо", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 35 | public ФайлДокументСвПродПерСвПерСвЛицПерИнЛицо ИнЛицо { get; set; } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /FairMark/Xsd/ON_NSCHFDOPPR/ФайлДокументСвПродПерСвПерСвЛицПерИнЛицо.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | // This code was generated by XmlSchemaClassGenerator version 2.0.521.0. 11 | namespace FairMark.Xsd.ON_NSCHFDOPPR 12 | { 13 | 14 | 15 | [System.CodeDom.Compiler.GeneratedCodeAttribute("XmlSchemaClassGenerator", "2.0.521.0")] 16 | [System.SerializableAttribute()] 17 | [System.Xml.Serialization.XmlTypeAttribute("ФайлДокументСвПродПерСвПерСвЛицПерИнЛицо", Namespace="", AnonymousType=true)] 18 | [System.Diagnostics.DebuggerStepThroughAttribute()] 19 | [System.ComponentModel.DesignerCategoryAttribute("code")] 20 | public partial class ФайлДокументСвПродПерСвПерСвЛицПерИнЛицо 21 | { 22 | 23 | /// 24 | /// Представитель организации, которой доверена отгрузка товаров (передача результатов работ), передача имущественных прав (предъявление оказанных услуг) 25 | /// 26 | [System.ComponentModel.DescriptionAttribute("Представитель организации, которой доверена отгрузка товаров (передача результато" + 27 | "в работ), передача имущественных прав (предъявление оказанных услуг)")] 28 | [System.Xml.Serialization.XmlElementAttribute("ПредОргПер", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 29 | public ФайлДокументСвПродПерСвПерСвЛицПерИнЛицоПредОргПер ПредОргПер { get; set; } 30 | 31 | /// 32 | /// Физическое лицо, которому доверена отгрузка товаров (передача результатов работ), передача имущественных прав (предъявление оказанных услуг) 33 | /// 34 | [System.ComponentModel.DescriptionAttribute("Физическое лицо, которому доверена отгрузка товаров (передача результатов работ)," + 35 | " передача имущественных прав (предъявление оказанных услуг)")] 36 | [System.Xml.Serialization.XmlElementAttribute("ФЛПер", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 37 | public ФайлДокументСвПродПерСвПерСвЛицПерИнЛицоФЛПер ФЛПер { get; set; } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /FairMark/Xsd/ON_NSCHFDOPPR/ФайлДокументСвСчФактГрузОт.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // 5 | // Changes to this file may cause incorrect behavior and will be lost if 6 | // the code is regenerated. 7 | // 8 | //------------------------------------------------------------------------------ 9 | 10 | // This code was generated by XmlSchemaClassGenerator version 2.0.521.0. 11 | namespace FairMark.Xsd.ON_NSCHFDOPPR 12 | { 13 | 14 | 15 | [System.CodeDom.Compiler.GeneratedCodeAttribute("XmlSchemaClassGenerator", "2.0.521.0")] 16 | [System.SerializableAttribute()] 17 | [System.Xml.Serialization.XmlTypeAttribute("ФайлДокументСвСчФактГрузОт", Namespace="", AnonymousType=true)] 18 | [System.Diagnostics.DebuggerStepThroughAttribute()] 19 | [System.ComponentModel.DesignerCategoryAttribute("code")] 20 | public partial class ФайлДокументСвСчФактГрузОт 21 | { 22 | 23 | /// 24 | /// Грузоотправитель и его адрес 25 | /// 26 | [System.ComponentModel.DescriptionAttribute("Грузоотправитель и его адрес")] 27 | [System.Xml.Serialization.XmlElementAttribute("ГрузОтпр", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 28 | public УчастникТип ГрузОтпр { get; set; } 29 | 30 | /// 31 | /// Указано «он же» 32 | /// Minimum length: 5. 33 | /// Maximum length: 5. 34 | /// 35 | [System.ComponentModel.DescriptionAttribute("Указано «он же»")] 36 | [System.ComponentModel.DataAnnotations.MinLengthAttribute(5)] 37 | [System.ComponentModel.DataAnnotations.MaxLengthAttribute(5)] 38 | [System.Xml.Serialization.XmlElementAttribute("ОнЖе", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 39 | public string ОнЖе { get; set; } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /FairMarkClient.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.30804.86 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FairMark", "FairMark\FairMark.csproj", "{9E173CD0-F789-4512-873D-02E765FBDF12}" 7 | EndProject 8 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FairMark.Tests", "FairMark.Tests\FairMark.Tests.csproj", "{6811BD91-847C-4DF0-A77C-3B8584889BB4}" 9 | EndProject 10 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestApp", "TestApp\TestApp.csproj", "{670A8484-DA5C-45B0-894E-7DC4623CD504}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|Any CPU = Debug|Any CPU 15 | Release|Any CPU = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {9E173CD0-F789-4512-873D-02E765FBDF12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 19 | {9E173CD0-F789-4512-873D-02E765FBDF12}.Debug|Any CPU.Build.0 = Debug|Any CPU 20 | {9E173CD0-F789-4512-873D-02E765FBDF12}.Release|Any CPU.ActiveCfg = Release|Any CPU 21 | {9E173CD0-F789-4512-873D-02E765FBDF12}.Release|Any CPU.Build.0 = Release|Any CPU 22 | {6811BD91-847C-4DF0-A77C-3B8584889BB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 23 | {6811BD91-847C-4DF0-A77C-3B8584889BB4}.Debug|Any CPU.Build.0 = Debug|Any CPU 24 | {6811BD91-847C-4DF0-A77C-3B8584889BB4}.Release|Any CPU.ActiveCfg = Release|Any CPU 25 | {6811BD91-847C-4DF0-A77C-3B8584889BB4}.Release|Any CPU.Build.0 = Release|Any CPU 26 | {670A8484-DA5C-45B0-894E-7DC4623CD504}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 27 | {670A8484-DA5C-45B0-894E-7DC4623CD504}.Debug|Any CPU.Build.0 = Debug|Any CPU 28 | {670A8484-DA5C-45B0-894E-7DC4623CD504}.Release|Any CPU.ActiveCfg = Release|Any CPU 29 | {670A8484-DA5C-45B0-894E-7DC4623CD504}.Release|Any CPU.Build.0 = Release|Any CPU 30 | EndGlobalSection 31 | GlobalSection(SolutionProperties) = preSolution 32 | HideSolutionNode = FALSE 33 | EndGlobalSection 34 | GlobalSection(ExtensibilityGlobals) = postSolution 35 | SolutionGuid = {D844AF1B-8538-4FCA-8580-D1640239701C} 36 | EndGlobalSection 37 | EndGlobal 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Alexey Yakovlev 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Schemas/UniversalTransferDocumentXsd/ON_NSCHFDOPPOK_1_997_02_05_01_01.xsd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FairMark/FairMarkClient/c564b226c8696f8016d7e0ca8866f516968b2736/Schemas/UniversalTransferDocumentXsd/ON_NSCHFDOPPOK_1_997_02_05_01_01.xsd -------------------------------------------------------------------------------- /Schemas/UniversalTransferDocumentXsd/ON_NSCHFDOPPR_1_997_01_05_01_01.xsd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FairMark/FairMarkClient/c564b226c8696f8016d7e0ca8866f516968b2736/Schemas/UniversalTransferDocumentXsd/ON_NSCHFDOPPR_1_997_01_05_01_01.xsd -------------------------------------------------------------------------------- /Schemas/UniversalTransferDocumentXsd/generate.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | :: install the tool using: 3 | :: dotnet tool install -g dotnet-xscgen 4 | 5 | xscgen ON_NSCHFDOPPOK_1_997_02_05_01_01.xsd -n ""=FairMark.Xsd.ON_NSCHFDOPPOK -sf 6 | 7 | xscgen ON_NSCHFDOPPR_1_997_01_05_01_01.xsd -n ""=FairMark.Xsd.ON_NSCHFDOPPR -sf 8 | -------------------------------------------------------------------------------- /Scripts/Coverage.ps1: -------------------------------------------------------------------------------- 1 | # run unit tests and gather coverage information 2 | $args = "test FairMark.Tests --logger=trx;LogFileName=TestResults.trx" 3 | $filter = "+[*]* -[*Test*]* -[*]MdlpApiClient.Xsd*" 4 | OpenCover.Console.exe -returntargetcode -register:administrator -target:dotnet.exe "-targetargs:$args" "-filter:$filter" -output:FairMarkCoverage.xml 5 | $exit = $lastexitcode 6 | 7 | # upload reports to the codecov.io server 8 | codecov -t "c01ca799-5c1f-4647-9743-7d6e8b3fb0f8" -f FairMarkCoverage.xml 9 | 10 | # convert trx reports to JUnit format so Gitlab can parse them 11 | trx2junit FairMark.Tests\TestResults\TestResults.trx 12 | #& "$PSScriptRoot\TestReportPrefix.ps1" -inputFileName FairMark.Tests\TestResults\TestResults.xml -outputFileName FairMark.Tests\TestResults\TestResults.xml -prefix "Normal." 13 | 14 | # make sure we don't fail on REST methods that need long timeouts 15 | Wait-Event -Timeout 20 16 | 17 | # return dotnet test exit code 18 | if (($exit + $exit2) -ne 0) 19 | { 20 | exit ($exit + $exit2) 21 | } 22 | -------------------------------------------------------------------------------- /Scripts/TestReportPrefix.ps1: -------------------------------------------------------------------------------- 1 | # Add prefix to the test fixture names 2 | # This step is necessary because GitLab seems to 3 | # merge test reports based on their class names 4 | # 5 | # Usage: 6 | # 7 | # powershell /file TestReportPrefix.ps1 -inputFileName in.xml -outputFileName out.xml -prefix MyProject 8 | 9 | # Powershell 5.0 is required for using: 10 | #using assembly System.Xml.Linq 11 | #using namespace System.Xml.Linq 12 | 13 | param ( 14 | [parameter(Mandatory = $true)] $inputFileName, 15 | [parameter(Mandatory = $true)] $outputFileName, 16 | [parameter(Mandatory = $true)] $prefix 17 | ) 18 | 19 | $xmlLinq = [System.Reflection.Assembly]::LoadWithPartialName("System.Xml.Linq"); 20 | 21 | echo "Loading $inputFileName..." 22 | $xml = [System.Xml.Linq.XDocument]::Load($inputFileName) 23 | 24 | # add prefix to all test suite class names 25 | ForEach ($suite in $xml.Root.Elements("testsuite")) 26 | { 27 | ForEach ($case in $suite.Elements("testcase")) 28 | { 29 | $name = $case.Attribute("classname") 30 | if ($name -ne $null) 31 | { 32 | $name.Value = $prefix + "." + $name.Value 33 | } 34 | } 35 | } 36 | 37 | echo "Saving $outputFileName..." 38 | $xml.Save($outputFileName) 39 | -------------------------------------------------------------------------------- /SwaggerTest/App.xaml: -------------------------------------------------------------------------------- 1 |  6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /SwaggerTest/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Configuration; 4 | using System.Data; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | 9 | namespace SwaggerTest 10 | { 11 | /// 12 | /// Interaction logic for App.xaml 13 | /// 14 | public partial class App : Application 15 | { 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /SwaggerTest/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | 3 | [assembly: ThemeInfo( 4 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 5 | //(used if a resource is not found in the page, 6 | // or application resource dictionaries) 7 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 8 | //(used if a resource is not found in the page, 9 | // app, or any theme specific resource dictionaries) 10 | )] 11 | -------------------------------------------------------------------------------- /SwaggerTest/MainWindow.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /SwaggerTest/MainWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows; 7 | using System.Windows.Controls; 8 | using System.Windows.Data; 9 | using System.Windows.Documents; 10 | using System.Windows.Input; 11 | using System.Windows.Media; 12 | using System.Windows.Media.Imaging; 13 | using System.Windows.Navigation; 14 | using System.Windows.Shapes; 15 | 16 | namespace SwaggerTest 17 | { 18 | /// 19 | /// Interaction logic for MainWindow.xaml 20 | /// 21 | public partial class MainWindow : Window 22 | { 23 | public MainWindow() 24 | { 25 | InitializeComponent(); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /SwaggerTest/SwaggerTest.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | WinExe 5 | net5.0-windows 6 | true 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /TestApp/App.xaml: -------------------------------------------------------------------------------- 1 |  6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /TestApp/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Configuration; 4 | using System.Data; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | 9 | namespace TestApp 10 | { 11 | /// 12 | /// Interaction logic for App.xaml 13 | /// 14 | public partial class App : Application 15 | { 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /TestApp/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | 3 | [assembly: ThemeInfo( 4 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 5 | //(used if a resource is not found in the page, 6 | // or application resource dictionaries) 7 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 8 | //(used if a resource is not found in the page, 9 | // app, or any theme specific resource dictionaries) 10 | )] 11 | -------------------------------------------------------------------------------- /TestApp/MainWindow.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /TestApp/MainWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace TestApp 2 | { 3 | using System.Windows; 4 | using FairMark.Toolbox; 5 | using FairMark.TrueApi; 6 | using FairMark.TrueApi.DataContracts; 7 | 8 | /// 9 | /// Interaction logic for MainWindow.xaml 10 | /// 11 | public partial class MainWindow : Window 12 | { 13 | public TrueApiCredentials Credentials { get; set; } 14 | public TrueApiClient TrueApiClient { get; set; } 15 | 16 | 17 | public MainWindow() 18 | { 19 | InitializeComponent(); 20 | 21 | Credentials = new TrueApiCredentials() { CertificateThumbprint = "bd7aa30aed4e856fc68b05eda8ae85d7888b2da6" }; 22 | TrueApiClient = new TrueApiClient("https://int01.gismt.crpt.tech/api/v3/true-api/", Credentials); 23 | 24 | //var cises = TrueApiClient.GetCisesByOrderId("a1769132-796e-47cb-8bc5-1053c4d7d6c5"); 25 | return; 26 | //var t = TrueApiClient.PostVoid("cises/list", , new[] { new Parameter("values","010463578558601021U6vlokgzAt0K!", ParameterType.RequestBody) }); 27 | var t = TrueApiClient.Get("elk/product-groups/balance/all"); 28 | var tt = TrueApiClient.Get("elk/product-groups/balance/all"); 29 | } 30 | 31 | 32 | private void Button_Click(object sender, RoutedEventArgs e) 33 | { 34 | //tbxSignedText.Text = GostCryptoHelpers.ComputeDetachedSignature(TrueApiClient.UserCertificate, tbxTextToSign.Text); 35 | tbxSignedText.Text = GostCryptoHelpers.ComputeAttachedSignature(TrueApiClient.UserCertificate, tbxTextToSign.Text.Trim()).Trim(); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /TestApp/TestApp.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | WinExe 5 | net462 6 | true 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | --------------------------------------------------------------------------------