Exemplo n.º 1
0
        public string GetContents(DeclarationField field, bool except = true)
        {
            if (!ColumnOrdering.ContainsField(field))
            {
                if (!except)
                {
                    return("");
                }
            }

            Cell c;

            try
            {
                c = GetDeclarationField(field);
            }
            catch (SmartParserFieldNotFoundException e)
            {
                if (!except)
                {
                    return("");
                }
                throw e;
            }

            if (c == null)
            {
                return("");
            }
            return(c.GetText(true));
        }
Exemplo n.º 2
0
        public Cell GetDeclarationField(DeclarationField field)
        {
            Cell cell;

            if (MappedHeader != null && MappedHeader.TryGetValue(field, out cell))
            {
                return(cell);
            }
            TColumnInfo colSpan;
            var         exactCell = adapter.GetDeclarationFieldWeak(ColumnOrdering, row, field, out colSpan);

            if (exactCell.Text.Trim() != "" || exactCell.Col == -1)
            {
                return(exactCell);
            }
            for (int i = exactCell.Col + exactCell.MergedColsCount; i < colSpan.EndColumn;)
            {
                var mergedCell = adapter.GetCell(row, i);
                if (mergedCell == null)
                {
                    break;
                }
                if (mergedCell.Text.Trim() != "")
                {
                    return(mergedCell);
                }
                i += mergedCell.MergedColsCount;
            }
            return(exactCell);
        }
Exemplo n.º 3
0
        bool ParseIncomeOneField(DataRow currRow, Person person, DeclarationField field, bool ignoreThousandMultiplier)
        {
            if (!currRow.ColumnOrdering.ContainsField(field))
            {
                return(false);
            }
            string fieldStr = currRow.GetContents(field);

            if (DataHelper.IsEmptyValue(fieldStr))
            {
                return(false);
            }

            bool fieldInThousands = (field & DeclarationField.DeclaredYearlyIncomeThousandsMask) == DeclarationField.DeclaredYearlyIncomeThousandsMask;

            person.DeclaredYearlyIncome = DataHelper.ParseDeclaredIncome(fieldStr, fieldInThousands);
            if (!ignoreThousandMultiplier || fieldStr.Contains("тыс."))
            {
                person.DeclaredYearlyIncome *= 1000;
            }

            if (!DataHelper.IsEmptyValue(fieldStr))
            {
                person.DeclaredYearlyIncomeRaw = NormalizeRawDecimalForTest(fieldStr);
            }
            return(true);
        }
Exemplo n.º 4
0
        void AddRealEstateWithNaturalText(DataRow currRow, DeclarationField fieldName, string ownTypeByColumn, Person person)
        {
            if (!currRow.ColumnOrdering.ContainsField(fieldName))
            {
                fieldName = fieldName | DeclarationField.MainDeclarant;
            }

            if (!currRow.ColumnOrdering.ContainsField(fieldName))
            {
                return;
            }
            string text = currRow.GetContents(fieldName).Trim().Replace("не имеет", "").Trim();

            if (DataHelper.IsEmptyValue(text) || text == "0")
            {
                return;
            }
            var realtyType = GetRealtyTypeFromColumnTitle(fieldName);

            if (realtyType != null)
            {
                ParseRealtiesDistributedByColumns(ownTypeByColumn, realtyType, text, person);
            }
            else
            {
                ParseRealtiesByAntlr(ownTypeByColumn, text, person);
            }
        }
Exemplo n.º 5
0
        public string GetContents(DeclarationField field, bool except = true)
        {
            if (!ColumnOrdering.ContainsField(field))
            {
                if (!except)
                {
                    return("");
                }
            }

            Cell c;

            try
            {
                c = GetDeclarationField(field);
            }
            catch (SmartParserFieldNotFoundException e)
            {
                if (!except)
                {
                    return("");
                }

                throw new SmartParserFieldNotFoundException(e.Message + String.Format(" Line = {0}", this.DebugString()));
            }

            if (c == null)
            {
                return("");
            }
            return(c.GetText(true));
        }
Exemplo n.º 6
0
        public void HeaderDetectionTest()
        {
            string           big_header = "Объекты недвижимости, находящиеся в собственности Вид\nсобствен\nности";
            DeclarationField field      = GetField(big_header);

            big_header = "Объекты недвижимости имущества находящиеся в пользовании Вид обьекта";
            field      = GetField(big_header);
        }
Exemplo n.º 7
0
        static void DumpColumn(IAdapter adapter, ColumnOrdering columnOrdering, DeclarationField columnToDump)
        {
            int rowOffset = columnOrdering.FirstDataRow;

            for (var row = rowOffset; row < adapter.GetRowsCount(); row++)
            {
                DataRow currRow = adapter.GetRow(columnOrdering, row);
                var     cell    = currRow.GetDeclarationField(columnToDump);
                var     s       = (cell == null) ? "null" : cell.GetText();
                s = s.Replace("\n", "\\n");
                Console.WriteLine(s);
            }
        }
Exemplo n.º 8
0
        public DeclarationField FindByPixelIntersection(int start, int end, out int maxInterSize)
        {
            DeclarationField field = DeclarationField.None;

            maxInterSize = 0;
            foreach (var x in ColumnOrder)
            {
                int interSize = PeriodIntersection(start, end, x.Value.ColumnPixelStart, x.Value.ColumnPixelStart + x.Value.ColumnPixelWidth);
                if (interSize > maxInterSize)
                {
                    maxInterSize = interSize;
                    field        = x.Key;
                }
            }
            return(field);
        }
        static DeclarationField FindMin(Dictionary <DeclarationField, double> freqs)
        {
            // Linq is slower
            double           minValue    = Double.MaxValue;
            DeclarationField resultField = DeclarationField.None;

            foreach (var i in freqs)
            {
                if (i.Value < minValue)
                {
                    minValue    = i.Value;
                    resultField = i.Key;
                }
            }
            return(resultField);
        }
Exemplo n.º 10
0
 static void FixBadColumnName01_Template(TableHeader c, DeclarationField naturalText, DeclarationField country, DeclarationField square, DeclarationField type)
 {
     //move MixedColumnWithNaturalText  to MixedRealEstateType
     if (!c.ContainsField(naturalText))
     {
         return;
     }
     if (c.ContainsField(country) &&
         c.ContainsField(square)
         )
     {
         TColumnInfo s = c.ColumnOrder[naturalText];
         s.Field = type;
         c.Add(s);
         c.Delete(naturalText);
     }
 }
Exemplo n.º 11
0
        static void AddColumn(ColumnOrdering ordering, DeclarationField field, Cell cell)
        {
            TColumnInfo s = new TColumnInfo();

            s.BeginColumn      = cell.Col;
            s.EndColumn        = cell.Col + cell.MergedColsCount;
            s.ColumnPixelWidth = cell.CellWidth;
            //s.ColumnPixelStart is unknown and initialized in FinishOrderingBuilding
            s.Field = field;
            if (field == DeclarationField.DeclaredYearlyIncome)
            {
                string dummy = "";
                ColumnDetector.GetValuesFromTitle(cell.GetText(), ref dummy, ref ordering.YearFromIncome, ref dummy);
            }

            ordering.Add(s);
        }
Exemplo n.º 12
0
        public static bool TestFieldWithoutOwntypes(DeclarationField field, Cell cell)
        {
            if (cell.IsEmpty)
            {
                return(false);
            }
            string text = cell.GetText(true);

            if ((field & DeclarationField.SquareMask) > 0 && DataHelper.ParseSquare(text).HasValue)
            {
                return(true);
            }

            var predictedField = ColumnByDataPredictor.PredictByString(text);

            return((predictedField & ~DeclarationField.AllOwnTypes) == (field & ~DeclarationField.AllOwnTypes));
        }
Exemplo n.º 13
0
 void CopyRelativeFieldToMainCell(DataRow row, DeclarationField relativeMask, DeclarationField f, ref DataRow childRow)
 {
     if ((f & relativeMask) > 0)
     {
         var value = row.GetContents(f, false);
         if (!DataHelper.IsEmptyValue(value))
         {
             if (childRow == null)
             {
                 childRow = row.DeepClone();
             }
             f = (f & ~relativeMask) | DeclarationField.MainDeclarant;
             var declarantCell = childRow.GetDeclarationField(f);
             declarantCell.Text    = value;
             declarantCell.IsEmpty = false;
         }
     }
 }
Exemplo n.º 14
0
        public static void IncrementTrigrams(DeclarationField field, string words)
        {
            if (!Trigrams.ContainsKey(field))
            {
                Trigrams[field] = new Dictionary <string, int>();
            }
            var FieldTrigrams = Trigrams[field];

            foreach (var trigram in String2Trigrams(words))
            {
                if (!FieldTrigrams.ContainsKey(trigram))
                {
                    FieldTrigrams[trigram] = 1;
                }
                else
                {
                    FieldTrigrams[trigram] = FieldTrigrams[trigram] + 1;
                }
            }
        }
Exemplo n.º 15
0
        static void AddColumn(TableHeader ordering, DeclarationField field, Cell cell)
        {
            TColumnInfo s = new TColumnInfo();

            s.BeginColumn      = cell.Col;
            s.EndColumn        = cell.Col + cell.MergedColsCount;
            s.ColumnPixelWidth = cell.CellWidth;
            //s.ColumnPixelStart is unknown and initialized in FinishOrderingBuilding
            s.Field = field;
            if (IsIncomeColumn(field))
            {
                string dummy = "";
                int?   year  = null;
                if (TableHeaderRecognizer.GetValuesFromTitle(cell.GetText(), ref dummy, ref year, ref dummy) && year.HasValue)
                {
                    ordering.YearFromIncome = year.Value;
                }
            }

            ordering.Add(s);
        }
Exemplo n.º 16
0
        static void FixMissingSubheadersForMergedColumns(IAdapter adapter, TableHeader columnOrdering,
                                                         DeclarationField mergedField, DeclarationField[] subColumns)
        {
            if (!columnOrdering.ContainsField(mergedField))
            {
                return;
            }
            TColumnInfo dummy;
            var         headerCell = adapter.GetDeclarationFieldWeak(columnOrdering, columnOrdering.HeaderBegin.Value, mergedField, out dummy);
            var         subCells   = FindSubcellsUnder(adapter, headerCell);

            // we check only the  second column, todo check the  first one and  the third
            if (subCells.Count != subColumns.Count() || !CheckSquareColumn(adapter, columnOrdering.FirstDataRow, 5, subCells, 1))
            {
                return;
            }
            for (int i = 0; i < subColumns.Count(); ++i)
            {
                AddColumn(columnOrdering, subColumns[i], subCells[i]);
            }
            columnOrdering.Delete(mergedField);
        }
Exemplo n.º 17
0
 static bool TestFieldRegexpWeak(DeclarationField field, string text)
 {
     if (text.Length == 0)
     {
         return(true);
     }
     if (text == "п/п" && field == DeclarationField.DeclarantIndex)
     {
         return(true);
     }
     if (((field & DeclarationField.StartsWithDigitMask) > 0) &&
         !Char.IsNumber(text[0]))
     {
         return(false);
     }
     if (DataHelper.IsCountryStrict(text) &&
         (field & DeclarationField.CountryMask) == 0)
     {
         return(false);
     }
     return(true);
 }
Exemplo n.º 18
0
 public Cell GetDeclarationField(DeclarationField field, bool except = true)
 {
     try {
         Cell cell;
         if (MappedHeader != null && MappedHeader.TryGetValue(field, out cell))
         {
             return(cell);
         }
         TColumnInfo colSpan;
         var         exactCell = adapter.GetDeclarationFieldWeak(ColumnOrdering, row, field, out colSpan);
         if (exactCell.Text.Trim() != "")
         {
             return(exactCell);
         }
         for (int i = colSpan.BeginColumn + exactCell.MergedColsCount; i < colSpan.EndColumn;)
         {
             var mergedCell = adapter.GetCell(row, i);
             if (mergedCell == null)
             {
                 break;
             }
             if (mergedCell.Text.Trim() != "")
             {
                 return(mergedCell);
             }
             i += mergedCell.MergedColsCount;
         }
         return(exactCell);
     }
     catch (SmartParserFieldNotFoundException e)
     {
         if (!except)
         {
             return(null);
         }
         throw e;
     }
 }
Exemplo n.º 19
0
 string GetRealtyTypeFromColumnTitle(DeclarationField fieldName)
 {
     if ((fieldName & DeclarationField.LandArea) > 0)
     {
         return("земельный участок");
     }
     if ((fieldName & DeclarationField.LivingHouse) > 0)
     {
         return("земельный участок");
     }
     if ((fieldName & DeclarationField.Appartment) > 0)
     {
         return("квартира");
     }
     if ((fieldName & DeclarationField.SummerHouse) > 0)
     {
         return("дача");
     }
     if ((fieldName & DeclarationField.Garage) > 0)
     {
         return("гараж");
     }
     return(null);
 }
Exemplo n.º 20
0
        void ParseTypeAndCountry(DataRow currRow, DeclarationField realtyType, string ownTypeByColumn, Person person)
        {
            var        typeAndCountry   = new TRealtyCell(currRow.GetDeclarationField(realtyType));
            var        cellSquareField  = (realtyType == DeclarationField.OwnedRealEstateTypeAndCountry) ? DeclarationField.OwnedRealEstateSquare : DeclarationField.StatePropertySquare;
            var        squareCell       = new TRealtyCell(currRow.GetDeclarationField(cellSquareField));
            List <int> linesWithNumbers = TRealtyCellSpan.GetLinesStaringWithNumbers(squareCell.DataCell.GetText(true));

            if (linesWithNumbers.Count > 0)
            {
                typeAndCountry.ParseByEmptyLines(linesWithNumbers);
                squareCell.ParseByEmptyLines(linesWithNumbers);
            }
            for (int i = 0; i < squareCell.ParsedItems.Count; ++i)
            {
                var typeAndCountryStr = typeAndCountry.GetParsedItem(i);
                var type       = typeAndCountryStr;
                var countryStr = "";

                if (typeAndCountryStr.Contains('('))
                {
                    int bracket = typeAndCountryStr.IndexOf('(');
                    type       = typeAndCountryStr.Substring(0, bracket).Trim();
                    countryStr = typeAndCountryStr.Substring(bracket).Trim(' ', '\n', '(', ')');
                }
                var squareRaw = squareCell.GetParsedItem(i);

                RealEstateProperty realEstateProperty = new RealEstateProperty();
                realEstateProperty.Text               = type;
                realEstateProperty.type_raw           = type;
                realEstateProperty.square             = DataHelper.ParseSquare(squareRaw);
                realEstateProperty.square_raw         = ParserBase.NormalizeRawDecimalForTest(squareRaw);
                realEstateProperty.country_raw        = DataHelper.ParseCountry(countryStr).NormSpaces();
                realEstateProperty.own_type_by_column = ownTypeByColumn;
                person.RealEstateProperties.Add(realEstateProperty);
            }
        }
Exemplo n.º 21
0
 public static bool IsNameDeclarationField(DeclarationField f)
 {
     return(f == NameAndOccupationOrRelativeType || f == NameOrRelativeType || f == DeclarantIndexAndName);
 }
Exemplo n.º 22
0
 public void Delete(DeclarationField field)
 {
     ColumnOrder.Remove(field);
 }
Exemplo n.º 23
0
 public bool ContainsField(DeclarationField field)
 {
     return(ColumnOrder.ContainsKey(field));
 }
Exemplo n.º 24
0
        static string ParseArgs(string[] args)
        {
            CMDLineParser parser = new CMDLineParser();

            CMDLineParser.Option outputOpt      = parser.AddStringParameter("-o", "use file for output", false);
            CMDLineParser.Option licenseOpt     = parser.AddStringParameter("-license", "", false);
            CMDLineParser.Option mainLogOpt     = parser.AddStringParameter("-log", "", false);
            CMDLineParser.Option skipLoggingOpt = parser.AddBoolSwitch("-skip-logging", "");
            CMDLineParser.Option verboseOpt     =
                parser.AddStringParameter("-v", "verbose level: debug, info, error", false);
            CMDLineParser.Option columnsOnlyOpt = parser.AddBoolSwitch("-columnsonly", "");
            CMDLineParser.Option checkJsonOpt   = parser.AddBoolSwitch("-checkjson", "");
            CMDLineParser.Option adapterOpt     = parser.AddStringParameter("-adapter",
                                                                            "can be aspose,npoi, microsoft or prod, by default is aspose", false);
            CMDLineParser.Option maxRowsToProcessOpt =
                parser.AddStringParameter("-max-rows", "max rows to process from the input file", false);
            CMDLineParser.Option dumpColumnOpt = parser.AddStringParameter("-dump-column",
                                                                           "dump column identified by enum DeclarationField and exit", false);
            CMDLineParser.Option dumpHtmlOpt       = parser.AddStringParameter("-dump-html", "dump table to html", false);
            CMDLineParser.Option tolokaFileNameOpt =
                parser.AddStringParameter("-toloka", "generate toloka html", false);
            CMDLineParser.Option skipRelativeOrphanOpt = parser.AddBoolSwitch("-skip-relative-orphan", "");
            CMDLineParser.Option apiValidationOpt      =
                parser.AddBoolSwitch("-api-validation", "validate JSON output by API call");
            CMDLineParser.Option buildTrigramsOpt  = parser.AddBoolSwitch("-build-trigrams", "build trigrams");
            CMDLineParser.Option checkPredictorOpt =
                parser.AddBoolSwitch("-check-predictor", "calc predictor precision");
            CMDLineParser.Option docFileIdOpt = parser.AddStringParameter("-docfile-id",
                                                                          "document id to initialize document/documentfile_id", false);
            CMDLineParser.Option convertedFileStorageUrlOpt = parser.AddStringParameter("-converted-storage-url",
                                                                                        "document id to initialize document/documentfile_id for example http://disclosures.ru:8091, the default value is read from env variable DECLARATOR_CONV_URL",
                                                                                        false);
            CMDLineParser.Option fioOnlyOpt = parser.AddBoolSwitch("-fio-only", "");
            CMDLineParser.Option useDecimalRawNormalizationOpt = parser.AddBoolSwitch("-decimal-raw-normalization",
                                                                                      "print raw floats in Russian traditional format");
            CMDLineParser.Option disclosuresOpt = parser.AddBoolSwitch("-disclosures",
                                                                       "use disclosures output format: save sheet id to each each section, do not produce many output files but one");
            CMDLineParser.Option versionOpt = parser.AddBoolSwitch("-version",
                                                                   "print version");
            parser.AddHelpOption();
            try
            {
                //parse the command line
                parser.Parse(args);
            }
            catch (Exception ex)
            {
                //show available options
                Console.Write(parser.HelpMessage());
                Console.WriteLine();
                Console.WriteLine("Error: " + ex.Message);
                throw;
            }

            if (versionOpt.isMatched)
            {
                PrintVersion();
                System.Environment.Exit(0);
            }
            if (licenseOpt.isMatched)
            {
                AsposeLicense.SetLicense(licenseOpt.Value.ToString());
                if (!AsposeLicense.Licensed)
                {
                    throw new SmartParserException("Not valid aspose licence " + licenseOpt.Value.ToString());
                }
            }

            Smart.Parser.Lib.Parser.InitializeSmartParser();
            if (maxRowsToProcessOpt.isMatched)
            {
                MaxRowsToProcess = System.Convert.ToInt32(maxRowsToProcessOpt.Value.ToString());
            }

            if (docFileIdOpt.isMatched)
            {
                UserDocumentFileId = System.Convert.ToInt32(docFileIdOpt.Value.ToString());
            }
            if (disclosuresOpt.isMatched)
            {
                DeclarationSerializer.SmartParserJsonFormat = SmartParserJsonFormatEnum.Disclosures;
            }

            string logFileName = "";

            if (mainLogOpt.isMatched)
            {
                logFileName = Path.GetFullPath(mainLogOpt.Value.ToString());
            }

            Logger.Setup(logFileName, skipLoggingOpt.isMatched);
            if (outputOpt.isMatched)
            {
                OutFile = outputOpt.Value.ToString();
            }

            Logger.LogLevel verboseLevel = Logger.LogLevel.Info;
            if (verboseOpt.isMatched)
            {
                switch (verboseOpt.Value.ToString())
                {
                case "info":
                    verboseLevel = Logger.LogLevel.Info;
                    break;

                case "error":
                    verboseLevel = Logger.LogLevel.Error;
                    break;

                case "debug":
                    verboseLevel = Logger.LogLevel.Debug;
                    break;

                default:
                {
                    throw new Exception("unknown verbose level " + verboseOpt.Value.ToString());
                }
                }
            }

            Logger.SetLoggingLevel(verboseLevel);

            SkipRelativeOrphan = skipRelativeOrphanOpt.isMatched;
            ValidateByApi      = apiValidationOpt.isMatched;

            if (adapterOpt.isMatched)
            {
                AdapterFamily = adapterOpt.Value.ToString();
                if (AdapterFamily != "aspose" &&
                    AdapterFamily != "npoi" &&
                    AdapterFamily != "microsoft" &&
                    AdapterFamily != "prod")
                {
                    throw new Exception("unknown adapter family " + AdapterFamily);
                }
            }

            if (dumpColumnOpt.isMatched)
            {
                ColumnToDump = (DeclarationField)Enum.Parse(typeof(DeclarationField), dumpColumnOpt.Value.ToString());
            }

            if (dumpHtmlOpt.isMatched)
            {
                HtmlFileName = dumpHtmlOpt.Value.ToString();
            }

            if (convertedFileStorageUrlOpt.isMatched)
            {
                IAdapter.ConvertedFileStorageUrl = convertedFileStorageUrlOpt.Value.ToString();
            }

            if (tolokaFileNameOpt.isMatched)
            {
                TolokaFileName = tolokaFileNameOpt.Value.ToString();
            }

            if (useDecimalRawNormalizationOpt.isMatched)
            {
                Smart.Parser.Lib.Parser.UseDecimalRawNormalization = true;
            }


            ColumnsOnly = columnsOnlyOpt.isMatched;
            ColumnOrdering.SearchForFioColumnOnly = fioOnlyOpt.isMatched;
            CheckJson     = checkJsonOpt.isMatched;
            BuildTrigrams = buildTrigramsOpt.isMatched;
            ColumnPredictor.CalcPrecision = checkPredictorOpt.isMatched;
            var freeArgs = parser.RemainingArgs();

            return(String.Join(" ", freeArgs).Trim(new char[] { '"' }));
        }
Exemplo n.º 25
0
        public static void PredictForPrecisionCheck(IAdapter adapter, Cell headerCell, DeclarationField field)
        {
            var predicted_field = PredictEmptyColumnTitle(adapter, headerCell);

            if (predicted_field == field)
            {
                CorrectCount += 1;
            }
            else
            {
                Logger.Debug(
                    string.Format("wrong predicted as {0} must be {1} ",
                                  predicted_field, field));
            }
            AllCount += 1;
        }
Exemplo n.º 26
0
 static bool IsIncomeColumn(DeclarationField d)
 {
     return(d == DeclarationField.DeclaredYearlyIncome ||
            d == DeclarationField.DeclaredYearlyIncomeThousands ||
            d == DeclarationField.DeclaredYearlyOtherIncome);
 }
Exemplo n.º 27
0
        // напрямую используется, пока ColumnOrdering еще не построен
        // во всех остальных случаях надо использовать Row.GetDeclarationField
        virtual public Cell GetDeclarationFieldWeak(ColumnOrdering columnOrdering, int row, DeclarationField field, out TColumnInfo colSpan)
        {
            if (!columnOrdering.ColumnOrder.TryGetValue(field, out colSpan))
            {
                throw new SmartParserFieldNotFoundException(String.Format("Field {0} not found, row={1}", field.ToString(), row));
            }

            var exactCell = GetCell(row, colSpan.BeginColumn);

            if (exactCell == null)
            {
                var rowData = GetCells(row);
                throw new SmartParserFieldNotFoundException(String.Format("Field {0} not found, row={1}, col={2}. Row.Cells.Count = {3}",
                                                                          field.ToString(),
                                                                          row,
                                                                          colSpan.BeginColumn,
                                                                          rowData.Count
                                                                          ));
            }
            return(exactCell);
        }
Exemplo n.º 28
0
        private void LoadDeclarationFields(Declaration declaration)
        {
            //To DO add pair information
            declaration.Declarations.Add(new DeclarationField("P_10", "Dostawa towarów oraz świadczenie usług, na terytorium kraju, zwolnione od podatku - podstawa opodatkowania", DeclarationFieldType.NullableInt, declaration));

            declaration.Declarations.Add(new DeclarationField("P_11", "Dostawa towarów oraz świadczenie usług poza terytorium kraju - podstawa opodatkowania", DeclarationFieldType.NullableInt, declaration, true, true, "P_12"));
            declaration.Declarations.Add(new DeclarationField("P_12", "Świadczenie usług, o których mowa w art.100 ust.1 pkt 4 ustawy - podstawa opodatkowania", DeclarationFieldType.NullableInt, declaration, true, false, "P_11"));

            declaration.Declarations.Add(new DeclarationField("P_13", "Dostawa towarów oraz świadczenie usług, na terytorium kraju, opodatkowane stawką 0% - podstawa opodatkowania", DeclarationFieldType.NullableInt, declaration, true, true, "P_14"));
            declaration.Declarations.Add(new DeclarationField("P_14", "Dostawa towarów, na terytorium kraju, opodatkowana stawką 0%, o której mowa w art.129 ustawy - podstawa opodatkowania", DeclarationFieldType.NullableInt, declaration, true, false, "P_13"));
            declaration.Declarations.Add(new DeclarationField("P_15", "Dostawa towarów oraz świadczenie usług, na terytorium kraju, opodatkowane stawką 5% - podstawa opodatkowania", DeclarationFieldType.NullableInt, declaration, true, true, "P_16"));
            declaration.Declarations.Add(new DeclarationField("P_16", "Dostawa towarów oraz świadczenie usług, na terytorium kraju, opodatkowane stawką 5% - podatek należny", DeclarationFieldType.NullableInt, declaration, true, true, "P_15"));
            declaration.Declarations.Add(new DeclarationField("P_17", "Dostawa towarów oraz świadczenie usług, na terytorium kraju, opodatkowane stawką odpowiednio 7% albo 8% - podstawa opodatkowania", DeclarationFieldType.NullableInt, declaration, true, true, "P_18"));
            declaration.Declarations.Add(new DeclarationField("P_18", "Dostawa towarów oraz świadczenie usług, na terytorium kraju, opodatkowane stawką odpowiednio 7% albo 8% - podatek należny", DeclarationFieldType.NullableInt, declaration, true, true, "P_17"));
            declaration.Declarations.Add(new DeclarationField("P_19", "Dostawa towarów oraz świadczenie usług, na terytorium kraju, opodatkowane stawką odpowiednio 22% albo 23% - podstawa opodatkowania", DeclarationFieldType.NullableInt, declaration, true, true, "P_20"));
            declaration.Declarations.Add(new DeclarationField("P_20", "Dostawa towarów oraz świadczenie usług, na terytorium kraju, opodatkowane stawką odpowiednio 22% albo 23% - podatek należny", DeclarationFieldType.NullableInt, declaration, true, true, "P_19"));

            declaration.Declarations.Add(new DeclarationField("P_21", "Wewnątrzwspólnotowa dostawa towarów - podstawa opodatkowania", DeclarationFieldType.NullableInt, declaration));
            declaration.Declarations.Add(new DeclarationField("P_22", "Eksport towarów - podstawa opodatkowania", DeclarationFieldType.NullableInt, declaration));

            declaration.Declarations.Add(new DeclarationField("P_23", "Wewnątrzwspólnotowe nabycie towarów - podstawa opodatkowania", DeclarationFieldType.NullableInt, declaration, true, true, "P_24"));
            declaration.Declarations.Add(new DeclarationField("P_24", "Wewnątrzwspólnotowe nabycie towarów - podatek należny", DeclarationFieldType.NullableInt, declaration, true, true, "P_23"));
            declaration.Declarations.Add(new DeclarationField("P_25", "Import towarów - podstawa opodatkowania", DeclarationFieldType.NullableInt, declaration, true, true, "P_26"));
            declaration.Declarations.Add(new DeclarationField("P_26", "Import towarów - podatek należny", DeclarationFieldType.NullableInt, declaration, true, true, "P_25"));
            declaration.Declarations.Add(new DeclarationField("P_27", "Import usług, z wyłączeniem usług, do których stosuje się art.28b ustawy - podstawa opodatkowania", DeclarationFieldType.NullableInt, declaration, true, true, "P_28"));
            declaration.Declarations.Add(new DeclarationField("P_28", "Import usług, z wyłączeniem usług, do których stosuje się art.28b ustawy - podatek należny", DeclarationFieldType.NullableInt, declaration, true, true, "P_27"));
            declaration.Declarations.Add(new DeclarationField("P_29", "Import usług, do których stosuje się art.28b ustawy  - podstawa opodatkowania", DeclarationFieldType.NullableInt, declaration, true, true, "P_30"));
            declaration.Declarations.Add(new DeclarationField("P_30", "Import usług, do których stosuje się art.28b ustawy - podatek należny", DeclarationFieldType.NullableInt, declaration, true, true, "P_29"));
            declaration.Declarations.Add(new DeclarationField("P_31", "Dostawa towarów, dla której podatnikiem jest nabywca (art.17 ust.1 pkt 5 ustawy (wypełnia nabywca)) - podstawa opodatkowania", DeclarationFieldType.NullableInt, declaration, true, true, "P_32"));
            declaration.Declarations.Add(new DeclarationField("P_32", "Dostawa towarów, dla której podatnikiem jest nabywca (art.17 ust.1 pkt 5 ustawy (wypełnia nabywca)) - podatek należny", DeclarationFieldType.NullableInt, declaration, true, true, "P_31"));

            declaration.Declarations.Add(new DeclarationField("P_33", "Kwota podatku należnego od towarów i usług objętych spisem z natury", DeclarationFieldType.NullableInt, declaration));
            declaration.Declarations.Add(new DeclarationField("P_34", "Zwrot odliczonej lub zwróconej kwoty wydatkowanej na zakup kas rejestrujących", DeclarationFieldType.NullableInt, declaration));
            declaration.Declarations.Add(new DeclarationField("P_35", "Kwota podatku należnego od wewnątrzwspólnotowego nabycia środków transportu", DeclarationFieldType.NullableInt, declaration));
            declaration.Declarations.Add(new DeclarationField("P_36", "Kwota podatku od wewnątrzwspólnotowego nabycia towarów, o których mowa w art. 103 ust. 5aa ustawy, podlegająca wpłacie w terminach, o których mowa w art. 103 ust. 5a i 5b ustawy", DeclarationFieldType.NullableInt, declaration));

            declaration.Declarations.Add(new DeclarationField("P_37", "Razem podstawa opodatkowania", DeclarationFieldType.Calculable, declaration, true, false, "P_38", true));
            declaration.Declarations.Add(new DeclarationField("P_38", "Razem podatek należny", DeclarationFieldType.Calculable, declaration, true, true, "P_37", true));

            declaration.Declarations.Add(new DeclarationField("P_39", "Kwota nadwyżki z poprzedniej deklaracji", DeclarationFieldType.NullableInt, declaration));

            declaration.Declarations.Add(new DeclarationField("P_40", "Nabycie towarów i usług zaliczanych u podatnika do środków trwałych - wartość netto", DeclarationFieldType.NullableInt, declaration, true, true, "P_41"));
            declaration.Declarations.Add(new DeclarationField("P_41", "Nabycie towarów i usług zaliczanych u podatnika do środków trwałych - podatek naliczony", DeclarationFieldType.NullableInt, declaration, true, true, "P_40"));
            declaration.Declarations.Add(new DeclarationField("P_42", "Nabycie towarów i usług pozostałych - wartość netto", DeclarationFieldType.NullableInt, declaration, true, true, "P_43"));
            declaration.Declarations.Add(new DeclarationField("P_43", "Nabycie towarów i usług pozostałych - podatek naliczony", DeclarationFieldType.NullableInt, declaration, true, true, "P_42"));

            declaration.Declarations.Add(new DeclarationField("P_44", "Korekta podatku naliczonego od nabycia środków trwałych", DeclarationFieldType.NullableInt, declaration));
            declaration.Declarations.Add(new DeclarationField("P_45", "Korekta podatku naliczonego od pozostałych nabyć", DeclarationFieldType.NullableInt, declaration));
            declaration.Declarations.Add(new DeclarationField("P_46", "Korekta podatku naliczonego, o której mowa w art. 89b ust. 1 ustawy", DeclarationFieldType.NegativeOrZeroOrNull, declaration));
            declaration.Declarations.Add(new DeclarationField("P_47", "Korekta podatku naliczonego, o której mowa w art. 89b ust. 4 ustawy", DeclarationFieldType.NullableInt, declaration));
            declaration.Declarations.Add(new DeclarationField("P_48", "Razem kwota podatku naliczonego do odliczenia", DeclarationFieldType.Calculable, declaration));

            declaration.Declarations.Add(new DeclarationField("P_49", "Kwota wydatkowana na zakup kas rejestrujących - do odliczenia", DeclarationFieldType.NullableInt, declaration));
            declaration.Declarations.Add(new DeclarationField("P_50", "Kwota podatku objęta zaniechaniem poboru", DeclarationFieldType.NullableInt, declaration));

            declaration.Declarations.Add(new DeclarationField("P_51", "Kwota podatku podlegającego wpłacie do urzędu skarbowego", DeclarationFieldType.IntOrZero, declaration));

            declaration.Declarations.Add(new DeclarationField("P_52", "Kwota wydatkowana na zakup kas rejestrujących - do zwrotu", DeclarationFieldType.NullableInt, declaration));
            declaration.Declarations.Add(new DeclarationField("P_53", "Nadwyżka podatku naliczonego nad należnym", DeclarationFieldType.NullableInt, declaration));



            var P_54 = new DeclarationField("P_54", "Kwota do zwrotu na rachunek bankowy", DeclarationFieldType.NullableInt, declaration)
            {
                IsInNestedPair         = true,
                IsRequiredInNestedPair = true,
                IsChoicePair           = true
            };

            (P_54 as IFieldMultiplePair).PairsFieldNames = new string[] { };

            var P_55 = new DeclarationField("P_55", "Kwota do zwrotu na rachunek VAT", DeclarationFieldType.OneOrNull, declaration)
            {
                IsInNestedPair         = true,
                IsRequiredInNestedPair = true,
                IsChoicePair           = true,
                ChoicePairs            = new IFieldMultiplePair[] { P_54 }
            };

            (P_55 as IFieldMultiplePair).IsInPair         = true;
            (P_55 as IFieldMultiplePair).PairsFieldNames  = new string[] { "P_56", "P_57", "P_58" };
            (P_55 as IFieldMultiplePair).IsRequiredInPair = true;

            var P_56 = new DeclarationField("P_56", "Kwota do zwrotu w terminie 25 dni", DeclarationFieldType.OneOrNull, declaration)
            {
                IsInNestedPair         = true,
                IsRequiredInNestedPair = true,
                IsChoicePair           = true,
                ChoicePairs            = new IFieldMultiplePair[] { P_54 }
            };

            (P_56 as IFieldMultiplePair).IsInPair         = true;
            (P_56 as IFieldMultiplePair).PairsFieldNames  = new string[] { "P_55", "P_57", "P_58" };
            (P_56 as IFieldMultiplePair).IsRequiredInPair = true;

            var P_57 = new DeclarationField("P_57", "Kwota do zwrotu w terminie 60 dni", DeclarationFieldType.OneOrNull, declaration)
            {
                IsInNestedPair         = true,
                IsRequiredInNestedPair = true,
                IsChoicePair           = true,
                ChoicePairs            = new IFieldMultiplePair[] { P_54 }
            };

            (P_57 as IFieldMultiplePair).IsInPair         = true;
            (P_57 as IFieldMultiplePair).PairsFieldNames  = new string[] { "P_55", "P_56", "P_58" };
            (P_57 as IFieldMultiplePair).IsRequiredInPair = true;

            var P_58 = new DeclarationField("P_58", "Kwota do zwrotu w terminie 180 dni", DeclarationFieldType.OneOrNull, declaration)
            {
                IsInNestedPair         = true,
                IsRequiredInNestedPair = true,
                IsChoicePair           = true,
                ChoicePairs            = new IFieldMultiplePair[] { P_54 }
            };

            (P_58 as IFieldMultiplePair).IsInPair         = true;
            (P_58 as IFieldMultiplePair).PairsFieldNames  = new string[] { "P_55", "P_56", "P_57" };
            (P_58 as IFieldMultiplePair).IsRequiredInPair = true;



            var P_59 = new DeclarationField("P_59", "Zaliczenie zwrotu podatku na poczet przyszłych zobowiązań podatkowych", DeclarationFieldType.OneOrNull, declaration)
            {
                IsInNestedPair         = true,
                IsRequiredInNestedPair = false,
                IsChoicePair           = false,
                Pair = P_55,
            };

            (P_59 as IFieldMultiplePair).IsInPair         = true;
            (P_59 as IFieldMultiplePair).PairsFieldNames  = new string[] { "P_60", "P_61" };
            (P_59 as IFieldMultiplePair).IsRequiredInPair = true;

            var P_60 = new DeclarationField("P_60", "Wysokość zwrotu do zaliczenia na poczet przyszłych zobowiązań podatkowych", DeclarationFieldType.NullableInt, declaration)
            {
                IsInNestedPair         = true,
                IsRequiredInNestedPair = false,
                IsChoicePair           = false,
                Pair = P_55
            };

            (P_60 as IFieldMultiplePair).IsInPair         = true;
            (P_60 as IFieldMultiplePair).PairsFieldNames  = new string[] { "P_59", "P_61" };
            (P_60 as IFieldMultiplePair).IsRequiredInPair = true;

            var P_61 = new DeclarationField("P_61", "Rodzaj przyszłego zobowiązania podatkowego", DeclarationFieldType.NullableInt, declaration)
            {
                IsInNestedPair         = true,
                IsRequiredInNestedPair = false,
                IsChoicePair           = false,
                Pair = P_55
            };

            (P_61 as IFieldMultiplePair).IsInPair         = true;
            (P_61 as IFieldMultiplePair).PairsFieldNames  = new string[] { "P_59", "P_60" };
            (P_61 as IFieldMultiplePair).IsRequiredInPair = true;

            P_54.ChoicePairs = new IFieldMultiplePair[] { P_55, P_56, P_57, P_58 };
            P_54.Pair        = P_59;
            P_55.Pair        = P_59;
            P_56.Pair        = P_59;
            P_57.Pair        = P_59;
            P_58.Pair        = P_59;
            declaration.Declarations.Add(P_54);
            declaration.Declarations.Add(P_55);
            declaration.Declarations.Add(P_56);
            declaration.Declarations.Add(P_57);
            declaration.Declarations.Add(P_58);
            declaration.Declarations.Add(P_59);
            declaration.Declarations.Add(P_60);
            declaration.Declarations.Add(P_61);



            declaration.Declarations.Add(new DeclarationField("P_62", "Kwota do przeniesienia na następny okres rozliczeniowy", DeclarationFieldType.NullableInt, declaration));

            declaration.Declarations.Add(new DeclarationField("P_63", "Czynności jakie wykonywał podatnik - art.119 ustawy", DeclarationFieldType.OneOrNull, declaration));
            declaration.Declarations.Add(new DeclarationField("P_64", "Czynności jakie wykonywał podatnik - art.120 ust.4 lub 5 ustawy", DeclarationFieldType.OneOrNull, declaration));
            declaration.Declarations.Add(new DeclarationField("P_65", "Czynności jakie wykonywał podatnik - art.122 ustawy", DeclarationFieldType.OneOrNull, declaration));
            declaration.Declarations.Add(new DeclarationField("P_66", "Czynności jakie wykonywał podatnik - art.136 ustawy", DeclarationFieldType.OneOrNull, declaration));
            declaration.Declarations.Add(new DeclarationField("P_67", "Podatnik korzysta z obniżenia zobowiązania podatkowego", DeclarationFieldType.OneOrNull, declaration));

            declaration.Declarations.Add(new DeclarationField("P_68", "Wysokość korekty podstawy opodatkowania, o której mowa w art. 89a ust. 1 ustawy", DeclarationFieldType.NegativeOrZeroOrNull, declaration, true, true, "P_69"));
            declaration.Declarations.Add(new DeclarationField("P_69", "Wysokość korekty podatku należnego, o której mowa w art. 89a ust. 1 ustawy", DeclarationFieldType.NullableInt, declaration, true, true, "P_68"));

            declaration.Declarations.Add(new DeclarationField("P_ORDZU", "Uzasadnienie przyczyn złożenia korekty", DeclarationFieldType.String, declaration));
        }